学了好久机器学习的内容有些许枯燥,今天我们来做一个Python的小项目来玩耍吧!
项目背景
通过获取百度API实现视频文字识别。
需求阐述
将.MP4格式视频裁剪成一帧一帧的图片再将图片中的字幕摘取出来,保存成一个文档。
进入正题喽!!!
思路
1.将视频按帧截取成图片
2.将上一步截取的图片再进行裁剪,只保留字幕部分,然后在进行灰度处理
3.调用百度api识别文字
4.输出成txt
首先导包
# base64是一种将不可见字符转换为可见字符的编码方式
import base64
# opencv是跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法
import os
import cv2
import requests
from aip import AipOcr
# 百度AI的文字识别库
base64
base64是一种将不可见字符转换为可见字符的编码方式。
opencv
是跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。
AipOcr
百度AI的文字识别库。
注意:
这里from aip import AipOcr
刚开始可能会报错,原因可能是aip和baidu-aip根本不是同一个包,如果想要import的时候,都是使用:import aip
之后pip install baidu-aip就没报错了。
代码详情
裁剪视频
def tailor_video():
# 要提取视频的文件名,隐藏后缀
sourceFileName = 'material'
# 在这里把后缀接上
video_path = os.path.join("G:/material/", sourceFileName + '.mp4')
times = 0
# 提取视频的频率,每10帧提取一个
frameFrequency = 10
# 输出图片到当前目录video文件夹下
outPutDirName = 'G:/material/video/' + sourceFileName + '/'
if not os.path.exists(outPutDirName):
# 如果文件目录不存在则创建目录
os.makedirs(outPutDirName)
camera = cv2.VideoCapture(video_path)
while True:
times += 1
res, image = camera.read()
if not res:
print('not res , not image')
break
if times % frameFrequency == 0:
cv2.imwrite(outPutDirName + str(times) + '.jpg', image) #文件目录下将输出的图片名字命名为10.jpg这种形式
print(outPutDirName