0
点赞
收藏
分享

微信扫一扫

百度飞桨paddle paddle字幕提取器|chinese_ocr_db_crnn_server Module|OCR模型

一、步骤

  1. 上传你的视频,重命名为in.mp4,将视频进行切割操作。
  2. 将切割好的图片进行文字识别。
  3. 将识别好的文字全部放入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模型,支持直接预测。


百度飞桨paddle paddle字幕提取器|chinese_ocr_db_crnn_server 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

百度飞桨paddle paddle字幕提取器|chinese_ocr_db_crnn_server Module|OCR模型_保存图片_02

2.安装模型

安装chinese_ocr_db_crnn_server模型,后续进行使用

!hub install chinese_ocr_db_crnn_server

百度飞桨paddle paddle字幕提取器|chinese_ocr_db_crnn_server Module|OCR模型_文字识别_03

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('文件创建成功')

百度飞桨paddle paddle字幕提取器|chinese_ocr_db_crnn_server Module|OCR模型_保存图片_04

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()

百度飞桨paddle paddle字幕提取器|chinese_ocr_db_crnn_server Module|OCR模型_人工智能_05

百度飞桨paddle paddle字幕提取器|chinese_ocr_db_crnn_server Module|OCR模型_paddle_06

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

举报

相关推荐

0 条评论