【Python】视频字幕提取神器 附成品源码

顾名思义,视频字幕提取神器这个就是用来提取视频中字幕区域的文字的,利用了百度识字接口和cv2 Python语言来实现的。某些职业,某些人用得上,比如看视频记笔记,或者摘抄视频中的文案内容等等。

之前一直在用其他的软件,可惜识别精准度不高,视频字幕提取神器明显好用多了。

源码

# encoding:utf-8

import requests,time,cv2

import base64,copy

from PIL import Image

class Baiduorc():

def __init__(self,AK,SK,MS=1):

self.AK=AK

self.Sk=SK

self.MS = MS

host = f’https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={AK}&client_secret={SK}

try:

response = requests.get(host)

if response:

access_token = response.json()[‘access_token’]

self.access_token = access_token

else:

self.access_token = None

except:

self.access_token = None

#获取鉴权接口,就是身份验证…

def get_text(self,imagePath):

”’

识别文字

:param imagePath: 图片地址

:return: 返回结果

”’

if self.MS==1:

request_url = “https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic”

else:

request_url = “https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic”

# 二进制方式打开图片文件

with open(imagePath,‘rb’)as f:

img=f.read()

img = base64.b64encode(img)

params = {“image”: img}

access_token = self.access_token

request_url = request_url + “?access_token=” + access_token

headers = {‘content-type’: ‘application/x-www-form-urlencoded’}

response = requests.post(request_url, data=params, headers=headers)

if response:

 

return response.json()

else:

return None

 

if __name__ == “__main__”:

print(‘高精度的接口次数有限,请自己去注册[url]https://cloud.baidu.com/product/ocr_general’[/url])

MS=int(input(“请选择调用精度:1普通识别,2高精度识别\n”))

mp4Name=input(‘请输入你的视频文件的完整目录和文件名:默认为 下载.mp4\n’)

if mp4Name==None or mp4Name==:

mp4Name=‘下载.mp4’

rectangle= input(‘请输入字幕的矩形范围格式为:x1,y1,x2,y2 默认为:36,292,598,330 如果输入0则为全屏 \n矩形坐标可以先默认,然后运行显示起来用截图工具把字幕矩阵区域的坐标搞到来!\n’)

if rectangle==None or rectangle==:

rectangle=[36,292,598,330]

elif rectangle==‘0’:

pass

else:

rectangle =rectangle.split(‘,’)

timeS=input(‘请输入视频截图间隔多少帧,默认为60\n’)# 视频帧计数间隔频率

if timeS==None or timeS==:

timeS=60

else:

timeS=int(timeS)

#百度识字

# client_id 为官网获取的AK, client_secret 为官网获取的SK

with open(‘百度ak和sk.txt’,‘r’)as f:

ak_and_sk=f.read()

ak_and_sk=ak_and_sk.split(‘\n’)

 

AK = ak_and_sk[0].split(‘”‘)[1]

 

SK = ak_and_sk[1].split(‘”‘)[1]

print(‘百度ak和sk’,AK, SK)

bd = Baiduorc(AK=AK, SK=SK,MS=MS)

imagePath = “1.png”#临时存放目录

c = 0

cap = cv2.VideoCapture(mp4Name)

last_text=

now_text=

text=

while (cap.isOpened()):

c = c + 1

ret, frame = cap.read()

frame

if c%timeS==0: # c除尽timeS时取帧保存,图片,即隔timeS保存一次图片

#cv2.imwrite(imagePath,frame)

#img = cv2.im(frame)

#37,297,534,336

if rectangle==‘0’:#全屏识别

cv2.imwrite(imagePath, frame)

else:

try:

frame_jq=frame[rectangle[1]:rectangle[3], rectangle[0]:rectangle[2]]

cv2.imwrite(imagePath, frame_jq)

except:

break

jstext = bd.get_text(imagePath)

try:

now_text=jstext[‘words_result’][0][‘words’]

if now_text!=last_text:

text=text+now_text+‘\n\r’

print(jstext[‘words_result’][0][‘words’])

last_text=copy.copy(now_text)

except:

pass

cv2.imshow(‘image’, frame)

k = cv2.waitKey(20)

# q键退出

if (k & 0xff == ord(‘q’)):

 

break

 

cap.release()

cv2.destroyAllWindows()

with open(‘test.txt’,‘w’)as f:

f.write(text)

input(‘完成’)

下载地址

下载资源包含:视频字幕提取神器源码和封装好的成品。有能力的可以二次开发,也可以直接运行成品exe文件

蓝奏云:https://lanren.lanzoux.com/b00u5c9wj 密码:e2ae

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权。
原文链接:https://www.701z.com/11566.html,转载请注明出处。
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
0

评论0

请先
显示验证码
没有账号?注册  忘记密码?