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