python学习⑥|基于tesseract的视频字幕提取

一、准备工作

1、正常流程

参考教程链接:Tesseract OCR V5.0安装教程(Windows)

流程概览:

  • 下载tesseract程序
  • 设置环境变量
  • 检查是否安装成功
  • 使用拓展语言包-中文
  • 查看支持语言是否ok

2、持续报错及解决

jupyter持续路径报错

  pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your PATH

用教程里的代测试了一些自己是否有安装成功,但jupyter一直报错。

反复订正自己的安装流程,确定没有一点点问题,但偏偏就给我整这么一出。
思来想去,可能是jupyter和原生python不一样(之前也遇到过同样的问题)。

于是在原生python中试了一下。

在这里插入图片描述
这里是原图

成了!!

解决jupyter环境变量问题

找到了问题所在,但解决仍然艰巨。
千辛万苦找到了这个教程:Jupyter notebok 环境配置,与kernel切换(切换虚拟环境)

在这里插入图片描述

新建了这两个环境变量。

如何找到特定的路径

C:\Users\ouoli\anaconda3\pkgs\python-3.8.8-hdbf39b2_5

对于这个奇怪的路径,大家自己不要直接复制。
在搜索框里搜索jupyter,连续两次使用**【打开文件所在位置】**
在这里插入图片描述
于是顺藤摸瓜一路找到文件夹。
在这里插入图片描述

二、正式开始

1、最基本的识别-从读图开始

基本思路

  • 引入库 PIL,pytesseract
  • 读取图片,Image.open(file)
  • 内容分析pytesseract.image_to_string(image,lang=’ ')
  • 打印

源代码如下

from PIL import Image
import pytesseract
file = r"D:\pythonAds2021\text_rec\2.jpg"
image = Image.open(file)
content = pytesseract.image_to_string(image, lang='eng')
print(content)

在这里插入图片描述

2、提取字幕

import pytesseract
import cv2
import numpy as np
from scipy import stats
import os
import matplotlib.pyplot as plt
os.chdir('D:\pythonAds2021')

读取视频的各个帧,将有字幕的图片片段提取出来,并以灰度图显示。

if __name__ == '__main__':
    path = "a.mp4"
    print(path)
    cap = cv2.VideoCapture(path)
    frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    print(frame_count)
    i=0
    while i<frame_count:
        cap.set(cv2.CAP_PROP_POS_FRAMES, i)
        _, frame = cap.read(i)
        if i==48:
            cv2.imwrite('20210701.jpg',frame)
            
        shape = frame.shape
        #调整字幕显示的区间
        img=frame[550:600, 0:1070]
        plt.imshow(img)
        plt.axis("off")
        plt.show()
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度图
        #cv2.imshow("Frame-2:Gray", img)            #显示灰度图
        _, img= cv2.threshold(img, 220, 255, cv2.THRESH_BINARY)  # 图像,阈值,映射的最大值,使用什么算法一般为cv2.thresh_binary
        #cv2.imshow("Frame-3:Binary", img)            #显示灰度图

用Tesseract-OCR对截取出的字幕图片进行分析,按每秒24帧计算,间隔2.5秒截取一次,提取字幕。

        #tessdata_dir_config = '--tessdata-dir "D:\\Tesseract-OCR\\tessdata"  --psm 7 -c preserve_interword_spaces=1'
        #设置中文字体
        word = pytesseract.image_to_string(img,
                                           lang='chi_sim',
                                           config=' --psm 7 -c preserve_interword_spaces=1')
                                           #config=tessdata_dir_config)
        print(word)
        #设置间隔时间
        i=i+24*2.5

        if cv2.waitKey(10) & 0xff == ord("q"):
            break
    cap.release()
    cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/weixin_49011547/article/details/121412696