天天看點

圖檔人臉檢測——OpenCV版(二)圖檔人臉檢測

圖檔人臉檢測

人臉檢測使用到的技術是OpenCV,上一節已經介紹了OpenCV的環境安裝,

點選檢視

.

往期目錄

視訊人臉檢測——Dlib版(六) OpenCV添加中文(五) 圖檔人臉檢測——Dlib版(四) 視訊人臉檢測——OpenCV版(三) 圖檔人臉檢測——OpenCV版(二) OpenCV環境搭建(一)

更多更新,歡迎通路我的github:

https://github.com/vipstone/faceai

https://github.com/vipstone/faceai/blob/master/doc/jiance.md#%E5%8A%9F%E8%83%BD%E5%B1%95%E7%A4%BA 功能展示

識别一種圖上的所有人的臉,并且标出人臉的位置,畫出人眼以及嘴的位置,展示效果圖如下: 

圖檔人臉檢測——OpenCV版(二)圖檔人臉檢測

多張臉識别效果圖: 

圖檔人臉檢測——OpenCV版(二)圖檔人臉檢測

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()
      
圖檔人臉檢測——OpenCV版(二)圖檔人臉檢測

如果本文對你有所幫助,請打賞——1元就足夠感動我:)

圖檔人臉檢測——OpenCV版(二)圖檔人臉檢測
圖檔人臉檢測——OpenCV版(二)圖檔人臉檢測

聯系郵箱:[email protected]

我的GitHub:

https://github.com/vipstone

關注公衆号:

圖檔人臉檢測——OpenCV版(二)圖檔人臉檢測

作者:

王磊

出處:

http://vipstone.cnblogs.com/

本文版權歸作者和部落格園共有,歡迎轉載,請标明出處。

繼續閱讀