Cachitos 2022. Primera parte

estadística
polémica
2023
textmining
ocr
linux
cachitos
Author

José Luis Cañadas Reche

Published

January 2, 2023

Retomando la entrada de cachitos de la nochevieja de 2020

Actualizamos el script que se baja el vídeo, recorta y extrae los subtítulos.

Sea como sea, siempre ha dejado perlas como estas

Ejemplo:

El fotograma se obtiene usando mplayer y sacando uno de 200 fotogramas como imagen, luego se recorta la parte del súbtitulo, se invierten los colores y se usa tesseract para el ocr

Y tesseract hace el trabajo de pasarlo a texto

Izquierda... Derecha... Como veis, tienen la postura tan
sólidamente definida como el gobierno respecto al Sahara.

Veamos las partes importantes de extract_subtitles.sh

Bajar el vídeo

#!/bin/bash

root_directory=/home/jose/proyecto_cachitos
mkdir -p $root_directory
cd $root_directory

echo "First arg: $1"
mkdir -p video

cd video

ANNO=$1
echo $ANNO
suffix_video="_cachitos.mp4"
suffix_jpg_dir="_jpg"
suffix_txt_dir="_txt"

video_file=$ANNO$suffix_video
echo $video_file


if [ "$ANNO" == "2022" ] ;
then
    wget https://rtvehlsvodlote7.rtve.es/mediavodv2/resources/TE_SHIECRO/mp4/1/5/1672556504451.mp4
    mv 1672556504451.mp4 $video_file
fi

Como se contaba en el post original hay que ir a la web de rtve play, ir a reproducir el cachitos correspondiente, y luego darle a inspeccionar código y ver de qué url está haciendo el request. Para 2021 por ejemplo estaba en https://lote5-vod-hls-geoblockurl.akamaized.net/resources/TE_GLUCA/mp4/4/0/1641020001504.mp4 . Cómo vemos, no hay mucha coherencia en dónde dejan los archivos.

Convertir a jpg , cambiar tamaño y extraer subtítulos.

Gracias a software de linux como mplayer parallel o magick se puede hacer un montón de cosas con los vídeos e imágenes.

# Pasar a jpg uno de cada 200 fotogramas

mplayer -vf framestep=200 -framedrop -nosound $video_file -speed 100 -vo jpeg:outdir=$ANNO$suffix_jpg_dir 
 
cd $ANNO$suffix_jpg_dir 
 
# Convertir a formato más pequño
find . -name '*.jpg' |  parallel -j 8 mogrify -resize 642x480 {}

# Seleccionar cacho dond están subtitulos
find . -name '*.jpg' |  parallel -j 8 convert {} -crop 460x50+90+295 +repage -compress none -depth 8 {}.subtitulo.tif

# Poner en negativo para que el ocr funcione mejor
find . -name '*.tif' |  parallel -j 8 convert {} -negate -fx '.8*r+.8*g+0*b' -compress none -depth 8 {}
  • Con mplayer extraemso uno de cada 200 fotogramas y los guardamos como formato jpeg en la carpeta especificada.
  • Con la utilidad mogrify de magick reescalamos cada uno de los archivos anteriores a 642x480 píxeles. Con parallel ( sudo apt install parallel si no lo tienes instalado) le decimos que haga esto en paralelo usando 8 hilos de ejecución
  • Con converty opción crop indicamos y recortamos la zona de la imagen dónde creemos que están los rótulos y creamos archivos tif que sólo tienen esa zona.
  • Con la opción negate de convert invertimos los colores de forma que sea más fácil para tesseract hacer el reconomicimiento óptico de caracteres.

OCR.

Con tesseract simplemente pasamos los archivos tif generados y le indicamos que lo haga en paralelo usando 8 hilos y que como lenguaje utilizando el español -l spa

# Pasar el ocr con idioma en español
find . -name '*.tif' |  parallel -j 8 tesseract -l spa {} {}

tesseract creará tantos archivos txt como fotogramas hayamos extraído (1302 ficheros para cachitos nochevieja de 2022), la mayoría estarán sin rótulos.

El nombre que hemos puesto a los archivos sigue este patrón 00000946.jpg.subtitulo.tif.txt indicando el número de fotograma así como las diferentes extensiones, así será más fácil luego identificar un texto con la imagen de la que viene.

En la siguiente entrada veremos algo de limpieza de texto.