1. 程式人生 > 程式設計 >python3.8動態人臉識別的實現示例

python3.8動態人臉識別的實現示例

一、準備依賴庫

pip install dlib
pip python-opencv

二、程式碼實現

#coding: utf-8
"""
從視屏中識別人臉,並實時標出面部特徵點
"""
import dlib           #人臉識別的庫dlib

import cv2           #影象處理的庫OpenCv

# 使用特徵提取器get_frontal_face_detector
detector = dlib.get_frontal_face_detector()
# 讀入視訊檔案
# cap = cv2.VideoCapture("row.MP4")
#建cv2攝像頭物件,這裡使用電腦自帶攝像頭,如果接了外部攝像頭,則自動切換到外部攝像頭
cap = cv2.VideoCapture(0)

# 設定視訊引數,propId設定的視訊引數,value設定的引數值
cap.set(3,480)
# 截圖screenshoot的計數器
cnt = 0
# cap.isOpened() 返回true/false 檢查初始化是否成功
while(cap.isOpened()):

  # cap.read()
  # 返回兩個值:
  #  一個布林值true/false,用來判斷讀取視訊是否成功/是否到視訊末尾
  #  影象物件,影象的三維矩陣
  flag,im_rd = cap.read()

  # 每幀資料延時1ms,延時為0讀取的是靜態幀
  k = cv2.waitKey(1)

  # 取灰度
  img_gray = cv2.cvtColor(im_rd,cv2.COLOR_RGB2GRAY)

  # 使用人臉檢測器檢測每一幀影象中的人臉。並返回人臉數rects
  faces = detector(img_gray,0)

  # 待會要顯示在螢幕上的字型
  font = cv2.FONT_HERSHEY_SIMPLEX

  # 如果檢測到人臉
  if(len(faces)!=0):

    # 對每個人臉都畫出框框
    for i in range(len(faces)):
      # enumerate方法同時返回資料物件的索引和資料,k為索引,d為faces中的物件
      for k,d in enumerate(faces):
        # 用紅色矩形框出人臉
        cv2.rectangle(im_rd,(d.left(),d.top()),(d.right(),d.bottom()),(0,255,0),2)
        # 計算人臉熱別框邊長
        face_width = d.right() - d.left()
        #在上方顯示文字
        cv2.putText(im_rd,str(face_width),d.top()-20),font,0.5,(255,1)
    # 標出人臉數
    cv2.putText(im_rd,"Faces: "+str(len(faces)),(20,50),1,255),cv2.LINE_AA)
  else:
    # 沒有檢測到人臉
    cv2.putText(im_rd,"No Face",cv2.LINE_AA)

  # 新增說明
  im_rd = cv2.putText(im_rd,"S: screenshot",400),0.8,cv2.LINE_AA)
  im_rd = cv2.putText(im_rd,"Q: quit",450),cv2.LINE_AA)


  #檢測按鍵
  k = cv2.waitKey(1)
  # 按下s鍵截圖儲存
  if (k == ord('s')):
    cnt+=1
    cv2.imwrite("screenshoot"+str(cnt)+".jpg",im_rd)
  # 按下q鍵退出
  if(k == ord('q')):
    break

  # 視窗顯示
  cv2.imshow("camera",im_rd)

# 釋放攝像頭
cap.release()
# 刪除建立的視窗
cv2.destroyAllWindows()

三、實驗結果

python3.8動態人臉識別的實現示例

到此這篇關於python3.8動態人臉識別的實現示例的文章就介紹到這了,更多相關python3.8動態人臉識別內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!