0

onFacesDetected in expo-camera crashes the android.

Error log:

Fatal Exception: java.lang.IllegalArgumentException: Invalid image data size.
       at com.google.android.gms.vision.Frame$Builder.setImageData(com.google.android.gms:play-services-vision-common@@19.0.0:13)
       at com.google.firebase.ml.vision.common.FirebaseVisionImage.zza(com.google.firebase:firebase-ml-vision@@24.0.1:152)
       at com.google.android.gms.internal.firebase_ml.zzri.zza(com.google.firebase:firebase-ml-vision@@24.0.1:11)
       at com.google.firebase.ml.vision.face.FirebaseVisionFaceDetector.detectInImage(com.google.firebase:firebase-ml-vision@@24.0.1:25)
       at expo.modules.facedetector.ExpoFaceDetector.detectFaces(ExpoFaceDetector.kt:111)
       at expo.modules.camera.tasks.FaceDetectorTask.execute(FaceDetectorTask.kt:17)
       at expo.modules.camera.ExpoCameraView$1.onFramePreview(ExpoCameraView.kt:324)
       at com.google.android.cameraview.CameraView$CallbackBridge.onFramePreview(CameraView.java:604)
       at com.google.android.cameraview.Camera1.onPreviewFrame(Camera1.java:766)
       at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1298)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:201)
       at android.app.ActivityThread.main(ActivityThread.java:6810)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) 

Package.json

    "expo": "~44.0.2",
    "expo-av": "~10.2.0",
    "expo-camera": "~12.1.2",
    "expo-dev-client": "~0.8.5",
    "expo-device": "~4.1.0",
    "expo-face-detector": "~11.1.3",
    "expo-file-system": "~13.1.4",
    "expo-gl": "~11.1.1",
    "expo-gl-cpp": "~11.1.0",
    "expo-image-manipulator": "~10.2.0",
    "expo-local-authentication": "~12.1.0",
    "expo-localization": "~12.0.0",
    "expo-location": "~14.0.1",
Karthikeyan Ganesan
  • 1,901
  • 20
  • 23

2 Answers2

0

try this. i fix the issue by set face detector props inside onCameraReady.

<Camera 
style={styles.camera}
ref={cameraRef}
type={type}
{...propsFace}
onCameraReady={()=> {
  setPropFace({
  onFacesDetected: handleFacesDetected,
  faceDetectorSettings:{
  mode: FaceDetector.FaceDetectorMode.accurate,
  detectLandmarks: FaceDetector.FaceDetectorLandmarks.all,
  runClassifications: FaceDetector.FaceDetectorClassifications.all,
  minDetectionInterval: 1000,
  tracking: false,
      }
    })
 }}
>
</Camera>
haerul
  • 1
0

In my case, the error was FATAL EXCEPTION, so the error was not directly printed to me, the application just closed itself.

But in PlayStore i recived the error: at com.google.mlkit.vision.common.InputImage.fromByteArray(com.google.mlkit:vision-common@@17.1.0:2).

And after a while of investigation I managed to solve the error by adding the 'ratio' value, I don't know why, but it fixed the problem.

  <CameraContent
            ratio={'1:1'}
            type={CameraType.front}
            isConfigScreen={isConfigScreen}
            onFacesDetected={handleFacesDetected}
            faceDetectorSettings={{
              mode: FaceDetector.FaceDetectorMode.fast,
              detectLandmarks: FaceDetector.FaceDetectorLandmarks.all,
              runClassifications: FaceDetector.FaceDetectorClassifications.all,
              minDetectionInterval: 800,
              tracking: true,
            }}
 />