瀏覽通過域

人臉檢測使用中提琴瓊斯算法

在本文中,我們將討論一個人臉檢測算法“中提琴瓊斯算法”。本文的最後你會有足夠的知識來做鬼臉和眼睛探測器如下所示:

中提琴瓊斯算法
檢測的臉和眼睛
  1. 人臉檢測是什麼?
  2. 中提琴瓊斯算法是什麼?
    1. Haar-Like特性是什麼?
    2. 積分圖像是什麼?
    3. 演算法應用於中提琴瓊斯算法如何?
    4. 級聯分類器是什麼?
  3. 使用一個中提琴瓊斯一個攝像頭飼料中麵孔識別分類器
計算機視覺

人臉檢測是什麼?

目標檢測是一個連接到圖像處理和計算機技術計算機視覺。它涉及的檢測實例對象如人臉、建築物、樹木、汽車、等人臉檢測算法的主要目的是確定是否有任何在一個圖像。

近年來,我們看到了顯著的技術進步可以檢測和識別的麵孔。我們的移動攝像機通常配備這樣的技術,我們可以看到臉的周圍有一個盒子。雖然有很先進的人臉檢測算法,特別是深度學習的引入,引入中提琴瓊斯算法在2001年在這一領域取得突破。現在讓我們詳細探討中提琴瓊斯算法。

中提琴瓊斯算法是什麼?

中提琴瓊斯算法命名兩個計算機視覺研究人員提出的方法在2001年,保羅中提琴和邁克爾·瓊斯在他們的論文中,使用了“快速目標檢測的簡單功能”。雖然是一個過時的框架,Viola-Jones是相當強大的,它的應用已被證明是特別顯著的實時人臉檢測。這個算法是火車緩慢但能以令人矚目的速度實時的人臉。

給定一個圖像(這種算法適用於灰度圖像),該算法看著許多較小的亞區,並試圖找到一個在每個子區域麵臨通過尋找特定的功能。它需要檢查許多不同的位置和尺度,因為一個圖像可以包含許多不同大小的麵孔。中提琴和瓊斯Haar-like特性來檢測在這個算法。

中提琴瓊斯算法有四個主要步驟,我們應當討論的部分:

  1. 選擇Haar-like特性
  2. 創建一個整體的形象
  3. 跑步演算法訓練
  4. 創建分類器級聯

Haar-Like特性是什麼?

在19世紀匈牙利數學家,阿爾弗雷德·哈霧給Haar小波的概念,是新“方形”功能的序列一起構成小波家族或基礎。瞧和瓊斯改編使用Haar小波的想法和發展所謂Haar-like特性。

Haar-like特性數字圖像特征用於目標識別。所有人臉共享一些通用的屬性人臉像眼睛區域是相鄰的像素,和鼻子區域比眼睛亮區域。

一個簡單的方法來找出哪些地區是總結淺或深兩區域的像素值,進行比較。像素值的總和在黑暗地區將小於像素較輕的地區的總和。如果一方比另一個更輕,有時可能是眉毛的邊緣或中間部分可能比周圍的盒子,有光澤,可以解釋為一個鼻子這可以通過使用Haar-like特性和在他們的幫助下,我們可以解釋不同部分的臉。

有3種Haar-like特性,中提琴和瓊斯在他們的研究:

  1. 邊緣特征
  2. 四麵的特性

邊緣特征和線特征分別用於檢測邊緣和線條。四麵特性用於發現斜特性。

的價值功能是計算一個數字:黑色區域的像素值的總和減去在白色區域像素值的總和。值為零的平原表麵所有像素有相同的價值,因此,沒有提供任何有用的信息。

因為我們麵臨的複雜形狀與黑暗和光明的地方,Haar-like特性給你當地區大量黑色和白色矩形是非常不同的。使用這個值,我們得到一個有效的信息的圖像。

Haar-like特性是有用的,需要給你一個很大的數,這意味著地區黑白矩形是非常不同的。有已知的特性,能夠很好地檢測人臉。

例如,當我們這個特定haar-like特性應用到鼻梁,我們得到一個很好的回應。同樣,我們結合這些特點理解如果一個圖像區域包含一個人臉。

積分圖像是什麼?

在前麵的小節中,我們已經看到,計算每個特征值,我們需要在所有執行計算像素在一個特殊功能。在現實中,這些計算可以很密集,因為像素的數量要大得多,當我們正在處理一個大的特征。

積分形象發揮著作用讓我們迅速執行這些密集的計算我們可以理解特性的幾個特性是否符合標準。

積分圖像(有時也稱為一個總計部分表)的名字是數據結構和算法用於獲得這個數據結構。使用它作為一個快速和有效的方式來計算像素值的總和在一個圖像或矩形圖像的一部分。

