c++ 人脸识别_Python OpenCV 人脸识别(二)

本文简要介绍了如何使用Python的OpenCV库进行人脸识别,包括从视频中提取人脸,并演示了动态视频人脸识别的过程。同时,文章还探讨了音视频处理,如视频截取、无声视频提取及音乐与视频的合并。这些内容旨在展示Numpy在实际应用中的功能,后续将继续专注于数据分析和Excel处理。
摘要由CSDN通过智能技术生成

      我本意还是分享数据分析和办公自动化相关的内容,之所以这两章分享人脸识别,主要是需要用到前面分享的Numpy模块,相当于是一个示例的展示,展示Numpy的强大用处。所以人工智能也没有介绍详细的原理,只介绍了代码和可调整的参数,其实对于只想会用的小伙伴来说完全够了,直接套用,改路径,调整参数,当然如果想深入的了解是如何实现的,可以自行上网搜索相关的内容。

      所以,后面还是聚焦于数据处理和分析,以及数据的可视化。再下面一章就开始介绍如何对Excel进行处理和分析。

      本章将介绍如何实现动态视频的人脸识别,以及音视频处理。

一、视频的人脸识别

首先需要准备一个视频,如下:

首先对视频进行一个读入:

import cv2cap = cv2.VideoCapture(r'C:\Users\56331\Desktop\video.mp4') cap>>> 

然后查看一下这个视频一秒多少帧:

cap.get(propId=cv2.CAP_PROP_FPS) # 1秒10帧>>> 10.0

下面就可以按照前面静态图片人脸识别的方法进行识别:

# 动态视频的人脸捕捉import cv2cap = cv2.VideoCapture(r'C:\Users\56331\Desktop\video.mp4') face_cascade = cv2.CascadeClassifier(r'C:\ProgramData\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml') # 加载人脸特征库while cap.isOpened():    flag, frame = cap.read() # 读取一帧的图像    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转灰    faces = face_cascade.detectMultiScale(gray, scaleFactor = 1.15, minNeighbors = 2) # 检测人脸    for(x, y, w, h) in faces:        cv2.rectangle(frame, pt1=(x,y), pt2=(x+w, y+h), color = [0, 0, 255], thickness=2) # 用矩形圈出人脸    if flag==False:        break    cv2.imshow('Face Recognition', frame)    if cv2.waitKey(50) == ord('q'):        breakcv2.destroyAllWindows()cap.release()

会对视频中的每一帧都进行人脸识别(视频审核时间长,就不上传了),如下所示:

84b32b2988915945bfc985648b4cd8e2.png

二、自带摄像头的人脸识别

     当我们修改cap = cv2.VideoCapture(0) 的视频路径为0时,就会启动电脑自带的摄像头,并进行lup。

1、cap = cv2.VideoCapture(0)

     VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如cap = cv2.VideoCapture(“../test.avi”)

2、ret,frame = cap.read()

     cap.read()按帧读取视频,ret,frame是获取cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

3、cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,

     参数是1,表示延时1ms切换到下一帧图像,对于视频而言;

     参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;

     参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。

     c得到的是键盘输入的ASCII码,esc键对应的ASCII码是27,即当按esc键时if条件语句成立

4、调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。

如下:

# 电脑摄像头的人脸捕捉import cv2cap = cv2.VideoCapture(0) face_cascade = cv2.CascadeClassifier(r'C:\ProgramData\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml') # 加载人脸特征库while cap.isOpened():    ret, frame = cap.read() # 读取一帧的图像    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转灰    faces = face_cascade.detectMultiScale(gray, scaleFactor = 1.15, minNeighbors = 2) # 检测人脸    for(x, y, w, h) in faces:        cv2.rectangle(frame, pt1=(x,y), pt2=(x+w, y+h), color = [0, 0, 255], thickness=2) # 用矩形圈出人脸    if flag==False:        break    cv2.imshow('Face Recognition', frame)    if cv2.waitKey(50) == ord('q'):        breakcv2.destroyAllWindows()cap.release()

(视频审核时间长,就不上传了):

e78f97385b4be43f34ccf4ae92e663cd.png

如果需要保存视频的话:

