آموزش ساخت قفل صوتی در پایتون :: Mr Python | مستر پایتون

آموزش ساخت قفل صوتی در پایتون

  • ۲۴۲۲

آموزش ساخت قفل صوتی در پایتون

درود به همه !

 

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

برای انجام احراز هویت صوتی در پایتون ، اولین کاری که باید بکنیم این است که ترتیبی بدهیم تا اسکریپت بتواند صدای محیط را ضبط کند و صدای ضبط شده توسط فرد را به حروف تبدیل کند (Speech To Text) . خب سرویس های زیادی در دنیا اینکار را انجام میدهند. برای مثال اگر با دستیار صوتی گوگل کار کرده باشید ، میتواند حروفی که شما تلفظ میکنید را تشخیص دهد . ما امروز برای اینکار از کتابخانه ای به اسم SpeechRecognition در پایتون استفاده میکنیم که به طور خودکار با استفاده از سرویس هایی مثل گوگل ، بینگ و ... از طریق صوت ضبط شده ، کلماتی که فرد بر زبان آورده است را تشخیص میدهد .

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

نصب SpeechRecognition در لینوکس :

MrPython@debian:~$ sudo pip3 install SpeechRecognition

نصب SpeechRecognition در ویندوز :

C:\> pip install SpeechRecognition

همچنین ما برای ضبط صدا از طریق میکروفون سیستم در پایتون نیاز به کتابخانه و فایل های کمکی به اسم PyAudio داریم .

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

C:\> pip install pyaudio

نصب pyaudio در لینوکس کمی  متفاوت است . برای این کتابخانه در لینوکس ابتدا باید فایل های مورد نیاز آن را نصب کنیم . با استفاده از پکیج منیجر لینوکس ، فایل های مورد نیاز این کتابخانه را نصب میکنیم :

MrPython@debian:~$ sudo apt install python3-pyaudio

در نهایت برای اطمینان بیشتر دستور زیر رو وارد میکنیم :

MrPython@debian:~$ sudo pip3 install pyaudio

خب تا اینجا کتابخانه های مورد نیاز نصب شده است . میریم سراغ سورس کد .

فرض کنیم جمله ی عبور ما این است :‌ Hi I am Admin . یعنی اگر شخصی این جمله را گفت ، احراز هویت او به درستی انجام شده . (البته بهتر است فقط یک کلمه باشد برای مثال : Admin زیرا تشخیص آن برای برنامه راحت تر است)

سورس کد :

import speech_recognition as sr

r = sr.Recognizer()

with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source)     # Remove Noise
    audio = r.listen(source) # Loading Voice
    text = r.recognize_google(audio)  # Recognize the Voice

text = text.lower()
print("-----------------")
print("You Said : {}".format(text))

if "hi i am admin" in text:
    print("Welcome Admin ! Your Sentence is Correct :)")
else:
    print("Your Sentence is InCorrect :(")

توضیح سورس کد : در ابتدا کتابخانه ی مورد نیاز رو ایمپورت کردیم . سپس در خط بعد یک شیء از Recognizer ساختیم و ریختیم داخل متغییر r . با استفاده از این شیء میتوانیم صوت را تبدیل به متن کنیم .

در خط بعد با استفاده از دستور with یک متغییر موقت از sr.Microphone ساختیم و اسمشو گذاشتیم source . در واقع این متغییر source همون شیء میکروفون سیستممونه .

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

سپس در خط بعد با استفاده از تابع ()listen اومدیم صدای ضبط شده رو بارگذاری کردیم و ریختیم داخل متغییر audio  . و نهایتا در خط بعد با استفاده از تابع recognize_google اومدیم صدای ضبط شده یعنی متغییر audio رو با استفاده از سرویس گوگل به متن تبدیل کردیم و ریختیم داخل متغییر text . (چون با گوگل اینکارو میکنه ، پس باید به اینترنت وصل باشه)

