20行python代碼實(shí)現(xiàn)人臉識(shí)別

OpenCV 是最流行的計(jì)算機(jī)視覺(jué)庫(kù),原本用 C 和 C++ 開(kāi)發(fā),現(xiàn)在也支持 Python。
它使用機(jī)器學(xué)習(xí)算法在圖像中搜索人的面部。對(duì)于人臉這么復(fù)雜的東西,并沒(méi)有一個(gè)簡(jiǎn)單的檢測(cè)能對(duì)是否存在人臉下結(jié)論,而需要成千上萬(wàn)的特征匹配。算法把人臉識(shí)別任務(wù)分解成數(shù)千個(gè)小任務(wù),每個(gè)都不難處理。這些任務(wù)也被稱為分類器。
對(duì)于類似于人臉的對(duì)象,你或許需要不少于 6000 個(gè)分類器,每一個(gè)都需要成功匹配(當(dāng)然,有容錯(cuò)率),才能檢測(cè)出人臉。但這有一個(gè)問(wèn)題:對(duì)于人臉識(shí)別,算法從左上角開(kāi)始計(jì)算一個(gè)個(gè)數(shù)據(jù)塊,不停問(wèn)“這是張臉嗎”。每個(gè)數(shù)據(jù)塊有超過(guò) 6000 個(gè)檢測(cè),加起來(lái)的計(jì)算量會(huì)達(dá)到數(shù)百萬(wàn)級(jí)別,計(jì)算機(jī)很可能會(huì)讓你等得花兒都謝了。
OpenCV 使用 cascades 來(lái)避免這種情況。Cascade 是什么?最佳答案已經(jīng)在字典里了:一條瀑布或者連續(xù)瀑布。
好比連續(xù)瀑布,OpenCV cascade 把人臉檢測(cè)問(wèn)題分解為好幾步。對(duì)于每個(gè)數(shù)據(jù)塊,它都進(jìn)行一個(gè)粗略、快速的檢測(cè)。若通過(guò),會(huì)再進(jìn)行一個(gè)更仔細(xì)的檢測(cè),以此不斷類推。該算法有 30 到 50 個(gè)這樣的階段,或者說(shuō) cascade。
只有通過(guò)全部階段,算法才會(huì)判斷檢測(cè)到人臉。這樣做的好處是:大多數(shù)圖形都會(huì)在頭幾步就產(chǎn)生否定反饋,算法因而不需要在它上面測(cè)試所有 6000 個(gè)特征,大大節(jié)省了時(shí)間。相對(duì)于“正常流程”耗費(fèi)數(shù)個(gè)小時(shí),這可以實(shí)時(shí)實(shí)現(xiàn)人臉檢測(cè)。
軟件環(huán)境:
python3+openCV
代碼:
#encoding:utf-8
import cv2
filename = "/users/Downloads/20181102142518.png"
def detect(filename):
# haarcascade_frontalface_default.xml存儲(chǔ)在package安裝的位置
face_cascade = cv2.CascadeClassifier("/usr/local/lib/python3.6/site-packages/cv2/data/haarcascade_frontalface_default.xml")
img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#傳遞參數(shù)是scaleFactor和minNeighbors,分別表示人臉檢測(cè)過(guò)程中每次迭代時(shí)圖像的壓縮率以及每個(gè)人臉矩形保留近鄰數(shù)目的最小值
#檢測(cè)結(jié)果返回人臉矩形數(shù)組
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.namedWindow("Human Face Result!")
cv2.imshow("Human Face Result!", img)
cv2.imwrite("images/Face.jpg", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
detect(filename)

識(shí)別后:

以上所述是小編給大家介紹的python人臉識(shí)別詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Python基于Opencv來(lái)快速實(shí)現(xiàn)人臉識(shí)別過(guò)程詳解(完整版)
- python實(shí)現(xiàn)人臉識(shí)別代碼
- Python 40行代碼實(shí)現(xiàn)人臉識(shí)別功能
- python使用opencv進(jìn)行人臉識(shí)別
- 用Python實(shí)現(xiàn)簡(jiǎn)單的人臉識(shí)別功能步驟詳解
- 10分鐘學(xué)會(huì)使用python實(shí)現(xiàn)人臉識(shí)別(附源碼)
- Python實(shí)現(xiàn)人臉識(shí)別
- Python實(shí)現(xiàn)人臉識(shí)別的詳細(xì)圖文教程
相關(guān)文章
基于Python編寫(xiě)一個(gè)DOS命令輔助工具
在日常系統(tǒng)管理和維護(hù)工作中,執(zhí)行DOS(Disk?Operating?System)命令是一項(xiàng)必不可少的任務(wù),下面我們就來(lái)看看如何使用Python編寫(xiě)一個(gè)簡(jiǎn)單的DOS命令輔助工具,簡(jiǎn)化系統(tǒng)管理任務(wù)吧2024-01-01
Python使用Socket(Https)Post登錄百度的實(shí)現(xiàn)代碼
以前都是用一些高級(jí)模塊,封裝的比較好,今天嘗試使用socket模塊登錄百度,弄了半天才弄好,主要由于百度在登陸頁(yè)使用了https,我們需要對(duì)socket進(jìn)行一定處理2012-05-05
Django添加favicon.ico圖標(biāo)的示例代碼
這篇文章主要介紹了Django添加favicon.ico圖標(biāo)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
PyQt通過(guò)動(dòng)畫(huà)實(shí)現(xiàn)平滑滾動(dòng)的QScrollArea
這篇文章主要為大家詳細(xì)介紹了PyQt如何使用Qt的動(dòng)畫(huà)框架 QPropertyAnimation來(lái)實(shí)現(xiàn)平滑滾動(dòng)的QScrollArea,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以學(xué)習(xí)一下2023-01-01
python實(shí)現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法
這篇文章主要介紹了python實(shí)現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法,涉及Python中l(wèi)ist方法的使用技巧,需要的朋友可以參考下2015-05-05
Python實(shí)現(xiàn)獲取照片拍攝日期并重命名的方法
這篇文章主要介紹了Python實(shí)現(xiàn)獲取照片拍攝日期并重命名的方法,涉及Python針對(duì)文件屬性及文件名相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
python的ImageTk.PhotoImage大坑及解決
這篇文章主要介紹了python的ImageTk.PhotoImage大坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11

