python으로 간단한 음성 제어 개인 보조 인터페이스 만들기

python 모듈 tkinter를 사용하여 그래픽 사용자 인터페이스 (GUI) 를 만들고 있습니다. 프로그램이 포장될 것입니다.
이 프로젝트는python을 사용하여 간단한 Windows Cortana 버전을 생성하려고 시도할 뿐입니다.내 프로그램은 코타나만큼 튼튼하지는 않을 수도 있지만, 코타나가 실행할 수 있는 일부 기능을 수행할 수 있다.
최종 제품은 다음과 같습니다.

보시다시피 이 인터페이스는 시스템 마이크를 켜서 음성을 식별하고 검색을 처리하는 단추 ("listen") 를 포함하고 있습니다.

수행할 수 있는 작업:


1) 사용자가 인사할 때 그/그녀에게 인사
2) 필요한 경우 시간, 날짜 및 월을 공지합니다.
3) 사용자가 지정한 웹 브라우저와 검색엔진을 엽니다.
4) Youtube를 열고 사용자가 지정한 비디오를 검색합니다.
5) 위키백과를 열고 사용자가 지정한 용어를 검색합니다.

사용 모듈: -


1) Tkinter GUI 만들기
2) Pyttsx3 텍스트를 합성 음성으로 변환
3) 음성 인식 및 Pyaudio가 사용자가 입력한 음성 인식
4) 시간 모듈
5) 랜덤 모듈
6)seleniumwebdriver 열기 및 자동 검색엔진
모듈이 컴퓨터에 설치되어 있는지 확인하십시오.
만약 네가 이 모듈의 기본 원리를 알고 있다면, 나는 이 글을 쓸 것이다.

코드 아키텍처:


간단함을 유지하기 위해서 나는 거대한 클래스와 이 클래스의 실례를 만들었다.이 종류에서 나는 모든 필요한 방법을 정의했다.이 과정은 다섯 부분을 포함한다.
첫 번째 부분은 GUI를 정의하는 init 함수입니다.
버튼을 안에 싸라.
두 번째 부분에는 텍스트를 음성으로 바꾸는 방법이 포함되어 있다.
세 번째 부분에는 사용자로부터 음성을 식별하고 텍스트를 되돌려 주는 방법이 포함되어 있다.
네 번째 부분은 하나의 기능이 아니라 일련의 기능으로 모든 기능은 자신의 기능(예를 들어 사용자에게 안부를 묻고 웹 브라우저를 검색하며 시간과 날짜를 얻는 기능)을 가지고 있다.
이 종류의 다섯 번째 부분도 마지막 부분이다. 이 방법을 정의하여 사용자가 제시한 입력을 처리하고 필요한 출력을 제공하는 것이다.
자, 코드부터 시작합시다!!

가져오기 모듈: -


#Modules used
from tkinter import*
import pyttsx3
import speech_recognition as sr
import pyaudio
import random
import time
from tkinter import messagebox
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

클래스 정의: -


모듈을 가져오면 클래스를 만들기 시작합니다.
#Main class

class Window(Frame):
    #defining our main window
    def __init__(self,master):
        self.master=master
        master.title("DREAM")
        A=Label(master,text="try saying *what can you do*")
        A.pack(side="top")
        Button(master,text="listen",width=100,relief="groove",command=self.Processo_r).pack(side="bottom")

root=Tk()
#instance of the class  
app=Window(root)
root.geometry("300x50")
#Runs the application until we close
root.mainloop()
이 클래스는 'try saying what can you do' 라는 텍스트와 단추가 있는 GUI 창을 정의합니다.이 단추에는'command'라는 속성이 있습니다. 이 속성은 클래스 방법과 연결됩니다.이것은 단추를 눌렀을 때'self.processo r'방법이 실행된다는 것을 의미합니다.
다음 방법은 클래스 내부에서 정의한 것이다

텍스트를 음성으로 변환하는 방법을 정의합니다.


 def speak(self,output):
        #initiating the speech engine
        engine = pyttsx3.init()
        #speaking the desired output 
        engine.say(output)
        engine.runAndWait()
텍스트를 음성으로 변환하기 위해서 Pyttsx3 모듈을 사용합니다.이 방법은 음성을 합성하여 소리를 내는 매개 변수를 출력한다.