演算法應用於中提琴瓊斯算法如何?

接下來,我們使用機器學習算法稱為演算法。但是為什麼我們甚至要一個算法?

的數量特征出現在24×24探測器窗口已經年近160000,但隻有少數的這些特性來識別一臉很重要。所以我們使用學習演算法來確定160000年最好的功能特性。

Viola-Jones算法,每個Haar-like特性代表了一種弱的學習者。的類型和大小來決定功能,進入最終的分類器,演算法檢查供應的所有分類器的性能。

你計算分類器的性能,評價它在所有條件的圖像用於培訓。一些條件將產生一個分類器的強烈反應。那些將被歸類為陽性,即分類器認為它包含一個人臉。條件不提供不包含人臉的有力反擊,在分類器的意見。他們將被歸類為陰性。

表現良好的分類器有更高的重要性或重量。最終結果是一個強分類器,也稱為提高了分類器,包含表現最好的弱分類器。

所以當我們訓練演算法識別重要的功能,我們喂它形式的訓練數據中的信息,隨後培訓學習預測的信息。最終,算法設置最小閾值來確定是否可以分為一個有用的功能。

級聯分類器是什麼?

也許演算法最終將選擇最佳特性說2500左右,但它仍然是一個耗時的過程來計算這些特征為每個地區。我們有24×24窗口滑動輸入圖像,我們需要找出如果任何這些區域包含的臉。級聯的工作是很快丟棄它們,並避免浪費寶貴的時間和計算。因此,實現實時人臉檢測所需的速度。

我們建立一個級聯係統中識別麵孔的過程劃分為多個階段。在第一階段,我們有一個分類器是由最好的功能,換句話說,在第一階段,次區域穿過最好的特性,比如功能標識鼻梁或標識的眼睛。在下一階段,我們都有剩餘的特性。

當圖像子區域進入瀑布,它是由第一階段評估。如果這個階段評估次區域看作是積極的,這意味著它認為這是一張臉,可能的輸出階段。

當一個次區域也許,它被發送到下一個階段的級聯過程仍在繼續這樣直到我們到達最後階段。

如果所有分類器通過圖像,最後歸類為人臉,是向用戶提供檢測。

現在它是如何幫助我們提高速度嗎?基本上,如果第一階段給負麵評價,然後立即丟棄的圖像不包含一個人的臉。如果它通過了第一階段,但第二階段失敗,它就會被丟棄。基本上,圖像可以被丟棄在任何階段的分類器

使用Viola-Jones分類器來檢測在一個攝像頭

在本節中,我們將使用OpenCV實現Viola-Jones算法和檢測麵臨著在我們的攝像頭實時提要。我們還將使用相同的算法來檢測一個人的眼睛。這非常簡單,你隻需要在你的電腦上安裝OpenCV和Python。您可以參考文章了解OpenCV以及如何安裝它

在OpenCV,我們有幾個訓練哈霧級聯模型保存為XML文件。而不是從頭創建模型和培訓,我們使用這個文件。我們將使用“haarcascade_frontalface_alt2。在這個項目中xml”文件。現在讓我們開始編碼。

第一步是找到“haarcascade_frontalface_alt2的路徑。xml”和“haarcascade_eye_tree_eyeglasses。xml”文件。我們通過使用Python語言的操作係統模塊。

進口操作係統cascPathface = os.path。目錄名(cv2.__file__) +“/數據/ haarcascade_frontalface_alt2。xml”cascPatheyes = os.path。目錄名(cv2.__file__) +“/數據/ haarcascade_eye_tree_eyeglasses.xml”

下一步是加載我們的分類器。我們使用兩個分類器,一個用於檢測檢測眼睛的臉和其他人。的路徑上麵的XML文件作為參數到CascadeClassifier OpenCV的()方法。

faceCascade = cv2.CascadeClassifier (cascPath) eyeCascade = cv2.CascadeClassifier (cascPatheyes)

加載分類器後,讓我們打開網絡攝像頭使用這個簡單的OpenCV一行程序代碼

video_capture = cv2.VideoCapture (0)

接下來,我們需要從攝像頭獲取幀流,我們使用read()函數。我們使用無限循環來得到我們想要的所有幀,直到時間關閉流。

而真正:#捕捉幀ret,幀= video_capture.read ()

read()函數返回:

  1. 實際的視頻幀讀取(一幀在每一個循環)
  2. 返回代碼

返回代碼告訴我們如果我們有耗盡的框架,這將發生如果我們閱讀從一個文件中。這沒關係當閱讀從攝像頭因為我們永遠可以記錄,所以我們會忽略它。

對於這個特定的分類器工作時,我們需要幀轉換成灰度。

灰色= cv2。cv2.COLOR_BGR2GRAY cvtColor(框架)

