Comments 21
В камере 1 есть метод onFrame, можно каждый кадр из камеры анализировать.
В camera2 такого решения не нашел, как можно обрабатывать кадры, кто знает?
Этот вариант не подходит, потому что:
- Он вызывает зависание preview
- Fps никак не 30 кадров в секунду. Очень медленно они приходят
- Кадр который приходит расходится с тем, что на preview.
Есть небольшой хак чтоб брать текстуру из самой превьюшки. Главное, после получения текстуры, обрабатывать её в другом потоке.
Вырезка из рабочего кода для видео-потока + превью:
все как обычно по статье создаём TextureView и надо добавить callback
mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
дальше в самом callback
@Override
public void onSurfaceTextureUpdated(SurfaceTexture texture) {
long time = System.currentTimeMillis();
Bitmap b = Bitmap.createBitmap(1920,1080,Bitmap.Config.ARGB_8888)
b = mTextureView.getBitmap(b);
int[] pixels = new int[b.getByteCount()];
b.getPixels(pixels,0,1920,0,0,1920,1080);
imageProcessStream.pushImage(pixels,time/1000L);
}
You normally cannot access the raw video data when using a Surface, but you can use the ImageReader class to access unsecured decoded (raw) video frames
Мне то как раз видео надо
Как раз вот mTextureView.getBitmap(b) на разных девайсах занимает от 20 до 100мс.
А onSurfaceTextureUpdated срабатываем вообще на main потоке.
Если и getBitmap() выносить на другой поток — то тут я не уверен насчёт thread safe такого действия…
Именно это и нужно. Использую для распознавания bar/qr кодов и OCR.
Почему-то не удалось нормально подрубить Camera2, чтобы получать фреймы.
также, на сколько я понял, значение iso из каждого фрейма получить не получится.
Старое API позволяет искать qr-коды на моем железе 4 раза в секунду, а с Camera2 только получение каждого preview FullHD кадра занимает у меня ~0.45 секунды, без учета дальнейшего распознавания еще :(
Не говоря о том, что подвисает интерфейс, т.е. вообще неюзабельно.
Как же с Camera2 распознавать qr-коды «почти realtime», но и имея возможность крутить настройки камеры?
Странно, когда я делал свой 3D сканер https://habr.com/ru/post/412479/
то работа с камерой не показалась слишком сложной. Все логично и дает почти полный доступ. Да и примеров и документации просто масса.
Наверное, не хватает простой "кнопки счастье" "записать видео" в API. Но для этого проще поискать обертку вокруг фактически низкоуровневого (скорее средне..) управления камерой от Android.
Хотя, если честно, не понял зачем 2019 году очередная статья "как я разбирался с Camera2 API".
А теперь, если вам всё ещё интересно зачем мне потребовалось пилить свой пост на эту тему уже в 2019, то добро пожаловать под кат.
Аплодирую! Эта фраза заставила меня заглянуть внутрь.
Android Camera2 API от чайника