close

為了將圖片數據轉換為合適 AI練習的花式,利用 OpenCV先對面部進行辨識,然後將面部數據另存為同一的花式。

  1. import cv2
  2.  
  3. face_cascade = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_default.xml')
  4. eye_cascade = cv2.CascadeClassifier('./cascades/haarcascade_eye.xml')
  5.  
  6. def detect(filename):
  7.     img = cv2.imread(filename)
  8.     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  9.     faces = face_cascade.detectMultiScale(gray,
  10.                                           scaleFactor=1.2,
  11.                                           minNeighbors=3,)
  12.     for (x,y,w,h) in faces:
  13.         roi_gray = gray[y:y+h, x:x+w]
  14.         eyes = eye_cascade.detectMultiScale(roi_gray,
  15.                                             scaleFactor=1.02,
  16.                                             minNeighbors=3,
  17.                                             minSize=(40,40),)
  18.         img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
  19.         for (ex,ey,ew,eh) in eyes:
  20.             img = cv2.rectangle(img,(x+ex,y+ey),(x+ex+ew,y+ey+eh),(0,255,0),2)
  21.     cv2.imwrite('./tzuyu_face.jpg', img)
  22.  
  23. detect('tzuyu.jpg')
複製代碼


使用 cv2.CascadeClassifier導入辨識東西,其中選擇了面部和眼睛的辨識對象。
讀取圖象數據後,轉為灰階,行使detectMultiScale做臉部和眼睛的辨識。
detectMultiScale中的數據參數分別是

  • 圖片數據
  • ScaleFactor:每次搜索方塊削減的比例
  • minNeighbers:每一個方針最少檢測到幾次以上,才可被認定是真數據。
  • minSize:設定數據搜索的最小尺寸 ,如 minSize=(40,40)
     

行使 cv2.rectangle把辨識到的面部或眼睛進行標注,參數依序是

  • 圖片數據
  • 兩個對角座標
  • 線的色彩
  • 線的粗細
     

第一個迴圈中先利用以辨識的面部再進行眼睛的辨識。
此中 Haar級聯數據可以從這裡下載。裡面提供了各類辨識的東西。網頁設計
別的也能夠使用 LBP級聯數據,可以從這裡下載。

先試看看子瑜女神,有無舉措被辨識。

 

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設


Python 哄騙 OpenCV抓取相片中的面部數據 網頁設 Python 哄騙 OpenCV抓取相片中的面部數據 網頁設
子瑜女神看來起來辨識滿成功的。
接著看看失敗的例子,用了同樣的參數辨識一下 Twice和愉快伙伴們?

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設
Python 哄騙 OpenCV抓取相片中的面部數據 網頁設Python 哄騙 OpenCV抓取相片中的面部數據 網頁設Python 哄騙 OpenCV抓取相片中的面部數據 網頁設
看來挺失敗的,娜璉和其中兩位愉快伙伴完全沒有辨識出臉,眼睛的部分大多都沒有辨識成功。為了辨識成功,可能需要調劑一下參數。至於如何避免 OpenCV混淆眼睛和嘴,本人今朝沒有對策,求高手指導。不外還好團體照不是我要辨識的主要目的。
接著點竄 detect,把辨識出的臉,另存為供 AI訓練的圖象。

  1. import cv2
  2.  
  3. face_cascade = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_default.xml')
  4. eye_cascade = cv2.CascadeClassifier('./cascades/haarcascade_eye.xml')
  5.  
  6. face_filename = 1
  7. def detect(filename):
  8.     img = cv2.imread(filename)
  9.     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  10.     faces = face_cascade.detectMultiScale(gray,
  11.                                           scaleFactor=1.2,
  12.                                           minNeighbors=3,)
  13.     for (x,y,w,h) in faces:
  14.         roi_gray = gray[y:y+h, x:x+w]
  15.         eyes = eye_cascade.detectMultiScale(roi_gray,
  16.                                             scaleFactor=1.02,
  17.                                             minNeighbors=3,)
  18.         if len(eyes)>=2:
  19.             f = cv2.resize(gray[y:y+h, x:x+w], (200, 200))
  20.             global face_filename
  21.             name = './face/%d.png' % face_filename
  22.             cv2.imwrite(name, f)
  23.             face_filename += 1
  24.         else:
  25.             pass
  26.     print('Working with %s' % filename)
複製代碼

對面部和眼睛進行辨識,最少辨識出兩隻眼睛(不管對錯)才進行儲存,輸出為 200x200的 png格式。
我沒有設定minSize,因為我的數據有點少解析度落差也很大,所以不想要太嚴酷。

  1. import os
  2.  
  3. img_list = []
  4. for fileNames in os.walk("."):
  5.     filename_extension = ['.jpg', '.png', '.jpeg', '.JPG', '.gif']
  6.     for fe in filename_extension:
  7.         for fileName in fileNames[-1]:
  8.             if fileName.endswith(fe):
  9.                 img_list.append(fileName)
  10.  
  11. for img in img_list:
  12.     detect(img)
複製代碼

網頁設計
做法可能沒有很伶俐,操縱 os.walk把該資料夾中的各種格式的圖象名稱貯存成 list,再行使迴圈對圖象一個個辨識。
無論原圖解析度若何,全都會輸出同一的花式,輸出的圖像如下。

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設 Python 哄騙 OpenCV抓取相片中的面部數據 網頁設 Python 哄騙 OpenCV抓取相片中的面部數據 網頁設 Python 哄騙 OpenCV抓取相片中的面部數據 網頁設 

8.png (40 KB, 下載次數: 6)

下載附件  保留到相冊

Python OpenCV 面部數據

網頁設計

2021-11-23 22:51 上傳

 
網頁設計

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設 

 

 

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設

Python 哄騙 OpenCV抓取相片中的面部數據 網頁設

文章出處

arrow
arrow
    文章標籤
    網頁設計
    全站熱搜
    創作者介紹
    創作者 basilkft16d7 的頭像
    basilkft16d7

    慧晟數位科技

    basilkft16d7 發表在 痞客邦 留言(0) 人氣()