最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)人臉識(shí)別代碼

 更新時(shí)間:2017年11月08日 16:14:51   作者:Neo-T  
這篇文章主要介紹了python實(shí)現(xiàn)人臉識(shí)別代碼,還是比較不錯(cuò)的,這里分享個(gè)大家,共需要的朋友參考。

從實(shí)時(shí)視頻流中識(shí)別出人臉區(qū)域,從原理上看,其依然屬于機(jī)器學(xué)習(xí)的領(lǐng)域之一,本質(zhì)上與谷歌利用深度學(xué)習(xí)識(shí)別出貓沒(méi)有什么區(qū)別。程序通過(guò)大量的人臉圖片數(shù)據(jù)進(jìn)行訓(xùn)練,利用數(shù)學(xué)算法建立建立可靠的人臉特征模型,如此即可識(shí)別出人臉。幸運(yùn)的是,這些工作OpenCV已經(jīng)幫我們做了,我們只需調(diào)用對(duì)應(yīng)的API函數(shù)即可,先給出代碼:

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

import cv2
import sys
from PIL import Image

def CatchUsbVideo(window_name, camera_idx):
  cv2.namedWindow(window_name)
  
  #視頻來(lái)源,可以來(lái)自一段已存好的視頻,也可以直接來(lái)自USB攝像頭
  cap = cv2.VideoCapture(camera_idx)        
  
  #告訴OpenCV使用人臉識(shí)別分類器
  classfier = cv2.CascadeClassifier("/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml")
  
  #識(shí)別出人臉后要畫的邊框的顏色,RGB格式
  color = (0, 255, 0)
    
  while cap.isOpened():
    ok, frame = cap.read() #讀取一幀數(shù)據(jù)
    if not ok:      
      break     #將當(dāng)前幀轉(zhuǎn)換成灰度圖像    grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)         
    
    #人臉檢測(cè),1.2和2分別為圖片縮放比例和需要檢測(cè)的有效點(diǎn)數(shù)
    faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
    if len(faceRects) > 0:      #大于0則檢測(cè)到人臉                  
      for faceRect in faceRects: #單獨(dú)框出每一張人臉
        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("識(shí)別人臉區(qū)域", int(sys.argv[1]))

先看一下程序輸出結(jié)果:

程序正確的識(shí)別出了我的臉,加上空白行不到50行代碼,還是很簡(jiǎn)單的。當(dāng)然,絕大部分的工作OpenCV已經(jīng)默默地替我們做了,所以我們用起來(lái)才這么簡(jiǎn)單。關(guān)于代碼有幾個(gè)地方需要重點(diǎn)交代,首先就是人臉?lè)诸惼鬟@行:

#告訴OpenCV使用人臉識(shí)別分類器
classfier = cv2.CascadeClassifier("/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml")

這行代碼指定OpenCV選擇使用哪種分類器(注意,一定習(xí)慣分類這個(gè)說(shuō)法,ML的監(jiān)督學(xué)習(xí)研究的就是各種分類問(wèn)題),OpenCV提供了多種分類器:

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

接下來(lái)解釋如下幾行代碼:

#人臉檢測(cè),1.2和2分別為圖片縮放比例和需要檢測(cè)的有效點(diǎn)數(shù)
faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
if len(faceRects) > 0:     #大于0則檢測(cè)到人臉                  
  for faceRect in faceRects: #單獨(dú)框出每一張人臉
    x, y, w, h = faceRect    
    cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)

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

grey:要識(shí)別的圖像數(shù)據(jù)(即使不轉(zhuǎn)換成灰度也能識(shí)別,但是灰度圖可以降低計(jì)算強(qiáng)度,因?yàn)闄z測(cè)的依據(jù)是哈爾特征,轉(zhuǎn)換后每個(gè)點(diǎn)的RGB數(shù)據(jù)變成了一維的灰度,這樣計(jì)算強(qiáng)度就減少很多)

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

minNeighbors:對(duì)特征檢測(cè)點(diǎn)周邊多少有效點(diǎn)同時(shí)檢測(cè),這樣可避免因選取的特征檢測(cè)點(diǎn)太小而導(dǎo)致遺漏

minSize:特征檢測(cè)點(diǎn)的最小值

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

好了,人臉識(shí)別的事說(shuō)清楚了,下一篇該講講如何準(zhǔn)備訓(xùn)練數(shù)據(jù)了,只有訓(xùn)練數(shù)據(jù)足夠多,我們的程序才能識(shí)別出這是誰(shuí),而不是無(wú)論青紅皂白框個(gè)人臉就完事。

總結(jié)

