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/uk/6-consumer/lessons/1-speech-recognition/pi-speech-to-text.md

8.5 KiB

Перетворення мови в текст - Raspberry Pi

У цій частині уроку ви напишете код для перетворення мови із записаного аудіо в текст за допомогою мовного сервісу.

Надсилання аудіо до мовного сервісу

Аудіо можна надіслати до мовного сервісу за допомогою REST API. Щоб використовувати мовний сервіс, спочатку потрібно отримати токен доступу, а потім використовувати цей токен для доступу до REST API. Ці токени доступу мають термін дії 10 хвилин, тому ваш код повинен регулярно запитувати їх, щоб забезпечити їхню актуальність.

Завдання - отримання токена доступу

  1. Відкрийте проєкт smart-timer на вашому Raspberry Pi.

  2. Видаліть функцію play_audio. Вона більше не потрібна, оскільки ви не хочете, щоб розумний таймер повторював те, що ви сказали.

  3. Додайте наступний імпорт на початок файлу app.py:

    import requests
    
  4. Додайте наступний код перед циклом while True, щоб оголосити деякі налаштування для мовного сервісу:

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

    Замініть <key> на API-ключ вашого ресурсу мовного сервісу. Замініть <location> на розташування, яке ви використовували під час створення ресурсу мовного сервісу.

    Замініть <language> на назву локалі мови, якою ви будете говорити, наприклад, en-GB для англійської або zn-HK для кантонської. Ви можете знайти список підтримуваних мов і їхніх назв локалей у документації про підтримку мов і голосів на Microsoft Docs.

  5. Нижче цього додайте наступну функцію для отримання токена доступу:

    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)
    

    Ця функція викликає кінцеву точку видачі токенів, передаючи API-ключ у заголовку. Виклик повертає токен доступу, який можна використовувати для виклику мовних сервісів.

  6. Нижче цього оголосіть функцію для перетворення мови із записаного аудіо в текст за допомогою REST API:

    def convert_speech_to_text(buffer):
    
  7. У цій функції налаштуйте URL REST API та заголовки:

    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
    }
    

    Цей код створює URL, використовуючи розташування ресурсу мовного сервісу. Потім він заповнює заголовки токеном доступу з функції get_access_token, а також частотою дискретизації, яка використовується для запису аудіо. Нарешті, він визначає деякі параметри, які передаються разом із URL і містять мову аудіо.

  8. Нижче цього додайте наступний код для виклику REST API та отримання тексту:

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

    Цей код викликає URL і декодує значення JSON, яке приходить у відповіді. Значення RecognitionStatus у відповіді вказує, чи вдалося виклику успішно перетворити мову в текст, і якщо це Success, то текст повертається з функції, інакше повертається порожній рядок.

  9. Перед циклом while True: визначте функцію для обробки тексту, отриманого від сервісу перетворення мови в текст. Ця функція поки що просто виводитиме текст у консоль.

    def process_text(text):
        print(text)
    
  10. Нарешті, замініть виклик play_audio у циклі while True на виклик функції convert_speech_to_text, передаючи текст у функцію process_text:

    text = convert_speech_to_text(buffer)
    process_text(text)
    
  11. Запустіть код. Натисніть кнопку і говоріть у мікрофон. Відпустіть кнопку, коли закінчите, і аудіо буде перетворено в текст і виведено в консоль.

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

    Спробуйте різні типи речень, а також речення, де слова звучать однаково, але мають різні значення. Наприклад, якщо ви говорите англійською, скажіть "I want to buy two bananas and an apple too" і зверніть увагу, як сервіс правильно використовує "to", "two" і "too" залежно від контексту слова, а не лише його звучання.

💁 Ви можете знайти цей код у папці code-speech-to-text/pi.

😀 Ваше програмне забезпечення для перетворення мови в текст працює успішно!


Відмова від відповідальності:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматизовані переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.