음성을 인식하고 텍스트로 변환하는 방법:


    def speech_recog(self):
        #recognizer class
        r=sr.Recognizer()
        #Specifing the microphone to be activated
        mic = sr.Microphone(device_index=1)

        #listening to the user 
        with mic as s:
            audio = r.listen(s, timeout=5)
            r.adjust_for_ambient_noise(s)

        #Converting the audio to text  
        try:
            """I use google engine to convert the speech 
             text but you may use other engines such as 
             sphinx,IBM speech to text etc."""
            speech = r.recognize_google(audio)
            return speech

        """When engine couldn't recognize the speech 
        throws this"""
        except sr.UnknownValueError:
            #calling the text to speech function
            self.speak("please try again,couldnt identify")

        """This error shows up when the microphone cant 
        pick up any speech"""
        except sr.WaitTimeoutError as e:
            self.speak("please try again") 
나는 음성인식 모듈을 사용하여 음성을 식별하고 그것을 텍스트로 변환한다.이 기능은 호출할 때 마이크를 켜고 음성을 인식합니다.그런 다음 텍스트로 변환하고 로 돌아갑니다.
내가 클래스의 세 부분을 정의했으니 특정 함수를 가진 방법을 정의해도 무방하다.

사용자에게 안부를 묻는 방법:


    def greet(self):
       #greets the user with a random phrase from A
        A=["Hi,nice to meet you","hello","Nice to meet you","hey,nice to meet you","good to meet you!"]
        b=random.choice(A)
        self.speak(b)

시간을 알리는 방법


    def tell_time(self):
        localtime = time.asctime(time.localtime(time.time()))
        a = localtime[11:16]
        self.speak(a)


이 방법은 시간 모듈을 사용하여 사용자 장치의 로컬 시간을 가져오고 사용자가 문의할 때 사용자에게 알립니다.

일주일 중 어느 날의 방법을 알려주세요.


    def tell_day(self):
        localtime = time.asctime(time.localtime(time.time()))
        day = localtime[0:3]
        if day == "Sun":
            self.speak("it's sunday")
        if day == "Mon":
            self.speak("it's monday")
        if day == "Tue":
            self.speak("it's tuesday")
        if day == "Wed":
            self.speak("it's wednesday")
        if day == "Thu":
            self.speak("it's thursday")
        if day == "Fri":
            self.speak("it's friday")
        if day == "Sat":
            self.speak("it's saturday")
이 방법은 시간 모듈을 사용하여 일주일 중의 어느 날을 가져오고 사용자가 요청할 때 사용자에게 알립니다.

월별 안내 방법:



 def tell_month(self):
        localtime = time.asctime(time.localtime(time.time()))
        m_onth = localtime[4:7]
        if m_onth == "Jan":
            self.speak("it's january")
        if m_onth == "Feb":
            self.speak("it's february")
        if m_onth == "Mar":
            self.speak("it's march")
        if m_onth == "Apr":
            self.speak("it's april")
        if m_onth == "May":
            self.speak("it's may")
        if m_onth == "Jun":
            self.speak("it's june")
        if m_onth == "Jul":
            self.speak("it's july")
        if m_onth == "Aug":
            self.speak("it's august")
        if m_onth == "Sep":
            self.speak("it's september")
        if m_onth == "Oct":
            self.speak("it's october")
        if m_onth == "Nov":
            self.speak("it's november")
        if m_onth == "Dec":
            self.speak("it's december")
이 방법은 시간 모듈을 사용하여 1년 동안의 달을 가져오고 사용자가 문의할 때 사용자에게 알립니다.

웹 브라우저에서 구를 검색하는 방법:


    def search(self,web_name):
        self.speak("Searching")
        """Make sure that you have installed the specific driver 
        for your webbrowser.The executable_path could be different for you"""

        #Opeing the driver
        driver = webdriver.Chrome(executable_path="C:\Program Files (x86)\chromedriver.exe")

        #Navigating to google
        driver.get('https://www.google.com/')

        #Locating the search engine
        search_engine = driver.find_element_by_name("q")

        #Search the phrase(web_name) and hitting enter to show results
        search_engine.send_keys(web_name + Keys.ENTER)
Selenium을 사용하여 사용자가 지정한 구문을 검색합니다.앞서 말씀드린 바와 같이 지정된 모듈에 대한 기초 지식을 확보하십시오.유사한 알고리즘과 작은 변화를 사용하여 구글 브라우저를 열고 유튜브 동영상과 위키백과 글을 검색할 수 있는 방법을 만들자.

