圖檔人臉檢測
人臉檢測使用到的技術是OpenCV,上一節已經介紹了OpenCV的環境安裝,
點選檢視.
往期目錄
視訊人臉檢測——Dlib版(六) OpenCV添加中文(五) 圖檔人臉檢測——Dlib版(四) 視訊人臉檢測——OpenCV版(三) 圖檔人臉檢測——OpenCV版(二) OpenCV環境搭建(一)更多更新,歡迎通路我的github:
https://github.com/vipstone/faceaihttps://github.com/vipstone/faceai/blob/master/doc/jiance.md#%E5%8A%9F%E8%83%BD%E5%B1%95%E7%A4%BA 功能展示
識别一種圖上的所有人的臉,并且标出人臉的位置,畫出人眼以及嘴的位置,展示效果圖如下:

多張臉識别效果圖:
https://github.com/vipstone/faceai/blob/master/doc/jiance.md#%E6%8A%80%E6%9C%AF%E5%AE%9E%E7%8E%B0%E6%80%9D%E8%B7%AF 技術實作思路
圖檔轉換成灰色(去除色彩幹擾,讓圖檔識别更準确)
圖檔上畫矩形
使用訓練分類器查找人臉
https://github.com/vipstone/faceai/blob/master/doc/jiance.md#%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0%E4%BB%A3%E7%A0%81 具體實作代碼
圖檔轉換成灰色
使用OpenCV的cvtColor()轉換圖檔顔色,代碼如下:
import cv2
filepath = "img/xingye-1.jpg"
img = cv2.imread(filepath)
# 轉換灰色
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 顯示圖像
cv2.imshow("Image", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
使用OpenCV的rectangle()繪制矩形,代碼如下:
import cv2
filepath = "img/xingye-1.jpg"
img = cv2.imread(filepath) # 讀取圖檔
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 轉換灰色
x = y = 10 # 坐标
w = 100 # 矩形大小(寬、高)
color = (0, 0, 255) # 定義繪制顔色
cv2.rectangle(img, (x, y), (x + w, y + w), color, 1) # 繪制矩形
cv2.imshow("Image", img) # 顯示圖像
cv2.waitKey(0)
cv2.destroyAllWindows() # 釋放所有的窗體資源
在使用OpenCV的人臉檢測之前,需要一個人臉訓練模型,格式是xml的,我們這裡使用OpenCV提供好的人臉分類模型xml,下載下傳位址:
https://github.com/opencv/opencv/tree/master/data/haarcascades可全部下載下傳到本地,本人存放的路徑是:C:\Python36\Lib\site-packages\opencv-master\data\haarcascades.
完整實作代碼:
import cv2
filepath = "img/xingye-1.jpg"
img = cv2.imread(filepath) # 讀取圖檔
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 轉換灰色
# OpenCV人臉識别分類器
classifier = cv2.CascadeClassifier(
"C:\Python36\Lib\site-packages\opencv-master\data\haarcascades\haarcascade_frontalface_default.xml"
)
color = (0, 255, 0) # 定義繪制顔色
# 調用識别人臉
faceRects = classifier.detectMultiScale(
gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
if len(faceRects): # 大于0則檢測到人臉
for faceRect in faceRects: # 單獨框出每一張人臉
x, y, w, h = faceRect
# 框出人臉
cv2.rectangle(img, (x, y), (x + h, y + w), color, 2)
# 左眼
cv2.circle(img, (x + w // 4, y + h // 4 + 30), min(w // 8, h // 8),
color)
#右眼
cv2.circle(img, (x + 3 * w // 4, y + h // 4 + 30), min(w // 8, h // 8),
color)
#嘴巴
cv2.rectangle(img, (x + 3 * w // 8, y + 3 * h // 4),
(x + 5 * w // 8, y + 7 * h // 8), color)
cv2.imshow("image", img) # 顯示圖像
c = cv2.waitKey(10)
cv2.waitKey(0)
cv2.destroyAllWindows()
如果本文對你有所幫助,請打賞——1元就足夠感動我:)
聯系郵箱:[email protected]
我的GitHub:
https://github.com/vipstone關注公衆号:
作者:
王磊出處:
http://vipstone.cnblogs.com/本文版權歸作者和部落格園共有,歡迎轉載,請标明出處。