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

python利用Opencv實(shí)現(xiàn)人臉識(shí)別功能

 更新時(shí)間:2019年04月25日 15:11:51   作者:wsywb111  
這篇文章主要為大家詳細(xì)介紹了python利用Opencv實(shí)現(xiàn)人臉識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python利用Opencv實(shí)現(xiàn)人臉識(shí)別功能的具體代碼,供大家參考,具體內(nèi)容如下

首先:需要在在自己本地安裝opencv具體步驟可以問度娘

如果從事于開發(fā)中的話建議用第三方的人臉識(shí)別(推薦阿里)

1、視頻流中進(jìn)行人臉識(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使用人臉識(shí)別分類器
  classfier = cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml")
 
  # 識(shí)別出人臉后要畫的邊框的顏色,RGB格式
  color = (0, 255, 0)
 
  count=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è)到人臉
      count=count+1
  return count
 
 
if __name__ == '__main__':
  result=CatchUsbVideo("識(shí)別人臉區(qū)域", '2222.mp4')
  if result>0:
    print('視頻中有人??!')
  else:
    print('視頻中無人??!')

2、通過圖片識(shí)別人臉

#-*-coding:utf8-*-#
 
import os
import cv2
from PIL import Image,ImageDraw
from datetime import datetime
import time
 
#detectFaces()返回圖像中所有人臉的矩形坐標(biāo)(矩形左上、右下頂點(diǎn))
#使用haar特征的級(jí)聯(lián)分類器haarcascade_frontalface_default.xml,在haarcascades目錄下還有其他的訓(xùn)練好的xml文件可供選擇。
#注:haarcascades目錄下訓(xùn)練好的分類器必須以灰度圖作為輸入。
def detectFaces(image_name):
  img = cv2.imread(image_name)
  face_cascade = cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml")
  if img.ndim == 3:
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  else:
    gray = img #if語句:如果img維度為3,說明不是灰度圖,先轉(zhuǎn)化為灰度圖gray,如果不為3,也就是2,原圖就是灰度圖
 
  faces = face_cascade.detectMultiScale(gray, 1.2, 5)#1.3和5是特征的最小、最大檢測(cè)窗口,它改變檢測(cè)結(jié)果也會(huì)改變
  result = []
  for (x,y,width,height) in faces:
    result.append((x,y,x+width,y+height))
  return result
 
 
#保存人臉圖
def saveFaces(image_name):
  faces = detectFaces(image_name)
  if faces:
    #將人臉保存在save_dir目錄下。
    #Image模塊:Image.open獲取圖像句柄,crop剪切圖像(剪切的區(qū)域就是detectFaces返回的坐標(biāo)),save保存。
    save_dir = image_name.split('.')[0]+"_faces"
    os.mkdir(save_dir)
    count = 0
    for (x1,y1,x2,y2) in faces:
      file_name = os.path.join(save_dir,str(count)+".jpg")
      Image.open(image_name).crop((x1,y1,x2,y2)).save(file_name)
      count+=1
 
#在原圖像上畫矩形,框出所有人臉。
#調(diào)用Image模塊的draw方法,Image.open獲取圖像句柄,ImageDraw.Draw獲取該圖像的draw實(shí)例,然后調(diào)用該draw實(shí)例的rectangle方法畫矩形(矩形的坐標(biāo)即
#detectFaces返回的坐標(biāo)),outline是矩形線條顏色(B,G,R)。
#注:原始圖像如果是灰度圖,則去掉outline,因?yàn)榛叶葓D沒有RGB可言。drawEyes、detectSmiles也一樣。
def drawFaces(image_name):
  faces = detectFaces(image_name)
  if faces:
    img = Image.open(image_name)
    draw_instance = ImageDraw.Draw(img)
    for (x1,y1,x2,y2) in faces:
      draw_instance.rectangle((x1,y1,x2,y2), outline=(255, 0,0))
    img.save('drawfaces_'+image_name)
 
#檢測(cè)眼睛,返回坐標(biāo)
#由于眼睛在人臉上,我們往往是先檢測(cè)出人臉,再細(xì)入地檢測(cè)眼睛。故detectEyes可在detectFaces基礎(chǔ)上來進(jìn)行,代碼中需要注意“相對(duì)坐標(biāo)”。
#當(dāng)然也可以在整張圖片上直接使用分類器,這種方法代碼跟detectFaces一樣,這里不多說。
def detectEyes(image_name):
  eye_cascade = cv2.CascadeClassifier('/usr/share/opencv/haarcascades/haarcascade_eye.xml')
  faces = detectFaces(image_name)
 
  img = cv2.imread(image_name)
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  result = []
  for (x1,y1,x2,y2) in faces:
    roi_gray = gray[y1:y2, x1:x2]
    eyes = eye_cascade.detectMultiScale(roi_gray,1.3,2)
    for (ex,ey,ew,eh) in eyes:
      result.append((x1+ex,y1+ey,x1+ex+ew,y1+ey+eh))
  return result
 
 
#在原圖像上框出眼睛.
def drawEyes(image_name):
  eyes = detectEyes(image_name)
  if eyes:
    img = Image.open(image_name)
    draw_instance = ImageDraw.Draw(img)
    for (x1,y1,x2,y2) in eyes:
      draw_instance.rectangle((x1,y1,x2,y2), outline=(0, 0,255))
    img.save('draweyes_'+image_name)
 
 
