Bir .pdf dosyadan okunan sayfaları sesli olarak okuyan ve bir metin dosyasına yazan program oluşturmaya çalışacağız.
Program için aşağıda bilgileri ve sanal ortamda kurulum komutları verilen kütüphaneleri kullanacağız:
1. PyMuPDF kütüphanesi
PDF dosya işlemlerinde kullanılan bir kitaplıktır. Bu kütüphaneyi kullanarak, .pdf uzantılı dosyalarla ilgili farklı işlemler gerçekleştirebiliriz.
pip install PyMuPDF
2. gTTS kütüphanesi
gTTS (Google Text-to-Speech), Google Translate API'si kullanarak metini çeviren bir kütüphanedir.
pip install gTTS
Bu kütüphane ile birlikte, urllib3, idna, colorama, charset-normalizer, certifi, six, requests ve click kütüphaneleri otomatik olarak yüklenir.
3. Playsound kütüphanesi
Ses çalmak için kullanılan bir kütüphanedir.
pip install playsound
4. PyAudio kütüphanesi
Tüm işletim sistemlerinde çalışan ses giriş/çıkış akışı kütüphanesidir. Ses ile ilgili işlemlerde kullanılır.
Bu kütüphanenin doğrudan "pip install pyaudio" komutu ile kurulmasında herhangi bir sorun yaşandığında kurulumu gerçekleştirmek için, Christoph Gohlke tarafından Python paketleri için resmi olmayan Windows işletim sistemi dosyalarını içeren web sitesine ait buradaki bağlantıdan bilgisayarımızın işletim sistemine göre indirdiğimiz aşağıdaki dosyalardan birisini, sanal ortamın altındaki Scripts dizini altına kopyalayarak kullanıyoruz:
PyAudio-0.2.11-cp39-cp39-win_amd64.whl
PyAudio-0.2.11-cp39-cp39-win32.whl
pip install PyAudio-0.2.11-cp39-cp39-win_amd64.whl
import fitz # pymupdf kütüphanesi
from gtts import gTTS # Google text to speech kütüphanesi
from playsound import playsound
import random
import os
pdfR = fitz.open('dosyaadi.pdf')
# Metni konuşmaya çeviren ve oynatan fonksiyon
def TextToSpeech(tts_text):
tts = gTTS(tts_text, lang='tr')
rand = random.randint(1, 10000)
file = 'audio-' + str(rand) + '.mp3'
tts.save(file) # Dosyayı kaydetme
playsound(file) # Dosyayı oynatma
os.remove(file) # Dosyayı silme
# .pdf dosyasından okunan sayfaları bir metin dosyasına yazma
def writeToFile(file_text):
file = open("output.txt", "a")
file.write(file_text)
file.close();
try:
for id in range(3, pdfR.pageCount): # 3.sayfadan başlayarak .pdf dosya sayfalarını okur.
page = pdfR.loadPage(id) #put here the page number
text = page.getText()
writeToFile(text) # Metin dosyasına yazma
TextToSpeech(text) # Metni konuşmaya çevirme ve oynatma
except KeyboardInterrupt: # Ctrl-C ile çıkış
pass
Programı çalıştırdığımızda, 3.sayfadan başlayarak okunan .pdf dosya sayfaları önce bir metin dosyasına eklenir, sonra TextToSpeech() fonksiyonu ile metin konuşmaya çevrilir ve oynatılır. Ctrl-C tuş bileşimine bastığımızda, program sona erer.