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=(33))

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 - INFOReading image...
2018-09-18 10:35:31,261 - INFODetect faces...
2018-09-18 10:35:32,122 - INFOFind 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=(33))

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 - INFOReading image...
2018-09-18 10:43:00,585 - INFODetect faces...
2018-09-18 10:43:01,741 - INFOFind 1 face.

貓臉檢測后的效果如下:


怎么樣,是不是感覺萌萌的?

總結

  本文主要介紹了OpenCV在人臉檢測和貓臉檢測方面的應用,並且給出了具體的Python代碼。
  那么,能檢測人臉和貓臉,我們又能做些什么呢?其實,我們如果繼續探究下去,可以做不少的事情,比如結合深度學習的模型,比如CNN等,可以實現人臉識別啊,物體檢測,自動給圖像打標簽等。后續,筆者將會給出這些具體應用的一些實例,歡迎大家交流~

注意:本人現已開通微信公眾號: 輕松學會Python爬蟲(微信號為:easy_web_scrape), 歡迎大家關注哦~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM