Python使用OpenCV實現簡單的人臉檢測


文章目錄:

本文使用的環境是:Windows+Python3.x+Anaconda

安裝Python以及Anaconda的步驟本文不予以講解了,下面主要講的是OpenCV的安裝以及使用。

OpenCV安裝

安裝numpy

如果沒有numpy的話要先下載numpy,一般安裝完Anaconda后就會自帶很多庫,這也是我推薦使用Anaconda的原因。(通過conda list命令可以查看Anaconda已經安裝完成的庫)

pip install numpy

安裝opencv

pip install opencv-python

如果通過上述命令無法安裝,可以直接下載whl包安裝,安裝whl包依然使用pip
下載地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
如果不想下載可以直接使用我下載好的(里面包含了人臉訓練模型)。

百度網盤鏈接:https://pan.baidu.com/s/1yuxaHjH0mw7wXqHI169Y0A
密碼:q0m7

下載完成后可以使用下列命令安裝

pip install 包的位置(如:pip install D:\whl\opencv_python-3.4.1-cp36-cp36m-win_amd64.whl)

可能存在的錯誤

(1) Script file ‘D:\Anaconda3\Scripts\pip-script.py’ is not present.
輸入下列命令

easy_install pip

(2)缺少ipykernel庫
缺少ipykernel庫
運行下列命令下載

pip install ipykernel

OpenCV使用

OpenCV測試

#導入cv模塊
import cv2 as cv
#讀取圖像,支持 bmp、jpg、png、tiff 等常用格式
img = cv.imread("D:\\picture\\318394.jpg")
#輸出OpenCV的版本號
print(cv.__version__)
#創建窗口並顯示圖像
cv.namedWindow("Image")
cv.imshow("Image",img)
cv.waitKey(0)
#釋放窗口
cv.destroyAllWindows()

效果圖:

效果圖

注意:

如果在使用Opencv的過程中出現OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file ……..\opencv\modules\highgui\src\window.cpp, line 261,則是文件路徑有誤,
應將圖片路徑:“D:\pics\test.png”改為“D:\pics\test.png”

圖片人臉檢測

程序要求:

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

技術實現思路

  • 圖片轉換成灰色(降低為一維的灰度,減低計算強度)
  • 圖片上畫矩形
  • 使用訓練分類器查找人臉

注意

在使用OpenCV的人臉檢測之前,需要一個人臉訓練模型,格式是xml的,我們這里使用OpenCV提供好的人臉分類模型xml,下載地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 可全部下載到本地。我之前分享的網盤里提供了,要使用的人臉訓練模型。

百度網盤鏈接:https://pan.baidu.com/s/1yuxaHjH0mw7wXqHI169Y0A
密碼:q0m7

完整代碼:

import cv2 
filepath = "D:\\picture\\318394.jpg" 
img = cv2.imread(filepath) # 讀取圖片 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 轉換灰色 
# OpenCV人臉識別分類器 
classifier = cv2.CascadeClassifier( "D:\openvc\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()


免責聲明!

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



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