وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

مقدمه ای بر تشخیص گفتار با پایتون

0 35
زمان لازم برای مطالعه: 6 دقیقه


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

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

در این آموزش خواهید دید که چگونه می توانیم یک برنامه تشخیص گفتار بسیار ساده ایجاد کنیم که قادر به تشخیص گفتار از فایل های صوتی و همچنین زنده از میکروفون است. بنابراین، بیایید بدون بحث بیشتر شروع کنیم.

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

نصب کتابخانه SpeechRecognition

برای نصب کتابخانه دستور زیر را اجرا کنید:

$ pip install SpeechRecognition

تشخیص گفتار از فایل های صوتی

در این قسمت خواهید دید که چگونه می توانیم گفتار را از فایل صوتی به متن ترجمه کنیم. فایل صوتی که از آن به عنوان ورودی استفاده خواهیم کرد را می توان از آن دانلود کرد این لینک. فایل را در سیستم فایل محلی خود دانلود کنید.

اولین قدم، مثل همیشه، این است که import کتابخانه های مورد نیاز در این مورد، ما فقط نیاز داریم import را speech_recognition کتابخانه ای که به تازگی دانلود کرده ایم.

import speech_recognition as speech_recog

برای تبدیل گفتار به متن، تنها کلاسی که نیاز داریم این است Recognizer کلاس از speech_recognition مدول. بسته به API اساسی مورد استفاده برای تبدیل گفتار به متن، Recognizer کلاس متدهای زیر را دارد:

  • recognize_bing(): از Microsoft Bing Speech API استفاده می کند
  • recognize_google(): از Google Speech API استفاده می کند
  • recognize_google_cloud(): از Google Cloud Speech API استفاده می کند
  • recognize_houndify(): از Houndify API توسط SoundHound استفاده می کند
  • recognize_ibm(): از IBM Speech to Text API استفاده می کند
  • recognize_sphinx(): از PocketSphinx API استفاده می کند

در بین تمام روش های فوق، recognize_sphinx() می توان از روش آفلاین برای ترجمه گفتار به متن استفاده کرد.

برای تشخیص گفتار از یک فایل صوتی، باید یک شی از آن ایجاد کنیم AudioFile کلاس از speech_recognition مدول. مسیر فایل صوتی که می خواهید به متن ترجمه شود به سازنده آن منتقل می شود AudioFile کلاس اسکریپت زیر را اجرا کنید:

sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav')

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

ما استفاده خواهیم کرد recognize_google() روشی برای رونویسی فایل های صوتی ما با این حال recognize_google() روش نیاز به AudioData موضوع از speech_recognition ماژول به عنوان یک پارامتر برای تبدیل فایل صوتی ما به یک AudioData شی، ما می توانیم استفاده کنیم record() روش از Recognizer کلاس ما باید عبور کنیم AudioFile اعتراض به record() روش، همانطور که در زیر نشان داده شده است:

with sample_audio as audio_file:
    audio_content = recog.record(audio_file)

حالا اگر نوع آن را بررسی کنید audio_content متغیر، خواهید دید که دارای نوع است speech_recognition.AudioData.

type(audio_content)

خروجی:

speech_recognition.AudioData

حالا ما می توانیم به سادگی عبور کنیم audio_content اعتراض به recognize_google() روش از Recognizer() شی کلاس و فایل صوتی به متن تبدیل می شود. اسکریپت زیر را اجرا کنید:

recog.recognize_google(audio_content)

خروجی:

'Bristol O2 left shoulder take the winding path to reach the lake no closely the size of the gas tank degrees office 30 face before you go out the race was badly strained and hung them the stray cat gave birth to kittens the young girl gave no clear response the meal was called before the bells ring what weather is in living'

خروجی بالا متن فایل صوتی را نشان می دهد. می بینید که فایل 100% به درستی رونویسی نشده است، اما دقت آن بسیار معقول است.

تنظیم مدت زمان و مقادیر افست

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

sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav')
with sample_audio as audio_file:
    audio_content = recog.record(audio_file, duration=10)

recog.recognize_google(audio_content)

خروجی:

'Bristol O2 left shoulder take the winding path to reach the lake no closely the size of the gas'

به همین ترتیب، می توانید بخشی از فایل صوتی را از ابتدا با استفاده از رد کنید offset پارامتر. به عنوان مثال، اگر نمی خواهید 4 ثانیه اول صدا را رونویسی کنید، 4 را به عنوان مقدار برای offset صفت. به عنوان مثال، اسکریپت زیر 4 ثانیه اول فایل صوتی را رد می کند و سپس فایل صوتی را به مدت 10 ثانیه رونویسی می کند.

sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav')
with sample_audio as audio_file:
    audio_content = recog.record(audio_file, offset=4, duration=10)

recog.recognize_google(audio_content)

خروجی:

'take the winding path to reach the lake no closely the size of the gas tank web degrees office dirty face'

رسیدگی به نویز

یک فایل صوتی به دلایل مختلفی می تواند حاوی نویز باشد. نویز در واقع می تواند بر کیفیت ترجمه گفتار به متن تأثیر بگذارد. برای کاهش نویز، Recognizer کلاس شامل adjust_for_ambient_noise() روش، که طول می کشد AudioData شی به عنوان یک پارامتر اسکریپت زیر نشان می دهد که چگونه می توانید کیفیت رونویسی را با حذف نویز از فایل صوتی بهبود بخشید:

sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav')
with sample_audio as audio_file:
    recog.adjust_for_ambient_noise(audio_file)
    audio_content = recog.record(audio_file)

recog.recognize_google(audio_content)

خروجی:

'Bristol O2 left shoulder take the winding path to reach the lake no closely the size of the gas tank web degrees office 30 face before you go out the race was badly strained and hung them the stray cat gave birth to kittens the younger again no clear response the mail was called before the bells ring what weather is in living'

خروجی کاملاً مشابه چیزی است که قبلاً دریافت کردیم. این به این دلیل است که فایل صوتی قبلاً نویز بسیار کمی داشت.

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

در این بخش خواهید دید که چگونه می توانید صدای دریافتی زنده از طریق میکروفون را رونویسی کنید روی سیستم شما

راه های مختلفی وجود دارد process ورودی صوتی از طریق میکروفون دریافت می شود و کتابخانه های مختلفی برای انجام این کار ایجاد شده است. یکی از این کتابخانه ها است PyAudio. برای نصب اسکریپت زیر را اجرا کنید PyAudio کتابخانه:

$ pip install PyAudio

اکنون منبع صوتی که باید رونویسی شود یک میکروفون است. برای ضبط صدا از میکروفون، ابتدا باید یک شی از آن ایجاد کنیم Microphone کلاس از Speach_Recogniton ماژول، همانطور که در اینجا نشان داده شده است:

mic = speech_recog.Microphone()

برای مشاهده لیست تمامی میکروفون های سیستم خود می توانید از list_microphone_names() روش:

speech_recog.Microphone.list_microphone_names()

خروجی:

('Microsoft Sound Mapper - Input',
 'Microphone (Realtek High Defini',
 'Microsoft Sound Mapper - Output',
 'Speakers (Realtek High Definiti',
 'Microphone Array (Realtek HD Audio Mic input)',
 'Speakers (Realtek HD Audio output)',
 'Stereo Mix (Realtek HD Audio Stereo input)')

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

مرحله بعدی ضبط صدا از میکروفون است. برای انجام این کار، باید با شماره تماس بگیرید listen() روش از Recognizer() کلاس مانند record() روش، listen() متد را نیز برمی گرداند speech_recognition.AudioData شی، که سپس می تواند به ارسال شود recognize_google() روش.

اسکریپت زیر از کاربر می خواهد که چیزی را در میکروفون بگوید و سپس هر آنچه را که کاربر گفته است چاپ می کند:

with mic as audio_file:
    print("Speak Please")

    recog.adjust_for_ambient_noise(audio_file)
    audio = recog.listen(audio_file)

    print("Converting Speech to Text...")
    print("You said: " + recog.recognize_google(audio))

پس از اجرای اسکریپت بالا، پیام زیر را مشاهده خواهید کرد:

Please say something

در این مرحله هر چه می خواهید بگویید و سپس مکث کنید. هنگامی که مکث کردید، رونویسی هر آنچه را که گفتید خواهید دید. در اینجا خروجی من است:

Converting Speech to Text...
You said: hello this is normally from رسانگار abuse this is an article روی speech recognition I hope you will like it and this is just a test speech and when I will stop speaking are you in today thank you for Reading

ذکر این نکته ضروری است که اگر recognize_google() متد نمی تواند کلماتی را که شما صحبت می کنید با هیچ یک از کلمات موجود در مخزن خود مطابقت دهد، یک استثنا ایجاد می شود. شما می توانید این را با گفتن چند کلمه نامفهوم آزمایش کنید. شما باید استثنای زیر را ببینید:

Speak Please
Converting Speech to Text...
---------------------------------------------------------------------------
UnknownValueError                         Traceback (most recent call last)
<ipython-input-27-41218bc8a239> in <module>
      8     print("Converting Speech to Text...")
      9
---> 10     print("You said: " + recog.recognize_google(audio))
     11
     12

~\Anaconda3\lib\site-packages\speech_recognition\__init__.py in recognize_google(self, audio_data, key, language, show_all)
    856         # return results
    857         if show_all: return actual_result
--> 858         if not isinstance(actual_result, dict) or len(actual_result.get("alternative", ())) == 0: raise UnknownValueError()
    859
    860         if "confidence" in actual_result("alternative"):

UnknownValueError:

یک رویکرد بهتر استفاده از try مسدود کردن زمانی که recognize_google() روش مطابق شکل زیر نامیده می شود:

with mic as audio_file:
    print("Speak Please")

    recog.adjust_for_ambient_noise(audio_file)
    audio = recog.listen(audio_file)

    print("Converting Speech to Text...")

    try:
        print("You said: " + recog.recognize_google(audio))
    except Exception as e:
        print("Error: " + str(e))

نتیجه

تشخیص گفتار کاربردهای مفید مختلفی در حوزه تعامل انسان با کامپیوتر و رونویسی خودکار گفتار دارد. این مقاله به طور خلاصه توضیح می دهد process رونویسی گفتار در پایتون از طریق speech_recognition کتابخانه و روش ترجمه گفتار به متن را در زمانی که منبع صوتی یک فایل صوتی یا میکروفون زنده است توضیح می دهد.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-18 19:52:06

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید