嗨,我正在使用Firebase MLKit和camera 1资源。处理从相机捕获的图像数据时遇到问题。我的代码如下:
@Override
public void onPictureTaken(byte[] data, Camera camera) {
FirebaseVisionFaceDetectorOptions options = new FirebaseVisionFaceDetectorOptions.Builder()
.setPerformanceMode(FirebaseVisionFaceDetectorOptions.FAST)
.setLandmarkMode(FirebaseVisionFaceDetectorOptions.ALL_LANDMARKS)
.build();
FirebaseVisionFaceDetector detector = FirebaseVision.getInstance().getVisionFaceDetector(options);
int height = camera.getParameters().getPreviewSize().height;
int width = camera.getParameters().getPreviewSize().width;
FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder()
.setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
.setWidth(width)
.setHeight(height)
.setRotation(3)
.build();
FirebaseVisionImage firebaseVisionImage = FirebaseVisionImage.fromByteArray(data, metadata);
detector.detectInImage(firebaseVisionImage).addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionFace>>() {
@Override
public void onSuccess(List<FirebaseVisionFace> firebaseVisionFaces) {
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
我遇到了致命的异常:
java.lang.IllegalArgumentException: Invalid image data size.
at com.google.android.gms.vision.Frame$Builder.setImageData(Unknown Source)
at com.google.firebase.ml.vision.common.FirebaseVisionImage.zzb(com.google.firebase:firebase-ml-vision@@22.0.0:145)
at com.google.android.gms.internal.firebase_ml.zzqp.zza(com.google.firebase:firebase-ml-vision@@22.0.0:11)
at com.google.firebase.ml.vision.face.FirebaseVisionFaceDetector.detectInImage(com.google.firebase:firebase-ml-vision@@22.0.0:25)
以上问题仅在某些设备上发生。对于少数设备,它运行正常,但对于某些设备,则出现上述错误。另外,如果我从相同的字节数组创建位图,并将其传递给FirebaseVisionFaceDetector,则效果很好。但是问题在于它会使过程变慢。