Tenho problemas para ler PDFs e ouvi -los me ajuda massivamente! Portanto, estou trabalhando em um aplicativo fácil de usar que pode receber um PDF (ou arquivo txt) e cuspir um arquivo MP3. No futuro, este será um servidor divertido que fará o trabalho duro, mas, por enquanto, será apenas um projeto Python/Bash. Este é um pequeno projeto pessoal, portanto, não haverá atualizações regulares em si , mas quando tiver tempo, vou empurrar o que tenho.
O maior problema com os PDFs é que eles não têm texto no documento (são essencialmente imagens) ou o texto existente (geralmente o resultado do OCR) é de baixa qualidade. O OCR costuma ser muito ruim nos PDFs que recebo, por isso uso o Bert (um modelo de idioma mascarado) para melhorar os resultados da verificação de ortografia. No futuro, isso será substituído pelo TROCS da Microsoft.
Se o OCR fosse o único problema, eu usaria a saída OCRMYPDF para espalhar e estaríamos feitos. Infelizmente, o Espeak parece terrível. Não há inflexão e é realmente difícil prestar atenção por longos períodos de tempo. É aí que o TTS do Coqui.ai chega ao resgate, tornando as leituras de horas de uma hora suportáveis.
As outras soluções para esse problema são de código fechado e custam muito dinheiro. Isso é grátis.
Eventualmente, este projeto terá uma interface de usuário da Web, que exigirá muito pouca contribuição do usuário final. Afinal, este é um software de acessibilidade - seria estranho se fosse difícil de usar. Infelizmente, por enquanto, só tenho uma CLI que só foi testada no Linux. Não é o melhor, mas tenho que começar em algum lugar.
A maneira "mais fácil" de fazer isso é instalando o WSL com o Ubuntu e seguir as instruções do Ubuntu/Debian.
Se você é sofisticado e sabe como python no Windows, diga -me como vai e como você fez!
Nota: Infelizmente, é difícil configurar coisas de GPU para WSL e, mesmo assim, só funciona apenas para cartões CUDA (NVIDIA), que não tenho como testar a partir de agora (não que eu pudesse testar qualquer coisa da GPU agora, mas isso está além do ponto).
Tenho que dizer, não tenho idéia de como obter todas as dependências (ver Ubuntu/Debian) no Mac. Um olhar superficial diz que brew ou port deve conseguir a maioria deles, mas não tenho idéia da disponibilidade deles. Se você tem um Mac e descobriu isso, deixe -me saber como você fez isso!
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
Faça e ative um ambiente virtual, obtenha pytorch e depois corra
pip install reading4listeners
E você está pronto para executar r4l (veja abaixo para obter informações de uso)
No Debian, corra
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
Obtenha Pytorch
python setup.py develop
Leva ~ 2-3 GB de espaço em disco para instalação
r4l [--in_path in/] [--out_path out/] [--lang en] executa o conjunto de varredura e correção em todos os arquivos compatíveis no diretório in/ e produz arquivos mp3 para out/ usar o idioma en (colchetes quadrados que indicam parâmetros opcionais com valores padrão).
Run r4l --list_langs para listar idiomas suportados
~~ Este programa usa muita memória, então eu aconselho a expandir seu tamanho de troca em ~ 10 GB (para o Debian Use fixswap.sh ) ~~ (isso deve ser corrigido agora, mas se ficar sem memória/travar aleatoriamente, aumente o tamanho da troca)
Na minha configuração atual (4 núcleos Intel i7 da 8ª geração, sem GPU, Debian 10, 5 GB de RAM+7 GB de troca), a configuração em inglês lerá cerca de 440 palavras/min (n = 21, r^2 = 0,97) em um arquivo de áudio de 175 palavras/min. Portanto, o R4L leva ~ 11,4 minutos para ler um arquivo de 5000 palavras, que levará ~ 28,5 minutos para ouvir o IRL.
Infelizmente, não posso acelerar muito além disso para os sistemas somente CPU. O principal ponto de discórdia foi que o acesso ao arquivo é lento, mas com a melhor consciência do RAM, a principal desaceleração é o BERT e o TTS, que são projetados para funcionar rapidamente nas máquinas G/TPU.
Em um nível alto, eis como isso funciona:
input.pdf -> OCRMypDF (GhostScript -> não -per -> TESSERACT -OOCR) -> Pré -processamento (regex) -> OCR Correção (BERT) -> Postprocessing (regex) -> Texto para a fala (coqui.ai) -> wav to mp3 (pydub) ->
Certamente vou precisar ajustar o TROCR/BERT e o TTS para lidar melhor com os textos em que estou interessado quando tiver acesso a uma plataforma de ML, mas até então, continuarei usando os modelos prontos para uso. Espero que tudo isso possa ser controlado por uma interface da web simples e agradável e deixada em execução em um servidor para uso público. Além disso, gostaria de empacotar isso em um executável que requer conhecimento técnico mínimo para usar e manter, mas esse é um objetivo distante.