嗨,我的面部检测线程工作得太慢了, 只有当线程不工作时,我才从 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 并非真正用于处理实时预览中的帧。这是放慢速度的方式。
如果您在相当新的设备上运行,更好的选择是使用 FaceDetectionListener Android 14+ 中的 API。它速度非常快,可用于在预览 SurfaceHolder 上创建叠加层。
关于android - 慢人脸检测android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053490/