onFaceDetection 在 运行 时仅调用一次或两次,但在使用断点进行调试时可以完美运行
onFaceDetection called only once or twice while running but works perfectly when debugging with breakpoints
这是我用于人脸检测的代码,问题是当我使用 android studio 调试此代码时,多次调用 onFaceDetection 方法并完美检测到人脸(当我放置一个断点时方法内部)。但是当我 运行 它没有任何断点时,该方法只被调用 2-3 次并且没有进行人脸检测。任何与此相关的帮助将不胜感激,正如您从我尝试停止和启动人脸检测的代码中看到的那样。
void setFaceDetectionListener() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
mFaceDetectionListener = new Camera.FaceDetectionListener() {
Handler faceDetectionHandler;
@Override
public void onFaceDetection(final Camera.Face[] faces, final Camera camera) {
if(faceDetectionHandler == null){//Initialize
faceDetectionHandler = new Handler();
Toast.makeText(HWTestActivity.this,
UiMessages.MSG_SHOW_YOUR_FACE.toString(),
Toast.LENGTH_SHORT).show();
}
faceDetectionHandler.post(new Runnable() {
@Override
public void run() {
Log.e("faceDetect", "No of faces = " + faces.length);
if (!is_face_detected) {
Toast.makeText(HWTestActivity.this,
UiMessages.MSG_DETECTING_YOUR_FACE.toString(),
Toast.LENGTH_SHORT).show();
is_face_detected = faces.length > 0;
}
if (faces.length > 0) {
Toast.makeText(HWTestActivity.this,
UiMessages.MSG_FACE_DETECTED.toString(),
Toast.LENGTH_SHORT).show();
camera.stopFaceDetection();
} else {
camera.stopFaceDetection();
camera.startFaceDetection();
}
}
});
}
};
}
}
这是我的无知,显然你不能在媒体记录器 运行ning 时进行人脸检测 运行ning,所以大家不要尝试 运行人脸检测,同时用相机录制。
如果你真的想在录制时检测面部,那么你应该使用
onPreviewFrame(byte[] pixelData, Camera camera)
中的方法
Camera.PreviewCallback()
将 pixelData 转换为 RGB_565 位图并将其提供给 FaceDetector.findfaces 方法。但根据我的经验,我发现这种方法非常不可靠。
这是我用于人脸检测的代码,问题是当我使用 android studio 调试此代码时,多次调用 onFaceDetection 方法并完美检测到人脸(当我放置一个断点时方法内部)。但是当我 运行 它没有任何断点时,该方法只被调用 2-3 次并且没有进行人脸检测。任何与此相关的帮助将不胜感激,正如您从我尝试停止和启动人脸检测的代码中看到的那样。
void setFaceDetectionListener() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
mFaceDetectionListener = new Camera.FaceDetectionListener() {
Handler faceDetectionHandler;
@Override
public void onFaceDetection(final Camera.Face[] faces, final Camera camera) {
if(faceDetectionHandler == null){//Initialize
faceDetectionHandler = new Handler();
Toast.makeText(HWTestActivity.this,
UiMessages.MSG_SHOW_YOUR_FACE.toString(),
Toast.LENGTH_SHORT).show();
}
faceDetectionHandler.post(new Runnable() {
@Override
public void run() {
Log.e("faceDetect", "No of faces = " + faces.length);
if (!is_face_detected) {
Toast.makeText(HWTestActivity.this,
UiMessages.MSG_DETECTING_YOUR_FACE.toString(),
Toast.LENGTH_SHORT).show();
is_face_detected = faces.length > 0;
}
if (faces.length > 0) {
Toast.makeText(HWTestActivity.this,
UiMessages.MSG_FACE_DETECTED.toString(),
Toast.LENGTH_SHORT).show();
camera.stopFaceDetection();
} else {
camera.stopFaceDetection();
camera.startFaceDetection();
}
}
});
}
};
}
}
这是我的无知,显然你不能在媒体记录器 运行ning 时进行人脸检测 运行ning,所以大家不要尝试 运行人脸检测,同时用相机录制。
如果你真的想在录制时检测面部,那么你应该使用
onPreviewFrame(byte[] pixelData, Camera camera)
中的方法
Camera.PreviewCallback()
将 pixelData 转换为 RGB_565 位图并将其提供给 FaceDetector.findfaces 方法。但根据我的经验,我发现这种方法非常不可靠。