一、步骤
- 上传你的视频,重命名为in.mp4,将视频进行切割操作。
 - 将切割好的图片进行文字识别。
 - 将识别好的文字全部放入out.txt文件当中。
 
二、实现技术
chinese_ocr_db_crnn_server
- 类别图像 - 文字识别
 - 网络Differentiable Binarization+CRNN
 - 数据集icdar2015数据集
 
chinese_ocr_db_crnn_server Module用于识别图片当中的汉字。其基于chinese_text_detection_db_server检测得到的文本框,继续识别文本框中的中文文字。识别文字算法采用CRNN(Convolutional Recurrent Neural Network)即卷积递归神经网络。其是DCNN和RNN的组合,专门用于识别图像中的序列式对象。与CTC loss配合使用,进行文字识别,可以直接从文本词级或行级的标注中学习,不需要详细的字符级的标注。该Module是一个通用的OCR模型,支持直接预测。

该Module依赖于第三方库shapely和pyclipper,使用该Module之前,请先安装shapely和pyclipper。
- paddlepaddle >= 1.7.2
 - paddlehub >= 1.6.0
 - shapely
 - pyclipper
 
三、实现过程
1.安装依赖
环境自带的paddle以及paddlehub版本足够支持本模型运行,因此不升级版本
!pip install shapely
!pip install pyclipper
2.安装模型
安装chinese_ocr_db_crnn_server模型,后续进行使用
!hub install chinese_ocr_db_crnn_server
3.创建文件
创建我们需要的文件以及文件夹并进行判断,以防大家在文件存在的时候报错
import os
path = './images/';  # 将视频切割为图片存放的路径
txtpath = './out.txt' # 指定生成字幕后保存的文件
if os.path.exists(path):
    print('文件夹已经存在')
else:
    os.mkdir(path)  #不存在即创建
    print('创建成功')
if os.path.exists(txtpath):
    print('文件已经存在')
else:
    os.mknod(txtpath)  #不存在即创建
    print('文件创建成功')
4.视频处理
将视频按帧进行处理,并保存到path指定的文件夹中
#视频按帧处理读取图片
import cv2
vc = cv2.VideoCapture(r'./in.mp4')  # 读入视频文件,命名cv
n = 1  # 计数
if vc.isOpened():  # 判断是否正常打开
    rval, frame = vc.read()
else:
    rval = False
 
timeF = 10  # 视频帧计数间隔频率
 
i = 0
while rval:  # 循环读取视频帧
    rval, frame = vc.read()
    if (n % timeF == 0):  # 每隔timeF帧进行存储操作
        i += 1
        cv2.imwrite(r''+path+'{}.jpg'.format(i), frame)  # 存储为图像
    n = n + 1
    cv2.waitKey(1)
vc.release()5.字幕提取
将切割好的图片进行文字识别以及将文字保存到txtpath指定的txt中(这里提取的是全部的文字,如果只想提取字幕的话可以设置一个区域进行提取)
当预测的图片中没有文字的时候,返回值为空,所以需要进行判断(注意)
import paddlehub as hub
import cv2
data = os.listdir(path) #读取保存图片的文件夹
ocr = hub.Module(name="chinese_ocr_db_crnn_server") #加载模型
txt = open(txtpath,mode='w')
for file in data: #进行遍历
    result = ocr.recognize_text(paths=['./images/'+file],use_gpu=False,output_dir='ocr_result',visualization=True) #预测并输出我们的预测结果
    lujing = result[0]['save_path'] #保存图片的路径
    if lujing != "": # 当里边没有文字的时候,返回的为空
        os.rename(lujing,'./ocr_result/'+file)  #生成的图片重命名(ocr_result/ndarray_1598175427.8176346.jpg,还未找到如何自定义名称)
        text = result[0]['data']
        txt.write('-----'+file+'-----\n') #给每张图片做一个分隔符
        for file in text: #进行遍历
            name = file['text']
            txt.write(name+'\n')
        
print("全部预测完毕,请查看你的预测图片以及文字txt")
txt.close()

【本文fork自百度-飞桨Studio-星河社区】










