Python十年隐藏无人知,一朝图像识别天下闻

1,056 阅读4分钟


图片

前言

人脸处理是人工智能中的一个热门话题,人脸处理可以使用计算机视觉算法从人脸中自动提取大量信息,例如身份、意图和情感。人脸在视觉交流中起着重要作用,这是由于人脸中包含大量非语言信息,因此人脸处理一直以来对于计算机视觉学习者来说都是非常有趣的话题,因为它涉及不同的专业领域,例如对象检测、特征点检测以及对象跟踪等。在本文中,将首先介绍常用人脸处理库,然后通过实战讲解如何使用这些库进行人脸检测,为进一步进行相关处理奠定基础。\

图片

人脸处理简介

为了专注人脸处理相关主题,我们将使用 OpenCV 库,以及 dlib、face_recognition 和 cvlib 等 Python 包。同时,本文将在人脸处理中使用不同的方法,以介绍解决具体人脸处理任务的不同方法,对不同方法的介绍将有助于大家根据不同的应用需求选择不同的方法。下图展示了人脸处理的相关主题,以及可用的 Python 包:\

图片

如上图所示,人脸处理主要包括以下主题:

人脸检测:对象检测的一种特殊情况,其任务是找到图像中所有人脸的位置和大小。面部特征点检测:特征点检测的一种特殊情况,其任务是定位人脸中的主要特征点。人脸跟踪:对象跟踪的一种特殊情况,其任务是利用在视频的连续帧中提取的额外信息,找到视频中所有移动人脸的位置和大小。人脸识别:目标识别的一种特殊情况,其任务是使用从人脸中提取的信息从图像或视频中识别或验证一个人:人脸识别 (1:N):在已知人脸集合中找到与检测到的人脸最接近的匹配项人脸验证 (1:1):检查检测到的人脸是否是其所声称的人如上所述,人脸处理主要包括:人脸检测、面部特征点检测、人脸追踪 和 人脸识别,而在日常的识别过程中,使用最多的 OpenCV、dlib、face_recognition 和 cvlib 库进行人脸检测,而今天我们就讲解一下opencv的应用,这也是其中最简单的一种方式,因为其中已经封装了非常多的算法模块

关于其他人脸处理主题将在后续系列中进行介绍。

好了,话不多说,上正题

图片

安装过程

图片

第一步:安装opencv模块

用pip管理工具安装库文件时,默认使用国外的源文件,因此在国内的下载速度会比较慢,可能只有50KB/s。幸好,国内的一些顶级科研机构已经给我们准备好了各种镜像,下载速度可达2MB/s

可以在使用pip的时候,加上参数-i和镜像地址(如

pypi.tuna.tsinghua.edu.cn/simple),

例如:

pip install -i pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python

安装完成后,在你的安装路径下会出现如下的内容\

图片

这些就是opencv自带的算法模型,可以直接调用

下面就是调用的代码实现

首先从简单的开始,先识别图片中的人脸\

# opencvimport cv2
face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_alt.xml')
img = cv2.imread('./image.jpeg')
face_zones = face_detector.detectMultiScale(img)
for x,y,w,h in face_zones:    
    cv2.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=[0,0,255],thickness=2)
cv2.imshow('face',img)
cv2.waitKey(0)cv2.destroyAllWindows()

图片

执行结果,只需要去修改图片的地址即可

当图片联动之后,形成的就是视频的识别效果\

上代码\

'''打开摄像头'''

import numpy as np
import cv2

face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_alt.xml')
video = cv2.VideoCapture(0)#打开摄像头
while True:
    flag,frame = video.read()
    if flag == False:
        break
    gray = cv2.cvtColor(frame,code = cv2.COLOR_BGR2GRAY)
    face_zones = face_detector.detectMultiScale(gray)
    for x,y,w,h in face_zones:
        cv2.circle(frame,center = (x+w//2,y+h//2),radius = w//2,color = [0,0,255],thickness = 2)
    cv2.imshow('ttnk',frame)
    key = cv2.waitKey(41)
    if key == ord('q'):#退出条件
        break
cv2.destroyAllWindows()
video.release()

这其中多的就是进行一个死循环,不断地循环更新获取到的图片信息,最后进行整合,就是一个视频的内容

图片

而测试图片的获取,大家可以看我之前给大家写的爬虫的教程,直接要代码的,可以关注:Java架构师联盟之后,后台回复【爬虫】获取哦