بعد از بلاک with در اولین خط اومدیم با استفاده از تابع lower حروف رو برای احتیاط تبدیل به حروف کوچک انگلیسی کردیم و سپس در چند خط بعد برای کاربر چاپ کردیم که چه چیزی گفته .

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

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

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

نکته ای که هست اینه که اگه جملات رو مخفف بگید ممکنه درست تشخیص نده مثلا بگین : hi i'm admin . درستش اینه که بدون مخفف بگین یعنی اینطوری :‌ hi i am admin

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

یا حتی میتونیم برای خودمون دستیار صوتی بسازیم . برای مثال میخوایم یه دستیار صوتی برای لینوکس یا ویندوز بنویسیم که هروقت بهش گفتیم shutdown سیستم رو خاموش کنه و هروقت بهش گفتیم restart سیستم رو Restart کنه :

import speech_recognition as sr

r = sr.Recognizer()

with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source)    
    audio = r.listen(source)
    text = r.recognize_google(audio)

text = text.lower()

print("-----------------")
print("You Said : {}".format(text))

if "shutdown" in text:
    system("shutdown -h now")

elif "restart" in text:
    system("reboot")

خب قسمت های اولی سورس رو که توضیح دادیم . فقط آخر سورس بعد از اینکه text رو بدست آوردیم یه if گذاشتیم که اگه shutdown داخلش بود با استفاده از تابع system دستور خاموش شدن سیستم رو در خط فرمان وارد کنه  وبه همین روش اگه restart داخل متنی که گفته بودیم بود ، سیستم رو ری استارت کنه .(دستور خاموش شدن و ری استارت شدن سیستم برای لینوکس نوشته شده تو ویندوز میتونید تغییرش بدید) . کلا هم میتونید یه حلقه while بینهایت بزارید روی اسکریپتتون که همش  دستوراتتون رو گوش کنه و اجرا کنه . خلاصه هر جور دستوری میخواین میتونین براش تنظیم کنید .

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

text = r.recognize_google(audio , language = "fa_IR")

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

 

امیدوارم که لذت برده باشید . سوالی بود در بخش نظرات مطرح کنید .

تا پست بعدی ، یا حق !

