嗨,我的脸部侦测线程工作太慢,
我仅在线程无法正常工作时才从onPreviewFrame调用此线程,否则我将跳过该调用,并且在线程检测到人脸之后,我在 View 内调用onDraw来绘制矩形
public void run() {
FaceDetector faceDetector = new FaceDetector(bitmapImg.getWidth(), bitmapImg.getHeight(), 1);
numOfFacesDetected = faceDetector.findFaces(bitmapImg, detectedFaces);
if (numOfFacesDetected != 0) {
detectedFaces.getMidPoint(eyesMidPoint);
eyesDistance = detectedFaces.eyesDistance();
handler.post(new Runnable() {
public void run() {
mPrev.invalidate();
// turn off thread lock
}
});
mPrev.setEyesDistance(eyesDistance);
mPrev.setEyesMidPoint(eyesMidPoint);
}
isThreadWorking = false;
}
public void onPreviewFrame(byte[] yuv, Camera camera) {
如果(isThreadWorking)
返回;
isThreadWorking = true;
ByteBuffer bbuffer = ByteBuffer.wrap(yuv);
bbuffer.get(grayBuff_, 0, bufflen_);
detectThread = new FaceDetectThread(handler);
detectThread.setBuffer(grayBuff_);
detectThread.start();
我的问题可能是因为使用位图而不是灰度会花费太长时间吗?我如何提高速度?
最佳答案
FaceDetector API并非真正用于在实时预览中处理帧。这是减慢速度的方法。
如果您是在相当新的设备上运行,则更好的选择是在Android 14+中使用FaceDetectionListener API。它非常快,可用于在预览SurfaceHolder上创建覆盖。