以上就是本文關(guān)于python實(shí)現(xiàn)人臉識(shí)別代碼的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:python通過(guò)socket實(shí)現(xiàn)多個(gè)連接并實(shí)現(xiàn)ssh功能詳解、Python基礎(chǔ)練習(xí)之用戶登錄實(shí)現(xiàn)代碼分享Python入門之三角函數(shù)全解【收藏】等,有什么問(wèn)題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Python matplotlib安裝和使用的完整教程

    Python matplotlib安裝和使用的完整教程

    Python Matplotlib是一個(gè)強(qiáng)大的數(shù)據(jù)可視化庫(kù),它允許用戶創(chuàng)建各種類型的靜態(tài)、動(dòng)態(tài)圖表和圖形,Matplotlib基于NumPy和Pandas等科學(xué)計(jì)算庫(kù),提供了豐富的繪圖選項(xiàng),本文介紹了Python matplotlib安裝和使用的完整教程,需要的朋友可以參考下
    2024-07-07
  • Python反射操作對(duì)象屬性方法詳解

    Python反射操作對(duì)象屬性方法詳解

    這篇文章主要介紹了Python反射操作對(duì)象屬性方法詳解,在Python面對(duì)對(duì)象中,通過(guò)字符串的形式去操作對(duì)象的屬性方法就稱之為反射(在Python中一切事物都是可以為對(duì)象),需要的朋友可以參考下
    2023-08-08
  • Python列表推導(dǎo)式的基本操作詳解

    Python列表推導(dǎo)式的基本操作詳解

    Python?的列表推導(dǎo)式,這個(gè)看似簡(jiǎn)單的語(yǔ)法糖,實(shí)則內(nèi)含無(wú)限威力,本文將從基礎(chǔ)的概念認(rèn)識(shí),到各類進(jìn)階的用法和操作,更深入地探討列表推導(dǎo)式,希望對(duì)大家有所幫助
    2023-06-06
  • Python使用DrissionPage實(shí)現(xiàn)網(wǎng)頁(yè)自動(dòng)化采集

    Python使用DrissionPage實(shí)現(xiàn)網(wǎng)頁(yè)自動(dòng)化采集

    DrissionPage 是一個(gè)基于 python 的網(wǎng)頁(yè)自動(dòng)化工具,它既能控制瀏覽器,也能收發(fā)數(shù)據(jù)包,還能把兩者合而為一,可兼顧瀏覽器自動(dòng)化的便利性和 requests 的高效率,本文給大家介紹了Python使用DrissionPage實(shí)現(xiàn)網(wǎng)頁(yè)自動(dòng)化采集,需要的朋友可以參考下
    2025-03-03
  • OpenCV之理解KNN鄰近算法k-Nearest?Neighbour

    OpenCV之理解KNN鄰近算法k-Nearest?Neighbour

    這篇文章主要為大家介紹了OpenCV之理解KNN鄰近算法k-Nearest?Neighbour,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 基于python實(shí)現(xiàn)簡(jiǎn)單日歷

    基于python實(shí)現(xiàn)簡(jiǎn)單日歷

    這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)簡(jiǎn)單日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Tkinter組件實(shí)現(xiàn)Radiobutton的示例

    Tkinter組件實(shí)現(xiàn)Radiobutton的示例

    Radiobutton組件用于實(shí)現(xiàn)多選一的問(wèn)題,本文主要介紹了Tkinter組件實(shí)現(xiàn)Radiobutton的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python輸入的多種情況超詳細(xì)解讀(單行、多行及數(shù)組)

    Python輸入的多種情況超詳細(xì)解讀(單行、多行及數(shù)組)

    對(duì)于 Python 來(lái)說(shuō)有多種方式可以輸入數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python輸入的多種情況超詳細(xì)解讀,分別是單行、多行及數(shù)組,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)

    python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)

    這篇文章主要介紹了python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • Python發(fā)送http請(qǐng)求解析返回json的實(shí)例

    Python發(fā)送http請(qǐng)求解析返回json的實(shí)例

    下面小編就為大家分享一篇Python發(fā)送http請(qǐng)求解析返回json的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03

最新評(píng)論

兴化市| 株洲市| 临漳县| 西吉县| 淮安市| 平武县| 绥滨县| 剑阁县| 崇礼县| 石门县| 余江县| 昂仁县| 上思县| 涿鹿县| 桑日县| 怀安县| 铜陵市| 水城县| 邳州市| 城固县| 台东市| 乌拉特前旗| 隆化县| 长武县| 壤塘县| 荣昌县| 百色市| 新蔡县| 璧山县| 南召县| 敦煌市| 电白县| 花垣县| 宁晋县| 建始县| 永济市| 准格尔旗| 泸西县| 衡东县| 兰溪市| 龙门县|