python으로 간단한 음성 제어 개인 보조 인터페이스 만들기
36121 단어 programmingshowdevpythonbeginners
이 프로젝트는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 함수를 호출하고 반환된 텍스트를 저장합니다.그런 다음 일련의 [만약] 조건으로 텍스트를 분석하고 사용자가 원하는 출력을 제공합니다.코드를 작성한 후에 응용 프로그램은 완벽하게 작동할 수 있어야 한다.인터넷에 연결되었는지 확인하세요.클래스에 새로운 방법을 추가할 수 있습니다. 이 방법들은 당신을 만족시키는 조작을 실행할 수 있습니다.
감사합니다.
궁금한 점이 있으시면 토론에서 저에게 발표해 주십시오.
Reference
이 문제에 관하여(python으로 간단한 음성 제어 개인 보조 인터페이스 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mshrish/making-a-simple-voice-controlled-personal-assistant-interface-using-python-5ce1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)