做法可能沒有很伶俐,利用 os.walk把該資料夾中的各種格式的圖象名稱儲存成 list,再利用迴圈對圖像一個個辨識。
無論原圖解析度若何,全城市輸出統一的格式,輸出的圖像以下。

網站架設 Python 操縱 OpenCV抓取相片中的臉部數 網站架設 Python 操縱 OpenCV抓取相片中的臉部數 網站架設 Python 操縱 OpenCV抓取相片中的臉部數 網站架設 Python 操縱 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. 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)
複製代碼
  • 圖片數據
  • ScaleFactor:每次搜索方塊削減的比例
  • minNeighbers:每個方針至少檢測到幾次以上,才可被認定是真數據。
  • minSize:設定命據搜索的最小尺寸 ,如 minSize=(40,40)
     

為了將圖片數據轉換為合適 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')
複製代碼

網站架設 Python 操縱 OpenCV抓取相片中的臉部數

文章出處

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

下載附件  保留到相冊

2021-11-23 22:51 上傳

 

網站架設 Python 操縱 OpenCV抓取相片中的臉部數 

 

 

網站架設 Python 操縱 OpenCV抓取相片中的臉部數

網站架設 Python 操縱 OpenCV抓取相片中的臉部數

網站架設 Python 操縱 OpenCV抓取相片中的臉部數

網站架設 Python 操縱 OpenCV抓取相片中的臉部數

網站架設 Python 操縱 OpenCV抓取相片中的臉部數

網站架設 Python 操縱 OpenCV抓取相片中的臉部數

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

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


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

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

  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)
複製代碼

第一個迴圈中先操縱以辨識的面部再進行眼睛的辨識。
此中 Haar級聯數據可以從這裡下載。裡面提供了各類辨識的工具。
別的也可以使用 LBP級聯數據,可以從這裡下載。

先試看看子瑜女神,有無門徑被辨識。

Python OpenCV 面部數據

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

 

網站架設 Python 操縱 OpenCV抓取相片中的臉部數

網站架設 Python 操縱 OpenCV抓取相片中的臉部數


哄騙 cv2.CascadeClassifier導入辨識東西,個中選擇了臉部和眼睛的辨識東西。
讀取圖像數據後,轉為灰階,利用detectMultiScale做面部和眼睛的辨識。
detectMultiScale中的數據參數分別是

網站架設
arrow
arrow
    文章標籤
    網站架設
    全站熱搜
    創作者介紹
    創作者 ramonj147nw 的頭像
    ramonj147nw

    新竹網站架設

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