こんにちは、顔検出スレッドの動作が遅すぎます。スレッドが動作していない場合にのみ onPreviewFrame からこのスレッドを呼び出します。それ以外の場合は呼び出しをスキップし、スレッドが顔を検出した後、ビュー内で 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) {
if (isThreadWorking) 戻ります。
isThreadWorking = true;
ByteBuffer bbuffer = ByteBuffer.wrap(yuv);
bbuffer.get(grayBuff_, 0, bufflen_);
detectThread = new FaceDetectThread(handler);
detectThread.setBuffer(grayBuff_);
detectThread.start();
私の質問は、グレースケールではなくビットマップで作業しているため、時間がかかりすぎている可能性がありますか? どうすれば速度を改善できますか?