Python25行代码人脸识别

OpenCV 技术教程

  • 建议先读一遍本文再跑代码——你需要理解这些代码是干什么的。成功跑一遍不是目的,能够举一反三、在新任务上找出 bug 才是。

  • 请确保用的是 OpenCV v2

  • 你需要一个网络摄像头

OpenCV

OpenCV 是最流行的计算机视觉库,原本用 C 和 C++ 开发,现在也支持 Python。

它使用机器学习算法在图像中搜索人的面部。对于人脸这么复杂的东西,并没有一个简单的检测能对是否存在人脸下结论,而需要成千上万的特征匹配。算法把人脸识别任务分解成数千个小任务,每个都不难处理。这些任务也被称为分类器。

对于类似于人脸的对象,你或许需要不少于 6000 个分类器,每一个都需要成功匹配(当然,有容错率),才能检测出人脸。但这有一个问题:对于人脸识别,算法从左上角开始计算一个个数据块,不停问“这是张脸吗”。每个数据块有超过 6000 个检测,加起来的计算量会达到数百万级别,计算机很可能会让你等得花儿都谢了。

OpenCV 使用 cascades 来避免这种情况。Cascade 是什么?最佳答案已经在字典里了:一条瀑布或者连续瀑布。

好比连续瀑布,OpenCV cascade 把人脸检测问题分解为好几步。对于每个数据块,它都进行一个粗略、快速的检测。若通过,会再进行一个更仔细的检测,以此不断类推。该算法有 30 到 50 个这样的阶段,或者说 cascade。只有通过全部阶段,算法才会判断检测到人脸。这样做的好处是:大多数图形都会在头几步就产生否定反馈,算法因而不需要在它上面测试所有 6000 个特征,大大节省了时间。相对于“正常流程”耗费数个小时,这

  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
人脸识别是一个比较复杂的领域,但Python有很多强大的库可以帮助实现人脸识别。其中最常用的是OpenCV和dlib。以下是一个基本的使用OpenCV和dlib库进人脸识别代码示例: 1. 安装必要的库 在Python中使用OpenCV和dlib库进人脸识别,需要在终端中安装这两个库。可以使用以下命令安装: ``` pip install opencv-python pip install dlib ``` 2. 加载人脸检测器 使用dlib库的人脸检测器可以检测出一幅图像中的所有人脸,并将其转换为128维的向量。首先需要从dlib库中加载人脸检测器。使用以下代码可以加载一个预先训练好的人脸检测器: ``` import dlib detector = dlib.get_frontal_face_detector() ``` 3. 加载人脸识别模型 人脸检测器检测出人脸后,需要对其进识别。使用dlib库的人脸识别模型可以将每个人脸转换为128维的向量,并使用这些向量进识别。加载训练好的人脸识别模型需要使用以下代码: ``` import dlib import numpy as np predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") face_recognition_model = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat") ``` 4. 人脸检测和识别 在上面加载好人脸检测器和人脸识别模型后,可以使用OpenCV库来读取图像,并使用人脸检测器和人脸识别模型来检测和识别人脸。代码如下: ``` import cv2 # 读取图像 img = cv2.imread("test.jpg") # 将图像转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用人脸检测器检测人脸 faces = detector(gray, 1) # 对每一个人脸进处理 for face in faces: # 提取人脸区域 (x, y, w, h) = (face.left(), face.top(), face.right() - face.left(), face.bottom() - face.top()) face_image = img[y:y+h, x:x+w] # 对人脸进归一化处理 face_image = cv2.resize(face_image, (150, 150)) # 使用人脸识别模型提取128维特征向量 face_descriptor = face_recognition_model.compute_face_descriptor(face_image) # 将特征向量转换为numpy数组 face_descriptor_np = np.array(face_descriptor) ``` 以上是一个基本的使用OpenCV和dlib库进人脸识别的示例代码。当然,还有其他的库和算法可以用来实现人脸识别

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值