8.1 识别字幕
1.安装包
①安装tesseract-ocr。
②设置执行文件的路径。
Win+R-输入sysdm.cpl-高级-环境变量-打开path-编辑(tesseract-ocr的路径)
安装参考:Tesseract OCR V5.0安装教程(Windows) - 简书
③把语言文件拷贝到tessdata目录下:
2.jupyter notebook中编写字幕识别的代码
if __name__ == '__main__': __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。
注意:是两个下划线
代码如下:
import pytesseract
import cv2
import numpy as np
from scipy import stats
import os
import matplotlib.pyplot as plt
os.chdir(r'D:a learn sth大三上Python程序设计字幕识别')
if __name__ == '__main__':#这是两个下划线
path = "dang.mp4"
print(path)
cap = cv2.VideoCapture(path)
frame_count = int(cap.get(cv2.CAP_PROP_frame_COUNT))#看一共有多少帧
print(frame_count)
i=0
while i
3.将字幕识别的功能呈现到前端网页上
8.2 前几课内容梳理
Flask基本框架:
【作用】Flask能帮助我们运用python快速搭建一个网页
【案例梳理:网页中显示“视频分镜”】
1.Flask框架搭建:
①新建python文件,命名为main.py,其中框架如下:
From flask import Flask#导入flask包
app=Flask (__name__)
@app.route('/')
def index():
return “hello world”
if __name__ == '__main__':
app.run()
2.新建html文件
给tittle和body添加内容
分镜
视频分镜
3.回到main.py中,在From flask import Flask后添加模块, render_template
Main中把return那行改成:return_template(‘index.html’)
打开网页即可看到“视频分镜”的字样。
From flask import Flask,render_template
app=Flask (__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run()
4.新建文件夹static,将MP4文件放进去。
之后切帧生成的文件都放在static里。
注意:static里面放静态文件,template放网页
5.添加切帧代码
复制相应的代码到main.py中,通过def genframe()的方式
def genframe():#写一个函数,放之前的片段。函数如果放在下面可能找不到,那就往上挪一挪
v_path='static/ghz.mp4'
image_save='static/pic'
if not(os.path.exists(image_save)):#如果没有这个文件
os.mkdir(image_save)#就新建一个文件
cap=cv2.VideoCapture(v_path)
fc=cap.get(cv2.CAP_PROP_frame_COUNT)
for i in range(int(fc)):#帧数变为整数
_,img=cap.read()
cv2.imwrite('static/pic/image{}.jpg'.format(i),img)
6.要将文件名传到网页中。
先用#genframe()将切帧的部分注释掉(便于从网页中查看是否传输成功)
@app.route('/')#根路由器,路由器用于分发
def index():#定义一个函数
#return"hi,flask!"
genframe()#运行上面的函数
framecount = 249 # 根据文件中的帧数输入数字;这一行是指将这边的 帧数 传到html中
#pic = 'static/pic/image0.jpg'
pic = 'static/pic/image'
return render_template('index.html',pic1=pic,framecount=framecount)#返回一个模板,将framecounthe和pic传过去
这里模块里的第一个framecount指的是html里面的变量framecount,而第二个framecount指的是函数index里面的变量framecount;即render_template的功能是对先引入index.html,同时根据后面传入的参数,对html进行修改渲染。
7.在html的python语句中添加循环(图片大小、来源等)
{{}}表示这是一个变量,可以根据用户在模块端给予的参数的不同,进行调整
参考网址:Flask 学着用模板 render_template_yy19890521的博客-CSDN博客_render_template