Telegram Channel : @mrpythonblog

  • با عرض سلام 

    باتشکر از مطلب خوب تان (: 

     

    پاسخ:
    درود بر شما . ممنون که دیدید :)
  • سلام معمولا برای نصب کتابخونه pyaudio

    خیلیا مشکل دارن 

    یعنی کلا ارور نده باید توجه کنید

    تو اینترنت سرچ کنید ارور نصب کتابخانه pyaudio

    البته به انگلیسی 

    متوجه میشین باید چیکار کنید

    پاسخ:
    ممنون از راهنماییتون :)
  • ارور برا نصب کتابخانه دوم

    RROR: Command errored out with exit status 1:
         command: 'c:\users\user\appdata\local\programs\python\python38\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\User\\AppData\\Local\\Temp\\pip-install-8qtcy8r1\\pyaudio_bd53c857fafe45b1b7c1512e31456455\\setup.py'"'"'; __file__='"'"'C:\\Users\\User\\AppData\\Local\\Temp\\pip-install-8qtcy8r1\\pyaudio_bd53c857fafe45b1b7c1512e31456455\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\User\AppData\Local\Temp\pip-record-0kvnqdk_\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\user\appdata\local\programs\python\python38\Include\pyaudio'
             cwd: C:\Users\User\AppData\Local\Temp\pip-install-8qtcy8r1\pyaudio_bd53c857fafe45b1b7c1512e31456455\
        Complete output (9 lines):
        running install
        running build
        running build_py
        creating build
        creating build\lib.win-amd64-3.8
        copying src\pyaudio.py -> build\lib.win-amd64-3.8
        running build_ext
        building '_portaudio' extension
        error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/
        ----------------------------------------
    ERROR: Command errored out with exit status 1: 'c:\users\user\appdata\local\programs\python\python38\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\User\\AppData\\Local\\Temp\\pip-install-8qtcy8r1\\pyaudio_bd53c857fafe45b1b7c1512e31456455\\setup.py'"'"'; __file__='"'"'C:\\Users\\User\\AppData\\Local\\Temp\\pip-install-8qtcy8r1\\pyaudio_bd53c857fafe45b1b7c1512e31456455\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\User\AppData\Local\Temp\pip-record-0kvnqdk_\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\user\appdata\local\programs\python\python38\Include\pyaudio' Check the logs for full command output.

    پاسخ:
    سلام . 
    با توجه به متن ارور ++Microsoft Visual C ورژن 14 به بالا رو نصب کنید مشکل حل خواهد شد .
  • کتابخانه دوم نصب نمیشه 

    پاسخ:
    درود .
    منظورتون از نصب نمیشه چیه ؟ 
    ارور میده ؟ ارورش چیه ؟
  • سلام خسته نباشید من یک برنامه ای نوشتم مربوط به دستیار صوتی بود و از همین کتابخونه ها کمک گرفتم ، اوایل اجرا میشد و باهاش کار میکردم ولی بعد یکی دو هفته وقتی اجراش میکنم به جای اینکه 5 ثانیه ضبط بکنه و بعدش صدا رو تحلیل بکنه بینهایت ضبط میکنه و این ضبط کردن تموم نمیشه چکار بکنم  لطفا سریع بگین کارم گیره 

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

     

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

    آقا یه سوال داشتم

    نمیشه کاری کرده که به اینترنت نیاز نداشته باشه؟

    مثلاً به جای تابع recognize_google از یه تابع دیگه استفاده کرد؟

     

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

    من یه مشکلی دارم، من از پایتون 3.8.6 استفاده میکنم و هنگام نصب pyaudio کلی ارور بهم میده و اصلا نصب نمیشه

    ممنون میشم که راهماییم کنید

    پاسخ:
    سلام . خواهش میکنم
    ارورتون رو برای ما بفرستید لطفا 

  • بابا دمت گرم خیلی عالیههههههه 

    من عاشق سایت شما هستم آموزش هاتون حرف نداره 

    به همه‌ی دوستام که پایتون بلد هستند، سایت شما رو معرفی کردم

     

    پاسخ:
    درود بر شما .
    ممنونم و خواهش میکنم .
    سلامت باشید 
  • چقدر خوبه این پایتون (((((:

    پاسخ:
    بی نظیر !
  • سلام 

    یه سوال داشتم 

    صدا رو که ذخیره نمیکنه؟!

    چون گفتید صدا رو ضبط میکنه این سوال برام پیش اومد

    پاسخ:
    سلام 
    خیر در حالت عادی نه صدا رو ذخیره نمیکنه .
  • سلام

    مستر تروخدا این thread ها رو بزار واقعا بحث سخت و خصوصا واجبی و خیلی باحالیه!

     

    پاسخ:
    سلام.
    یه دوره کلا داریم ضبط میکنیم آموزش طراحی کرکر ها در پایتون
    کامل توضیحش میدیم تا چند وقت دیگه آمادس
  • 😍😍خیلی عالی

    پاسخ:
    سلام .
    ممنونم ✋😊
  • واقعا مرسی :|

    واقعا واقعا واقعا مرسی خیلی خوبی!

    جدا یعنی اینا از پایتون بر میاد ؟ :|

    پاسخ:
    سلام .
    ممنونم 😉✋

    بله خب خوبی یه سیستم اوپن سورس همینه . هرکسی میتونه پیشرفتش بده . بنابراین پایتون خیلی چیزا از دستش بر میاد . هرچی هم بر نیومد خودمون میتونیم براش کتابخونه بنویسیم  (open source)
    😁
  • بسیار جالب بود !

    پاسخ:
    ممنونم 😁
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی