日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python人脸识别方法_python实现人脸识别代码

發布時間:2023/12/9 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python人脸识别方法_python实现人脸识别代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python 的 python實現人臉識別代碼

從實時視頻流中識別出人臉區域,從原理上看,其依然屬于機器學習的領域之一,本質上與谷歌利用深度學習識別出貓沒有什么區別。程序通過大量的人臉圖片數據進行訓練,利用數學算法建立建立可靠的人臉特征模型,如此即可識別出人臉。幸運的是,這些工作OpenCV已經幫我們做了,我們只需調用對應的API函數即可,先給出代碼:

#-*- coding: utf-8 -*-

import cv2

import sys

from PIL import Image

def CatchUsbVideo(window_name, camera_idx):

cv2.namedWindow(window_name)

#視頻來源,可以來自一段已存好的視頻,也可以直接來自USB攝像頭

cap = cv2.VideoCapture(camera_idx)

#告訴OpenCV使用人臉識別分類器

classfier = cv2.CascadeClassifier("/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml")

#識別出人臉后要畫的邊框的顏色,RGB格式

color = (0, 255, 0)

while cap.isOpened():

ok, frame = cap.read() #讀取一幀數據

if not ok:

break #將當前幀轉換成灰度圖像 grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

#人臉檢測,1.2和2分別為圖片縮放比例和需要檢測的有效點數

faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))

if len(faceRects) > 0: #大于0則檢測到人臉

for faceRect in faceRects: #單獨框出每一張人臉

x, y, w, h = faceRect

cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)

#顯示圖像

cv2.imshow(window_name, frame)

c = cv2.waitKey(10)

if c & 0xFF == ord('q'):

break

#釋放攝像頭并銷毀所有窗口

cap.release()

cv2.destroyAllWindows()

if __name__ == '__main__':

if len(sys.argv) != 2:

print("Usage:%s camera_id\r\n" % (sys.argv[0]))

else:

CatchUsbVideo("識別人臉區域", int(sys.argv[1]))

先看一下程序輸出結果:

程序正確的識別出了我的臉,加上空白行不到50行代碼,還是很簡單的。當然,絕大部分的工作OpenCV已經默默地替我們做了,所以我們用起來才這么簡單。關于代碼有幾個地方需要重點交代,首先就是人臉分類器這行:

#告訴OpenCV使用人臉識別分類器

classfier = cv2.CascadeClassifier("/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml")

這行代碼指定OpenCV選擇使用哪種分類器(注意,一定習慣分類這個說法,ML的監督學習研究的就是各種分類問題),OpenCV提供了多種分類器:

上圖為我的電腦上安裝的OpenCV3.2提供的所有分類器,有識別眼睛的(甚至包括左右眼),有識別身體的,有識別笑臉的,甚至還有識別貓臉的,有興趣的可以逐個試試。關于人臉識別,OpenCV提供多個分類器選擇使用,其中haarcascade_frontalface_alt_tree.xml是最嚴格的分類器,光線、帶個帽子都有可能識別不出人臉。其它的稍微好點,default那個識別最寬松,某些情況下我家里的燈籠都會被識別成人臉;)。另外安裝環境不同,分類器的安裝路徑也有可能不同,請在安裝完OpenCV后根據分類器的實際安裝路徑修改代碼。另外再多說一句,如果我們想構建自己的分類器,比如檢測火焰(火災報警)、汽車(確定路口汽車數量),我們依然可以使用OpenCV訓練構建,詳細說明參見OpenCV的官方文檔。

接下來解釋如下幾行代碼:

#人臉檢測,1.2和2分別為圖片縮放比例和需要檢測的有效點數

faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))

if len(faceRects) > 0: #大于0則檢測到人臉

for faceRect in faceRects: #單獨框出每一張人臉

x, y, w, h = faceRect

cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)

其中classfier.detectMultiScale()即是完成實際人臉識別工作的函數,該函數參數說明如下:

grey:要識別的圖像數據(即使不轉換成灰度也能識別,但是灰度圖可以降低計算強度,因為檢測的依據是哈爾特征,轉換后每個點的RGB數據變成了一維的灰度,這樣計算強度就減少很多)

scaleFactor:圖像縮放比例,可以理解為同一個物體與相機距離不同,其大小亦不同,必須將其縮放到一定大小才方便識別,該參數指定每次縮放的比例

minNeighbors:對特征檢測點周邊多少有效點同時檢測,這樣可避免因選取的特征檢測點太小而導致遺漏

minSize:特征檢測點的最小值

對同一個畫面有可能出現多張人臉,因此,我們需要用一個for循環將所有檢測到的人臉都讀取出來,然后逐個用矩形框框出來,這就是接下來的for語句的作用。Opencv會給出每張人臉在圖像中的起始坐標(左上角,x、y)以及長、寬(h、w),我們據此就可以截取出人臉。其中,cv2.rectangle()完成畫框的工作,在這里我有意識的外擴了10個像素以框出比人臉稍大一點的區域。cv2.rectangle()函數的最后兩個參數一個用于指定矩形邊框的顏色,一個用于指定矩形邊框線條的粗細程度。

好了,人臉識別的事說清楚了,下一篇該講講如何準備訓練數據了,只有訓練數據足夠多,我們的程序才能識別出這是誰,而不是無論青紅皂白框個人臉就完事。

總結

以上就是本文關于python實現人臉識別代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站:、、等,有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!

總結

以上是生活随笔為你收集整理的python人脸识别方法_python实现人脸识别代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。