You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/hu/6-consumer/lessons/1-speech-recognition/pi-speech-to-text.md

6.4 KiB

Beszéd szöveggé alakítása - Raspberry Pi

Ebben a leckében kódot fogsz írni, amely a rögzített hangban lévő beszédet szöveggé alakítja a beszédfelismerő szolgáltatás segítségével.

Küldd el a hangot a beszédfelismerő szolgáltatásnak

A hangot a REST API segítségével lehet elküldeni a beszédfelismerő szolgáltatásnak. A szolgáltatás használatához először hozzáférési tokent kell kérned, majd ezt a tokent használva érheted el a REST API-t. Ezek a hozzáférési tokenek 10 perc után lejárnak, ezért a kódodnak rendszeresen új tokent kell kérnie, hogy mindig naprakész legyen.

Feladat - hozzáférési token kérése

  1. Nyisd meg a smart-timer projektet a Pi eszközödön.

  2. Távolítsd el a play_audio függvényt. Erre már nincs szükség, mivel nem szeretnéd, hogy az okos időzítő visszamondja, amit mondtál.

  3. Add hozzá a következő importot az app.py fájl tetejéhez:

    import requests
    
  4. Add hozzá a következő kódot a while True ciklus fölé, hogy beállítsd a beszédfelismerő szolgáltatás néhány paraméterét:

    speech_api_key = '<key>'
    location = '<location>'
    language = '<language>'
    

    Cseréld ki a <key> helyére a beszédfelismerő szolgáltatás API kulcsát. A <location> helyére írd be azt a helyet, amelyet a beszédfelismerő szolgáltatás létrehozásakor megadtál.

    A <language> helyére írd be azt a nyelvi helyet, amelyen beszélni fogsz, például en-GB angolhoz vagy zn-HK kantonihoz. A támogatott nyelvek és nyelvi helyek listáját megtalálhatod a Microsoft dokumentációjában.

  5. Ezután add hozzá a következő függvényt, amely hozzáférési tokent kér:

    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)
    

    Ez a függvény egy token kiadó végpontot hív meg, az API kulcsot fejlécben továbbítva. A hívás egy hozzáférési tokent ad vissza, amelyet a beszédfelismerő szolgáltatás hívásához használhatsz.

  6. Ezután deklarálj egy függvényt, amely a rögzített hangban lévő beszédet szöveggé alakítja a REST API segítségével:

    def convert_speech_to_text(buffer):
    
  7. Ebben a függvényben állítsd be a REST API URL-t és a fejlécet:

    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
    }
    

    Ez az URL-t a beszédfelismerő szolgáltatás helyének megfelelően építi fel. A fejlécet a get_access_token függvényből származó hozzáférési tokennel, valamint a hang rögzítéséhez használt mintavételi frekvenciával tölti ki. Végül meghatároz néhány paramétert, amelyeket az URL-lel együtt továbbít, és amelyek tartalmazzák a hang nyelvét.

  8. Ezután add hozzá a következő kódot, amely meghívja a REST API-t és visszakapja a szöveget:

    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 ''
    

    Ez az URL-t hívja meg, és dekódolja a válaszban érkező JSON értéket. A válaszban található RecognitionStatus érték jelzi, hogy a hívás sikeresen alakította-e a beszédet szöveggé. Ha ez Success, akkor a függvény visszaadja a szöveget, ellenkező esetben egy üres karakterláncot ad vissza.

  9. A while True: ciklus fölé definiálj egy függvényt, amely feldolgozza a beszédfelismerő szolgáltatás által visszaadott szöveget. Ez a függvény egyelőre csak kiírja a szöveget a konzolra.

    def process_text(text):
        print(text)
    
  10. Végül cseréld ki a while True ciklusban a play_audio hívást a convert_speech_to_text függvény hívására, és add át a szöveget a process_text függvénynek:

    text = convert_speech_to_text(buffer)
    process_text(text)
    
  11. Futtasd a kódot. Nyomd meg a gombot, és beszélj a mikrofonba. Engedd el a gombot, amikor végeztél, és a hang szöveggé lesz alakítva, majd kiíródik a konzolra.

    pi@raspberrypi:~/smart-timer $ python3 app.py 
    Hello world.
    Welcome to IoT for beginners.
    

    Próbálj ki különböző típusú mondatokat, valamint olyan mondatokat, amelyekben azonos hangzású, de eltérő jelentésű szavak szerepelnek. Például, ha angolul beszélsz, mondj olyat, hogy "I want to buy two bananas and an apple too", és figyeld meg, hogyan használja a megfelelő "to", "two" és "too" szavakat a szó kontextusa alapján, nem csak a hangzása alapján.

💁 Ezt a kódot megtalálhatod a code-speech-to-text/pi mappában.

😀 A beszéd szöveggé alakító programod sikeres volt!


Felelősség kizárása:
Ez a dokumentum az AI fordítási szolgáltatás, a Co-op Translator segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.