OpenCv之视频人脸识别


一、人脸检测

案例代码如下:

import cv2
import numpy as np

video =  cv2.VideoCapture('1.mp4')
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
while True:
    retval,image = video.read() #     retval boolean类型表名是否获得了图片
    if not retval:
        print('视频读取完成,没有图片')
        break
    faces = face_detector.detectMultiScale(image)
    for x,y,w,h in faces:
        cv2.rectangle(image,pt1=(x,y),pt2 = (x+w,y+h),color=[0,0,255],thickness=2)
    cv2.imshow('video',image)
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

cv2.waitKey(1)
video.release()

二、马赛克处理

视频帧率、宽度、高度、图片个数计算:

import cv2
import numpy as np

video =  cv2.VideoCapture('1.mp4')
# 获得视频中的属性
fps = video.get(propId=cv2.CAP_PROP_FPS) #得到帧率
width = video.get(propId=cv2.CAP_PROP_FRAME_WIDTH) #宽度
height = video.get(propId=cv2.CAP_PROP_XI_HEIGHT) #高度
count = video.get(propId=cv2.CAP_PROP_FRAME_COUNT) #多少图片
print('--视频帧率',fps)
print(width,height,count)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
while True:
    retval,image = video.read() #     retval boolean类型表名是否获得了图片
    if not retval:
        print('视频读取完成,没有图片')
        break
    faces = face_detector.detectMultiScale(image)
    for x,y,w,h in faces:
        # cv2.rectangle(image,pt1=(x,y),pt2 = (x+w,y+h),color=[0,0,255],thickness=2)
        face = image[y:y+h,x:x+w]
        face = face[::10,::10]
        face = np.repeat(face,10,axis=0)
        face = np.repeat(face,10,axis =1)
        image[y:y+h,x:x+w] = face[:h,:w]

    cv2.imshow('video',image)
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

cv2.waitKey(1)
video.release()

三、写视频

案例代码如下:

import cv2
import numpy as np

video =  cv2.VideoCapture('1.mp4')
wr = cv2.VideoWriter(filename = 'gray.mp4',
                fourcc = cv2.VideoWriter.fourcc(*'MP4'),
                fps = 24, #视频帧率
                framesize = (640,360)) #图片尺寸
# 获得视频中的属性
fps = video.get(propId=cv2.CAP_PROP_FPS) #得到帧率
width = video.get(propId=cv2.CAP_PROP_FRAME_WIDTH) #宽度
height = video.get(propId=cv2.CAP_PROP_XI_HEIGHT) #高度
count = video.get(propId=cv2.CAP_PROP_FRAME_COUNT) #多少图片
print('--视频帧率',fps)
print(width,height,count)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
while True:
    retval,image = video.read() #     retval boolean类型表名是否获得了图片
    if not retval:
        print('视频读取完成,没有图片')
        break
    image = cv2.resize(image,(640,360))
    gray = cv2.cvtColor(image,code = cv2.COLOR_BGR2GRAY)
    np.repeat(gray.reshape(360,640,1),3,axis=2) #蓝绿红变为三维,但值是一样的
    # wr.write(gray)
    faces = face_detector.detectMultiScale(image)
    for x,y,w,h in faces:
        # cv2.rectangle(image,pt1=(x,y),pt2 = (x+w,y+h),color=[0,0,255],thickness=2)
        face = image[y:y+h,x:x+w]
        face = face[::10,::10]
        face = np.repeat(face,10,axis=0)
        face = np.repeat(face,10,axis =1)
        image[y:y+h,x:x+w] = face[:h,:w]
    wr.write(image) #彩色图片是三维的,而黑白图片是二维的
    cv2.imshow('video',image)
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

cv2.waitKey(1)
video.release()
wr.release()

四、摄像头识别人脸

案例代码如下:

import cv2
import numpy as np

# 打开本机摄像头
cap = cv2.VideoCapture(0)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')

while True:
    flag,frame = cap.read() #flag是否读取了图片
    if not flag:
        break
    # 转为灰度图片
    gray = cv2.cvtColor(frame,code = cv2.COLOR_BGR2GRAY)
    faces = face_detector.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=10)
    for x,y,w,h in faces:
        cv2.rectangle(frame,
                      pt1=(x,y),
                      pt2=(x+w,y+h),
                      color=[0,0,255],
                      thickness=2)
    cv2.imshow('face',frame)
    key = cv2.waitKey(1000//24)
    if key == ord('q'):
        break

cv2.destroyAllWindows()
cap.release()

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本文的视频人脸检测识别方法的基本设计思想是,在给出一段视频文件以及这个视频文件的字幕和剧本之后,可以自动的对视频的人物进行检测和识别,不需要任何的训练样本。视频人脸检测识别方法主要由四个部分组成:字幕剧本融合部分,人脸检测部分,样本集自动生成部分和基于深度学习的人脸识别部分。本文将深度学习算法引入到了视频人脸识别来,有两方面的重要意义,一方面,视频人脸的识别要求算法具备一定的抗干扰能力,并且能够保证一定的实时性,本文的实验与分析表明,深度学习算法具备这方面的要求;另一方面,从深度学习算法特性的角度来说,深度学习算法最大的缺点就是构造深度模型需要大量的样木,这很大程度上限制了深度学习算法的应用,然而本文所设计的基于视频人脸检测模块可以轻松的产生数万、数十万的样本,从而满足了深度学习算法的大样本集要求。 基于深度学习模型的人脸识别部分是整个系统的重点,这一部分主要有两方面的意义:一,经历了视频人脸的检测部分之后,虽然视频人脸集合人脸的纯度有了很大的提升,但是依然会存在一些杂质,因此必须通过识别模块来进一步的过滤掉人脸集合的杂质;二,通过视频所得到的帧文件,经常会出现多张人脸同时出现的情况,在这种情况下,视频人脸的检测部分是无法将说话者与人脸进行对应的,必须通过识别模块才能区分出一个帧的多个人脸。 基于深度学习模型的人脸识别部分主要包含三个模块:数据预处理模块、深度学习模块和识别模块。数据预处理模块主要由数据整合和构造数据立方体两个部分组成。深度学习模块通过两个具体过程来实现:RBM调节和深度模型的反馈微调。RBM的调节过程是自下而上的各个层间的调节过程,以这种方式来初始化整个深度模型的系统权值,而深度模型的反馈微调,首先进行自下而上的识别模型转换,然后再进行自上而下的生成模型转换,最后通过不同层次之间的不断调节,使生成模型可以重构出具有较低误差的原样本,这样就得到了此样本的本质特征,即深度模型的最高抽象表示形式。经过深度学习模型的处理,可以得到降维之后的样本特征,在此基础上运用识别模块,本文所采用的识别方法是人工神经网络的识别方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几两春秋梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值