使用Python收集报价和识别视频中的文本的脚本

有关脚本的帖子,该脚本可从youtube下载视频并识别其中的文本。 我决定立即开始实际实施。 “ Vdudictionary”-Python中英雄“ Vdud”引号集合的脚本收集器。 不需要介绍Yuri Dud及其项目“ Vdud”。 最热门的采访很有趣。 尤里·亚历山德罗维奇(Yuri Alexandrovich)知道如何制作有趣的节目,无论您知道某个特定问题的英雄,是他的粉丝,还是第一次听到这个名字。

你有几厘米? 你对普京怎么说? 您在听OXY吗?


这些问题和许多其他问题现在与Dudem有关。 当受访者说出一个充满智慧的短语时,有爱心的编辑人员会与您一起在监视器的屏幕上仔细显示它,以将要点传达给我们。 我的目标是明确几代人的智慧,并创建字典“ Vdudexicon”或“ Vdudictionary”。

自然,即使没有特别的IT背景负担,一个人也不必用手收集这些说法。 为此,我绘制了一个python脚本。



首先,我们需要一个要处理的文件。 要从Youtube下载视频,我使用了pytube模块。

pip install pytube 

从youtube下载文件的示例

 from pytube import YouTube a=YouTube('https://www.youtube.com/watch?v=RNbXm8WKmow') a.streams.first().download() 

该文件已下载。 现在,我们将开始使用当代人的智慧以及我们时代英雄的谚语,有条不紊地确定具有集中意义的框架。



