用 OpenCV 檢測(cè)貓臉
Python中的OpenCV貓臉檢測(cè)代碼
使用 OpenCV 的預(yù)訓(xùn)練級(jí)聯(lián)分類(lèi)器可以輕松檢測(cè)照片或視頻中的貓臉。完成所有工作的代碼:
import cv2
cascade = cv2.CascadeClassifier('haarcascade_frontalcatface.xml')
cap = cv2.VideoCapture(0)
while True:
ret, img = cap.read()
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = cascade.detectMultiScale(img_gray, 1.5, 5)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,0),2)
roi_gray = img_gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv2.imshow('img',img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
讓我們逐行檢查:
cv2 庫(kù)被導(dǎo)入。
如果你還沒(méi)有安裝cv2:
#install cv2
pip install opencv-python
#1
import cv2
· 加載級(jí)聯(lián)分類(lèi)器 XML 文件。
#3
cascade = cv2.CascadeClassifier('haarcascade_frontalcatface.xml')
級(jí)聯(lián)分類(lèi)器
級(jí)聯(lián)是一種集成學(xué)習(xí)方法,是一種使用多個(gè)分類(lèi)器來(lái)提高準(zhǔn)確率的方法。第一個(gè)級(jí)聯(lián)分類(lèi)器是 Viola 和 Jones (2001) 的臉部檢測(cè)器。這個(gè)分類(lèi)器的要求是快速,以便在低功耗 CPU 上實(shí)現(xiàn),例如相機(jī)和電話。
級(jí)聯(lián)是一種訓(xùn)練分類(lèi)器的方法(分類(lèi)器是一種機(jī)器學(xué)習(xí)算法,可用于標(biāo)記事物),以便它們?cè)阪溨袇f(xié)同工作。鏈中的第一個(gè)分類(lèi)器訓(xùn)練在幾百?gòu)埬阍噲D檢測(cè)的事物的“正面”圖像上,以及一堆不包含該事物的“負(fù)面”圖像上。
然后,可以將該分類(lèi)器應(yīng)用于圖像的一個(gè)區(qū)域,并嘗試檢測(cè)該對(duì)象。如果它沒(méi)有找到它,它將移動(dòng)到下一個(gè)區(qū)域,依此類(lèi)推,直到它找到了東西或搜索了整個(gè)圖像。這個(gè)過(guò)程最常用于面部檢測(cè)和識(shí)別。
該算法通過(guò)掃描圖像并尋找與訓(xùn)練數(shù)據(jù)中的特征相匹配的 Haar 特征來(lái)工作。如果找到匹配項(xiàng),則將該區(qū)域標(biāo)記為臉。如果未找到匹配項(xiàng),則將該區(qū)域標(biāo)記為不是臉。
在整個(gè)圖像中進(jìn)行這種搜索是一項(xiàng)非常昂貴的業(yè)務(wù)。想想看,即使是 24x24 的圖像也有 160000 個(gè)特征。因此,它使用積分圖像,這是克服這一問(wèn)題的有效方法。
積分圖像允許快速計(jì)算給定矩形下的像素總和,用于計(jì)算各種特征。這種方法比傳統(tǒng)方法快得多,因此非常適合用于大圖像。
位置1的值是A中像素的總和。位置2的值是A和B的總和。位置3:A+C。位置 4 A+B+C+D。D 的值為 (4+1) - (2+3)。
在我們得到這些特征(會(huì)有很多)之后,我們需要對(duì)它們進(jìn)行某種過(guò)濾,我們需要找出那些能夠告訴我們一些東西的特征。Adaboost 是一種機(jī)器學(xué)習(xí)算法,有助于從大量特征中選擇最佳特征。它通過(guò)關(guān)注與手頭任務(wù)最相關(guān)的特征來(lái)做到這一點(diǎn)。
我們將每個(gè)特征應(yīng)用于訓(xùn)練圖像并獲得正負(fù)示例中提供的最佳閾值。選擇在兩個(gè)方向上具有最低錯(cuò)誤率的特征。Adaboost 的基礎(chǔ)分類(lèi)器很弱。但是當(dāng)同時(shí)使用許多基礎(chǔ)分類(lèi)器時(shí),Adaboost 可以達(dá)到一個(gè)強(qiáng)大的水平。通過(guò)將特征從 160000 個(gè)減少到 6000 個(gè)特征,實(shí)現(xiàn)了超級(jí)增益。
通常,包含臉部的區(qū)域與整個(gè)圖像區(qū)域相比非常小。因此,到處尋找臉部仍然是低效的。相反,在你的臉更有可能出現(xiàn)在照片中間的區(qū)域。
Cascade of Classifiers 是一個(gè)引入的概念,以便更有效地將所有特征應(yīng)用于窗口。這些特征被分組到分類(lèi)器的不同階段并被一一應(yīng)用。如果窗口在第一階段失敗,則不考慮剩余的特征。如果通過(guò),則應(yīng)用第二階段的特征并繼續(xù)該過(guò)程。通過(guò)所有階段的窗口就是臉部區(qū)域。
· 為了訪問(wèn)和讀取從網(wǎng)絡(luò)攝像頭接收到的數(shù)據(jù),我們創(chuàng)建了一個(gè)視頻捕獲對(duì)象并傳遞我們的設(shè)備編號(hào)。
VideoCapture 類(lèi)用于捕獲視頻。你可以傳遞視頻文件的路徑。
#5
cap = cv2.VideoCapture(0)
· 啟動(dòng)循環(huán)以確保視頻數(shù)據(jù)的連續(xù)流。
#7
while True:
· VideoCapture 對(duì)象(cap)讀取并解碼,返回下一幀視頻。#8
ret, img = cap.read()
#ret is True if there is a video data
#img is the image
· 我們將接收到的圖像轉(zhuǎn)換為灰度以最小化計(jì)算成本。
#9
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
· 現(xiàn)在,是時(shí)候在提供的圖像幀中檢測(cè)臉部了。我們將使用我們的級(jí)聯(lián)方法。
detectMultiScale方法檢測(cè)給定圖像中各種大小的對(duì)象。它接受灰度圖像、scaleFactor、minNeighbors、minSize、maxSize。
scaleFactor用于創(chuàng)建比例金字塔,它是一系列不同大小的圖像,用于檢測(cè)圖像中不同大小的臉部。較小的比例因子會(huì)導(dǎo)致更徹底的臉部搜索,但速度較慢,而較大的比例因子會(huì)導(dǎo)致搜索速度更快,但可能會(huì)遺漏一些臉部。
minNeighbors 參數(shù)指定每個(gè)候選矩形應(yīng)該保留多少個(gè)鄰居。該參數(shù)會(huì)影響檢測(cè)到的臉部質(zhì)量。數(shù)值越高,檢測(cè)次數(shù)越少,質(zhì)量越高。3~6是很好的參考取值。
minSize確定被檢測(cè)對(duì)象的閾值大小。對(duì)于maxSize,則相反。
#10
faces = cascade.detectMultiScale(img_gray, 1.5, 5)
· 在圖像中的面部周?chē)L制矩形。
#12-13-14-15
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,0),2)
roi_gray = img_gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
收聽(tīng)事件以結(jié)束程序。(在我們的例子中按下退出鍵)。
#19-20-21
k = cv2.waitKey(30) & 0xff
if k == 27:
break
結(jié)果:
參考
原文標(biāo)題 : 用 OpenCV 檢測(cè)貓臉

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
6月20日立即下載>> 【白皮書(shū)】精準(zhǔn)測(cè)量 安全高效——福祿克光伏行業(yè)解決方案
-
7月3日立即報(bào)名>> 【在線會(huì)議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車(chē)生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身機(jī)器人動(dòng)力電池技術(shù)應(yīng)用大會(huì)
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
推薦專(zhuān)題
- 1 AI 眼鏡讓百萬(wàn) APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話語(yǔ)權(quán)
- 3 深度報(bào)告|中國(guó)AI產(chǎn)業(yè)正在崛起成全球力量,市場(chǎng)潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級(jí)獨(dú)角獸:獲上市公司戰(zhàn)投,干人形機(jī)器人
- 5 國(guó)家數(shù)據(jù)局局長(zhǎng)劉烈宏調(diào)研格創(chuàng)東智
- 6 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 7 百億AI芯片訂單,瘋狂傾銷(xiāo)中東?
- 8 Robotaxi新消息密集釋放,量產(chǎn)元年誰(shuí)在領(lǐng)跑?
- 9 格斗大賽出圈!人形機(jī)器人致命短板曝光:頭腦過(guò)于簡(jiǎn)單
- 10 “搶灘”家用機(jī)器人領(lǐng)域,聯(lián)通、海爾、美的等紛紛入局