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 ,如下圖:

9106afa3ae36554d9d5b89d3f0955ceabb20bbf3

筆者將會介紹其中的人臉檢測(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.

檢測後的圖片如下:

d4c87062ea97cfc3a59ca1299d1bc5eec727dbc4

可以看到人臉檢測的效果還是不錯的。

把程式碼中的圖片換成《碟中諜6》裡面的圖片(筆者最近剛看完《碟中諜6》,強烈推薦),人臉檢測的效果如下:

d585d8df9123002e190efaf41bfe89b7fe494f7e

貓臉檢測

人臉檢測、人臉識別是近來非常火的技術,那麼,用來識別貓臉呢?只需要把之前程式碼中的模型檔案換成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.

貓臉檢測後的效果如下:

222f1c56b8086164d89aa0464eebf797b433fb54

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

總結

本文主要介紹了OpenCV在人臉檢測和貓臉檢測方面的應用,並且給出了具體的Python程式碼。


原文釋出時間為:2018-11-14 本文作者:jclian 本文來自雲棲社群合作伙伴“ Python中文社群”,瞭解相關資訊可以關注“ Python中文社群”。