وبلاگ فربد | Farbod Blog

توی این وبلاگ راجع به پروژه هام صحبت می کنم

ساخت قفل صوتی در پایتون

  • ۸۳۹

سلام دوستان :)

 

امروز میخوایم با هم یک پست آموزشی فوق العاده باحال و ببینیم

 

توی این پست قراره یک اسکریپت برای تشخیص صدا و قفل کردن با پایتون بنویسیم !

 

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

اول بهتون پیشنهاد میکنم این پست رو ببینید چون در این پست نحوه قفل کردن فایل ها و کار با کتابخونه 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:

 


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