DEV Community

Starch1
Starch1

Posted on • Edited on

Um Guia para Criar um Leitor de PDF em Python com Google TTS

Nesse guia você vai aprender a criar um leitor de PDF em Python e usar a API do Google Text-to-Speech e gerar um arquivo de áudio narrando o texto escolhido.
Você pode clonar a o projeto aqui: Github

Requisitos.

requirements.txt

gTTS==2.5.0
PyMsgBox==1.0.9
PyMuPDF==1.23.9
Enter fullscreen mode Exit fullscreen mode

Você pode instalar as bibliotecas com um

pip install -r requirements.txt 
Enter fullscreen mode Exit fullscreen mode

Vamos começar criando um arquivo pdfToString.py. Esse arquivo vai ser responsável por ler o arquivo PDF selecionado e guardar o valor em uma variável tipo string

Começamos importando as bibliotecas (Não se esqueça de instalar as bibliotecas que citei nos requisitos)

import fitz
import os
Enter fullscreen mode Exit fullscreen mode

Vamos definir onde esta o arquivo PDF que será usado.

PDFLocation = os.path.join(os.path.dirname(__file__), 'exemple.pdf')
Enter fullscreen mode Exit fullscreen mode

os.path.dirname(__file__) os.path é um sub-modulo do modulo OS e é usado pra entregar o nome do diretório do caminho especificado e evitar problemas de caminho.

O nosso leitor, por não depender de nenhum outro software, de inicio lê o PDF 'cru' e isso pode trazer alguns problemas de ordem dos arquivos. (Exemplo header estar na página 30 por ter sido criado depois)
Pra resolver isso, nós precisamos guardar os valores tanto da página quanto do header

header = "Header"
footer = "Page %i of %i" 
Enter fullscreen mode Exit fullscreen mode

Agora precisamos percorrer o arquivo PDF, ler as páginas, extrair o texto delas e guardar em uma variável que vamos usar depois.

for page_number, page in enumerate(doc.pages(), start=1):
    page.insert_text((50, 50), header)

    page.insert_text(
        (50, page.rect.height - 50),
        footer % (page_number, doc.page_count),
    )
    extractedPDF += page.get_text()
Enter fullscreen mode Exit fullscreen mode

Pra finalizar é interessante fazer uma manipulação de erros, pra caso o OS não encontre o PDF

if os.path.exists(PDFLocation):
    print(f'{PDFLocation} encontrado')
else:
    print(f'{PDFLocation} não encontrado')
Enter fullscreen mode Exit fullscreen mode

Agora vamos criar um arquivo app.py, esse vai se encarregar de receber a string, lê-la e gerar o arquivo localmente. (No final do post eu passo uma opção alternativa para gerar o arquivo no googlecloud)
Vamos importar as bibliotecas e a variavel com a nossa string.

from gtts import gTTS
import os
from pdfToString import extractedPDF
Enter fullscreen mode Exit fullscreen mode

Agora vamos definir a função que lê e gera o arquivo

def synthesize_local_audio(output_path):
    text_to_audio = extractedPDF

    tts = gTTS(text=text_to_audio, language_code="pt-BR", name="pt-BR-Neural2-C")
        #Você pode checar as vozes suportadas aqui: https://cloud.google.com/text-to-speech/docs/voices

    tts.save(output_path)

    print(f'Arquivo de áudio salvo em: {output_path}')
Enter fullscreen mode Exit fullscreen mode

E tudo pronto :) Rodando o arquivo app.py você verá um arquivo output.wav na pasta onde você selecionou.

Gerando o arquivo no google cloud

Escrevi um tutorial rapidinho de como preparar o ambiente com as credencias Preparando ambiente de trabalho-GoogleAPI
Com tudo isso feito vamos ao codigo
Importe as bibliotecas

from google.cloud import texttospeech, storage
Enter fullscreen mode Exit fullscreen mode

Exemplo do google
Vamos definir a função que lê a string, gera um arquivo de audio e envia para API do google

def synthesize_long_audio(project_id, location, output_gcs_uri):
    client = texttospeech.TextToSpeechClient()

    textToAudio = extractedPDF

    input = texttospeech.SynthesisInput(text=textToAudio)

    audio_config = texttospeech.AudioConfig(audio_encoding=texttospeech.AudioEncoding.LINEAR16)

    voice = texttospeech.VoiceSelectionParams(language_code="pt-BR", name="pt-BR-Neural2-C") 
        #Supported voices on: https://cloud.google.com/text-to-speech/docs/voices

    request = texttospeech.SynthesizeSpeechRequest(
        input=input,
        voice=voice,
        audio_config=audio_config,
    )
    response = client.synthesize_speech(request=request)

    storage_client = storage.Client()
    bucket_name, object_name = output_gcs_uri.split('/', 2)[-1].split('/', 1)
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(object_name)
    blob.upload_from_string(response.audio_content, content_type='audio/wav')

    print(f'\n Created on "{output_gcs_uri}"')
Enter fullscreen mode Exit fullscreen mode

Você também precisa passar as credencias do projeto com base nas informações do arquivo json que você baixou da google

project_id = 'SEU_ID'
location = 'SUA_LOCALIZAÇÃO'
output_gcs_uri = 'OUTPUT_DO_BUCKET_QUE_VOCÊ_CRIOU'
Enter fullscreen mode Exit fullscreen mode

Tendo tudo pronto, invocamos a função e passamos os argumentos que ela espera.

synthesize_long_audio(project_id, location, output_gcs_uri) 
Enter fullscreen mode Exit fullscreen mode

Conclusão

Neste projeto, aprendemos a criar um leitor de PDF em Python utilizando a biblioteca PyMuPDF, a extrair o texto do PDF e a gerar arquivos de áudio localmente com a biblioteca gTTS. Além disso, exploramos a integração com a API Text-to-Speech do Google Cloud para gerar arquivos de áudio e armazená-los no Google Cloud Storage.

Este guia proporciona uma visão abrangente de como manipular PDFs e realizar síntese de fala, oferecendo aos desenvolvedores uma base sólida para expandir suas habilidades em processamento de texto e áudio com Python.

Top comments (0)