¡Tengo problemas para leer PDF y escucharlos me ayuda enormemente! Así que estoy trabajando en una aplicación fácil de usar que se le puede dar un PDF (o archivo TXT) y escupir un archivo MP3. En el futuro, este será un servidor divertido que hará el trabajo duro, pero por ahora, solo será un proyecto Python/Bash. Este es un pequeño proyecto personal, por lo que no habrá actualizaciones regulares per se , pero cuando tenga tiempo, presionaré lo que tengo.
El mayor problema con los PDF es que no tienen texto dentro del documento (son esencialmente imágenes) o el texto existente (generalmente el resultado de OCR) es de mala calidad. El OCR a menudo es bastante malo en los PDF que me dan, por lo que uso Bert (un modelo de lenguaje enmascarado) para mejorar los resultados del correcto de calificación. En el futuro, esto será reemplazado por el Trocr de Microsoft.
Si OCR fuera el único problema, solo usaría la salida de OCRMYPDF para espeak y lo haríamos. Desafortunadamente, Espeak suena terrible. No hay inflexión y es realmente difícil prestarle atención por largos períodos de tiempo. Ahí es donde el TTS de Coqui.ai llega al rescate, haciendo que las lecturas de un horas de duración tengan soportables.
Las otras soluciones a este problema son de código cerrado y cuestan mucho dinero. Esto es gratis.
Eventualmente, este proyecto tendrá una interfaz de usuario web que requerirá muy poca entrada del usuario final. Después de todo, este es un software de accesibilidad: sería extraño si fuera difícil de usar. Desafortunadamente, por ahora solo tengo una CLI que solo se ha probado en Linux. No es lo mejor, pero tengo que comenzar en alguna parte.
La forma "más fácil" de hacerlo es instalando WSL con Ubuntu y siga las instrucciones de Ubuntu/Debian.
Si eres elegante y sabes cómo Python en Windows, ¡dime cómo va y cómo lo hiciste!
Nota: Desafortunadamente, es difícil configurar cosas de GPU para WSL, e incluso entonces solo funciona realmente para las tarjetas CUDA (NVIDIA), que no tengo forma de probar a partir de ahora (no es que pueda probar cualquier cosa de GPU ahora, pero eso está más allá del punto).
Tengo que decir que no tengo idea de cómo obtener todas las dependencias (ver Ubuntu/Debian) en Mac. Una mirada superficial dice que brew o port deberían poder obtener la mayoría de ellos, pero no tengo idea de su disponibilidad. Si tienes una Mac y descubres esto, ¡hazme saber cómo lo hiciste!
sudo apt install -y python3 python3-venv espeak ffmpeg tesseract-ocr-all python3-dev libenchant-dev libpoppler-cpp-dev pkg-config libavcodec libavtools ghostscript poppler-utils
Hacer y activar un entorno virtual, obtener pytorch, luego ejecutar
pip install reading4listeners
Y estás listo para ejecutar r4l (ver a continuación para obtener información de uso)
En Debian, corre
sudo apt install -y python3 python3-venv espeak ffmpeg tesseract-ocr-all python3-dev libenchant-dev libpoppler-cpp-dev pkg-config libavcodec libavtools ghostscript poppler-utils
git clone https://github.com/CypherousSkies/pdf-to-speech
cd pdf-to-speech
python3 -m venv venv
souce venv/bin/activate
pip install -U pip setuptools wheel cython
conseguir pytorch
python setup.py develop
Toma ~ 2-3GB de espacio en disco para instalar
r4l [--in_path in/] [--out_path out/] [--lang en] Ejecuta el conjunto de escaneo y corrección en todos los archivos compatibles en el directorio in/ y genera archivos mp3 a out/ utilizando el en (paréntesis cuadrados que denotan parámetros opcionales con valores predeterminados).
Ejecutar r4l --list_langs para enumerar los idiomas compatibles
~~ Este programa usa mucha memoria, por lo que aconsejaría a expandir su tamaño de intercambio en ~ 10GB (para el uso de Debian fixswap.sh ) ~~ (esto debería solucionarse ahora, pero si se queda sin memoria/se bloquea al azar, aumente el tamaño de swap)
En mi configuración actual (4 núcleos Intel i7 8th Gen, no GPU, Debian 10, 5GB RAM+Swap de 7GB), la configuración en inglés lee alrededor de 440 palabras/min (n = 21, r^2 = 0.97) en un archivo de audio de 175 palabras/min. Entonces, R4L tarda ~ 11.4 minutos en leer un archivo de 5000 palabras, que tomará ~ 28.5 minutos para escuchar a IRL.
Desafortunadamente, no puedo acelerarlo mucho más allá de esto para los sistemas solo de CPU. El principal punto de conflicto fue que el acceso a archivos es lento, pero con una mayor conciencia de RAM, la desaceleración principal es Bert y TTS, que están diseñadas para funcionar rápidamente en máquinas G/TPU.
En un alto nivel, así es como funciona esto:
input.pdf -> ocrmypdf (GhostScript -> Unpray -> tesseract -oCR) -> preprocessing (regex) -> OCR corrección (bert) -> postprocesamiento (regex) -> text to speech (coqui.ai tts) -> wav a mp3 (pydub) -> out.mp3
Es casi seguro que necesitaré ajustar a Trocr/Bert y TTS para lidiar mejor con los textos que me interesan cuando obtenga acceso a una plataforma ML, pero hasta entonces, seguiré usando los modelos estándar. Esperemos que todo esto pueda ser controlado por una interfaz de usuario web agradable y simple y se ejecuta en un servidor para uso público. También me gustaría empaquetar esto en un ejecutable que requiere un conocimiento técnico mínimo para usar y mantener, pero ese es un objetivo lejano.