2017-03-17 57 views
3

我使用JavaOpenCV圖書館使用Laptop Camera檢測FaceEyesMouth人臉檢測功能使用OpenCV的哈爾級聯

我迄今所做的:

  1. 捕獲視頻幀使用VideoCapture對象。使用Haar-Cascades檢測Face
  2. Face區域劃分爲Top區域和Bottom區域。
  3. Top區域內搜索Eyes
  4. Bottom區域搜索Mouth區域。

問題,我面對:

  • 在第一視頻正常運行時突然就變慢。

主要問題:

  1. DO高階相機的分辨率爲工作哈爾瀑布更好?

  2. 我是否必須在一定範圍內捕捉視頻幀?例如(100px X100px)

  3. 是否Haar-CascadesGray-scale中的表現更好?

  4. 不同的照明條件有什麼不同?

  5. detectMultiScale(params)準確的做法是什麼?

  6. 如果我想要去進一步分析Eye BlinkingEye Closure DurationMouth YawningHead NoddingHead Orientation來檢測疲勞(嗜睡)通過使用Support Vector Machine,有何意見?

您的幫助表示感謝!

回答

3

以下article,會給你一個引擎蓋下的事情的概述,我強烈建議閱讀文章。

做更高級相機的決議對Haar-Cascades更好嗎?

不是必需的,cascade.detectMultiScale有PARAMS調整各種輸入寬度,高度情景,像minSizemaxSize,這些都是可選PARAMS不過,但是你可以調整這些獲得強大的預測,如果你有控制輸入圖片大小。如果您將minSize設置爲較小的值並忽略maxSize,那麼它對較小和高分辨率的圖像也適用,但性能會受到影響。此外,如果現在想象一下,如何在高分辨率和低分辨率圖像之間沒有差異,那麼您應該考慮內部縮放圖像以降低分辨率以提高性能,這就是爲什麼定義maxSizeminSize對於避免任何不必要的迭代。

我是否必須以一定的比例捕捉視頻幀?例如 (100像素X100px)

這主要取決於你傳遞給cascade.detectMultiScale的PARAMS。我個人認爲100 x 100對於較小的人臉檢測來說太小了,因爲在將框架調整到較小的尺寸時某些功能會完全丟失,並且cascade.detectMultiScale高度依賴於輸入圖像中的漸變或特徵。

但是,如果輸入框架只有臉部作爲主要部分,並且沒有其他較小的面部懸在後面,那麼您可以使用100 X 100。我已經測試了一些尺寸爲100 x 100的樣本面,效果很好。如果情況並非如此,那麼300 - 400像素寬度應該很好。但是,您需要調整參數才能達到準確性。

Do Haar-Cascades在灰度圖像中的工作更好嗎?

它們只能在灰度圖像中工作。

article如果你讀了第一部分,你會發現它的面部檢測包括檢測圖像中的許多二進制模式,這基本上來自ViolaJones,這是該算法的基本原理。

不同的照明條件有什麼不同?

可能在某些情況下,主要是哈爾特徵是光照不變的。

如果你正在考慮不同照明條件爲採取下綠光或紅光的圖像,那麼其可能不會影響檢測,哈爾-特徵(因爲依賴於灰度)是獨立於輸入的RGB顏色的圖片。檢測主要取決於輸入圖像中的梯度/特徵。因此,只要輸入圖像中存在足夠的梯度差異,例如眼眉的強度低於前額等,它就可以正常工作。

但是,考慮輸入圖像具有背光或環境光很弱的情況,在這種情況下,可能會發現某些突出的特徵未找到,這可能導致未檢測到面部。

detectMultiScale(params)方法的確切做法是什麼?

我想,如果您已閱讀article,那麼您現在一定知道這一點。

如果我想去的眨眼進一步分析,眼睛閉合 時間,嘴打哈欠,點頭和頭部方向來檢測 疲勞(嗜睡)通過使用支持向量機,有何意見?

不,我不會建議你用SVM執行這些類型的手勢檢測的,因爲這將是運行10個不同的級聯結束當前的面部狀態非常慢,但是我會建議你使用一些面部Landmark Detection Framework,例如Dlib,您也可以搜索其他一些框架,因爲dlib的模型大小將近100MB,如果您想將它移植到移動設備上,它可能不適合您的需要。所以關鍵是**面部標記檢測**,一旦你得到全臉標記,你可以得出結論,如口如果打開或眼睛閃爍,並且它在實時工作,所以你的視頻處理贏得'受到很大的影響。