2012-07-13 35 views
2

我正在使用cvHaarDetectObjects C函數來檢測我的Android應用程序中的人臉,但執行時間不夠快,無法處理每個特定數量的視頻幀第二。所以,我正在考慮對我不需要的代碼發表評論,例如我注意到可以註釋掉的標誌和內存分配語句有很多分支條件。從cvHaarDetectObjects調用的功能也可以做同樣的事情。需要幫助以提高OpenCV 2.4.0中的人臉檢測的執行時間

有沒有人嘗試過這種優化之前?任何幫助深表感謝。

代碼:

cascadeFile1 = (CvHaarClassifierCascade *) cvLoad(cascadeFace,0,0,0); 
CvSeq *face = cvHaarDetectObjects(img1, cascadeFile1, storage,1.1, 3,CV_HAAR_DO_CANNY_PRUNING,cvSize(0,0)); 
+0

需要查看您的代碼,以幫助您優化它。 – 2012-07-13 14:04:40

+0

@alex我使用的代碼是:cascadeFile1 =(CvHaarClassifierCascade *)cvLoad(cascadeFace,0,0,0); CvSeq * face = cvHaarDetectObjects(img1,cascadeFile1,storage,1.1,3,CV_HAAR_DO_CANNY_PRUNING,cvSize(0,0)); – 2012-07-16 05:05:46

+0

但是,這個代碼可以優化嗎?我認爲前面的評論中的代碼沒有什麼可以完成的。這就是爲什麼我想通過評論我不需要的功能來優化opencv源代碼。我認爲應該在線提供源代碼,如果我能找到它,我會爲您提供鏈接。 – 2012-07-16 05:14:51

回答

0

第一步你應該嘗試調整輸入參數,因爲這些對分類器的性能有很大的影響。

你可以嘗試:

  1. 抑制源圖像分辨率爲合理值
  2. 增加scaleFactor參數通過少量(例如0.1步驟)
  3. 根據您的分辨率,相機領域視圖和麪的距離,定義min_sizemax_size參數的值。這會顯着影響算法需要執行的操作次數。

其次你可以發佈你的實際參數,你的分析結果和周圍的人可以肯定地提供一些提示什麼改善。

作爲一個方面說明:我不認爲如果您想離開算法運行,那麼註釋掉分支條件會在速度上產生明顯的差異。

+0

我已經調整了輸入參數。我所做的是:1.將圖像分辨率降低到176 * 144 2.當縮放比例爲10%時,我發現人臉檢測是最準確的,所以我不太想改變這個參數3.由於我的圖像分辨率爲176 * 144,輸入的視頻來自手機的正面照相機,我決定讓max_size參數爲(0,0),這樣即使相機握得太近也能檢測臉部臉。至於min_size,我會將其改爲圖像分辨率的五分之一左右。 – 2012-07-17 03:38:16