在较早的版本中没有矩形板,因此我们可以在屏幕底部搜索文本。 在新版本中,您可以使用相同的旧OpenCV来搜索矩形,这将使您能够从视频中获取帧。

 a,contours,h = cv2.findContours(gray3, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for i in contours: cv2.drawContours(gray3,[i],0,(0,0,255),1) 

要在raspberry3上为python3安装cv2,由于依赖关系,必须安装许多软件包。 也许有些软件包是多余的,这是由于我的经验不足,这就是一切的开始。

 sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get -y install libopencv-dev sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm sudo apt-get -y install libtiff4-dev libjpeg-dev libjasper-dev sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev sudo apt-get -y install python-dev python-numpy sudo apt-get -y install libtbb-dev sudo apt-get -y install libqt4-dev libgtk2.0-dev sudo apt-get -y install libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev pip install opencv-python 

我们把tesseract-这是光学文本识别所必需的OCR引擎。

 sudo apt-get install tesseract-ocr sudo pip3 install pytesseract sudo pip3 install tesseract 

这些发行版使用非常特定的耳机,因此很难识别。 通常,我们为西里尔字母安装字典 。 下载并传输到/ usr / share / tesseract-ocr / tessdata。



输入处的脚本接收youtube上视频的地址。 它下载文件,在5秒钟内开始处理一帧。 如果框架中有一个正方形,则将其切出,使其变色,增加对比度并加以识别。 如果字符串少于15个字符,请不要考虑。 当然,您可以使用少于15个字符的字符串,但是正如该程序的女主人公之一所说:
-男孩,我不知道你的生活如何细小。

我们在youtube中输入了日志文件的文本,时间和指向当前时间的链接。 我们跳过了5秒(不要问为什么首先想到这个数字,检查在这段时间内没有找到两个引号的重叠部分)。 您可以删除视频文件,然后继续下一个版本。

完整的脚本代码:

Python 3脚本
 import cv2 import pytesseract import numpy as np from pytube import YouTube import os nameofvideo="RNbXm8WKmow" a=YouTube('https://www.youtube.com/watch?v='+nameofvideo) a.streams.first().download() title=a.title title2=title.replace("/","").replace(",","").replace(".","")+".mp4" os.rename(title2, "youtubefile.mp4") print(title) f=open('/var/www/python/'+str(nameofvideo)+'.txt','w') f.write(title+"<br>") f.write('<table><tr><td></td><td></td><td></td></tr>') spisoksimvolovpodudalenie=["*","/","|","\\",")","(","}","{","+","`","~","№","",":","$","#","@","%","[","]","&","^","' "] def udaleniesimvolov(stroka): for element in spisoksimvolovpodudalenie: stroka=stroka.replace(element,"") return stroka vidcap = cv2.VideoCapture('youtubefile.mp4') vidcap.set(cv2.CAP_PROP_POS_AVI_RATIO,1) durationsec=int(vidcap.get(cv2.CAP_PROP_POS_MSEC)/1000) print("duration: "+str(durationsec)+" sec") for thissec in range(0,durationsec,5): vidcap.set(cv2.CAP_PROP_POS_MSEC,thissec*1000) success,image = vidcap.read() gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray2 = cv2.addWeighted( gray, 1.5, gray, 0, 0.5) gray3 = gray2[450:670,0:1280] if success: print(str(thissec)+" sec.") text = udaleniesimvolov(pytesseract.image_to_string(gray3, lang='rus')) if len(text)>15: print (text) f.write('<tr><td>'+str(thissec)+'</td><td>'+text+'</td><td><a href="https://www.youtube.com/watch?v='+nameofvideo+"&t="+str(thissec)+'"></a></td></tr>') print("----") f.write('</table>') f.close() 


脚本示例
Tolokonnikova-双性恋,面部,监狱/ vDud
时间c。报价单
95“活动家不应该讨厌薄荷糖。
他们必须尝试去理解,
那分就是一分“
195PETER VERZILOV-参加猫咪大赛的人
前霍万德·希普·托洛科尼科娃
255叶卡捷琳娜(Ekaterina Samutsevich)
570我喜欢针织品!
595'vLADMTSR sorbyPn

990PETER VERZILOV与父母一起住在日本。
彼得的父亲-核物理学家
995PETER VERZILOV与父母一起住在日本。
彼得的父亲-核物理学家
12702018年9月11日PETER vrzipov住院
毒物部
市临床医院
12759月15日由私人飞机交付
前往柏林诊所
12802018年9月18日,柏林医生
相反,VERZILOV被SCOPOLAMIN解毒。
9月26日从柏林诊所撤离
12852018年9月18日柏林医生声明
相反,VERZILOV被SCOPOLAMIN解毒。
9月26日从柏林诊所撤离
1395“ MEDIAZONE”-有关法院的intravrnvt-eddniv,
逮捕和俄罗斯。 主要在当年的2014年圣
希望tol_okonnikovoy和MARIEI Alekhinoi
1590“如果是SCARY价格表? Nonsendchit,
你必须自己
1760小野洋子-公众人物,乔的遗“” ...
聚乙烯
副主席,艺术家,
2040年“如果某人是疯子,
这是值得尊重的原因!-“
2330“内部妈妈”
2425风筝之城-日前的城市_根据传说,
在下诺夫哥罗德地区的大部分地区,
在SVETLOYAR湖的海滩上
2515“我们向失败者展示并提供帮助
zdvlichiny和作家»
2550现在-俄罗斯的坚决反对›。 ''
在美国的生活和工作
2745托洛孔尼科娃在661天监狱中通过。
。 从2012年3月3日到2013年12月23日
在md。
2985VPTSN-吊杆上描述的条款
LGBT社区男生'
00开关“ DERDER MALYO____A”
2990VTsTSN-吊杆上描述的术语_
LGBT社区类似女孩
带着“男孩子”的腰包
3280“俄罗斯时间”井
; B?
3290SHIZO-惩罚绝缘子。 矫正部门
在哪里为连续模式的内容定位了摄像机。
放置在惩罚绝缘子中的人,
权利受到明显限制
,›,-“
3315“男人,坐了很久。” E;
重新更新他的生活”; 3
3510在基督殿堂中得到晋升之后-“付款人被确定并
RPZZU KUT的三名代表被谴责
希望托洛科尼科娃,玛丽亚·阿莱欣和叶卡捷琳娜·萨穆茨维奇
3540叶卡捷琳娜
连续两年获得
3660“ YOUTH受到了极大的创伤。 __
该增值税没有专项透支”; ''
3740希望托洛科尼科娃(HOPE TOLOKONIKOVA)两次宣布饥饿
在第14号《摩尔多瓦殖民地》中对翻译的要求
在另一处处罚
4275关于RZZU RUT股票医疗人员进入游戏的演讲»_
在2018年FIFA世界莫斯科决赛中
4495
''
“游戏与位置的结合”
4735“如果我有不良的韵律和良好的条件,
我会选择坏的
4755“动物园历史”
4800BERNIE SANDERS-候选人的姓名(美国)
在选举2016_ODA中。 丧失优先权
希帕里·克林顿
--
4820。 与错
现实性
_umvdiv说ndRAznBіkh语言学
4865“ Zdorny慢跑”
5055»”“
“ REP是对现实的理解”


显然,该脚本在识别“特定” WOOD字体方面存在一些问题。 在为OCR最终确定字典文件并通过PyEnchant对文本进行后期处理时,我看到了解决此问题的方法。

稍作改进,该脚本可用于搜索嵌入的字幕,识别它们并自动翻译成另一种语言。

如果您可以鼓励Yuri了解这项实验,请立即进行。 #habr #vdudictionary VKFB

感谢您的关注! 脚本和帖子是在我为高尔夫捡球机器人项目研究OpenCV时进行一次幻想飞行而产生的。

Source: https://habr.com/ru/post/zh-CN428147/


All Articles