Script para coletar citaçÔes e reconhecer texto de vídeo em Python

Uma postagem sobre um script que baixa vĂ­deos do youtube e reconhece texto nele. Decidi começar imediatamente com a implementação prĂĄtica. "Vdudictionary" - Colecionador de scripts da coleção de citaçÔes de herĂłis "Vdud" em Python. Yuri Dud e seu projeto "Vdud" nĂŁo precisam ser apresentados. As entrevistas mais quentes que sĂŁo interessantes de assistir. Yuri Alexandrovich sabe como fazer um show interessante, independentemente de vocĂȘ conhecer o herĂłi de uma questĂŁo especĂ­fica, ser fĂŁ dele ou ouvir pela primeira vez esse nome.

Quantos cm vocĂȘ tem? O que vocĂȘ diz a Putin? VocĂȘ estĂĄ ouvindo OXY?


Essas e muitas outras perguntas estĂŁo agora associadas ao Dudem. Quando o entrevistado pronuncia uma frase cheia de sabedoria, os editores atenciosos a exibem cuidadosamente na tela de nossos monitores com vocĂȘ para nos transmitir o ponto inteiro. Meu objetivo era cristalizar essa sabedoria de geraçÔes e criar o dicionĂĄrio "Vdudexicon" ou "Vdudictionary".

Naturalmente, uma pessoa, mesmo que nĂŁo seja sobrecarregada com um histĂłrico especĂ­fico de TI, nĂŁo precisa coletar essas palavras com as mĂŁos. Para isso, desenhei um script python.



Primeiro de tudo, precisamos de um arquivo que iremos processar. Para baixar vĂ­deo do Youtube, usei o mĂłdulo pytube.

pip install pytube 

Um exemplo de download de um arquivo do youtube

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

O arquivo foi baixado. Agora começaremos a determinar metodicamente molduras com um significado concentrado, com a sabedoria dos contemporùneos, com as palavras dos heróis de nosso tempo.



NĂŁo havia placa retangular em versĂ”es mais antigas, portanto, podemos procurar texto na parte inferior da tela. Em novos lançamentos, vocĂȘ pode usar o mesmo e antigo OpenCV para procurar um retĂąngulo, o que permitirĂĄ obter um quadro de um vĂ­deo.

 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) 

Para instalar o cv2 para python3 no raspberry3, foi necessĂĄrio instalar muitos pacotes devido a dependĂȘncias. Talvez alguns pacotes sejam redundantes, isso se deve Ă  minha inexperiĂȘncia, foi assim que tudo começou.

 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 

Colocamos o tesseract - este Ă© um mecanismo de OCR necessĂĄrio para o reconhecimento Ăłptico de texto.

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

Os lançamentos usam um fone de ouvido muito específico, o que dificulta o reconhecimento. Em geral, instalamos um dicionårio para o alfabeto cirílico. Faça o download e transfira para / usr / share / tesseract-ocr / tessdata.



O script na entrada recebe o endereço do vĂ­deo no youtube. Ele baixa um arquivo, começa a processar um quadro em 5 segundos. Se houver um quadrado no quadro, corte-o, descolora-o, aumente o contraste e o reconheça. Se a cadeia tiver menos de 15 caracteres, nĂŁo a considere. VocĂȘ pode, Ă© claro, usar uma sequĂȘncia de menos de 15 caracteres, mas como uma das heroĂ­nas do programa disse:
-NĂŁo sei, rapazes, como vocĂȘ vive com pequenas falas.

Colocamos no texto do arquivo de log, hora e um link para o momento no youtube. Ignoramos 5 segundos (nĂŁo pergunte por que esse nĂșmero veio Ă  mente, a verificação nĂŁo encontrou a sobreposição de duas aspas nesse perĂ­odo). VocĂȘ pode excluir o arquivo de vĂ­deo e prosseguir com a prĂłxima versĂŁo.

CĂłdigo de script completo:

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