faceCascade對象有一個方法detectMultiScale(),它接受一個框架(圖片)作為參數,運行在圖像分類器級聯。這個詞多尺度表明算法是在多尺度圖像的條件,檢測麵臨著不同的大小。

麵臨= faceCascade.detectMultiScale(灰色,scaleFactor = 1.1, minNeighbors = 5, minSize =(60 60),國旗= cv2.CASCADE_SCALE_IMAGE)

讓我們通過這些參數的功能:

  • scaleFactor -參數指定多少圖片在每個圖像比例尺大小減少。通過重新調節輸入圖像,您可以調整一個更大的臉更小,使其可檢測的算法。1.05是一個不錯的可能值,這意味著你使用一小步進行調整,即大小減少5%,增加的機會找到匹配大小與模型檢測。
  • minNeighbors——參數指定有多少鄰居每個候選矩形應該保留它。這個參數將影響檢測質量的麵孔。更高的價值在更少的檢測結果,但更高的質量。3 ~ 6是一個很好的價值。
  • 旗幟的操作模式
  • minSize——最小可能的對象大小。對象小於被忽略。

變量的臉現在包含所有目標圖像的檢測。檢測保存像素坐標。每個檢測是由其左上角坐標和矩形的寬度和高度,包含了檢測到的臉。

顯示檢測到的臉,我們會畫一個矩形。OpenCV的矩形()繪製矩形圖像,它需要知道左上角和右下角的像素坐標。坐標顯示像素在圖像的行和列。我們可以很容易地得到這些坐標變量的臉。

也和現在一樣,我們知道臉的位置,我們定義一個新的領域,隻包含一個人的臉和名字faceROI。在faceROI我們檢測到眼睛和包圍他們使用圓函數。

(x, y, w h)在麵臨:cv2。矩形(幀(x, y), (x + w, y + h) (0255 0), 2) faceROI =幀[y: y + h x: x + w]眼睛= eyeCascade.detectMultiScale (faceROI) (x2, y2 w2, h2)眼睛:eye_center = (x + x2 + w2 / / 2, y + y2 + h2 / / 2)半徑= int(圓((w2 + h2) * 0.25)) = cv2框架。圓(框架、eye_center半徑,(255,0,0),4)

的矩形()函數接受以下參數:

  • 原始圖像
  • 左上角的坐標點的檢測
  • 右下方的點的坐標的檢測
  • 矩形的顏色(元組定義的紅色、綠色和藍色(0 - 255))。在我們的例子中,我們設置為綠色隻是保持綠色255和其他零組件。
  • 矩形線的厚度

接下來,我們也隻是顯示生成的框架和設置一個退出這個無限循環並關閉視頻。通過按“q”鍵,我們可以在這裏退出腳本

cv2。imshow(“視頻”,幀)如果cv2.waitKey (1) & 0 xff = =奧德(問):休息

下兩行隻是清理和釋放。

cv2.destroyAllWindows video_capture.release () ()

這裏有完整的代碼和輸出。

進口cv2進口os cascPathface = os.path。目錄名(cv2.__file__) +“/數據/ haarcascade_frontalface_alt2。xml”cascPatheyes = os.path。目錄名(cv2.__file__) +“/數據/ haarcascade_eye_tree_eyeglasses.xml”faceCascade = cv2.CascadeClassifier(cascPathface) eyeCascade = cv2.CascadeClassifier(cascPatheyes) video_capture = cv2.VideoCapture(0) while True: # Capture frame-by-frame ret, frame = video_capture.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(60, 60), flags=cv2.CASCADE_SCALE_IMAGE) for (x,y,w,h) in faces: cv2.rectangle(frame, (x, y), (x + w, y + h),(0,255,0), 2) faceROI = frame[y:y+h,x:x+w] eyes = eyeCascade.detectMultiScale(faceROI) for (x2, y2, w2, h2) in eyes: eye_center = (x + x2 + w2 // 2, y + y2 + h2 // 2) radius = int(round((w2 + h2) * 0.25)) frame = cv2.circle(frame, eye_center, radius, (255, 0, 0), 4) # Display the resulting frame cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break video_capture.release() cv2.destroyAllWindows()

輸出:

這給我們帶來了本文的最後,我們了解了中提琴OpenCV瓊斯算法及其實現。

中提琴瓊斯算法
《阿凡達》的照片
beplay2018官网很好的學習團隊
beplay2018官网很好的學習的博客涵蓋了最新發展和創新技術,可用於構建有益的事業。你會發現職業指導,技術教程和行業新聞使自己更新技術和業務的快速變化的世界。

留下你的評論

你的電子郵件地址將不會被發表。必填字段標記*

裂紋的夢想工作免費的在印度最信任的教育證書課程平台

滾動到頂部
Baidu
map