OpenCV + Python 人臉檢測(cè)

下午的時(shí)候,配好了OpenCV的Python環(huán)境辐董,OpenCV的Python環(huán)境搭建悴品。于是迫不及待的想體驗(yàn)一下opencv的人臉識(shí)別,如下文简烘。


必備知識(shí)

Haar-like

Haar-like百科釋義苔严。通俗的來講,就是作為人臉特征即可孤澎。

Haar特征值反映了圖像的灰度變化情況届氢。例如:臉部的一些特征能由矩形特征簡(jiǎn)單的描述,如:眼睛要比臉頰顏色要深覆旭,鼻梁兩側(cè)比鼻梁顏色要深退子,嘴巴比周圍顏色要深等。

opencv api

要想使用opencv型将,就必須先知道其能干什么寂祥,怎么做。于是API的重要性便體現(xiàn)出來了七兜。就本例而言丸凭,使用到的函數(shù)很少,也就普通的讀取圖片,灰度轉(zhuǎn)換惜犀,顯示圖像铛碑,簡(jiǎn)單的編輯圖像罷了。

如下:

讀取圖片

只需要給出待操作的圖片的路徑即可虽界。

import cv2
image = cv2.imread(imagepath)

灰度轉(zhuǎn)換

灰度轉(zhuǎn)換的作用就是:轉(zhuǎn)換成灰度的圖片的計(jì)算強(qiáng)度得以降低汽烦。

import cv2
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

畫圖

opencv 的強(qiáng)大之處的一個(gè)體現(xiàn)就是其可以對(duì)圖片進(jìn)行任意編輯,處理莉御。
下面的這個(gè)函數(shù)最后一個(gè)參數(shù)指定的就是畫筆的大小撇吞。

import cv2
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)

顯示圖像

編輯完的圖像要么直接的被顯示出來,要么就保存到物理的存儲(chǔ)介質(zhì)颈将。

import cv2
cv2.imshow("Image Title",image)

獲取人臉識(shí)別訓(xùn)練數(shù)據(jù)

看似復(fù)雜梢夯,其實(shí)就是對(duì)于人臉特征的一些描述,這樣opencv在讀取完數(shù)據(jù)后很據(jù)訓(xùn)練中的樣品數(shù)據(jù)晴圾,就可以感知讀取到的圖片上的特征颂砸,進(jìn)而對(duì)圖片進(jìn)行人臉識(shí)別。

import cv2

face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')

里賣弄的這個(gè)xml文件死姚,就是opencv在GitHub上共享出來的具有普適的訓(xùn)練好的數(shù)據(jù)人乓。我們可以直接的拿來使用。

訓(xùn)練數(shù)據(jù) 參考地址

探測(cè)人臉

說白了都毒,就是根據(jù)訓(xùn)練的數(shù)據(jù)來對(duì)新圖片進(jìn)行識(shí)別的過程色罚。

import cv2

# ···

# 探測(cè)圖片中的人臉
faces = face_cascade.detectMultiScale(
    gray,
    scaleFactor = 1.15,
    minNeighbors = 5,
    minSize = (5,5),
    flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)

我們可以隨意的指定里面參數(shù)的值,來達(dá)到不同精度下的識(shí)別账劲。返回值就是opencv對(duì)圖片的探測(cè)結(jié)果的體現(xiàn)戳护。

處理人臉探測(cè)的結(jié)果

結(jié)束了剛才的人臉探測(cè),我們就可以拿到返回值來做進(jìn)一步的處理了瀑焦。但這也不是說會(huì)多么的復(fù)雜腌且,無非添加點(diǎn)特征值罷了。

import cv2

# ···
print "發(fā)現(xiàn){0}個(gè)人臉!".format(len(faces))

for(x,y,w,h) in faces:
    cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)

實(shí)例

有了剛才的基礎(chǔ)榛瓮,我們就可以完成一個(gè)簡(jiǎn)單的人臉識(shí)別的小例子了铺董。

圖片素材

下面的這張圖片將作為我們的檢測(cè)依據(jù)。


圖片素材

人臉檢測(cè)代碼

# coding:utf-8
import sys

reload(sys)
sys.setdefaultencoding('utf8')
#    __author__ = '郭 璞'
#    __date__ = '2016/9/5'
#    __Desc__ = 人臉檢測(cè)小例子禀晓,以圓圈圈出人臉
import cv2
# 待檢測(cè)的圖片路徑
imagepath = r'./heat.jpg'

# 獲取訓(xùn)練好的人臉的參數(shù)數(shù)據(jù)精续,這里直接從GitHub上使用默認(rèn)值
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')

# 讀取圖片
image = cv2.imread(imagepath)
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# 探測(cè)圖片中的人臉
faces = face_cascade.detectMultiScale(
    gray,
    scaleFactor = 1.15,
    minNeighbors = 5,
    minSize = (5,5),
    flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)

print "發(fā)現(xiàn){0}個(gè)人臉!".format(len(faces))

for(x,y,w,h) in faces:
    # cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
    cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)

cv2.imshow("Find Faces!",image)
cv2.waitKey(0)

人臉檢測(cè)結(jié)果

  • 輸出圖片:


    人臉檢測(cè)結(jié)果
  • 輸出結(jié)果:

D:\Software\Python2\python.exe E:/Code/Python/DataStructor/opencv/Demo.py
發(fā)現(xiàn)3個(gè)人臉!

詳情見 案例參考

總結(jié)

回顧一下,這次的實(shí)驗(yàn)就是簡(jiǎn)單的對(duì)opencv的常用的api的使用粹懒,重點(diǎn)在于訓(xùn)練數(shù)據(jù)的使用和人臉探測(cè)的處理重付。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凫乖,隨后出現(xiàn)的幾起案子堪夭,更是在濱河造成了極大的恐慌愕把,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件森爽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嚣镜,警方通過查閱死者的電腦和手機(jī)爬迟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菊匿,“玉大人付呕,你說我怎么就攤上這事〉Γ” “怎么了徽职?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)佩厚。 經(jīng)常有香客問我姆钉,道長(zhǎng),這世上最難降的妖魔是什么抄瓦? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任潮瓶,我火速辦了婚禮,結(jié)果婚禮上钙姊,老公的妹妹穿的比我還像新娘毯辅。我一直安慰自己,他們只是感情好煞额,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布思恐。 她就那樣靜靜地躺著,像睡著了一般膊毁。 火紅的嫁衣襯著肌膚如雪胀莹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天媚媒,我揣著相機(jī)與錄音嗜逻,去河邊找鬼。 笑死缭召,一個(gè)胖子當(dāng)著我的面吹牛栈顷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嵌巷,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼萄凤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了搪哪?” 一聲冷哼從身側(cè)響起靡努,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后惑朦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兽泄,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年漾月,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了病梢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梁肿,死狀恐怖蜓陌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吩蔑,我是刑警寧澤钮热,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站烛芬,受9級(jí)特大地震影響隧期,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛀骇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一厌秒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧擅憔,春花似錦鸵闪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至个榕,卻和暖如春篡石,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背西采。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工凰萨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人械馆。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓胖眷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親霹崎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子珊搀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容