#檢測(cè)笑臉
def detectSmiles(image_name):
  img = cv2.imread(image_name)
  smiles_cascade = cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_smile.xml")
  if img.ndim == 3:
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  else:
    gray = img #if語句:如果img維度為3,說明不是灰度圖,先轉(zhuǎn)化為灰度圖gray,如果不為3,也就是2,原圖就是灰度圖
 
  smiles = smiles_cascade.detectMultiScale(gray,4,5)
  result = []
  for (x,y,width,height) in smiles:
    result.append((x,y,x+width,y+height))
  return result
 
 
#在原圖像上框出笑臉
def drawSmiles(image_name):
  smiles = detectSmiles(image_name)
  if smiles:
    img = Image.open(image_name)
    draw_instance = ImageDraw.Draw(img)
    for (x1,y1,x2,y2) in smiles:
      draw_instance.rectangle((x1,y1,x2,y2), outline=(100, 100,0))
    img.save('drawsmiles_'+image_name)
 
 
if __name__ == '__main__':
  time1=datetime.now()
  result=detectFaces('9.jpg')
  time2=datetime.now()
  print("耗時(shí):"+str(time2-time1))
  if len(result)>0:
    print("有人存在!!---》人數(shù)為:"+str(len(result)))
  else:
    print('視頻圖像中無人??!')
 
  drawFaces('9.jpg')
  # drawEyes('obama.jpg')
  # drawSmiles('obama.jpg')
  # saveFaces('obama.jpg')
 
"""
上面的代碼將眼睛、人臉、笑臉在不同的圖像上框出,如果需要在同一張圖像上框出,改一下代碼就可以了。
總之,利用opencv里訓(xùn)練好的haar特征的xml文件,在圖片上檢測(cè)出人臉的坐標(biāo),利用這個(gè)坐標(biāo),我們可以將人臉區(qū)域剪切保存,也可以在原圖上將人臉框出。剪切保存人臉以及用矩形工具框出人臉,本程序使用的是PIL里的Image、ImageDraw模塊。
此外,opencv里面也有畫矩形的模塊,同樣可以用來框出人臉。
"""

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • matplotlib 生成的圖像中無法顯示中文字符的解決方法

    matplotlib 生成的圖像中無法顯示中文字符的解決方法

    這篇文章主要介紹了matplotlib 生成的圖像中無法顯示中文字符的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 一文教你如何使用Python繪制瀑布圖

    一文教你如何使用Python繪制瀑布圖

    什么是瀑布圖?瀑布圖用表達(dá)兩個(gè)數(shù)值之間的變化過程,過程值為正的時(shí)候,向上加,過程值為負(fù)的時(shí)候向下減。本文就帶大家學(xué)習(xí)一下如何用Python繪制瀑布圖吧
    2023-04-04
  • pytest+request框架中yaml配置文件使用

    pytest+request框架中yaml配置文件使用

    pytest+request框架寫接口測(cè)試自動(dòng)化,使用yaml文件配置更方便管理用例中的數(shù)據(jù),本文主要介紹了pytest+request框架中yaml配置文件使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • django authenticate用戶身份認(rèn)證的項(xiàng)目實(shí)踐

    django authenticate用戶身份認(rèn)證的項(xiàng)目實(shí)踐

    Django的contrib.auth模塊中的authenticate()函數(shù)用于對(duì)用戶的憑據(jù)進(jìn)行身份驗(yàn)證,本文就來介紹一下django authenticate用戶身份認(rèn)證的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Python輸入二維數(shù)組方法

    Python輸入二維數(shù)組方法

    下面小編就為大家分享一篇Python輸入二維數(shù)組方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python使用Pillow添加水印

    Python使用Pillow添加水印

    這篇文章主要為大家詳細(xì)介紹了Python使用Pillow添加水印,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • jupyter?notebook?中使用ipython?魔法指令的詳細(xì)過程

    jupyter?notebook?中使用ipython?魔法指令的詳細(xì)過程

    在?Jupyter?Notebook?中,IPython?魔法指令為數(shù)據(jù)分析和探索提供了很多便利,這篇文章主要介紹了jupyter?notebook?中使用ipython?魔法指令的詳細(xì)過程,需要的朋友可以參考下
    2024-06-06
  • Python數(shù)據(jù)類型轉(zhuǎn)換詳解

    Python數(shù)據(jù)類型轉(zhuǎn)換詳解

    本篇文章里小編給大家整理的是關(guān)于Python中常用數(shù)據(jù)類型之間的轉(zhuǎn)換相關(guān)知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下,希望能夠給你帶來幫助
    2021-10-10
  • python實(shí)現(xiàn)SOM算法

    python實(shí)現(xiàn)SOM算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)SOM算法,聚類算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Python ORM框架SQLAlchemy學(xué)習(xí)筆記之安裝和簡(jiǎn)單查詢實(shí)例

    Python ORM框架SQLAlchemy學(xué)習(xí)筆記之安裝和簡(jiǎn)單查詢實(shí)例

    這篇文章主要介紹了Python ORM框架SQLAlchemy學(xué)習(xí)筆記之安裝和簡(jiǎn)單查詢實(shí)例,簡(jiǎn)明入門教程,需要的朋友可以參考下
    2014-06-06

最新評(píng)論