J'ai des problèmes de lecture des PDF et les écouter m'aide massivement! Je travaille donc sur une application conviviale qui peut recevoir un PDF (ou un fichier TXT) et cracher un fichier MP3. À l'avenir, ce sera un serveur amusant qui fera le travail acharné, mais pour l'instant, ce sera juste un projet Python / Bash. Il s'agit d'un petit projet personnel, donc il n'y aura pas de mises à jour régulières en soi , mais quand j'aurai le temps, je vais pousser ce que j'ai.
Le plus gros problème avec les PDF est qu'ils n'ont pas de texte dans le document (sont essentiellement des images), soit le texte existant (généralement le résultat de l'OCR) est de mauvaise qualité. L'OCR est souvent assez mauvais sur les PDF qui me donnent, donc j'utilise Bert (un modèle de langue masqué) pour améliorer les résultats de la vérification de l'orthographe. À l'avenir, cela sera remplacé par le troc de Microsoft.
Si l'OCR était le seul problème, j'utiliserais simplement faire de la sortie OCRMYPDF à épicher et nous aurions terminé. Malheureusement, Espeak semble terrible. Il n'y a pas d'inflexion et il est vraiment difficile d'y faire attention pendant de longues périodes. C'est là que les TT de Coqui.ai arrivent à la rescousse, ce qui rend les lectures de plusieurs heures supportables.
Les autres solutions à ce problème sont fermées et coûtent beaucoup d'argent. C'est gratuit.
Finalement, ce projet aura une interface utilisateur Web soignée qui nécessitera très peu d'entrée de l'utilisateur final. Il s'agit d'un logiciel d'accessibilité après tout - ce serait bizarre s'il était difficile à utiliser. Malheureusement, pour l'instant, je n'ai qu'une CLI qui n'est testée que sur Linux. Pas le meilleur, mais je dois commencer quelque part.
La façon "la plus simple" de le faire est d'installer WSL avec Ubuntu et de suivre les instructions Ubuntu / Debian.
Si vous êtes fantaisiste et que vous savez python sur Windows, dites-moi comment cela se passe et comment vous l'avez fait!
Remarque: Malheureusement, il est difficile de configurer des trucs GPU pour WSL, et même alors, ne fonctionne vraiment que pour les cartes CUDA (NVIDIA), que je n'ai aucun moyen de tester pour l'instant (pas que je puisse tester des trucs de GPU maintenant, mais c'est au-delà du point).
Je dois dire que je ne sais pas comment obtenir toutes les dépendances (voir Ubuntu / Debian) sur Mac. Un coup d'œil rapide dit que brew ou port devraient pouvoir en obtenir la plupart, mais je n'ai aucune idée de leur disponibilité. Si vous avez un Mac et que vous avez compris cela, dites-moi comment vous l'avez fait!
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
Faire et activer un environnement virtuel, obtenir un pytorch, puis exécuter
pip install reading4listeners
Et vous êtes prêt à exécuter r4l (voir ci-dessous pour les informations d'utilisation)
Sur Debian, courez
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
se faire pytorch
python setup.py develop
Prend ~ 2-3 Go d'espace disque pour installer
r4l [--in_path in/] [--out_path out/] [--lang en] exécute la suite de numérisation et de correction sur tous les fichiers compatibles dans le répertoire in/ et publie des fichiers MP3 à out/ en utilisant la langue en (crochets carrés indiquant les paramètres facultatifs avec des valeurs par défaut).
Exécutez r4l --list_langs pour répertorier les langues prises en charge
~~ Ce programme utilise beaucoup de mémoire, donc je conseillerais à élargir la taille de votre échange de ~ 10 Go (pour Debian Use fixswap.sh ) ~~ (cela devrait être corrigé maintenant, mais s'il manque de mémoire / accidents au hasard, augmenter la taille du swap)
Sur ma configuration actuelle (4 cœurs Intel i7 8th Gen, pas de GPU, Debian 10, 5 Go de RAM + 7 Go), le paramètre anglais lira autour de 440 mots / min (n = 21, r ^ 2 = 0,97) dans un fichier audio de 175 mots / min. R4L prend donc ~ 11,4 minutes pour lire un fichier de 5000 mots, qui prendra ~ 28,5 minutes pour écouter IRL.
Malheureusement, je ne peux pas accélérer bien au-delà de cela pour les systèmes CPU uniquement. Le principal point de collage était que l'accès au fichier est lent, mais avec une amélioration de la sensibilisation à la RAM, le ralentissement majeur est Bert et TTS, qui sont tous deux conçus pour fonctionner rapidement sur les machines G / TPU.
À un niveau élevé, voici comment cela fonctionne:
input.pdf -> ocrmypdf (GhostScript -> unpaper -> Tesseract-oCr) -> Preprocessing (Regex) -> Correction OCR (Bert) -> Postprocessing (Regex) -> Text to Speech (Coqui.ai TTS) -> Wav to mp3 (pydub) -> Out.Mp3)
J'aurai presque certainement besoin de ramener Trocr / Bert et TTS pour mieux gérer les textes qui m'intéressent lorsque j'aurai accès à une plate-forme ML, mais jusque-là, je continuerai à utiliser les modèles standard. Espérons que tout cela peut être contrôlé par une belle interface utilisateur Web et laissée en cours d'exécution sur un serveur pour un usage public. Je voudrais également emballer cela dans un exécutable qui nécessite un minimum de connaissances techniques pour utiliser et maintenir, mais c'est un objectif lointain.