OpenCV做图片人脸识别和视频人物识别
图片人脸识别,视频人脸识别,调用本机摄像头录制视频,并保存文件!”
01
—
OpenCV图片人脸识别
使用import cv2 装好了之后名字为cv2 读取图片 cv2.imread(图片路径)
cv2.imshow(窗口名,数据文件) 直接使用会报错 需要添加等待键盘输入
cv2.waitKey(时间) 里面的时间单位是毫秒 如果里面是0那么表示无限等待还需要执行
如果要让用户输入字符或者什么那么在前面加上 ord() == cv2.waitKey()
cv2.destroyAllWindows() 释放内存
cv2.cvtColor(文件名,code=cv2.COLOR_BGR2GRAY) #转换为黑白的图片
cv2读取图片颜色通道是BGR PIL读取图片是RGB通到
cv2.imwrite(保存路径,数据文件)保存图片
cv2.resize(文件名, dsize = (宽,高 与shape展示出来的数据相反))设置图片大小
开始操作
一共用到了三个个库分别是cv2(OpenCV)、random和Numpy
import numpy as npimport cv2import random
读取数据内容:
sun = cv2.imread('E:/python/picture/sun.jpg') # 括号内容为图片绝对路径
级联分类器,这里需要已经训练好的特征数据集
haarcascade_frontalface_default.xml
特征数据集的话可以在Github里面下载,也可以在公众内恢复【特征】获取!
detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') # 识别人脸 导入人脸识别数据face_zone = detector.detectMultiScale(sun, scaleFactor=1.2, minNeighbors=5) # 人脸区域
对人脸区域框进行设置
x,y是坐标 w,h宽高for x, y, w, h in face_zone:color = np.random.randint(0, 256, size=3)
有两种选区方式,圆形和方形
# 方形cv2.rectangle(sun, pt1=(x, y), pt2=(x + w, y + w), color=color.tolist()) # 将识别出来的图片标记出来正方形# 圆形cv2.circle(sun, center=(x+w//2, y+h//2), radius=w//2, color=color.tolist(), thickness=2)
展示(开头也有介绍,不多详细说了)
cv2.imshow('sun', sun)
直到用户输入q退出
while True:if ord('q') == cv2.waitKey(30000):breakcv2.destroyAllWindows()
完整代码
import numpy as npimport cv2sun = cv2.imread('E:/python/picture/sun.jpg')sun = cv2.resize(sun, dsize=(617, 800))# 级联分类器detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') # 识别人脸 导入人脸识别数据face_zone = detector.detectMultiScale(sun, scaleFactor=1.2, minNeighbors=5) # 人脸区域# x,y是坐标 w,h宽高for x, y, w, h in face_zone:color = np.random.randint(0, 256, size=3)# 方形cv2.rectangle(sun, pt1=(x, y), pt2=(x + w, y + w), color=color.tolist()) # 将识别出来的图片标记出来正方形# 圆形cv2.circle(sun, center=(x+w//2, y+h//2), radius=w//2, color=color.tolist(), thickness=2)cv2.imshow('sun', sun)while True:if ord('q') == cv2.waitKey(30000):breakcv2.destroyAllWindows()
02
—
视频人脸识别
视频和人脸差不多,这里就不多介绍了,每行都有注释,大家自行参透
import numpy as npimport cv2import randomcap = cv2.VideoCapture('E:/python/video/2011.mp4') # 读取视频数据# cap = cv2.VideoCapture(0) # 参数为0 那么会调用摄像头.flag, frame = cap.read() # 读取视频中的其中一张照片cv2.waitKey(0)cv2.destroyAllWindows()# cap.get(propId=cv2.CAP_PROP_FPS) # 调试部分 获取视频的每秒多少帧 保证原视频的数据不变# cap.get(propId=cv2.CAP_PROP_FOURCC) # 编码格式# cap.get(propId=cv2.CAP_PROP_FRAME_COUNT) # 获取帧数量# cap.get(propId=cv2.CAP_PROP_FRAME_HEIGHT) # 获取图片高度# cap.get(propId=cv2.CAP_PROP_FRAME_WIDTH) # 获取图片宽度h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))+1 # 获取图片高度 可大不可小w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))+1 # 获取图片宽度# 保存视频 四个参数 第一个是文件名 第二个视频编码 第三个是视频帧数 第四个是视频帧尺寸videoWrite = cv2.VideoWriter('E:/python/video/{}.mp4 '.format(random.random()),cv2.VideoWriter_fourcc('M', 'P', '4', 'v'), 24, (w, h))detector = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml') # 导入人脸识别数据while cap.isOpened():flag, frame = cap.read()if not flag:breakgray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY)face_zone = detector.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=4)# img_png = cv2.imread('E:/python/picture/11.jpg')# img_png = cv2.resize(img_png, (w, h))for x, y, w, h in face_zone:# gray[y:y+w, x:x+h] = img_pngcolor = np.random.randint(0, 256, size=3)# 圆形标记cv2.circle(frame, center=(x+w//2, y+h//2), radius=w//2, color=[0, 0, 255], thickness=2)# 方形标记cv2.rectangle(frame, pt1=(x, y), pt2=(x + w, y + w), color=color.tolist())videoWrite.write(frame)if not flag:breakcv2.imshow('role', frame)if ord('q') == cv2.waitKey(1): # 保证每一帧读取 视频正常显示breakcv2.destroyAllWindows()cap.release()videoWrite.release()
实验结果:
图像识别
视频人脸识别这边就不做介绍了!
灰黑控
技术分享、源码分享、资源分享和技术交流!目前提供大量PDF书籍资源和大量小程序源码以及Python Java C等多门语言及Kali信息安全的经典案例!
Official Account
