Android Studio - не удалось определить лицо. E / CameraSource: исключение, выброшенное из приемника - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь получить текущий кадр как бип-карту. Я сталкиваюсь с этими ошибками:

09-03 08:12:33.353 28008-28204/com.google.android.gms.samples.vision.face.facetracker E/CameraSource: Exception thrown from receiver.
    java.lang.ArrayIndexOutOfBoundsException
        at android.graphics.Bitmap.checkPixelsAccess(Bitmap.java:1492)
        at android.graphics.Bitmap.getPixels(Bitmap.java:1433)
        at com.google.android.gms.samples.vision.face.facetracker.FaceTrackerActivity$MyFaceDetector.detect(FaceTrackerActivity.java:318)
        at com.google.android.gms.vision.Detector.receiveFrame(Unknown Source)
        at com.google.android.gms.vision.CameraSource$zzb.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:761)

Распознавание лиц не отображается на экране. Это моя основная_активность (под названием FaceTrackingActivity):

private void createCameraSource() {

    Context context = getApplicationContext();
    FaceDetector detector = new FaceDetector.Builder(context)
        .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
        .setMode(FaceDetector.ACCURATE_MODE)
        .setLandmarkType(FaceDetector.ALL_LANDMARKS)
        .build();
    MyFaceDetector myFaceDetector = new MyFaceDetector(detector);

    myFaceDetector.setProcessor(
                new MultiProcessor.Builder<>(new GraphicFaceTrackerFactory())
                        .build());

    if (!detector.isOperational()) {

        Log.w(TAG, "Face detector dependencies are not yet available.");
    }

    mCameraSource = new CameraSource.Builder(context, myFaceDetector)
        .setRequestedPreviewSize(640, 480)
        .setFacing(CameraSource.CAMERA_FACING_FRONT)
        .setRequestedFps(30.0f)
       .build();
}

и это часть кода, в которой я пытаюсь получить изображение Bipmap:

class MyFaceDetector extends Detector<Face> {
    private Detector<Face> mDelegate;

    MyFaceDetector(Detector<Face> delegate) {
        mDelegate = delegate;
    }

    public SparseArray<Face> detect(Frame frame) {
        YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, frame.getMetadata().getWidth(), frame.getMetadata().getHeight(), null); // Create YUV image from byte[]
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        yuvImage.compressToJpeg(new Rect(0, 0, frame.getMetadata().getWidth(), frame.getMetadata().getHeight()), 100, byteArrayOutputStream);// Convert YUV image to Jpeg
        byte[] jpegArray = byteArrayOutputStream.toByteArray();
        Bitmap bmp = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length); // Convert Jpeg to Bitmap
        //image processing part
    }
}

В частности, внутри части createCameraSOurce, если я не напишу FaceDetector перед детектором и если я использую строку _detector.setProcessor (...) _ вместо myFaceDetector .setProcessor (...) Лицо появляется и приложение запускается без ошибок, но myFaceDetector из "MyFaceDetector myFaceDetector = new MyFaceDetector (Detector);" никогда не используется. Я хотел бы обработать только окно распознавания лиц, но когда я пытаюсь что-то изменить, я ошибаюсь

...