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