2011-08-13 38 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