一、简单的人脸识别
人脸识别作为人工智能领域的经典案例,我们使用python来实现它,从他的代码量来看,实现简单的人脸识别并不需要太多代码,这得益于python中强大的库-cv2。在运行人脸识别代码时,如果是Mac电脑,用pycharm编辑器是不能打开摄像头的,因为pycharm没有权限获取Mac的摄像头,则采取的做法是使用Mac终端的vim编辑器来运行。(Windows的我不太清楚)
代码如下:
import cv2 # 导入cv2:sudo -H pip install --ignore-installed opencv-python # 0 代表笔记本的摄像头,(不需要打开摄像头,cv会自动打开摄像头) video = cv2.VideoCapture(0) while (1): # read返回两个值 一个 是否读取成功 一个是每一帧的视频数据 stream, frame = video.read() if not stream: break # 将读取到的视频显示出来 cv2.imshow("video", frame) # waitKey 可以监听键盘输入,当你把光标点击到视频的时候按下键盘就能获取到输入了哪个键,因此我这里做了监听 如果按下 q 键 则退出 key = cv2.waitKey(2) if key == ord('q'): break video.release() cv2.destroyAllWindows()
二、人脸检测
同样是使用终端来运行
代码如下:
import dlib import cv2 video = cv2.VideoCapture(0) detector = dlib.get_frontal_face_detector() # 用终端操作 def read_camera0(): """ 读取电脑摄像头的视频(不需要打开摄像头,cv会自动打开摄像头) """ while 1: stream, frame = video.read() if stream: yield frame else: print("Cannot Read Camera0") break def show_camera_faces(): """ 读取摄像头数据,显示出来加上人脸检测 """ frames = read_camera0() for image in frames: rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) detect = detector(rgb_image, 1) for i, d in enumerate(detect): x1, y1, x2, y2, w, h = d.left(), d.top(), d.right() + 1, d.bottom() + 1, d.width(), d.height() cv2.rectangle(image, (x1, y1), (x2, y2), (255, 0, 0), 2) cv2.imshow("video", image) key = cv2.waitKey(2) print(key) if key == ord('q'): break video.release() cv2.destroyAllWindows() if __name__ == '__main__': show_camera_faces()
人脸图片识别
代码如下:
import cv2 import dlib picture = '/Users/caizhengjie/Desktop/蔡政洁/WechatIMG1的副本.jpeg' detector = dlib.get_frontal_face_detector() def add_face_from_image(image): imdata = cv2.imread(image) rgb_image = cv2.cvtColor(imdata, cv2.COLOR_BGR2RGB) faces = detector(rgb_image, 1) if len(faces) == 0: print("没有检测到人脸") else: print('到此就获取到了人脸数据') if __name__ == '__main__': add_face_from_image(picture)