日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

python识图找图_利用python进行识别相似图片(二)

發(fā)布時間:2025/3/15 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python识图找图_利用python进行识别相似图片(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

和網(wǎng)上各種首先你要有一個女朋友的系列一樣,想進行人臉判斷,首先要有臉,

只要能靠確定人臉的位置,那么進行兩張人臉是否相似的操作便迎刃而解了。

所以本篇文章著重講述如何利用openCV定位人臉。

上一篇文章的地址:

安裝openCV

在進行下一步操作時,我們需要安裝openCV,本來安裝openCV的步驟跟平常安裝其他模塊一樣,而然

由于python的歷史原因(用過都懂……),弄得一點都不友好。

先說一下,python2.7的用戶,可以直接在openCV的官網(wǎng)上直接下載,然后在openCV的build\python

的目錄下,根據(jù)自己的情況,選擇x86,x64下的cv2.pyd放到你python的安裝目錄的

\Lib\site-packages\下。

至于python3.4的用戶,即有點特別。你可以在StackOverFlow找到這樣

和這樣的答案,但我們不要這么麻煩。

進入這個網(wǎng)站,下載openCV相關(guān)whl文件,例如

opencv_python-3.1.0-cp35-none-win_amd64.whl

然后再對應(yīng)目錄下使用pip install opencv_python-3.1.0-cp35-none-win_amd64.whl命令即可

安裝完成后,可以在python的命令行下測試。

import cv2

如果沒有報錯的話,恭喜你安裝成功。

不過無論是哪個版本的用戶,在python上使用openCV都需要先安裝numpy這個模塊。

人臉識別的原理

opencv的人臉識別是基于了haar特征,關(guān)于什么叫haar特征,足以開另外一篇文章說明了,礙于篇幅,這里不做介紹。

opencv提供已經(jīng)訓(xùn)練好的數(shù)據(jù)寫成了xml文件,放在了opencv\sources\data\haarcascades的目錄下。

如果只是安裝了opencv_python-3.1.0-cp35-none-win_amd64.whl的,可以在我的github上,下載cvdata里面的內(nèi)容

,地址會在文章底部給出。

除了人臉識別的數(shù)據(jù)外,還有人眼,上半身,下半身……等人體特征的數(shù)據(jù),觀察xml文件的命名,不難見名知義。

接下來會介紹如何利用這個已經(jīng)訓(xùn)練好的數(shù)據(jù),如果仍對haar模型感興趣,可以參考以下地址。

如何使用訓(xùn)練好的數(shù)據(jù)

先講關(guān)于openCV基本的一些操作。全部具體代碼,請查看我的github。

讀入一張圖片

cv2.imread(path)

如果你用type()把其返回值的類型是numpy.ndarray。

而同樣,numpy.asarray(Image)返回的亦是numpy.ndarray對象,為什么強調(diào)這兩點?

cv2.imread(path)不能讀取中文路徑,若路徑中含有中文字符,其會返回None

在后面的操作中,包括是切割圖片(人臉部分),再進行局部哈希,比較相似度,

等等都是用Image對象進行操作,如果再用Image.open()讀入圖片未免顯得麻煩。

所以干脆統(tǒng)一用Image.open()打開圖片,再用numpy.asarray(Image)轉(zhuǎn)化即可。

需要注意有一個不同的地方是雖然其返回的也是三維數(shù)組,但在第三維,即某個坐標下的RGB值,兩個矩陣的順序是反的,但只要另外編寫一個小函數(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,說明不是灰度圖,先轉(zhuǎn)化為灰度圖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ū)域的寬度和高度。

下一步操作

通過上述的方法,我們就已經(jīng)獲取到人臉的位置,下一步你可以通過ImageDraw`對象進行繪圖,框出人臉的位置。

同樣,你也可以使用Image的crop方法把人臉部分提取出來,然后進行局部哈希,

通過上一篇文章提及的算法,比較兩者的相似度。

兩種操作分別在我的github中實現(xiàn)了,請參考我的github中face1.py,和face2.py兩個python文件。

寫一只具有識別能力的圖片爬蟲

在上一篇文章中,我說了會應(yīng)用這些算法做成以只具有識別能力的圖片爬蟲,然現(xiàn)在我也確實是在做

但考慮到作為核心的圖片識別和人臉識別的部分我已經(jīng)寫成文章分享出來,其余部分就是想寫其他爬蟲一樣而已,所以我決定看看這兩篇文章的反響后再決定是否繼續(xù)該系列,把圖片爬蟲的制作過程和大家分享一下。

總結(jié)

鑒于個人實力有限,本文未能詳細說明人臉識別的原理,

但總結(jié)了如何利用已經(jīng)訓(xùn)練好的數(shù)據(jù)進行人臉識別,希望能幫到有需要的朋友。

如有不足之處,歡迎提出。

本文涉及內(nèi)容的詳細代碼在下面的github地址。

歡迎star,也歡迎給意見

本文參考文章

總結(jié)

以上是生活随笔為你收集整理的python识图找图_利用python进行识别相似图片(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。