بازشناسی گفتار در پایتون

بازشناسی گفتار:

هدف از تشخیص گفتار که با نام بازشناسی گفتار شناخته شده‌است، طراحی و پیاده‌سازی سیستمی است که اطلاعات گفتاری را دریافت و فرمان گوینده را استخراج می‌کند. بازشناسی گفتار به رایانه‌ای که توانایی دریافت صدا را دارد (برای مثال به یک میکروفن مجهز است) این قابلیت را می‌دهد که گفتار کاربر را متوجه شود.

فناوری تبدیل گفتار به متن میتواند به عنوان جایگزینی برای صفحه کلید یا ماوس برای وارد کردن دستورها مورد استفاده قرار گیرد. سیستم‌های واکافت‌کننده گفتار انواع مختلفی دارند، بعضی قادرند گفتار پیوسته را شناسایی نمایند. بعضی هم فقط می‌توانند گفتار گسسته (که بین کلمات سکوت وجود دارد) را شناسایی کنند. همچنین قادرند واژگان گفته شده توسط افراد مختلف یا فقط توسط یک گوینده را تشخیص دهند.

این سیستم‌ها با بکارگیری روش‌های مختلف طبقه‌بندی و شناسایی الگو قادر به تشخیص واژگان هستند که البته برای افزایش دقت در شناسایی از یک فرهنگ لغات نیز در انتهای سیستم استفاده می‌شود. روشهایی مانند Hidden Markov Model یا Neural Network در بسیاری از سیستم‌های تشخیص گفتار مورد استفاده قرار می‌گیرند و در بخش‌های انتهایی سیستم از هوش مصنوعی کمک گرفته می‌شود.

در این آموزش ما سعی بر این داریم تا با استفاه از کتابخانه speechrecognition در محیط پایتون صدایی را که از طریق میکرون دریافت میشود به متن تبدیل کنیم.

بسته های بازشناسی گفتار در پایتون و دلیل انتخاب کتابخانه speechrecognition:

بسته‌های کاربردی برای بازشناسی گفتار در PyPI وجود دارد. برخی از این بسته‌ها در ادامه بیان شده‌اند.

  • apiai (+)
  • assemblyai (+)
  • google-cloud-speech (+)
  • pocketsphinx (+)
  • SpeechRecognition (+)
  • watson-developer-cloud (+)
  • wit (+)

برخی از این بسته‌ها – مانند wit و apiai – ویژگی‌های توکاری مانند «پردازش زبان طبیعی» (Natural Language Processing) برای تعیین نیت سخنران ارائه می‌کنند که از بازشناسی گفتار پایه‌ای کاری فراتر است. دیگر بسته‌ها، مانند google-cloud-speech، صرفا روی تبدیل گفتار به متن تمرکز می‌کنند. اما «SpeechRecognition» بسته‌ای محسوب می‌شود که سهولت کار با آن مثال زدنی و فوق‌العاده به شمار می‌آید. بازشناسی گفتار نیازمند ورودی صوتی است و بسته SpeechRecognition بازیابی این ورودی را بسیار آسان می‌کند. از سوی دیگر، به جای آنکه نیاز به ساخت اسکریپتی برای دسترسی به میکروفون و پردازش فایل صوتی از پایه باشد، SpeechRecognition این کارها را تنها در چند دقیقه انجام می‌دهد.

کتابخانه SpeechRecognition مانند پوششی برای چندین «رابط برنامه‌نویسی نرم‌افزارهای کاربردی» (API) محبوب عمل کرده و بنابراین بسیار انعطاف‌پذیر است. یکی از این موارد «Google Web Speech API» است که از کلید API پیش‌فرض که در کتابخانه SpeechRecognition هاردکد (hard-coded) شده، پشتیبانی می‌کند. این بدین معنا است که کاربر بدون نیاز به ثبت‌نام برای این سرویس می‌تواند از آن استفاده کند.

 

نعطاف‌پذیری و سهولت کاربری بسته SpeechRecognition آن را به یک انتخاب فوق‌العاده برای هر پروژه پایتونی مبدل ساخته است. اگرچه، پشتیبانی از کلیه ویژگی‌های API‌ هایی که این بسته پوششی برای آن‌هاست، تضمین نمی‌شود. کاربر باید زمانی را اختصاص داده و با جست‌و‌جو پیرامون گزینه‌های موجود اطمینان حاصل کند که بسته SpeechRecognition در مساله مورد نظر کاربر کار می‌کند یا خیر. به نظر می‌رسد آنچه پیش‌تر بیان شد توانسته در راستای استفاده از بسته SpeechRecognition متقاعد کننده واقع شود، بنابراین گام بعدی روش نصب این بسته خواهد بود.

نصب SpeechRecognition

SpeechRecognition با پایتون نسخه ۲.۶، ۲.۷ و ۳.۳ به بالا سازگار است اما نیاز به یک سری مراحل نصب افزوده برای پایتون ۲ دارد. در این راهنما، فرض می‌شود که کاربر از پایتون ۳.۳ به بالا استفاده می‌کند. بسته SpeechRecognition را می‌توان از ترمینال با pip نصب کرد.

