使用opencv实现视频中人脸图片的提取

一、先上代码

import cv2 #pip install opencv-python
import matplotlib.pyplot as plt #pip install matplotlib
data=cv2.VideoCapture(r'./video/1.mp4') #获取视频路径
j = 1 #第j张图片
face_cascade=cv2.CascadeClassifier('./xmlfile/haarcascade_frontalface_default.xml')#要提取opencv中一个xml文件
#提取人脸图片函数
def search_face(img):
    global j
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转为灰度图片,这样才能提取人脸
    faces=face_cascade.detectMultiScale(gray,1.3,5) #找人脸
    if faces==(): #如果某一帧找不到人脸,则返回0
        return 0
    else:
        for (x,y,w,h) in faces:
            try:
                img=img[y-20:y+h+20:,x-20:x+w+20:,:] #人脸的宽度长度
                cv2.imwrite(r'.\imgs\%d.jpg' % j, img) #写入本地
		print("第%d张人脸图片"%j)
                j = j + 1
            except:
                pass

ret, frame = data.read() #读取video
i=0
#如果ret不为空,即能在某一帧中提取人脸图片
while ret:
    ret, frame = data.read()
    if ret==True:
        i=i+1
        if i%20==0:
            search_face(frame)
    # 展示图片
    #     cv2.imshow('frame', frame)
    # if cv2.waitKey(5) & 0xFF == ord('q'):
    #     break
data.release() #释放内存
cv2.destroyAllWindows()

二、目录结构

在这里插入图片描述
haar…xml文件来源如下:

在这里插入图片描述
找到python的下载的库文件夹(一般都在“python版本”/Lib/site-packages中)再找到cv2,cv2下面会有几个文件夹,haar…xml文件不一定再data文件夹之中,可以在cv2下面的文件夹点开来找找。

三、运行结果

在这里插入图片描述
在这里插入图片描述
因隐私问题,具体的人脸图片就不展现出来了。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV(Open Source Computer Vision Library)是一个广泛使用的计算机视觉库,用于处理图像和视频数据。在OpenCV实现人脸识别可以通过以下步骤进行: 1. **人脸检测**:首先,你需要使用OpenCV的`cv2.CascadeClassifier`,它内置了一些预训练的人脸检测器,如Haar级联分类器或HOG(Histogram of Oriented Gradients)分类器。这些分类器可以帮助定位图像人脸。 ```python face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') faces = face_cascade.detectMultiScale(image, scaleFactor=1.1, minNeighbors=5) ``` 2. **人脸对齐**:为了提高识别精度,通常会对检测到的人脸进行一些预处理,如归一化和面部关键点定位。 3. **特征提取**:使用OpenCV人脸识别模块,如`cv2.face`或者深度学习方法(如FaceNet、Dlib等),从每个检测到的区域提取特征向量。这些特征向量描述了人脸的独特性。 ```python from sklearn import datasets import face_recognition # 使用face_recognition库 image = face_recognition.load_image_file('path_to_image.jpg') face_encoding = face_recognition.face_encodings(image) ``` 4. **匹配和识别**:将提取的特征与已知的人脸数据库进行比较,通常使用余弦相似度或欧氏距离来计算匹配度。如果找到匹配度超过阈值的,就可以认为是已知的人脸。 ```python known_faces = [] # 储存已知人脸的特征向量 known_face_names = [] # 储存对应的名字 if len(known_faces) > 0: results = face_recognition.compare_faces([known_faces], face_encoding) name = "Unknown" if not results else known_face_names[results.index(True)] print(f"Detected face is: {name}") else: print("No known faces in the database.") ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值