python+opencv实现人脸识别|采用现成训练好的模型

一、图片人脸检测(opencv)

1、安装opencv环境

介绍windows中opencv在python3上的实现,我的系统环境win10+python3.6+opcv3.4.1

首先去网站下载OpenCV对应的.whl版本压缩包,网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 本人下载的版本是:opencv_python‑3.4.1‑cp36‑cp36m‑win_amd64.whl 64位系统对应python3.6的,下载到F盘根目录。
链接:百度云链接
提取码:j5uy
接着用pip命令安装

pip install F:\opencv_python-3.4.1-cp36-cp36m-win_amd64.whl

当命令行窗口显示:

Processing F:\opencv_python-3.4.1-cp36-cp36m-win_amd64.whl
Installing collected packages: opencv-python
Successfully installed opencv-python-3.4.1

说明已经安装成功。
到此,opencv的环境配置已经弄好了,可以在命令行中运行python,然后import cv2 打印输出opencv的版本号,看能否正常输出。
在这里插入图片描述

2、具体实现代码
import cv2

img = cv2.imread('img/1.png')  # 读取图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转换灰色

# OpenCV人脸识别分类器
classifier = cv2.CascadeClassifier(r'F:\python-project\opencv-master\haarcascade_frontalface_default.xml')#创建人脸检测级联分类器对象实例
color = (0, 255, 0)  # 定义绘制颜色为绿色
# 调用识别人脸
faceRects = classifier.detectMultiScale(
    gray, scaleFactor=1.2, minNeighbors=3, minSize=(24, 24))
#参数说明,scaleFactor:图像缩放比例,可理解为相机的X倍镜,minNeighbors:对特征检测点周边多少有效点同时检测,这样可避免因选取的特征检测点太小而导致遗漏
#minSize:特征检测点的最小尺寸
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-detection", img)  # 显示图像

cv2.waitKey(0) #表示程序会无限制的等待用户的按键事件
cv2.destroyAllWindows()#关闭所有窗口
3、识别结果

在这里插入图片描述

二、图片人脸检测(dlib)

比opencv更加精准的图片人脸检测库Dlib,Dlib可以检测脸部68甚至更多的特征点。

1、安装dlib

下载地址:https://pypi.org/simple/dlib/
我的环境为win10+python3.6.5
选择dlib的版本为:dlib-19.8.1-cp36-cp36m-win_amd64.whl
在这里插入图片描述
接着用pip命令安装:

pip install dlib-19.8.1-cp36-cp36m-win_amd64.whl

2、训练模型

下载链接:https://pan.baidu.com/s/1xai1X_L8JvDfFJyU3f_0Ig
提取码:g24q

3、具体实现代码
import cv2
import dlib

path = "img/1.png"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#转成灰度图

#人脸分类器
detector = dlib.get_frontal_face_detector()
# 获取人脸检测器
predictor = dlib.shape_predictor(
        "F:\\python-project\\shape_predictor_68_face_landmarks.dat"
)

dets = detector(gray, 1)
for face in dets:
    shape = predictor(img, face)  # 寻找人脸的68个标定点
    # 遍历所有点,打印出其坐标,并圈出来
    for pt in shape.parts():
        pt_pos = (pt.x, pt.y)
        cv2.circle(img, pt_pos, 2, (0, 255, 0), 1)
    cv2.imshow("image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()
4、识别结果

在这里插入图片描述
参考链接:https://github.com/vipstone/faceai/blob/master/doc/detectionOpenCV.md

  • 6
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: OpenCV是一个开源的计算机视觉库,其中包括了许多算法和工具,可以用于图像处理、机器视觉和模式识别等领域,其中人脸识别是其中的一个功能。 人脸识别是指在照片或视频中自动检测出人脸,然后进行识别和标记。它可以用于人脸识别系统,从而实现自动门禁等控制系统,或者作为照片管理工具的一部分,自动分类和搜索照片集。 OpenCV中的人脸识别功能包括人脸检测和人脸识别两个部分。人脸检测是指在给定的图像或视频中,自动检测出人脸区域的过程。它利用Haar特征分类器,在特征向量的基础上,对图像进行检测,识别出人脸。 人脸识别则是指在检测出人脸区域之后,对人脸进行识别的过程。对于每个人脸,可以提取出其特征向量,然后与已知的人脸数据库进行匹配,从而实现人脸的识别和标记。 OpenCV中的人脸识别功能可以通过Python或C++等编程语言进行调用和使用。通过训练模型,可以实现更加准确的人脸识别,提高人脸识别的准确率和可靠性。 ### 回答2: OpenCV是指一个开源的计算机视觉库,它提供了很多现成的算法和函数,方便我们进行图像和视频处理,其中就包含了人脸识别算法。人脸识别在计算机视觉中扮演着很重要的角色,它可以通过计算机自动识别人脸,并从中提取出相关的信息,比如人脸的特征点、表情等等。 在OpenCV中,人脸识别主要是通过Haar Cascade分类器实现的。该分类器可以将图像中人脸和非人脸区域进行分类。使用该分类器进行人脸识别时,首先需要将图像进行预处理,比如灰度化、直方图均衡化等,然后使用CascadeClassifier类调用训练好的Haar Cascade分类器进行人脸检测。当检测到人脸后,我们可以通过不同的算法进行人脸识别及相关的应用。 在实际项目中,人脸识别早已广泛应用于人脸支付、安防系统、人脸解锁等领域。随着技术的不断发展,越来越多的应用场景将会涉及到人脸识别,相信OpenCV将会在这个领域持续发挥重要作用。 ### 回答3: OpenCV是一个用于计算机视觉的开源库,拥有广泛的功能,其中之一便是人脸识别人脸识别技术可用于许多场景,如安防监控、人机交互等。 人脸识别基本流程包括人脸检测、特征提取和识别三个步骤。 在OpenCV中,可以使用Haar Cascade分类器进行人脸检测。该分类器使用Haar特征来检测对象,可以实现高效的人脸检测。 特征提取是人脸识别中的重要步骤。OpenCV提供了许多常见的特征提取算法,如局部二值模式(LBP)和主成分分析(PCA)等。 最后,识别阶段通常使用一些分类器进行人脸识别。常见的分类器包括支持向量机(SVM)和k最近邻算法(KNN)等。 总之,OpenCV提供了灵活和强大的人脸识别功能,可以使开发人员更容易实现人脸识别应用程序。同时,开源库也提供了大量的文档和示例,方便学习和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值