크롬을 여는 방법:


    def open_chrome(self):
        self.speak("opening chrome")
        driver=webdriver.Chrome(executable_path="C:\Program Files (x86)\chromedriver.exe")
        driver.get("https://www.google.com/")

Youtube 동영상을 검색하는 방법


     def play_tube(self, vid_name):
        self.speak("Searching youtube")

        #intializing driver
        driver = webdriver.Chrome(executable_path="C:\Program Files (x86)\chromedriver.exe")

        #navigating to Youtube
        driver.get('https://www.youtube.com/')

        #Locating the Youtube search engine
        search_engine = driver.find_element_by_name("search_query")

        # searching the specified video
        search_engine.send_keys(vid_name + Keys.ENTER)
내가 사용하는 알고리즘은 내가 구글에서 유튜브를 검색할 때 사용하는 알고리즘과 같다.전자의 드라이버는 구글, 후자는 유튜브로 내비게이션을 하는 것이 큰 차이점이다.

위키백과에서 글을 검색하는 방법


    def search_wiki(self, article):

        #intializing driver
       driver=webdriver.Chrome(executable_path="C:\Program Files (x86)\chromedriver.exe")

        #Navigating to Wikipedia
       driver.get("https://www.wikipedia.org/")

        #Locating the wikipedia search engine
       search_engine=driver.find_element_by_name("search")

       #Searching the specified phrase
       search_engine.send_keys(article+Keys.ENTER)

방법, 이 방법은 프로그램이 지원하는 모든 가능한 조작 목록을 표시합니다


 def functions(self):
        self.speak("here is a list of what i can do")
        messagebox.showinfo("DREAM functions", "1.Try saying 'Hi','Hello'" +
                            "\n2.Try asking 'What day is this?'" +
                            "\n3.Try asking 'What month is it?'" +
                            "\n4.Try asking 'What time is it?'" +
                            "\n5.You search in google by saying...'Search (or) Google <anything>'" +
                            "\n6.Play youtube by saying'YouTube... <video_name>'" +
                            "\n7.Search in Wikipedia by saying...'wikipedia...<anything>'" +
                            "\n8.To close say 'Bye' or 'Sleep' or 'See you later'")

응용 프로그램을 종료하는 방법:


    def shut(self):
        #bids the user goodbye and quits
        A=random.choice(["bye", "good bye", "take care bye"])
        self.speak(end_greet)
        exit()

가져오기를 처리하는 방법을 정의합니다.


    def Processo_r(self):
        speech=str(self.speech_recog())

        if speech=="What can you do":
            self.functions()   


        A=["hi","hello","hey","hai","hey dream""hi dream","hello dream"]
        if speech in A:
            self.greet()

        if speech =="who are you":
            self.speak("i'm dream")
            self.speak("your personal assistant")

        B=["what day is it","what day is today","what day is this"]
        if speech in B:
            self.tell_day()

        C=["what month is it","what month is this"]
        if speech in C:
            self.tell_month()

        D=["what time is it","what is the time","time please",]
        if speech in D:
            self.tell_time()

        if speech[0:6] =="Google":
            self.search(speech[7:])

        if speech[0:7]=="YouTube":
            self.play_tube(speech[8:])

        if speech=="open Chrome":
            self.open_chrome()

        if speech[0:9]=="Wikipedia":
            self.search_wiki(speech[10:])

        E=["bye","bye dream","shutdown","quit"]
        if speech in C:
            self.shut()
        else:
            self.speak("I am sorry couldn't perform the task you specified")

인터페이스에 있는 Listen 버튼을 누르면 이 방법을 실행합니다.이전에 정의한speech recog 함수를 호출하고 반환된 텍스트를 저장합니다.그런 다음 일련의 [만약] 조건으로 텍스트를 분석하고 사용자가 원하는 출력을 제공합니다.
코드를 작성한 후에 응용 프로그램은 완벽하게 작동할 수 있어야 한다.인터넷에 연결되었는지 확인하세요.클래스에 새로운 방법을 추가할 수 있습니다. 이 방법들은 당신을 만족시키는 조작을 실행할 수 있습니다.
감사합니다.
궁금한 점이 있으시면 토론에서 저에게 발표해 주십시오.

좋은 웹페이지 즐겨찾기