Можно ли использовать Camera2 с Google Vision API
Можно ли распознать лица, используя Camera2 только с Google Vision API? Я не мог найти способ интегрировать это.
2 ответа
Да, можно использовать Camera2 API с Google Vision API.
Для начала, Google Vision API Face Detector получает объект Frame, который используется для анализа (обнаружения лиц и его ориентиров).
Camera1 API предоставляет кадры предварительного просмотра в формате изображения NV21, который идеально подходит для нас. Google Vision Frame.Builder поддерживает как setImageData (ByteBuffer в формате изображения NV16, NV21 или YV12), так и setBitmap для использования растрового изображения в качестве предварительных кадров для обработки.
Ваша проблема в том, что Camera2 API предоставляет кадры предварительного просмотра в другом формате. Это YUV_420_888. Чтобы все работало, вы должны преобразовать кадры предварительного просмотра в один из поддерживаемых форматов.
После того как вы получите Camera2 Preview Frames из ImageReader в качестве изображения, вы можете использовать эту функцию, чтобы преобразовать ее в поддерживаемый формат (в данном случае NV21).
private byte[] convertYUV420888ToNV21(Image imgYUV420) {
// Converting YUV_420_888 data to YUV_420_SP (NV21).
byte[] data;
ByteBuffer buffer0 = imgYUV420.getPlanes()[0].getBuffer();
ByteBuffer buffer2 = imgYUV420.getPlanes()[2].getBuffer();
int buffer0_size = buffer0.remaining();
int buffer2_size = buffer2.remaining();
data = new byte[buffer0_size + buffer2_size];
buffer0.get(data, 0, buffer0_size);
buffer2.get(data, buffer0_size, buffer2_size);
return data;
}
Затем вы можете использовать возвращенный байт [] для создания фрейма Google Vision:
outputFrame = new Frame.Builder()
.setImageData(nv21bytes, mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.NV21)
.setId(mPendingFrameId)
.setTimestampMillis(mPendingTimeMillis)
.setRotation(mSensorOrientation)
.build();
Наконец, вы вызываете детектор с созданным кадром:
mDetector.receiveFrame(outputFrame);
В любом случае, если вы хотите узнать больше об этом, вы можете бесплатно протестировать мой рабочий пример на GitHub: Camera2Vision. Я надеюсь, что я помог:)
Хорошо, я нашел эту камеру2 с мобильным зрением? # 65
В официальном API нет ближайших планов для версии cameraSource класса camera2. Однако, учитывая структуру API, сообщество разработчиков может использовать альтернативную версию CameraSource, которая использует camera2. Все существующие API для работы с кадрами и детекторами достаточны для поддержки реализации camera2.