Как получить обратную связь от камеры?

#android #android-camera

#Android #android-камера

Вопрос:

Для моего следующего проекта я начал анализировать приложения, которые измеряют пульс с помощью камеры (вы нажимаете пальцем на камеру, и вы получаете информацию о своем пульсе).

Я пришел к выводу, что приложения получают данные с камеры с помощью подсветки. Как этого добиться? Можете ли вы направить меня в любую область, которую я должен исследовать?

Если кто-нибудь в настроении помочь мне объяснить, как работают приложения для измерения пульса? Я не могу найти НИ ОДНОГО документа в сети по этой теме.

Заранее спасибо

Ответ №1:

В дополнение к ответу Роберта с точки зрения, не связанной с программированием (и поскольку вы спросили об этом), приложения для измерения пульса основаны на пульсовой оксиметрии.

Идея состоит в том, чтобы измерить поглощение красного света, которое будет меняться, когда насыщенная кислородом кровь проходит через кончики ваших пальцев. Когда это произойдет, будет пик поглощения, вам нужно только измерить количество раз, когда регистрируется пик, и разделить на соответствующие временные рамки для вычисления частоты сердечных сокращений.

ИМХО, выполнять это на мобильном устройстве недостаточно надежно, поскольку для этого требуются хорошие условия освещения и инфракрасные импульсы, и есть несколько факторов, которые делают эту задачу очень сложной:

1) На некоторых телефонах может отсутствовать светодиод вспышки рядом с камерой

2) Некоторые телефоны могут вообще не иметь вспышки

3) У вас нет доступа к инфракрасным данным.

4) Телефон должен быть абсолютно неподвижным, иначе изображение будет постоянно меняться, что делает измерение яркости ненадежным.

Ответ №2:

AFAIK такие приложения используют режим предварительного просмотра камеры.

Используя метод setPreviewCallBack (..) (и, конечно startPreview() же), вы можете зарегистрировать своего собственного слушателя, который постоянно получает вызовы с камеры, содержащие текущее просмотренное изображение:

 onPreviewFrame(byte[] data, Camera camera)
 

Данные изображения содержатся в массиве байтов данных. Формат данных можно установить с помощью setPreviewFormat(). Используя эти данные, вы можете, например, обработать изображение и уменьшить его яркость в определенной точке изображения. Со временем яркость изображения должна показывать импульсы.

Я не думаю, что необходимые алгоритмы обработки изображений доступны по умолчанию в среде выполнения Android, поэтому вам нужно разрабатывать собственные алгоритмы или искать сторонние библиотеки, которые можно использовать на Android.

Комментарии:

1. Таким образом, изображение с наименьшей яркостью — это то, которое было получено, когда произошел импульс, когда кровь прошла через объектив, а кожа приблизилась к ячейке камеры? Как я могу проверить яркость изображения? Передается ли это как параметр?

2. Как я уже писал, вам нужны некоторые алгоритмы для обработки изображения. Эти алгоритмы работают как фильтры и плагины в Photoshop — они изменяют данные изображения. Самостоятельно писать алгоритмы изображения непросто, поскольку вам приходится работать непосредственно со значениями пикселей. Вы должны декодировать массив байтов данных изображения. По умолчанию он кодируется в формате NV21 с форматом YUV 4: 2: 0 .