OpenCV神技——人臉檢測,貓臉檢測
簡介
OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以執行在Linux、Windows、Android和Mac OS作業系統上。它輕量級而且高效——由一系列 C 函式和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實現了影象處理和計算機視覺方面的很多通用演算法。
OpenCV的官方網址為:https://opencv.org/, 其Github網址為:https://github.com/opencv 。
本文將會介紹OpenCV在人臉檢測等方面的應用,使用的語言為Python。
本文介紹的人臉檢測使用OpenCV自帶的Haar特徵檢測,訓練好的模型的存放網址為:
人臉檢測
利用OpenCV的Python介面實現人臉檢測的流程如下:
- 讀取圖片
- 將圖片轉換為灰度模式,便於人臉檢測
- 利用Haar特徵檢測圖片中的人臉
- 繪製人臉的矩形區域
- 顯示人臉檢測後的圖片
示例的Python程式碼如下:
# -*- coding: utf-8 -*-
import cv2
import logging
# 設定日誌
logging.basicConfig(level = logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
logger = logging.getLogger(__name__)
# 待檢測的圖片路徑
ImagePath = 'E://zhoujielun.jpg'
# 讀取圖片
logger.info('Reading image...')
image = cv2.imread(ImagePath)
# 把圖片轉換為灰度模式
gray = cv2.cvtColor(image, cv2. COLOR_BGR2GRAY)
# 探測圖片中的人臉
logger.info('Detect faces...')
# 獲取訓練好的人臉的引數資料,進行人臉檢測
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(3, 3))
search_info = "Find %d face."%len(faces) if len(faces) <= 1 else "Find %d faces."%len(faces)
logger.info(search_info)
# 繪製人臉的矩形區域(紅色邊框)
for (x, y, w, h) in faces:
cv2.rectangle(image, (x,y), (x+w,y+h), (0,0,255), 2)
# 顯示圖片
cv2.imshow('Find faces!', image)
cv2.waitKey(0)
輸出結果如下:
2018-09-18 10:35:31,232 - INFO: Reading image...
2018-09-18 10:35:31,261 - INFO: Detect faces...
2018-09-18 10:35:32,122 - INFO: Find 1 face.
檢測後的圖片如下:
可以看到人臉檢測的效果還是不錯的。 把程式碼中的圖片換成《碟中諜6》裡面的圖片(筆者最近剛看完《碟中諜6》,強烈推薦),人臉檢測的效果如下:
貓臉檢測
人臉檢測、人臉識別是近來非常火的技術,那麼,用來識別貓臉呢?只需要把之前程式碼中的模型檔案換成haarcascade_frontalface.xml即可。完整的Python程式碼如下:
# -*- coding: utf-8 -*-
import cv2
import logging
# 設定日誌
logging.basicConfig(level = logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
logger = logging.getLogger(__name__)
# 待檢測的圖片路徑
ImagePath = 'E://cat.jpg'
# 讀取圖片
logger.info('Reading image...')
image = cv2.imread(ImagePath)
# 把圖片轉換為灰度模式
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 探測圖片中的人臉
logger.info('Detect faces...')
# 獲取訓練好的人臉的引數資料,進行人臉檢測
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalcatface.xml')
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(3, 3))
search_info = "Find %d face."%len(faces) if len(faces) <= 1 else "Find %d faces."%len(faces)
logger.info(search_info)
# 繪製人臉的矩形區域(紅色邊框)
for (x, y, w, h) in faces:
cv2.rectangle(image, (x,y), (x+w,y+h), (0,0,255), 2)
# 顯示圖片
cv2.imshow('Find faces!', image)
cv2.waitKey(0)
輸出的結果如下:
2018-09-18 10:43:00,564 - INFO: Reading image...
2018-09-18 10:43:00,585 - INFO: Detect faces...
2018-09-18 10:43:01,741 - INFO: Find 1 face.
貓臉檢測後的效果如下:
怎麼樣,是不是感覺萌萌的?
總結
本文主要介紹了OpenCV在人臉檢測和貓臉檢測方面的應用,並且給出了具體的Python程式碼。 那麼,能檢測人臉和貓臉,我們又能做些什麼呢?其實,我們如果繼續探究下去,可以做不少的事情,比如結合深度學習的模型,比如CNN等,可以實現人臉識別啊,物體檢測,自動給影象打標籤等。後續,筆者將會給出這些具體應用的一些例項,歡迎大家交流~