[Python]Python基於OpenCV批量提取視頻中的人臉並保存

最近在寫咱們數組圖像處理課程的人臉識別做業,須要大量的人臉數據。數組

而一個一個的照也很麻煩,因此就寫了這樣一個程序(借鑑了網上已有的視頻讀幀),咱們提早錄製好視頻app

而後程序逐幀讀取,而後分割出其中的人臉,轉換爲指定大小並轉爲灰度圖ide

效率很不錯,一個幾十秒的視頻就能提取出幾百張臉部數據(缺點就是這些臉很類似)spa

#-*- coding: UTF-8 -*-
import cv2
from PIL import Image
name = 'name'
def getface(path):
  cap = cv2.VideoCapture(path)
  classfier = cv2.CascadeClassifier("/home/coding/workspace/haarcascades/haarcascade_frontalface_alt2.xml")
  suc = cap.isOpened()  # 是否成功打開
  frame_count = 0
  out_count = 0
  while suc:
      frame_count += 1
      if out_count > 599: #最多取出多少張
        break
      suc, frame = cap.read() #讀取一幀
      params = []
      params.append(2)  # params.append(1)
      grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  #將當前楨圖像轉換成灰度圖像
      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
                image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
                image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #轉爲灰度圖
                img_new = cv2.resize(image,(47,57), interpolation = cv2.INTER_CUBIC) #處理面部的大小
                cv2.imwrite('/home/coding/workspace/Data/'+ name +'/%d.jpg' % out_count, img_new, params) #存儲到指定目錄
                out_count += 1
                print('成功提取'+ name +'的第%d個臉部'%out_count)
                break #每幀只獲取一張臉,刪除這個即爲讀出所有面部
  cap.release()
  cv2.destroyAllWindows()
  print('總幀數:', frame_count)
  print('提取臉部:',out_count)

if __name__ == '__main__':
    getface("/home/coding/workspace/Data/Videos/"+ name +".mp4") #參數爲視頻地址
相關文章
相關標籤/搜索