pip install SpeechRecognition

تذکر: کاربران گوناگون ممکن است از نسخه‌های متفاوتی از پایتون استفاده کنند. در هنگام نگارش این راهنما، آخرین نسخه موجود ۳٫۸٫۵ بوده است.
پس از اینکه کتابخانه با موفقیت نصب شد ما میتوانیم از آن در کدهای خود استفاده کنیم.

کد اصلی برنامه:

در ابتدا باید باید کتابخانه نصب شده را به برنامه ای که قرار است بنویسیم فراخوانی کنیم. بدین منظور از دستور زیر استفاده میکینیم:

 import speech_recognition as sr

حال در هر کجا که بخواهیم از متدهای کتابخانه استاده کنیم بجای اسم کامل کتابخانه میتوانیم از مخفف sr استفاده نماییم.

همه کارهای جادویی بسته SpeechRecognition با کلاس Recognizer به وقوع می‌پیوندد. البته، هدف اولیه نمونه Recognizer بازشناسی گفتار است. هر «نمونه» (instance) با تنظیمات و کارکردهای متنوعی برای بازشناسی گفتار از یک منبع صوتی همراه است. ساخت یک نمونه Recognizer آسان محسوب می‌شود. در این راستا کافی است کد زیر وارد شود.

 r = sr.Recognizer()

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

 mic_list = sr.Microphone.list_microphone_names()

 

mic_list لیستی از تمام میکروفن های موجود میباشد. در این قسمت میخواهیم میکروفن مورد نظر خود را انتخاب کرده و به برنامه معرفی کنیم، تا برنامه ما ورودی صدای ما را از طریق میکروفن مورد نظر بگیرد. برای دسترسی به میکروفن های سیستم میتوانیم از بخش device manager سیستم خود لیست میکروفن های موجود را مشاهده کنیم:

از دستور زیر برای معرفی میکروفن مورد نظر به برنامه استفاده میکنیم:

 

for i, microphone_name in enumerate(mic_list):

    print(microphone_name)
    if microphone_name == "Microphone (WO Mic Device)":
        device_id = i
        break

به عنوان آخرین مرحله میخواهیم صوت را از میکرفن مد نظر گرفته و سپس به متن تبدیل کنیم. دستورات به صورت زیر میباشد:

with sr.Microphone(device_index=device_id, sample_rate=sample_rate,
                   chunk_size=chunk_size) as source:
    while True:
        r.adjust_for_ambient_noise(source)
        print("Say Something")
        audio = r.listen(source)


        try:
            text = r.recognize_google(audio, language='fa-FA')
            print("you said: " + text)



        except sr.UnknownValueError:
            print("Google Speech Recognition could not understand audio")

        except sr.RequestError as e:

            print("Could not request results from GoogleSpeechRecognitionservice;{0}".format(e))

کد کامل برنامه:

 

# Python 2.x program for Speech Recognition

import speech_recognition as sr
# enter the name of usb microphone that you found
# using lsusb 
# the following name is only used as an example
# mic_name = "USB Device 0x46d:0x825: Audio (hw:1, 0)"
# Sample rate is how often values are recorded
sample_rate = 48000
# Chunk is like a buffer. It stores 2048 samples (bytes of data)
# here.
# it is advisable to use powers of 2 such as 1024 or 2048
chunk_size = 2048
# Initialize the recognizer
r = sr.Recognizer()

# generate a list of all audio cards/microphones
mic_list = sr.Microphone.list_microphone_names()

# the following loop aims to set the device ID of the mic that
# we specifically want to use to avoid ambiguity.
for i, microphone_name in enumerate(mic_list):

    print(microphone_name)
    if microphone_name == "Microphone (WO Mic Device)":
        device_id = i
        break
    # use the microphone as source for input. Here, we also specify
# which device ID to specifically look for incase the microphone
# is not working, an error will pop up saying "device_id undefined"
with sr.Microphone(device_index=device_id, sample_rate=sample_rate,
                   chunk_size=chunk_size) as source:
    while True:
        # wait for a second to let the recognizer adjust the
        # energy threshold based on the surrounding noise level
        r.adjust_for_ambient_noise(source)
        print("Say Something")
        # listens for the user's input
        audio = r.listen(source)


        try:
            text = r.recognize_google(audio, language='fa-FA')
            print("you said: " + text)


        # error occurs when google could not understand what was said

        except sr.UnknownValueError:
            print("Google Speech Recognition could not understand audio")

        except sr.RequestError as e:
            print("Could not request results from GoogleSpeechRecognitionservice;{0}".format(e))

فایل دانلودی کد:

فایل متنی کد برنامه
نوع فایل : speech-iran-ai.txt
حجم : 2 kb
پسورد : ندارد
دریافت

 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *