6.1 KiB
Konuşmadan Metne - Raspberry Pi
Bu dersin bu bölümünde, yakalanan sesli kayıttaki konuşmayı metne dönüştürmek için konuşma hizmetini kullanarak kod yazacaksınız.
Sesi konuşma hizmetine gönderme
Ses, REST API kullanılarak konuşma hizmetine gönderilebilir. Konuşma hizmetini kullanmak için önce bir erişim belirteci (access token) talep etmeniz gerekir, ardından bu belirteci REST API'ye erişmek için kullanabilirsiniz. Bu erişim belirteçleri 10 dakika sonra sona erer, bu yüzden kodunuzun düzenli olarak yeni belirteç talep etmesi ve her zaman güncel olmasını sağlaması gerekir.
Görev - erişim belirteci alın
-
Pi'nizdeki
smart-timer
projesini açın. -
play_audio
fonksiyonunu kaldırın. Artık buna ihtiyacınız yok çünkü akıllı zamanlayıcının size söylediklerinizi tekrar etmesini istemiyorsunuz. -
app.py
dosyasının en üstüne aşağıdaki import'u ekleyin:import requests
-
Konuşma hizmeti için bazı ayarları tanımlamak üzere
while True
döngüsünün üstüne aşağıdaki kodu ekleyin:speech_api_key = '<key>' location = '<location>' language = '<language>'
<key>
kısmını konuşma hizmeti kaynağınızın API anahtarı ile değiştirin.<location>
kısmını konuşma hizmeti kaynağını oluşturduğunuz konum ile değiştirin.<language>
kısmını konuşacağınız dilin yerel adı ile değiştirin, örneğin İngilizce içinen-GB
veya Kantonca içinzn-HK
. Desteklenen diller ve yerel adlarının listesini Microsoft dokümanlarındaki Dil ve ses desteği dokümantasyonunda bulabilirsiniz. -
Bunun altına, bir erişim belirteci almak için aşağıdaki fonksiyonu ekleyin:
def get_access_token(): headers = { 'Ocp-Apim-Subscription-Key': speech_api_key } token_endpoint = f'https://{location}.api.cognitive.microsoft.com/sts/v1.0/issuetoken' response = requests.post(token_endpoint, headers=headers) return str(response.text)
Bu, API anahtarını bir başlık olarak geçirerek bir belirteç verme uç noktasını çağırır. Bu çağrı, konuşma hizmetlerini çağırmak için kullanılabilecek bir erişim belirteci döndürür.
-
Bunun altına, yakalanan sesli kayıttaki konuşmayı REST API kullanarak metne dönüştürmek için bir fonksiyon tanımlayın:
def convert_speech_to_text(buffer):
-
Bu fonksiyonun içinde, REST API URL'sini ve başlıklarını ayarlayın:
url = f'https://{location}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1' headers = { 'Authorization': 'Bearer ' + get_access_token(), 'Content-Type': f'audio/wav; codecs=audio/pcm; samplerate={rate}', 'Accept': 'application/json;text/xml' } params = { 'language': language }
Bu, konuşma hizmeti kaynağının konumunu kullanarak bir URL oluşturur. Ardından,
get_access_token
fonksiyonundan gelen erişim belirtecini, ses kaydı için kullanılan örnekleme oranını başlıklara ekler. Son olarak, URL ile birlikte geçilecek dil bilgilerini içeren bazı parametreler tanımlar. -
Bunun altına, REST API'yi çağırmak ve metni geri almak için aşağıdaki kodu ekleyin:
response = requests.post(url, headers=headers, params=params, data=buffer) response_json = response.json() if response_json['RecognitionStatus'] == 'Success': return response_json['DisplayText'] else: return ''
Bu, URL'yi çağırır ve yanıt olarak gelen JSON değerini çözümler. Yanıttaki
RecognitionStatus
değeri, çağrının konuşmayı başarıyla metne dönüştürüp dönüştüremediğini belirtir. Eğer bu değerSuccess
ise, metin fonksiyondan döndürülür, aksi takdirde boş bir string döndürülür. -
while True:
döngüsünün üstüne, konuşmadan metne hizmetinden dönen metni işlemek için bir fonksiyon tanımlayın. Bu fonksiyon şimdilik sadece metni konsola yazdıracaktır.def process_text(text): print(text)
-
Son olarak,
while True
döngüsündekiplay_audio
çağrısınıconvert_speech_to_text
fonksiyonuna bir çağrı ile değiştirin ve metniprocess_text
fonksiyonuna iletin:text = convert_speech_to_text(buffer) process_text(text)
-
Kodu çalıştırın. Düğmeye basın ve mikrofona konuşun. İşiniz bittiğinde düğmeyi bırakın ve ses metne dönüştürülerek konsola yazdırılsın.
pi@raspberrypi:~/smart-timer $ python3 app.py Hello world. Welcome to IoT for beginners.
Farklı türde cümleler deneyin, ayrıca aynı seslere sahip ancak farklı anlamlara sahip kelimeler içeren cümleler deneyin. Örneğin, İngilizce konuşuyorsanız, 'I want to buy two bananas and an apple too' deyin ve bağlamına göre doğru "to", "two" ve "too" kelimelerinin nasıl kullanıldığını fark edin, sadece sesine göre değil.
💁 Bu kodu code-speech-to-text/pi klasöründe bulabilirsiniz.
😀 Konuşmadan metne programınız başarılı oldu!
Feragatname:
Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.