Я использую CameraX ImageAnalysis.Analyzer для обнаружения лиц. Однако размер объекта Image слишком велик для использования FirebaseVisionImage.fromMediaImage
, поэтому я попытался преобразовать изображение в растровое изображение и изменить масштаб и повернуть его в зависимости от поворота камеры. Производительность по-прежнему огромна, это из-за операции масштабирования Bitmap.
FirebaseVisionImage.fromMediaImage требует 120 мс для преобразования изображения 640x480. FirebaseVisionImage.fromBitmap требуется 30 мс для преобразования изображения 640x480 (но с неправильным вращением), поэтому нет детекции лица. FirebaseVisionImage.fromBitmap с масштабированием 90 мс для преобразования изображения 480x360.
Мой вопрос в том, как оптимизировать этот процесс, чтобы я мог получить растровое изображение 480x360 и улучшить производительность.
Я использовал эту следующую реализацию для преобразовать изображение в растровое.
https://github.com/xizhang/camerax-gpuimage/blob/master/app/src/main/java/com/appinmotion/gpuimage/YuvToRgbConverter.kt
Мой код.
Bitmap bitmapImage2 = Bitmap.createBitmap(
imageX.getWidth(), imageX.getHeight(), Bitmap.Config.ARGB_8888);
ByteBuffer byteBuffer = converter.yuvToRgb(imageX, bitmapImage2);
bitmapImage2 = BitmapUtils.rotateScaleBitmap(bitmapImage2, rotation, 1, 480);
FirebaseVisionImage image =
FirebaseVisionImage.fromBitmap(bitmapImage2);
Log.d("myApp", "" + (System.currentTimeMillis() - start));