-
جمعه, ۱۴ شهریور ۱۳۹۹، ۱۱:۰۲ ق.ظ
-
۲۵۹۰
آموزش ساخت قفل صوتی در پایتون
درود به همه !
امروز در خدمت شما هستیم با یه اسکریپت فوق العاده باحال. در این پست قراره یه قفل صوتی با پایتون بسازیم . اسکریپتی که امروز مینویسیم به محض اجرا شدن شروع به ضبط کردن صدا میکند و ما شروع به صحبت میکنیم . اگر کلماتی که به کار میبریم درست باشد و جمله صحیح باشد یعنی احراز هویت به درستی انجام شده است . در آخر پست اسکریپتی مینویسیم که میتواند جملات فارسی را نیز پردازش کند و نهایتا یک دستیار صوتی کوچک نیز خواهیم ساخت . با ما همراه باشید .
برای انجام احراز هویت صوتی در پایتون ، اولین کاری که باید بکنیم این است که ترتیبی بدهیم تا اسکریپت بتواند صدای محیط را ضبط کند و صدای ضبط شده توسط فرد را به حروف تبدیل کند (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