1. 程式人生 > >OpenCV神技——人臉檢測,貓臉檢測

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特徵檢測,訓練好的模型的存放網址為:

https://github.com/opencv/opencv/tree/master/data/haarcascades ,如下圖: 筆者將會介紹其中的人臉檢測(haarcascade_frontalface_default.xml)和貓臉檢測(haarcascade_frontalface.xml)。

人臉檢測

  利用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等,可以實現人臉識別啊,物體檢測,自動給影象打標籤等。後續,筆者將會給出這些具體應用的一些例項,歡迎大家交流~