欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

#-*- 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() #讀取一幀數(shù)據(jù)
    if not ok:      
      break     #將當前幀轉(zhuǎn)換成灰度圖像    grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)         
    
    #人臉檢測,1.2和2分別為圖片縮放比例和需要檢測的有效點數(shù)
    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("識別人臉區(qū)域", int(sys.argv[1]))

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

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

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

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

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

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

#人臉檢測,1.2和2分別為圖片縮放比例和需要檢測的有效點數(shù)
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()即是完成實際人臉識別工作的函數(shù),該函數(shù)參數(shù)說明如下:

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

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

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

minSize:特征檢測點的最小值

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

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

總結(jié)

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

相關(guān)文章

  • 使用Python插入SVG到PDF文檔中的方法示例

    使用Python插入SVG到PDF文檔中的方法示例

    將SVG(可縮放矢量圖形)文件插入到PDF(便攜式文檔格式)文件中不僅能夠保留SVG圖像的矢量特性,確保圖像在任何分辨率下都保持清晰,使得技術(shù)文檔、手冊、報告等內(nèi)容更加豐富多樣且易于傳播,本文將介紹如何使用Python插入SVG文件到PDF文檔中,需要的朋友可以參考下
    2024-08-08
  • 詳解 Python中LEGB和閉包及裝飾器

    詳解 Python中LEGB和閉包及裝飾器

    這篇文章主要介紹了詳解 Python中LEGB和閉包及裝飾器的相關(guān)資料,主要介紹了函數(shù)作用域和閉包的理解和使用方法及Python中的裝飾器,需要的朋友可以參考下
    2017-08-08
  • Pandas實現(xiàn)自定義Excel格式并導出多個sheet表

    Pandas實現(xiàn)自定義Excel格式并導出多個sheet表

    pandas默認整合XlsxWriter驅(qū)動,可以自動化處理excel操作,并提供公式、設(shè)置單元格格式、可視化分析圖片等操作,本文就來和大家詳細聊聊
    2023-05-05
  • Python Numpy學習之索引及切片的使用方法

    Python Numpy學習之索引及切片的使用方法

    數(shù)組中的元素可以通過索引以及切片的手段進行訪問或者修改,和列表的切片操作一樣。本文將詳細為大家介紹一下Python中的科學計算庫-Numpy的索引及切片的使用方法
    2022-01-01
  • python尋找list中最大值、最小值并返回其所在位置的方法

    python尋找list中最大值、最小值并返回其所在位置的方法

    今天小編就為大家分享一篇python尋找list中最大值、最小值并返回其所在位置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 如何利用python讀取micaps文件詳解

    如何利用python讀取micaps文件詳解

    這篇文章主要給大家介紹了關(guān)于如何利用python讀取micaps文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Flask框架運用Ajax實現(xiàn)輪詢動態(tài)繪圖

    Flask框架運用Ajax實現(xiàn)輪詢動態(tài)繪圖

    Ajax是異步JavaScript和XML可用于前后端交互,本文將通過Ajax輪詢獲取后端的數(shù)據(jù),前臺使用echart繪圖庫進行圖形的生成與展示,最后實現(xiàn)動態(tài)監(jiān)控內(nèi)存利用率的這個功能,需要的可以參考一下
    2022-11-11
  • Django權(quán)限設(shè)置及驗證方式

    Django權(quán)限設(shè)置及驗證方式

    這篇文章主要介紹了Django權(quán)限設(shè)置及驗證方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python BlockingScheduler定時任務及其他方式的實現(xiàn)

    python BlockingScheduler定時任務及其他方式的實現(xiàn)

    這篇文章主要介紹了python BlockingScheduler定時任務及其他方式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)根據(jù)字段將記錄分組操作示例

    Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)根據(jù)字段將記錄分組操作示例

    這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)根據(jù)字段將記錄分組操作,結(jié)合實例形式分析了itertools.groupby()函數(shù)針對字典進行分組操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-03-03

最新評論