Android Studio- не удалось определить лицо. E/CameraSource: исключение, выброшенное из приемника
Я пытаюсь получить текущий кадр как Bipmap, я сталкиваюсь с этими ошибками:
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 of "MyFaceDetector myFaceDetector = new MyFaceDetector(детектор);" никогда не используется. Я хотел бы обработать только окно обнаружения лица, но когда я пытаюсь что-то изменить, я ошибаюсь