Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用FaceDetector进行人脸跟踪?_Android_Face Detection_Sony_Sony Smarteyeglass_Face Api - Fatal编程技术网

Android 如何使用FaceDetector进行人脸跟踪?

Android 如何使用FaceDetector进行人脸跟踪?,android,face-detection,sony,sony-smarteyeglass,face-api,Android,Face Detection,Sony,Sony Smarteyeglass,Face Api,我希望像这样使用FaceDetector进行人脸跟踪。 在此示例中,将ByteBuffer设置为Frame.imageData,如下所示 outputFrame = new Frame.Builder() .setImageData(mPendingFrameData, mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.NV21)

我希望像这样使用FaceDetector进行人脸跟踪。

在此示例中,将ByteBuffer设置为Frame.imageData,如下所示

 outputFrame = new Frame.Builder()
            .setImageData(mPendingFrameData, mPreviewSize.getWidth(),
                                mPreviewSize.getHeight(), ImageFormat.NV21)
            .setId(mPendingFrameId)
            .setTimestampMillis(mPendingTimeMillis)
            .setRotation(mRotation)
            .build();
//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 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() {

    }
}
但是,我将位图设置为这样的帧

 outputFrame = new Frame.Builder()
            .setImageData(mPendingFrameData, mPreviewSize.getWidth(),
                                mPreviewSize.getHeight(), ImageFormat.NV21)
            .setId(mPendingFrameId)
            .setTimestampMillis(mPendingTimeMillis)
            .setRotation(mRotation)
            .build();
//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 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() {

    }
}
像这样使用面部检测器

 outputFrame = new Frame.Builder()
            .setImageData(mPendingFrameData, mPreviewSize.getWidth(),
                                mPreviewSize.getHeight(), ImageFormat.NV21)
            .setId(mPendingFrameId)
            .setTimestampMillis(mPendingTimeMillis)
            .setRotation(mRotation)
            .build();
//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 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() {

    }
}
FaceDetector fd=newfacedetector.Builder(this.context)
.SetTrackinEnabled(真)
.setClassificationType(FaceDetector.ALL_分类)
.build();
setProcessor(新的多处理器.Builder(新的GraphicFaceTrackerFactory()).build());
fd.接收帧(帧);
私有类GraphicFaceTrackerFactory实现多处理器工厂{
@凌驾
公共跟踪器创建(面){
返回新的GraphicFaceTracker();
}
}
私有类GraphicFaceTracker扩展跟踪程序{
GraphicFaceTracker(){}
@凌驾
公共void onNewItem(int-faceId,Face){
Log.d(Constants.Log_标记,“onNewItem.Face Id=>”+faceId);//这里
}
@凌驾
公共空隙更新(面检测器。检测检测结果,面){
}
@凌驾
缺失时的公共空白(FaceDetector.Detections detectionResults){
}
@凌驾
公用电话{
}
}
我希望在onNewItem()中输入相同的faceId,只要相同的面仍在帧中,但每次输入的id都不同

你有什么想法吗

【附加信息】
・在我的应用程序中,它以7.5fps的速度连续拍摄静态照片