# 保存摄像头的视频import cv2cap = cv2.VideoCapture(0)w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 摄像头的宽w = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 摄像头的长videoWriter = cv2.VideoWriter(r'C:\Users\56331\Desktop\video_change2.mp4', cv2.VideoWriter_fourcc('M','P','4','v'), 24, (w,h))face_cascade = cv2.CascadeClassifier(r'C:\ProgramData\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml') # 加载人脸特征库while cap.isOpened():    flag, frame = cap.read() # 读取一帧的图像        if flag == False:        break              gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转灰         faces = face_cascade.detectMultiScale(gray, scaleFactor = 1.15, minNeighbors = 2) # 检测人脸        for(x, y, w, h) in faces:        cv2.rectangle(frame, pt1=(x,y), pt2=(x+w, y+h), color = [0, 0, 255], thickness=2) # 用矩形圈出人脸             videoWriter.write(frame)        if flag==False:        break            cv2.imshow('Face Recognition', frame)        if cv2.waitKey(50) == ord('q'):        break        cv2.destroyAllWindows()cap.release()videoWriter.release()
三、音乐的操作

     我们在抖音上经常看到很多拼接的,裁剪的音乐,音乐格式,应用非常广泛。对于音乐有很多格式,最常用mp3格式,也有很多的高品质音乐,比如wav格式为无损音乐格式,非常大。

      我准备了一首wav格式的无损音乐---林俊杰的可惜没如果(50多兆,就不上传了):

声音是一个二维数组,左声道、右声道(立体声)

import numpy as npfrom scipy.io import wavfilelike = wavfile.read(r'C:\Users\56331\Desktop\可惜没如果.wav')like>>> # 44100声音的采样频率,一秒录制44100个声音数据(44100, array([[  1,  -1],        [ -3,   3],        [  5,  -5],        ...,        [ -4,  -5],        [  4,  10],        [ -5, -13]], dtype=int16))

然后取出这首歌:

music= like[1]music.shape>>> (13153971, 2)

那么用它除以采样频率,我们就可以计算出这首歌的时间是298秒:

13153971/44100>>> 298.27598639455783

下面我们就可以对音乐做一些处理操作了:

视频播放速度乘以2倍wavfile.write(r'C:\Users\56331\Desktop\like1.wav', 44100, music[::2])
截取前60秒的音乐wavfile.write(r'C:\Users\56331\Desktop\like2.wav', 44100, music[:60*44100])
音乐倒过来唱wavfile.write(r'C:\Users\56331\Desktop\like2.wav', 44100, music[::-1])
抖音上经常对音乐进行拼接裁剪啥的将‘可惜没如果’的前30秒和‘青花瓷’的30-60秒凭借成一首60秒的歌曲like2 = wavfile.read(r'C:\Users\56331\Desktop\青花瓷.wav')music2 = like2[1]mix_music = np.concatenate(music[:30*44100],music2[30*44100:60*44100])wavfile.write(r'C:\Users\56331\Desktop\mix_music.wav', 44100, mix_music)
四、视频配音乐

使用cmd命令,键盘Ctrl+R,输入cmd即可跳出cmd命令界面

1、对视频的截取命令

ffmpeg -ss 00:00:30 -i video.mp4 -acodec copy -vcodec copy -t 00:02:00 output.mp4

截取video.mp4视频中30秒至2分钟的视频,命名为output.mp4

2、提取无声的视频命令

ffmpeg -i video.mp4 -vcodec copy -an output.mp4

将video.mp4视频提取成无声的视频

3、将上面的音乐与无声的视频合并

ffmpeg -i music.mp3 -i video.mp4 output.mp4

将music.mp3音乐和video.mp4无声视频合并成output.mp4新视频

当然,也可以通过Python来合并,但需要导入新的库,效果一样

import numpy as npimport subprocesscmd = 'ffmpeg -i music.mp3 -i video.mp4 output.mp4'subprocess.call(cmd)

      以上就是人脸识别和音视频操作的简单介绍,因为不作为重点只是为了展示Numpy的作用。若是对这方面有兴趣,可以研究一下opencv这个模块。

      后续仍将以数据分析和办公自动化为主,下面介绍对Excel进行操作,实现自动脚本的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值