python3.7安装opencv并且实现简单人脸检测 - Go语言中文社区

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-filepy-piccvdatahaarcascadeshaarcascade_eye_tree_eyeglasses.xml")
    face_cascade = cv2.CascadeClassifier("E:py-filepy-piccvdatahaarcascadeshaarcascade_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:匹配物体的大小范围

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_39089503/article/details/84578321
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-24 22:18:15
  • 阅读 ( 1472 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