【视频数据采集及前期处理(二)之视频数据前处理】

接上篇文章,得到的视频数据,需要前期处理,用于机器学习。功能目的:将视频数据去除画面中无人脸的帧,再另存为:

实现逻辑:通过opencv将视频流导入,取得每一帧进行人脸检测,if有人脸则将此帧数据存入:

#----------------------------------截取有人脸的视频——————————————————————————————
# -*- coding: utf-8 -*-
# import openCV的库
import cv2
import os, math, operator
from PIL import Image
from functools import reduce

# 读取输入视频流
video = cv2.VideoCapture("D:\\a000\\00NBD_data\\download\\s00001\\video\\s00001_001_00001.mp4")
# 获取视频的帧率和尺寸
fps = video.get(cv2.CAP_PROP_FPS)
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps)
#####################################################################
# 创建输出VideoWriter对象以保存提取的帧为新的视频文件
output_video = cv2.VideoWriter(
    'img/video2.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))

# 告诉OpenCV使用人脸识别分类器(cv2.data.haarcascades可以用作数据文件夹的快捷方式)
classfier = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

#开始读取输入的视频帧
while video.isOpened():
    ok, frame = video.read()  # 读取一帧数据
    
    if not ok:
        break

    grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 将当前桢图像转换成灰度图像

    # 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
    faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
    if len(faceRects) > 0:  # 大于0则检测到人脸

        output_video.write(frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
video.release()
output_video.release()
cv2.destroyAllWindows()

发现有的间隔较大,删掉的部分较多,视频不连贯,没必要保存在同一段视频中,接下来截成几段:

#--------------------将视频有人脸的部分截下来,且间隔较长帧时间(这里设的5fps)未出现人脸,则分割存在下一段视频中
# -*- coding: utf-8 -*-
# import openCV的库
import cv2
import os, math, operator
from PIL import Image
from functools import reduce

# 读取输入视频流
video = cv2.VideoCapture("D:\\a000\\00NBD_data\\download\\s00001\\video\\s00001_001_00001.mp4")
# 获取视频的帧率和尺寸
fps = video.get(cv2.CAP_PROP_FPS)
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps)
#####################################################################
# 创建输出VideoWriter对象以保存提取的帧为新的视频文件
#output_video = cv2.VideoWriter(
#    'img/video2.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))

# 告诉OpenCV使用人脸识别分类器(cv2.data.haarcascades可以用作数据文件夹的快捷方式)
classfier = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
i = 1
count = 1
count_face = 0
output_video = cv2.VideoWriter(f'img/{i}.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))
#开始读取输入的视频帧
while video.isOpened():
    ok, frame = video.read()  # 读取一帧数据

    if not ok:
        break

    grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 将当前桢图像转换成灰度图像

    # 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
    faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
    if len(faceRects) > 0:  # 大于0则检测到人脸

        if count-count_face < 5:

            output_video.write(frame)
        else:
            output_video.release()
            i+=1
            output_video = cv2.VideoWriter(f'img/{i}.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))

        count_face = count
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    count += 1
# 释放资源
video.release()
cv2.destroyAllWindows()

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值