摘要:上一篇文章的地址利用進(jìn)行識(shí)別相似圖片一安裝官網(wǎng)在進(jìn)行下一步操作時(shí),我們需要安裝,本來(lái)安裝的步驟跟平常安裝其他模塊一樣,而然由于的歷史原因用過(guò)都懂,弄得一點(diǎn)都不友好。
前言
和網(wǎng)上各種首先你要有一個(gè)女朋友的系列一樣,想進(jìn)行人臉判斷,首先要有臉,
只要能靠確定人臉的位置,那么進(jìn)行兩張人臉是否相似的操作便迎刃而解了。
所以本篇文章著重講述如何利用openCV定位人臉。
上一篇文章的地址:
安裝openCV利用python進(jìn)行識(shí)別相似圖片(一)
opencv官網(wǎng)
在進(jìn)行下一步操作時(shí),我們需要安裝openCV,本來(lái)安裝openCV的步驟跟平常安裝其他模塊一樣,而然
由于python的歷史原因(用過(guò)都懂……),弄得一點(diǎn)都不友好。
先說(shuō)一下,python2.7的用戶,可以直接在openCV的官網(wǎng)上直接下載,然后在openCV的buildpython
的目錄下,根據(jù)自己的情況,選擇x86,x64下的cv2.pyd放到你python的安裝目錄的
Libsite-packages下。
至于python3.4的用戶,即有點(diǎn)特別。你可以在StackOverFlow找到這樣
和這樣的答案,但我們不要這么麻煩。
進(jìn)入這個(gè)網(wǎng)站,下載openCV相關(guān)whl文件,例如
opencv_python-3.1.0-cp35-none-win_amd64.whl
然后再對(duì)應(yīng)目錄下使用pip install opencv_python-3.1.0-cp35-none-win_amd64.whl命令即可
安裝完成后,可以在python的命令行下測(cè)試。
import cv2
如果沒(méi)有報(bào)錯(cuò)的話,恭喜你安裝成功。
不過(guò)無(wú)論是哪個(gè)版本的用戶,在python上使用openCV都需要先安裝numpy這個(gè)模塊。
人臉識(shí)別的原理numpy
opencv的人臉識(shí)別是基于了haar特征,關(guān)于什么叫haar特征,足以開(kāi)另外一篇文章說(shuō)明了,礙于篇幅,這里不做介紹。
opencv提供已經(jīng)訓(xùn)練好的數(shù)據(jù)寫成了xml文件,放在了opencvsourcesdatahaarcascades的目錄下。
如果只是安裝了opencv_python-3.1.0-cp35-none-win_amd64.whl的,可以在我的github上,下載cvdata里面的內(nèi)容
,地址會(huì)在文章底部給出。
除了人臉識(shí)別的數(shù)據(jù)外,還有人眼,上半身,下半身……等人體特征的數(shù)據(jù),觀察xml文件的命名,不難見(jiàn)名知義。
接下來(lái)會(huì)介紹如何利用這個(gè)已經(jīng)訓(xùn)練好的數(shù)據(jù),如果仍對(duì)haar模型感興趣,可以參考以下地址。
如何使用訓(xùn)練好的數(shù)據(jù)zouxy09的專欄
先講關(guān)于openCV基本的一些操作。全部具體代碼,請(qǐng)查看我的github。
讀入一張圖片cv2.imread(path)
如果你用type()把其返回值的類型是numpy.ndarray。
而同樣,numpy.asarray(Image)返回的亦是numpy.ndarray對(duì)象,為什么強(qiáng)調(diào)這兩點(diǎn)?
cv2.imread(path)不能讀取中文路徑,若路徑中含有中文字符,其會(huì)返回None
在后面的操作中,包括是切割圖片(人臉部分),再進(jìn)行局部哈希,比較相似度,
等等都是用Image對(duì)象進(jìn)行操作,如果再用Image.open()讀入圖片未免顯得麻煩。
所以干脆統(tǒng)一用Image.open()打開(kāi)圖片,再用numpy.asarray(Image)轉(zhuǎn)化即可。
需要注意有一個(gè)不同的地方是雖然其返回的也是三維數(shù)組,但在第三維,即某個(gè)坐標(biāo)下的RGB值,兩個(gè)矩陣的順序是反的,但只要另外編寫一個(gè)小函數(shù)將其反轉(zhuǎn)即可。
載入xml數(shù)據(jù)face_cascade = cv2.CascadeClassifier(xml_path)
將圖片灰度化if img.ndim == 3: gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) else: gray = img # 如果img維度為3,說(shuō)明不是灰度圖,先轉(zhuǎn)化為灰度圖gray,如果不為3,也就是2,原圖就是灰度圖
img是之前讀入的三維數(shù)組,雖然灰度圖可以用Image對(duì)象的convert("L")完成,但由于不確定
opencv的處理方法是否和該方法一樣,所以還是用opencv自己的方法進(jìn)行處理比較好。
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(10,10),flags=cv2.CASCADE_SCALE_IMAGE)
scale_factor:被檢測(cè)對(duì)象的尺度變化。尺度越大,越容易漏掉檢測(cè)的對(duì)象,但檢測(cè)速度加快;尺度越小,檢測(cè)越細(xì)致準(zhǔn)確,但檢測(cè)速度變慢。
min_neighbors:數(shù)值越大,檢測(cè)到對(duì)象的條件越苛刻;反之檢測(cè)到對(duì)象的條件越寬松;
minSize:檢測(cè)對(duì)象的大小
該方法返回的是一個(gè)列表,每個(gè)列表元素是長(zhǎng)度為四的元組,分別臉部的左上角的x,y值,臉部區(qū)域的寬度和高度。
下一步操作通過(guò)上述的方法,我們就已經(jīng)獲取到人臉的位置,下一步你可以通過(guò)ImageDraw`對(duì)象進(jìn)行繪圖,框出人臉的位置。
同樣,你也可以使用Image的crop方法把人臉部分提取出來(lái),然后進(jìn)行局部哈希,
通過(guò)上一篇文章提及的算法,比較兩者的相似度。
兩種操作分別在我的github中實(shí)現(xiàn)了,請(qǐng)參考我的github中face1.py,和face2.py兩個(gè)python文件。
寫一只具有識(shí)別能力的圖片爬蟲在上一篇文章中,我說(shuō)了會(huì)應(yīng)用這些算法做成以只具有識(shí)別能力的圖片爬蟲,然現(xiàn)在我也確實(shí)是在做
但考慮到作為核心的圖片識(shí)別和人臉識(shí)別的部分我已經(jīng)寫成文章分享出來(lái),其余部分就是想寫其他爬蟲一樣而已,所以我決定看看這兩篇文章的反響后再?zèng)Q定是否繼續(xù)該系列,把圖片爬蟲的制作過(guò)程和大家分享一下。
鑒于個(gè)人實(shí)力有限,本文未能詳細(xì)說(shuō)明人臉識(shí)別的原理,
但總結(jié)了如何利用已經(jīng)訓(xùn)練好的數(shù)據(jù)進(jìn)行人臉識(shí)別,希望能幫到有需要的朋友。
如有不足之處,歡迎提出。
本文涉及內(nèi)容的詳細(xì)代碼在下面的github地址。
我的github倉(cāng)庫(kù)
歡迎star,也歡迎給意見(jiàn)
本文參考文章
wphh的博客
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/37790.html
摘要:圖像指紋與漢明距離在介紹下面其他判別相似度的方法前,先補(bǔ)充一些概念。漢明距離為,即代表兩張圖片完全一樣。下一次將講述利用和以訓(xùn)練好的模型來(lái)進(jìn)行人臉識(shí)別。本文參考文章和圖片來(lái)源的文章賴勇浩的文章下一篇地址利用進(jìn)行識(shí)別相似圖片二 文章簡(jiǎn)介 在網(wǎng)上看到python做圖像識(shí)別的相關(guān)文章后,真心感覺(jué)python的功能實(shí)在太強(qiáng)大,因此將這些文章總結(jié)一下,建立一下自己的知識(shí)體系。當(dāng)然了,圖像識(shí)別這個(gè)...
摘要:學(xué)習(xí)筆記七數(shù)學(xué)形態(tài)學(xué)關(guān)注的是圖像中的形狀,它提供了一些方法用于檢測(cè)形狀和改變形狀。學(xué)習(xí)筆記十一尺度不變特征變換,簡(jiǎn)稱是圖像局部特征提取的現(xiàn)代方法基于區(qū)域圖像塊的分析。本文的目的是簡(jiǎn)明扼要地說(shuō)明的編碼機(jī)制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開(kāi)始之前,我們先來(lái)看這樣一個(gè)提問(wèn): pyth...
摘要:在上一篇博客圖像處理之圖片文字識(shí)別中我們介紹了在中如何利用軟件來(lái)識(shí)別圖片中的英文與中文,本文將具體介紹如何在中利用軟件來(lái)識(shí)別驗(yàn)證碼數(shù)字加字母。 ??在上一篇博客Python圖像處理之圖片文字識(shí)別(OCR)中我們介紹了在Python中如何利用Tesseract軟件來(lái)識(shí)別圖片中的英文與中文,本文將具體介紹如何在Python中利用Tesseract軟件來(lái)識(shí)別驗(yàn)證碼(數(shù)字加字母)。??我們?cè)诰W(wǎng)...
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
閱讀 1928·2021-09-14 18:03
閱讀 2321·2019-08-30 15:48
閱讀 1193·2019-08-30 14:09
閱讀 578·2019-08-30 12:55
閱讀 2794·2019-08-29 11:29
閱讀 1548·2019-08-26 13:43
閱讀 2371·2019-08-26 13:30
閱讀 2434·2019-08-26 12:17