环境设置:
1、安装pip3 install pytesseract
2、安装tessract-OCR(将安装路径添加至环境路径,此处我安装在D:\Tesseract-OCR中)
导入pytesseract包时注意,修改D:\Python 32\Lib\site-packages\pytesseract中【pytesseract.py】文件中的代码修改至OCR的所在路径:
tesseract_cmd = 'D:\Tesseract-OCR\tesseract.exe’
import pytesseract
import cv2
import numpy as np
from scipy import stats
import os
import matplotlib.pyplot as plt
os.chdir('d:\\image')
读取视频的各个帧,将有字幕的图片片段提取出来,并以灰度图显示。
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()
结果显示: