Script para recopilar citas y reconocer texto de video en Python

Una publicación sobre un script que descarga videos de YouTube y reconoce el texto que contiene. Decidí comenzar de inmediato con la implementación práctica. "Vdudictionary" - Recopilador de guiones de la colección de citas de héroes "Vdud" en Python. Yuri Dud y su proyecto "Vdud" no necesitan ser presentados. Las mejores entrevistas que son interesantes de ver. Yuri Alexandrovich sabe cómo hacer un espectáculo interesante, independientemente de si conoces al héroe de un tema en particular, si es su fan o si escuchas este nombre por primera vez.

¿Cuántos cm tienes? ¿Qué le dices a Putin? ¿Estás escuchando OXY?


Estas y muchas otras preguntas ahora están asociadas con Dudem. Cuando el entrevistado pronuncia una frase llena de sabiduría, los editores cuidadosos la muestran cuidadosamente en la pantalla de nuestros monitores para transmitirnos todo el asunto. Mi objetivo era cristalizar esta sabiduría de generaciones y crear el diccionario "Vdudexicon" o "Vdudictionary".

Naturalmente, una persona, incluso si no tiene la carga de un fondo de TI específico, no tiene que recopilar estos dichos con sus manos. Para esto, dibujé un script de Python.



En primer lugar, necesitamos un archivo que procesaremos. Para descargar videos de Youtube, utilicé el módulo pytube.

pip install pytube 

Un ejemplo de descarga de un archivo de youtube

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

El archivo ha sido descargado. Ahora comenzaremos a determinar metódicamente marcos con un significado concentrado, con la sabiduría de los contemporáneos, con los dichos de los héroes de nuestro tiempo.



No había una placa rectangular en versiones anteriores, por lo que podemos buscar texto en la parte inferior de la pantalla. En las nuevas versiones, puede usar el mismo viejo OpenCV para buscar un rectángulo, lo que le permitirá obtener un marco de un video.

 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 cv2 para python3 en raspberry3 tuve que instalar muchos paquetes debido a las dependencias. Quizás algunos paquetes sean redundantes, esto se debe a mi inexperiencia, así es como comenzó todo.

 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 

Ponemos tesseract: este es un motor de OCR necesario para el reconocimiento óptico de texto.

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

Los lanzamientos usan auriculares muy específicos, lo que dificulta su reconocimiento. En general, instalamos un diccionario para el alfabeto cirílico. Descargue y transfiera a / usr / share / tesseract-ocr / tessdata.



El script en la entrada recibe la dirección del video en youtube. Descarga un archivo, comienza a procesar un cuadro en 5 segundos. Si hay un cuadrado en el marco, recórtelo, descolórelo, aumente el contraste y reconozca. Si la cadena tiene menos de 15 caracteres, no la tenga en cuenta. Por supuesto, puede usar una cadena de menos de 15 caracteres, pero como dijo una de las heroínas del programa:
-No sé, muchachos, cómo viven con líneas pequeñas.

Ponemos en el archivo de registro el texto, la hora y un enlace al momento en youtube. Nos saltamos 5 segundos (no pregunte por qué esta cifra vino a mi mente por primera vez, la comprobación no encontró la superposición de dos citas dentro de este tiempo). Puede eliminar el archivo de video y continuar con la próxima versión.

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


Ejemplo de guion
Tolokonnikova - bisexualidad, CARA, prisión / vDud
Tiempo c.Cita
95“LOS ACTIVISTAS NO DEBEN ODIAR AL MENTOBE.
DEBEN INTENTAR COMPRENDER
QUE EL CENTO CAUSÓ SER UN CENT "
195PETER VERZILOV - PARTICIPANTE EN PUSSY RIOT
ANTIGUA ESPERANZA DEL MARIDO TOLOKONNIKOVA
255Ekaterina Samutsevich
570¡ME ENCANTA EL KNITWEAR!
595'vLADMTSR sorbyPn

990PETER VERZILOV EN JUVENTUD VIVÍA EN JAPÓN JUNTOS CON LOS PADRES.
PADRE DE PEDRO - FÍSICO NUCLEAR
995PETER VERZILOV EN JUVENTUD VIVÍA EN JAPÓN JUNTOS CON LOS PADRES.
PADRE DE PEDRO - FÍSICO NUCLEAR
127011 DE SEPTIEMBRE DE 2018 PETER vrzipov fue hospitalizado
Departamento de tóxicos
Hospital clínico de la ciudad
1275EL 15 DE SEPTIEMBRE FUE ENTREGADO POR LA AERONAVE PRIVADA
A LA CLÍNICA DE BERLÍN SASTE
128018 DE SEPTIEMBRE DE 2018 DOCTORES DE BERLÍN
Más bien, VERZILOV FUE ENVENENADO POR SCOPOLAMIN.
SEPTIEMBRE 26 FUE DESCARGADO DE LA CLÍNICA DE BERLÍN
128518 DE SEPTIEMBRE DE 2018 DOCTORES DE BERLÍN DECLARADOS
Más bien, VERZILOV FUE ENVENENADO POR SCOPOLAMIN.
SEPTIEMBRE 26 FUE DESCARGADO DE LA CLÍNICA DE BERLÍN
1395"MEDIAZONE" - intravrnvt-eddniv sobre los tribunales,
DETENCIÓN Y RUSIA. Principalmente en St. 2014 en el año
ESPERANZAS tol_okonnikovoy y MARIEI Alekhinoi
1590"Si algo es una lista de precios de miedo? Nonsendchit, '
que DEBES DE TI MISMO
1760yoko ono - FIGURA PÚBLICA, VIDRIO DE JOE "...
PE
VICE, ARTISTA,
2040"SI ALGUIEN ES PADRES MADRES,
¡ESTO, más bien, LA RAZÓN DEL RESPETO! "
2330"MAMÁ INTERNA"
2425CIUDAD DE KITEGE: UNA CIUDAD FRENTE AL SOL, HABÍA SUCEDIDO, según la leyenda,
EN LA SUPERFICIE PARTE DE LA REGIÓN DE NIZHNY NOVGOROD,
EN LAS PLAYAS DEL LAGO SVETLOYAR
2515"MOSTRAMOS LOBSER y ayudamos
zdvlichiny y ESCRITORES »
2550AHORA- EN RÍGIDA OPOSICIÓN DE RUSIA ›. ''
VIVE Y TRABAJA EN LOS ESTADOS UNIDOS
2745TOLOKONNIKOVA PASÓ EN LA PRISIÓN 661 DÍA.
. DEL 3 DE MARZO DE 2012 AL 23 DE DICIEMBRE DE 2013
En md.
2985VPTSN - TÉRMINOS QUE DESCRIBEN EN SLENG
COMUNIDAD LGBT NIÑA COMO HOMBRE '‚
00 INTERRUPTORES "BAJO MALYO____A"
2990VTsTSN - TÉRMINOS QUE DESCRIBEN EN SLENG _
COMUNIDAD LGBT NIÑA COMO HOMBRE
CON UN CORTE DE PELO "BAJO EL MUCHACHO"
3280"TAN TIEMPO RUSO" BIEN
; B?
3290SHIZO - AISLADOR DE PENALIZACIÓN. DEPARTAMENTO DE LA INSTITUCIÓN CORRECTIVA,
DONDE LAS CÁMARAS ESTÁN UBICADAS PARA EL CONTENIDO DEL MODO CONTINUO.
HOMBRE COLOCADO EN EL AISLADOR DE PENALIZACIÓN,
LIMITADO SIGNIFICATIVAMENTE EN DERECHOS
‚›, - "
3315"HOMBRE, que se sienta por mucho tiempo", E;
RENUEVA su vida nuevamente ”; 3
3510DESPUÉS DE LA PROMOCIÓN EN EL TEMPLO DE CRISTO: "EL PAGADOR FUE DETENIDO Y
TRES PARTICIPANTES DE RPZZU KUT CONDENADOS
ESPERANZA TOLOKONNIKOVA, MARIA ALEKHIN Y YEKATERINA SAMUTSEVICH
3540EKATERINA SAMUTS
TENGO DOS AÑOS CONDICIONALMENTE
3660“La JUVENTUD está tremendamente traumatizada. __
que el IVA no tiene sobregiro EXCLUSIVO "; ''
3740ESPERANZA TOLOKONIKOVA DOS ANUNCIARON LA CAZA DEL HAMBRE
EN LA COLONIA DE MORDOVY N ° 14 SOBRE EL REQUISITO DE TRADUCCIÓN
EN OTRO LUGAR DE PENALIZACIÓN
4275DISCURSO SOBRE RZZU RUT COMPARTE MEDICINALISTA ENTRA AL JUEGO »_
EN LA FINAL DEL MUNDO FIFA 2018 EN MOSCÚ
4495‹‹
''
"COMBINACIÓN DE JUEGO Y POSICIÓN"
4735"SI TENGO UN RIMO MALO Y BUENO,
ELEGIRÉ MALO
4755"HISTORIA DEL ZOO"
4800BERNIE SANDERS - CANDIDATO PARA NOMBRE_PRESIDENTE DE ESTADOS UNIDOS
EN LAS ELECCIONES 2016_ODA. PRIMERIZADO PERDIDO
DEMO HIPPARI CLINTON
-
4820. EQUIVOCADO EN
REALIDAD
_umvdiv hablar nd RAznBіkh lingüística
4865"Zdorny trotando"
5055»" "
"REP es una comprensión de la realidad"


El script obviamente tiene algunos problemas para reconocer la fuente WOOD "específica". Veo una solución a este problema al finalizar el archivo de diccionario para OCR y al procesar el texto a través de PyEnchant.

Con un poco de refinamiento, este script se puede usar para buscar subtítulos incrustados, reconocerlos y traducirlos automáticamente a otro idioma.

Si puede alentar a Yuri a aprender sobre este experimento, hágalo sin demora. #habr #vdudictionary VK , FB .

Gracias por su atencion! El guión y la publicación surgieron como resultado de un vuelo de fantasía mientras estudiaba OpenCV para mi proyecto de robot de recolección de pelotas de golf .

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


All Articles