2013-05-17 52 views
1

我得到這個簡單的功能的Android FaceDetector.findFaces 100%的CPU時間

private PointF getFaceCenter(Bitmap faceBitmap){ 
     PointF faceCenter = new PointF(faceBitmap.getWidth()/2, faceBitmap.getHeight()/2); 

     Face[] faces = new Face[1]; 
     mFaceDetector = new FaceDetector(
       faceBitmap.getWidth(), faceBitmap.getHeight(), 1); 
     int detected = mFaceDetector.findFaces(faceBitmap, faces); 

     if (detected > 0) { 
      faces[0].getMidPoint(faceCenter); 
     } 

     return faceCenter; 
    } 

我用它來獲得面部的中心,這樣我就可以知道在哪裏畫我的畫。我發現我的UI線程成爲重新繪製時卡住所有的時間..

所以我把這個計算的onMeasure但仍然每次onMeasure稱爲UI變得緩慢..

我開始分析:

我看到mFaceDetector.findFaces需要100%CPU時間! 我刪除了人臉檢測代碼,我的應用程序開始運行速度超快。

我做錯了什麼?

任何解決方法?

回答

0

你正在做的主線程上。即處理UI事件的相同線程。 這就是UI塊的原因。嘗試使用不同的線程來進行計算。 (請參閱AsyncTask android文檔)

至於CPU使用率 - 它必須處理大量數據(特別是如果您有10MPics相機:)),這是正常的。

下一個缺陷是當前實現僅適用於RGB_565(再一次的Android文檔),所以它可能是值得檢查位配置

編輯:

我只是檢查這個銀河S3 - 對於後置攝像頭製作圖片需要16秒來分析圖片。