python3.7安裝opencv並且實現簡單人臉檢測

1.說明:windows7 64位 + python3.7 + idea2018社區版
2.首先是安裝opencv,按照網上的說法都試了下,總結一下方法:
使用pip下載,在cmd中 輸入

pip install opencv-python   
pip install numpy

安裝numpy和opencv,如圖cv是3.4.3版本,numpy是1.15.4版本,
然後我還下載了opencv-contrib-python,這個是擴展包,也用pip就能下載。
在這裏插入圖片描述
然後去看idea,然後可能會發現imread上提示:Cannot find reference ‘imread’ in ‘init.py’ | cv2
這邊你點擊cv2看他的__init__文件能夠看出他其實用的是cv2.cv2模塊,所以這個提示沒問題,能夠運行(強迫症卡在這一步好久),網上看到的說法是python3版本高的問題(不確定)

import cv2
img = cv2.imread(image_path)

在這裏插入圖片描述
真正的代碼在這:
在這裏插入圖片描述
3. 人臉識別
這邊其實很簡單,有現成的輪子:haar 人臉特徵分類器
直接搜一下下載haarcascades
然後核心代碼:

def detect_faces(image_path):
    result = []
    img = cv2.imread(image_path)  # ndarray
    # eye_cascade = cv2.CascadeClassifier("E:\py-file\py-pic\cvdata\haarcascades\haarcascade_eye_tree_eyeglasses.xml")
    face_cascade = cv2.CascadeClassifier("E:\py-file\py-pic\cvdata\haarcascades\haarcascade_frontalface_alt.xml")
    if img.ndim == 3:
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 色彩空間的轉換 BGR 2 GRAY
    else:
        gray = img  # 如果img維度爲3,說明不是灰度圖,先轉化爲灰度圖gray,如果爲2,原圖就是灰度圖
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=2, minSize=(30, 30),
                                          flags=cv2.CASCADE_SCALE_IMAGE)
    for (x, y, width, height) in faces:
        result.append((x, y, x + width, y + height))
    return result


def draw_faces(image_path, new_path):
    faces = detect_faces(image_path)
    print("發現%d個" % len(faces))
    if faces:
        img = Image.open(image_path)
        draw_instance = ImageDraw.Draw(img)
        for (x1, y1, x2, y2) in faces:
            draw_instance.rectangle((x1, y1, x2, y2), outline=(255, 0, 0))  # 矩形框,線寬不能改,fill表示填充內部
        img.show()
        # img.save(new_path)


faces就是所有人臉的位置(x,y,x+h,y+w),需要注意的是CascadeClassifier後面的路徑需要是haarcascades完整的路徑,frontalface_default.xml就是已經訓練好的分類器,不過實測時候發現檢測率不是很高,可能是圖片的問題,人臉要大且清晰且正臉才能檢測到。當然還有其他分類器可以使用:frontalface_alt和alt2檢測率高一些。
在這裏插入圖片描述

---------------2018-12-07
1.更正一下,應該是人臉檢測,人臉識別需要訓練一個識別器然後使用
2.提供完整代碼,detect_faces函數用於檢測,返回人臉位置的列表,draw_faces用於畫出位置(矩形框)
對於detectMultiScale的參數:

	image:輸入圖像 
	scaleFactor:這個是每次縮小圖像的比例,一般爲1.1
	minNeighbors:匹配成功所需要的周圍矩形框的數目,比如人臉特徵,周圍要最少識別三次才能確認是人臉。 
	flags:可以取如下這些值: 
		CASCADE_DO_CANNY_PRUNING=1, 利用canny邊緣檢測來排除一些邊緣很少或者很多的圖像區域 					
		CASCADE_SCALE_IMAGE=2, 正常比例檢測 
		CASCADE_FIND_BIGGEST_OBJECT=4, 只檢測最大的物體 
		CASCADE_DO_ROUGH_SEARCH=8 粗略的檢測 
	minSize和maxSize:匹配物體的大小範圍

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章