-
دوشنبه, ۶ ارديبهشت ۱۴۰۰، ۱۱:۵۰ ب.ظ
-
۸۹۲
سلام دوستان :)
امروز میخوایم با هم یک پست آموزشی فوق العاده باحال و ببینیم
توی این پست قراره یک اسکریپت برای تشخیص صدا و قفل کردن با پایتون بنویسیم !
کاری که میخوایم توی این پست انجام بدیم اینه که یک اسکریپت بنویسیم که از ما بپرسه میخواد فایلی رو قفل کنه و باز کنه بعدش اسم فایل رو از ما میگیره و ما پسورد فایل و بهش میگیم(تایپ نمیکنیم میگیم) و اون هم رمزنگاری یا دیکد میکنه فایلو.
اول بهتون پیشنهاد میکنم این پست رو ببینید چون در این پست نحوه قفل کردن فایل ها و کار با کتابخونه pyAesCrypt رو توضیح دادم
حب برای این آموزش از سه تا کتابخونه استفاده میکنیم
یکی کتابخونه pyaudio برای گرفتن صدا از میکروفون و کتابخونه SpeechRecognition رو برای پردازش صدا و pyAesCrypt برای قفل کردن فایل ها
هیچ کدوم از اینا بطور پیشفرض روی پایتون نصب نیستن. پس باید نصبشون کنین
برای نصب pyaudio در ویندوز وارد cmd شین و دستور زیر رو بزنین:
pip install pyaudio
برای نصب در لینوکس وارد ترمینال شین و کد زیر رو بزنین:
pip3 install pyaudio
فقط ممکنه برای خیلیاتون در هنگام نصب pyaudio در ویندوز مشکل پیش بیاد بنابراین وارد cmd شین و دو خط کد زیر رو به ترتیب بزنید:
pip install pipwin pipwin install pyaudio
برای نصب ماژول SpeechRecognition هم در ویندوز وارد cmd شین و کد زیر رو بزنین:
pip install SpeechRecognition
برای نصب در لینوکس هم میتونین وارد ترمینال شین و کد زیر رو بزنین:
pip3 install SpeechRecognition
برای نصب ماژول pyAesCrypt در ویندوز وارد cmd شین و کد زیر رو بزنین:
pip install pyAesCrypt
و برای نصب در لینوکس وارد ترمینال شین و کد زیر رو بزنین:
pip3 install pyAesCrypt
خب حالا میتونیم بریم سراغ اسکریپت
سورس:
import speech_recognition as sr import pyAesCrypt from sys import exit global bufferSize bufferSize = 64 * 1024 def get_voice(): r = sr.Recognizer() with sr.Microphone() as source: r.adjust_for_ambient_noise(source) audio = r.listen(source) text = r.recognize_google(audio) return text.lower() e_or_d = input("do you want to (d)ecrypt or (e)ncrypt : ") if e_or_d == 'e': # encrypt print("<Encrypt>") file = input("File Name : ") print("Say Your Password") text = get_voice() print("You Said {} is it the password you said ? (n for no and y for yes)".format(text)) is_pass_for_e_right = input() if is_pass_for_e_right == 'y': password_for_e = text elif is_pass_for_e_right == 'n': text = get_voice() try: pyAesCrypt.encryptFile(file,file+".aes",password_for_e,bufferSize) except Exception as error: print("Error") exit(1) print("File Encrypted") elif e_or_d == 'd': #decrypt print("<Decrypt>") file = input("File Name : ") print("Say Your Password") text = get_voice() print("You Said {} is it the password you said ? (n for no and y for yes)".format(text)) is_pass_for_d_right = input() password_for_d = text if is_pass_for_d_right == 'y': try: pyAesCrypt.decryptFile(file,file+"_decrypted",password_for_d,bufferSize) except Exception as error: print("Error") exit(1) elif is_pass_for_d_right == 'n': print("Say Your Password Again") text = get_voice() password_for_d = text try: pyAesCrypt.decryptFile(file,file+"_decrypted",password_for_d,bufferSize) except Exception as error: print("Error") exit(1) print("File Decrypted") else: print("Please Enter y for yes and n for no") else: print("Please Enter e for encrypt and d for decrypt")
خب اول ماژول هامون رو import کردیم. ماژول speech_recognition برای گرفتن و پردازش صوت. ماژول pyAesCrypt برای قفل کردن و باز کردن فایل ها و تابع exit از ماژول system برای خارج شدن از برنامه در مواقع لازم.
خب متغیر bufferSize رو تعریف کردیم برای مقدار بافر در encrypt کردن فایل. بعد تابع get_voice رو تعریف کردیم.
بعد در خط اول یک شیء از Recognizer ساختیم و ریختیم داخل متغییر r .
در خط بعدی تابع با استفاده از دستور with یک متغییر موقت از sr.Microphone ساختیم و اسمشو گذاشتیم source . در واقع این متغییر source همون شیء میکروفون سیستممونه .
داخل بلاک with در خط اول با استفاده از تابع adjust_for_ambient_noise اومدیم نویز ها یا سروصدا های اضافه محیط را در صدای ضبط شده گرفته ایم . این کار به تشخیص بهتر متن توسط اسکریپت کمک میکند .
سپس در خط بعد با استفاده از تابع ()listen اومدیم صدای ضبط شده رو بارگذاری کردیم و ریختیم داخل متغییر audio . و نهایتا در خط بعد با استفاده از تابع recognize_google اومدیم صدای ضبط شده یعنی متغییر audio رو با استفاده از سرویس گوگل به متن تبدیل کردیم و ریختیم داخل متغییر text . (چون با گوگل اینکارو میکنه ، پس باید به اینترنت وصل باشه) و در نهایت متغیر text رو بر میگردونه.
در خط بعد از کاربر پرسیدیم که میخواد فایلی رو انکریپت کنه یا دکریپت که برای انکریپت e رو وارد میکنه و برای دکریپت d.
بعد یک if نوشتیم که اگر کاربر e رو وارد کرد، یعنی میخواست فایلی رو انکریپت کنه اول از کاربر نام فایل رو میگیره بعد با استفاده از تابع get_voice صدای کاربر رو گرفته و داخل متغییر شی ریخته. بعد پسوردی که کاربر گفته رو چاپ میکنه و ازش می پرسه که آیا همین پسوردی بود که گفتی. اگر کاربر جواب مثبت داد یعنی y رو تایپ کرد برنامه با استفاده از تابع encryptFile فایل رو با پسوردی که کاربر گفته بود انکریپت و میکنه و اگر کاربر n رو تایپ کرد یعنی پسوردی که گفته بود اون نبوده برنامه دوباره صدا رو از کاربر میگیره و...
خب این بخش انکریپت بود بخش دکریپت هم عین بالاییه فقط بجای استفاده از تابع encryptFile از تابع decryptFile استفاده میکنه برای دیکد کردن فایل
و در نهایت اگر کاربر غیر از d یا e حرفی رو وارد کرده بود برنامه به کاربر میگه لطفا یا e رو وارد کن و یا d
امیدوارم براتون مفید بوده باشه D: