FA-TOOLS — Header Component

راهنمای جامع تشخیص گفتار (Speech Recognition) در پایتون به همراه کدهای کاربردی

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

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

تشخیص گفتار در پایتون چیست؟

تشخیص گفتار (Speech Recognition) در پایتون + کد آماده — تصویر 1

پاسخ کوتاه: تشخیص گفتار (Speech Recognition) در پایتون فرآیندی است که طی آن، سیگنال‌های صوتی آنالوگ دریافتی از میکروفون یا فایل صوتی دیجیتال، توسط الگوریتم‌های پردازش زبان طبیعی و یادگیری ماشین، تحلیل شده و به متن متناظر با آن تبدیل می‌شوند. این فرآیند معمولاً به کمک APIهای آنلاین یا مدل‌های آفلاین انجام می‌شود.

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

بهترین کتابخانه‌های تشخیص گفتار در پایتون

تشخیص گفتار (Speech Recognition) در پایتون + کد آماده — تصویر 2

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

نام کتابخانه / ابزار ویژگی بارز و کاربرد اصلی
SpeechRecognition محبوب‌ترین کتابخانه پایتون با پشتیبانی از موتورهای مختلف مانند گوگل، مایکروسافت و IBM.
PocketSphinx بسیار سبک و کاملاً آفلاین. برای پروژه‌های اینترنت اشیاء (IoT) و رزبری‌پای عالی است.
Whisper (OpenAI) دقیق‌ترین مدل هوش مصنوعی متن‌باز دنیا با پشتیبانی خارق‌العاده از زبان فارسی (نیاز به سخت‌افزار قوی دارد).
AssemblyAI یک سرویس ابری تجاری بسیار دقیق با امکاناتی مثل تشخیص احساسات و جداسازی صدای گویندگان.

پیش‌نیازها و مراحل نصب محیط توسعه

تشخیص گفتار (Speech Recognition) در پایتون + کد آماده — تصویر 3

برای پیاده‌سازی این پروژه، ما از کتابخانه استاندارد و محبوب SpeechRecognition استفاده خواهیم کرد. همچنین برای دریافت زنده صدا از میکروفون، به ابزار دیگری به نام PyAudio نیاز داریم. برای راه‌اندازی مراحل زیر را طی کنید:

  1. ابتدا ترمینال یا خط فرمان (CMD) خود را باز کنید.
  2. دستور زیر را برای نصب کتابخانه اصلی وارد کنید:
    pip install SpeechRecognition
  3. سپس برای دسترسی به میکروفون دستگاه، پکیج PyAudio را نصب کنید:
    pip install pyaudio

    نکته مهم در ویندوز: اگر نصب PyAudio با خطا مواجه شد، دستور pip install pipwin و سپس pipwin install pyaudio را اجرا کنید.

راهنمای گام‌به‌گام تبدیل فایل صوتی به متن

تشخیص گفتار (Speech Recognition) در پایتون + کد آماده — تصویر 4

پاسخ کوتاه: برای تبدیل فایل صوتی به متن در پایتون، ابتدا باید فایل صوتی خود (ترجیحاً با فرمت WAV) را با استفاده از متد AudioFile بارگذاری کرده، سپس آن را به موتور تشخیص گفتار گوگل یا هر موتور دیگری ارسال کنید تا متن نهایی استخراج شود.

در ادامه، ساده‌ترین و کاربردی‌ترین کد پایتون برای خواندن یک فایل صوتی و تبدیل آن به متن آورده شده است. مطمئن شوید که یک فایل صوتی کوتاه با فرمت WAV در کنار فایل پایتون خود دارید:

import speech_recognition as sr

# مقداردهی اولیه به کلاس تشخیص گفتار
recognizer = sr.Recognizer()

# مشخص کردن مسیر فایل صوتی (فرمت wav پیشنهاد می‌شود)
audio_file_path = "voice-sample.wav"

# بارگذاری فایل صوتی
with sr.AudioFile(audio_file_path) as source:
    print("در حال خواندن فایل صوتی و کاهش نویز...")
    # ضبط اطلاعات صوتی از فایل
    audio_data = recognizer.record(source)

try:
    print("در حال پردازش و تبدیل صدا به متن...")
    # استفاده از API رایگان گوگل برای تبدیل صدا به متن انگلیسی
    text = recognizer.recognize_google(audio_data, language="en-US")
    print("n--- متن استخراج شده ---")
    print(text)
    print("----------------------")

except sr.UnknownValueError:
    print("متاسفم! کیفیت صدا پایین بود و سیستم نتوانست آن را تشخیص دهد.")
except sr.RequestError as e:
    print(f"خطا در ارتباط با سرور تشخیص گفتار گوگل: {e}")

دریافت صدا از میکروفون به صورت زنده

تشخیص گفتار (Speech Recognition) در پایتون + کد آماده — تصویر 5

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

import speech_recognition as sr

recognizer = sr.Recognizer()

# استفاده از میکروفون پیش‌فرض سیستم به عنوان منبع ورودی
with sr.Microphone() as source:
    print("لطفاً سکوت را رعایت کنید تا نویز محیط بررسی شود...")
    # کالیبره کردن نویز محیط برای افزایش دقت
    recognizer.adjust_for_ambient_noise(source, duration=1)
    
    print("میکروفون فعال شد! شروع به صحبت کنید...")
    # گوش دادن به صدا به مدت نامحدود تا زمان سکوت کاربر
    audio = recognizer.listen(source)

try:
    print("در حال تبدیل صدای شما به متن...")
    user_speech = recognizer.recognize_google(audio, language="en-US")
    print(f"nمتن تشخیص داده شده: {user_speech}")

except sr.UnknownValueError:
    print("صدایی تشخیص داده نشد یا نامفهوم بود.")
except sr.RequestError:
    print("اتصال اینترنت خود را بررسی کنید.")

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

پاسخ کوتاه: برای تشخیص زبان فارسی، کافی است پارامتر language را در متد تشخیص گفتار به مقدار "fa-IR" تغییر دهید. موتور ابری گوگل به صورت بومی از زبان فارسی پشتیبانی می‌کند و نتایج بسیار دقیقی ارائه می‌دهد.

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

import speech_recognition as sr

rec = sr.Recognizer()

with sr.Microphone() as source:
    print("سیستم آماده شنیدن است. به فارسی صحبت کنید...")
    rec.adjust_for_ambient_noise(source)
    audio = rec.listen(source)

try:
    # تغییر پارامتر زبان به fa-IR برای درک لهجه و واژگان فارسی
    persian_text = rec.recognize_google(audio, language="fa-IR")
    print("---------------------------------")
    print(f"نتیجه تشخیص گفتار: {persian_text}")
    print("---------------------------------")
except sr.UnknownValueError:
    print("متاسفانه متوجه صحبت شما نشدم.")
except sr.RequestError:
    print("اتصال به سرور برقرار نشد. اینترنت را چک کنید.")

عیب‌یابی سریع و رفع خطاهای رایج

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

  • خطای Could not find PyAudio / portaudio:
    این خطا یعنی موتور مدیریت کارت صدا در پایتون نصب نیست. در لینوکس اوبونتو از دستور sudo apt-get install python3-pyaudio و در سیستم‌های مکینتاش ابتدا از brew install portaudio و سپس pip install pyaudio استفاده کنید.
  • خطای UnknownValueError (عدم تشخیص کلمات):
    این خطا زمانی رخ می‌دهد که صدای ورودی نویز بسیار بالایی داشته باشد یا کاربر خیلی آرام صحبت کند. حتماً از متد adjust_for_ambient_noise استفاده کنید و فاصله استاندارد با میکروفون را حفظ نمایید.
  • تاخیر زیاد در دریافت پاسخ متن:
    اگر پاسخ‌ها دیر برمی‌گردند، به علت سرعت اینترنت شما در ارتباط با سرورهای گوگل است. برای رفع این مشکل می‌توانید از مدل‌های آفلاین مانند PocketSphinx یا مدل فشرده شده‌ی OpenAI Whisper استفاده کنید.

پرسش‌های متداول

۱. آیا برای تبدیل صدا به متن در پایتون همیشه به اینترنت نیاز داریم؟

خیر، کتابخانه‌هایی مانند PocketSphinx و Whisper شرکت OpenAI به شما اجازه می‌دهند تا بدون نیاز به اینترنت و به صورت کاملاً آفلاین عملیات تشخیص گفتار را روی سیستم خود انجام دهید.

۲. چطور می‌توانیم فایل‌های صوتی طولانی را به متن تبدیل کنیم؟

برای فایل‌های طولانی (بیشتر از چند دقیقه)، ارسال کل فایل به یک‌باره ممکن است با خطا مواجه شود. راهکار درست این است که ابتدا فایل را به بخش‌های کوچک‌تر ۳۰ ثانیه‌ای تقسیم کنید و سپس تک‌تک آن‌ها را پردازش نمایید.

۳. فرمت استاندارد فایل صوتی برای پردازش صدا چیست؟

بهترین فرمت فایل صوتی بدون اتلاف داده (Lossless)، فرمت WAV با فرکانس نمونه‌برداری ۱۶۰۰۰ هرتز (16kHz) و تک کاناله (Mono) است که بالاترین دقت تشخیص را به همراه دارد.

۴. آیا تشخیص گفتار در پایتون کاملاً رایگان است؟

بله، متدهایی مانند recognize_google به طور پیش‌فرض و بدون نیاز به کلید API در پروژه‌های تست و شخصی کاملاً رایگان هستند. اما برای پروژه‌های تجاری بزرگ و بدون محدودیت، باید از اشتراک‌های پولی ابری استفاده کنید.

Table of Contents

آخرین نوشته‌ها