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

8.1 KiB

تبدیل گفتار به متن - رزبری پای

در این بخش از درس، شما کدی خواهید نوشت که گفتار ضبط‌شده در فایل صوتی را به متن تبدیل کند، با استفاده از سرویس گفتار.

ارسال فایل صوتی به سرویس گفتار

فایل صوتی می‌تواند با استفاده از REST API به سرویس گفتار ارسال شود. برای استفاده از سرویس گفتار، ابتدا باید یک توکن دسترسی درخواست کنید و سپس از آن توکن برای دسترسی به REST API استفاده کنید. این توکن‌های دسترسی پس از ۱۰ دقیقه منقضی می‌شوند، بنابراین کد شما باید به طور منظم توکن جدید درخواست کند تا همیشه به‌روز باشد.

وظیفه - دریافت توکن دسترسی

  1. پروژه smart-timer را روی رزبری پای خود باز کنید.

  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 ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه انسانی حرفه‌ای استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.