Можно ли обнаруживать лица с помощью Camera2 только с API Google Vision? Я не мог найти способ интегрировать его.
Можно ли использовать Camera2 с API Google Vision
Ответы (2)
Да, API Camera2 можно использовать с API Google Vision.
Для начала Google Vision API Face Detector получает Рамка объект, который используется для анализа (обнаружения лиц и ориентиров).
Camera1 API предоставляет кадры предварительного просмотра в формате изображения NV21, который нам идеально подходит. Google Vision Frame.Builder поддерживает как setImageData (ByteBuffer в формате изображения NV16, NV21 или YV12) и setBitmap, чтобы использовать растровое изображение в качестве обрабатываемых кадров предварительного просмотра.
Ваша проблема в том, что Camera2 API предоставляет кадры предварительного просмотра в другом формате. Это YUV_420_888. Чтобы все заработало, вам нужно преобразовать кадры предварительного просмотра в один из поддерживаемых форматов.
Как только вы получите кадры предварительного просмотра Camera2 из вашего ImageReader как Image, вы можете использовать эту функцию, чтобы преобразовать его в поддерживаемый формат (в данном случае 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;
}
Затем вы можете использовать возвращенный byte[] для создания Google Vision Frame:
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 нет планов для версии camera2 класса CameraSource. Однако, учитывая структуру API, альтернативная версия CameraSource может быть написана сообществом разработчиков, использующим camera2. Всех существующих API для работы с кадрами и детекторами достаточно для поддержки реализации camera2.