Как отслеживать лицо с FaceDetector?
Я хочу, чтобы отслеживание лица с FaceDetector, как это.
https://github.com/googlesamples/android-vision/tree/master/visionSamples/FaceTracker
В этом примере установите ByteBuffer в Frame.imageData следующим образом.
outputFrame = new Frame.Builder()
.setImageData(mPendingFrameData, mPreviewSize.getWidth(),
mPreviewSize.getHeight(), ImageFormat.NV21)
.setId(mPendingFrameId)
.setTimestampMillis(mPendingTimeMillis)
.setRotation(mRotation)
.build();
Но я установил растровое изображение на Frame следующим образом.
//data is image data as byte.
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
outputFrame = new Frame.Builder()
.setBitmap(bitmap)
.setId(frameId)
.setTimestampMillis(time)
.build();
И используйте FaceDetector, как это.
FaceDetector fd = new FaceDetector.Builder(this.context)
.setTrackingEnabled(true)
.setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
.build();
fd.setProcessor(new MultiProcessor.Builder<Face>(new GraphicFaceTrackerFactory()).build());
fd.receiveFrame(frame);
private class GraphicFaceTrackerFactory implements MultiProcessor.Factory<Face> {
@Override
public Tracker<Face> create(Face face) {
return new GraphicFaceTracker();
}
}
private class GraphicFaceTracker extends Tracker<Face> {
GraphicFaceTracker() {}
@Override
public void onNewItem(int faceId, Face face) {
Log.d(Constants.LOG_TAG, "onNewItem. Face Id => "+faceId);//here
}
@Override
public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) {
}
@Override
public void onMissing(FaceDetector.Detections<Face> detectionResults) {
}
@Override
public void onDone() {
}
}
Я ожидал, что один и тот же faceId будет введен в onNewItem() до тех пор, пока в кадре останется одно и то же лицо, но каждый раз введенный идентификатор был другим.
У тебя есть идеи?
【Дополнительная информация】
My В моем приложении он делает непрерывные снимки со скоростью 7,5 кадров в секунду.