2011-08-13 26 views
2

嗨,我的臉檢測線程工作太慢, 我只從線程不工作時,從onPreviewFrame調用此線程,否則我只是跳過調用,線程檢測後,我打電話onDraw視圖內繪製矩形慢鏡頭檢測android

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(); 

我的問題可能是因爲我正在使用位圖而不是灰階它需要太長時間?我如何提高速度?

+0

的YUV陣列具有亮度數據擺在首位,這將讓你與灰度圖像的工作。 – yeyeyerman

回答

1

的FaceDetector API是不是真的做處理在現場預覽畫面。這是緩慢的方式。

如果你是一個相當新的設備上運行,更好的選擇是使用的Android 14+的FaceDetectionListener API。它非常快速,可用於在預覽SurfaceHolder上創建疊加層。

+0

又見新的Android面部檢測器API,它支持在一個實時預覽處理幀:https://developers.google.com/vision/ – pm0733464