Exemplo de script
Tolokonnikova - bissexualidade, FACE, prisĂŁo / vDud
Tempo c.Citação
95“OS ATIVISTAS NÃO DEIAM O MENTOBE.
ELES DEVEM TENTAR ENTENDER,
QUE O CENT POSSUIA UM CENT "
→
195PETER VERZILOV - PARTICIPANTE DO RIOT DA BUCETA
ESPERANÇA ANTIGA DO MARIDO TOLOKONNIKOVA
→
255Ekaterina Samutsevich→
570EU AMO MALHAS!→
595'vLADMTSR sorbyPn
‚
→
990PETER VERZILOV NA JUVENTUDE VIVA NO JAPÃO JUNTO COM OS PAIS.
PAI DE PETER - MÉDICO NUCLEAR
→
995PETER VERZILOV NA JUVENTUDE VIVA NO JAPÃO JUNTO COM OS PAIS.
PAI DE PETER - MÉDICO NUCLEAR
→
127011 DE SETEMBRO DE 2018 PETER vrzipov foi hospitalizado
Departamento TĂłxico
Hospital clĂ­nico da cidade
→
127515 DE SETEMBRO FOI ENTREGUE POR AERONAVES PRIVADAS
AO SASTE DA CLÍNICA DE BERLIM
→
128018 DE SETEMBRO DE 2018 DOUTORES DE BERLIM
Antes, VERZILOV FOI ENVENENADO POR ESCOPOLAMINA.
26 de setembro foi dispensada da clĂ­nica de Berlim
→
128518 DE SETEMBRO DE 2018 DECLARADOS DOUTORES DE BERLIM
Antes, VERZILOV FOI ENVENENADO POR ESCOPOLAMINA.
26 de setembro foi dispensada da clĂ­nica de Berlim
→
1395"MEDIAZONE" - intravrnvt-eddniv sobre os tribunais,
PRISÃO E RÚSSIA. Principalmente em St. 2014 no ano
ESPERANÇAS tol_okonnikovoy e MARIEI Alekhinoi
→
1590“Se algo Ă© uma lista de preços assustadora? Nonsendchit, '
que vocĂȘ DEVE MESMO
→
1760yoko ono - FIGURA PÚBLICA, VIÚVA DE JOE "...
PE
VICE, ARTISTA,
→
2040"SE ALGUÉM É PAI LOUCO,
ESTE, pelo contrårio, A RAZÃO DO RESPEITO! - "
→
2330"MÃE INTERNA"
→
2425CIDADE DE KITEGE - UMA CIDADE DE SUNFRONT, ACONTECEU, de acordo com a lenda,
NA REGIÃO DE OVERNIJA NIZHNY NOVGOROD,
NAS PRAIAS DO LAGO SVETLOYAR
→
2515“MOSTRAMOS LOBSER e ajudamos
zdvlichiny e ESCRITORES »
→
2550AGORA- EM OPOSIÇÃO RÍGIDA DA RÚSSIA â€ș. ''
VIDAS E OBRAS NOS EUA
→
2745TOLOKONNIKOVA PASSOU NA PRISÃO 661 DIA.
. DE 3 DE MARÇO DE 2012 A 23 DE DEZEMBRO DE 2013
No md.
→
2985VPTSN - TERMOS DESCRITIVOS EM SLENG
MENINA COMUM HOMEM COMUNITÁRIA LGBT '‚
00 SWITCHES “SOB MALYO____A”
→
2990VTsTSN - TERMOS DESCRITIVOS NO SLENG _
MENINA COMUM HOMEM COMUNITÁRIA LGBT
COM UM CABELO "SOB O MENINO"
→
3280"TAL TEMPO RUSSO"
; B?
→
3290SHIZO - ISOLADOR DE PENALIDADE. DEPARTAMENTO DA INSTITUIÇÃO CORRETIVA,
ONDE AS CÂMERAS ESTÃO LOCALIZADAS PARA O CONTEÚDO DO MODO CONTÍNUO.
HOMEM COLOCADO NO ISOLADOR DE PENA,
LIMITADO SIGNIFICATIVAMENTE EM DIREITOS
‚â€ș, - "
→
3315"HOMEM, que fica muito tempo", E;
RENOVA sua vida novamente ”; 3
→
3510APÓS A PROMOÇÃO NO TEMPLO DE CRISTO - ', O PAÍS FOI DETALHADO E
TRÊS PARTICIPANTES DE RPZZU KUT CONDENADOS
ESPERANÇA TOLOKONNIKOVA, MARIA ALEKHIN E YEKATERINA SAMUTSEVICH
→
3540EKATERINA SAMUTS
OBTENHA DOIS ANOS CONDICIONALMENTE
→
3660“A JUVENTUDE está muito traumatizada. __
que o IVA não possui cheque especial EXCLUSIVO ”; ''
→
3740ESPERANÇA TOLOKONIKOVA DOIS ANUNCIAM A CAÇA DA FOME
NA MORÔNIA COLÔNIA N ° 14 SOBRE A EXIGÊNCIA DE TRADUÇÃO
EM OUTRO LUGAR DE PENALIDADE
→
4275DISCURSO SOBRE RZZU RUT SHARE MEDICINALISTA ENTRA NO JOGO »_
NA FINAL DO CAMPEONATO MUNDIAL DE 2018 EM MOSCOU
→
4495â€č
''
"COMBINAÇÃO DE JOGO E POSIÇÃO"
→
4735"Se eu tiver um rima ruim e bom,
ESCOLHEI MAU
→
4755"HISTÓRIA DO JARDIM ZOOLÓGICO"
→
4800BERNIE SANDERS - CANDIDATO PARA NOME_PRESIDENTE
NAS ELEIÇÕES 2016_ODA. PRIMERIZAR PERDIDO
HIPPARI CLINTON DEMO
-
→
4820. ERRADO COM
REALIDADE
_umvdiv fala e linguística RAznBіkh
→
4865"Zdorny jogging"
→
5055»" "
"REP Ă© uma compreensĂŁo da realidade"
→


Obviamente, o script tem alguns problemas com o reconhecimento da fonte WOOD "específica". Vejo uma solução para esse problema ao finalizar o arquivo de dicionårio para OCR e no pós-processamento de texto através do PyEnchant.

Com um pouco de refinamento, esse script pode ser usado para procurar legendas incorporadas, reconhecĂȘ-las e traduzir automaticamente para outro idioma.

Se vocĂȘ pode incentivar Yuri a aprender sobre esse experimento, faça-o sem demora. #habr #vdudictionary VK , FB .

Obrigado pela atenção! O script e o post surgiram como resultado de um voo de fantasia enquanto estudava o OpenCV para o meu projeto de robÎ para pegar bolas de golfe .

Source: https://habr.com/ru/post/pt428147/


All Articles