파이톤을 이용해서 저희만의 J.A.R.V.I.S. 1부를 만들어보도록 하겠습니다.

26499 단어 programmingpython

소개하다.


J.A.R.V.I.S., 토니 스타크의 가상 개인 보조를 기억하십니까?나는 네가 할 수 있을 거라고 믿어!

당신은 자신의 개인 조수를 창설할 생각을 했습니까?맞다토니 스타크가 도와줄 수 있어!아이고, 너는 그가 이미 없는 것을 잊었니?유감스럽게도 그는 다시는 우리를 구할 수 없다.
하지만 헤이, 네가 가장 좋아하는 언어인 파이톤이 이 문제를 해결해 줄 수 있어.네, 잘못 들은 거 아니에요.우리는 파이톤을 사용하여 자신의 J.A.R.V.I.S를 만들 수 있다.우리 시작합시다!

프로젝트 설정


프로젝트 개발 과정에서 우리는 각종 모듈과 외부 라이브러리를 만날 수 있다.우리들은 그것들을 배우고 설치할 것이다.그러나 설치하기 전에 가상 환경을 만들고 활성화합니다.
우리는 virtualenv를 사용하여 가상 환경을 만들 것이다.Python은 현재 미리 설치된 virtualenv 라이브러리를 첨부하고 있습니다.따라서 가상 환경을 만들려면 다음 명령을 사용합니다.
$ python -m venv env
위의 명령은 env라는 가상 환경을 만듭니다.이제 다음 명령을 사용하여 환경을 활성화해야 합니다.
$ . env/Scripts/activate
환경이 활성화되었는지 확인하려면 터미널에서 볼 수 있습니다(env).이제 우리는 이 라이브러리들을 설치할 수 있다.

  • pyttsx3:pyttsx는 플랫폼을 뛰어넘는 텍스트로 음성 라이브러리에 연결되며 플랫폼과 무관합니다.이 라이브러리를 사용하여 텍스트를 음성으로 변환하는 주요 장점은 오프라인으로 작업을 할 수 있다는 것이다.이 모듈을 설치하려면 터미널에서 다음 명령을 입력하십시오.
  • $ pip install pyttsx3
    

  • 음성 인식: *** 오디오를 텍스트로 변환하여 처리할 수 있습니다.이 모듈을 설치하려면 터미널에서 다음 명령을 입력하십시오.
  • $ pip install SpeechRecognition
    

  • pywhatkit: 이것은 사용하기 쉬운 라이브러리로 브라우저와 쉽게 상호작용할 수 있습니다.모듈을 설치하려면 터미널에서 다음 명령을 실행하십시오.
  • $ pip install pywhatkit
    

  • 위키백과: 위키백과 사이트에서 각종 정보를 얻는 데 쓰인다.이 모듈을 설치하려면 터미널에서 다음 명령을 입력하십시오.
  • $ pip install wikipedia
    

  • 요청: 우아하고 간단한 Python HTTP 라이브러리로 HTTP/1.1 요청을 쉽게 보낼 수 있습니다.모듈을 설치하려면 터미널에서 다음 명령을 실행합니다.
  • $ pip install requests
    
    .env 파일
    API 키, 비밀번호 등 프로젝트와 관련된 개인 데이터를 저장하기 위해 이 파일이 필요합니다.이제 사용자와 로봇의 이름을 저장합시다..env라는 파일을 만들고 다음 항목을 추가합니다.
    USER=Ashutosh
    BOTNAME=JARVIS
    
    .env 파일의 내용을 사용하기 위해 다음과 같이 python decouple이라는 다른 모듈을 설치합니다.
    $ pip install python-decouple
    
    파이톤의 환경 변수here를 더 알아보자.
    가비스를 모함하다
    중요한 기능을 정의하기 전에 음성 엔진을 만듭니다.
    import pyttsx3
    from decouple import config
    
    USERNAME = config('USER')
    BOTNAME = config('BOTNAME')
    
    engine = pyttsx3.init('sapi5')
    
    # Set Rate
    engine.setProperty('rate', 190)
    
    # Set Volume
    engine.setProperty('volume', 1.0)
    
    # Set Voice (Female)
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[1].id)
    
    위의 각본을 분석해 봅시다.우선pyttsx3 모듈을 사용하여 engine을 초기화했습니다.sapi5는 Microsoft의 음성 API로 음성 사용을 지원합니다.자세한 내용here.다음에 우리는 rate 방법으로 음성 엔진의 volumesetProperty 속성을 설정할 것이다.현재, 우리는 getProperty 방법으로 엔진에서 소리를 얻을 수 있다.voices는 우리 시스템에서 사용할 수 있는 음성 목록이 될 것이다.인쇄하면 다음과 같습니다.
    [<pyttsx3.voice.Voice object at 0x000001AB9FB834F0>, <pyttsx3.voice.Voice object at 0x000001AB9FB83490>]
    
    첫 번째는 남성이고, 다른 하나는 여성이다.가비스는 영화 속의 남성 조수이지만, 나는 이 강좌에서 voice 방법으로 setProperty 속성을 여성으로 설정하는 것을 선택했다.
    참고: PyAudio와 관련된 오류가 발생하면 here에서 PyAudio wheel을 다운로드하여 가상 환경에 설치합니다.
    그 밖에 decouple의 config 방법을 사용하여 우리는 환경 변수에서 USERBOTNAME의 값을 얻었다.
    1. 말하기 기능
    Speak 함수는 Speak 함수에 전달된 모든 텍스트를 말하는 역할을 합니다.코드를 살펴보겠습니다.
    # Text to Speech Conversion
    def speak(text):
        """Used to speak whatever text is passed to it"""
    
        engine.say(text)
        engine.runAndWait()
    
    
    speak() 방법에서 엔진은 say() 방법으로 텍스트를 전달하는 것을 말한다.runAndWait() 방법을 사용하면 이벤트가 순환하는 동안 막히고 명령 대기열을 지울 때 되돌아옵니다.

    2. 인사 기능


    프로그램이 실행될 때마다 이 기능은 사용자에게 안부를 묻는 데 사용됩니다.현재 시간에 따라, 그것은 사용자에게 좋은 아침, 좋은 오후, 또는 좋은 저녁 인사를 한다.
    from datetime import datetime
    
    # Greet the user
    def greet_user():
        """Greets the user according to the time"""
    
        hour = datetime.now().hour
        if (hour >= 6) and (hour < 12):
            speak(f"Good Morning {USERNAME}")
        elif (hour >= 12) and (hour < 16):
            speak(f"Good afternoon {USERNAME}")
        elif (hour >= 16) and (hour < 19):
            speak(f"Good Evening {USERNAME}")
        speak(f"I am {BOTNAME}. How may I assist you?")
    
    
    우선, 우리는 현재의 시간수를 얻는다. 즉, 현재의 시간이 오전 11시 15분이라면 시간수는 11이 될 것이다.만약 시간 값이 6에서 12 사이라면 사용자에게 안부를 전해 주십시오.만약 수치가 12와 16사이에 있다면, 모두들 안녕하십니까? 마찬가지로, 만약 수치가 16과 19사이에 있다면, 모두들 안녕하십니까?우리는 speak 방법을 사용하여 사용자에게 인사를 하고 있습니다.

    3. 사용자 입력 수락


    이 기능은 사용자의 명령을 수신하고 speech_recognition 모듈로 명령을 식별하는 데 사용됩니다.
    import speech_recognition as sr
    from random import choice
    from utils import opening_text
    
    # Takes Input from User
    def take_user_input():
        """Takes user input, recognizes it using Speech Recognition module and converts it into text"""
    
        r = sr.Recognizer()
        with sr.Microphone() as source:
            print('Listening....')
            r.pause_threshold = 1
            audio = r.listen(source)
    
        try:
            print('Recognizing...')
            query = r.recognize_google(audio, language='en-in')
            if not 'exit' in query or 'stop' in query:
                speak(choice(opening_text))
            else:
                hour = datetime.now().hour
                if hour >= 21 and hour < 6:
                    speak("Good night sir, take care!")
                else:
                    speak('Have a good day sir!')
                exit()
        except Exception:
            speak('Sorry, I could not understand. Could you please say that again?')
            query = 'None'
        return query
    
    speech_recognition 모듈을 sr로 가져왔습니다.speech_recognition 모듈의 식별기 종류는 우리가 오디오를 식별하는 데 도움을 준다.같은 모듈에 마이크 종류가 있어서 장치의 마이크에 접근할 수 있습니다.따라서 마이크를 source로 하고 우리는 식별기 종류의 listen() 방법으로 오디오를 청취하려고 한다.우리는 또한 pause_threshold를 1로 설정할 것이다. 즉, 우리가 말할 때 1초를 멈추어도 불평하지 않는다는 것이다.
    다음에 식별기 클래스 중의 recognize_google() 방법을 사용하여 우리는 오디오를 식별하려고 시도한다.recognize_google() 방법은 구글 음성인식 API를 사용하여 그에게 전달된 오디오에 대해 음성인식을 실시한다.우리는 영어 인도인 en-in 로 언어를 설정했다.그것은 단지 문자열일 뿐, 오디오의 복사본을 되돌려준다.우리는 그것을 query라는 변수에 저장했다.
    만약 검색에 exit나stop 단어가 있다면, 우리는 조수에게 즉시 멈추라고 요구합니다.따라서, 정지하기 전에, 우리는 현재 시간에 따라 다시 사용자에게 안부를 묻는다.만약 시간이 21시에서 6시 사이라면 사용자에게 안녕히 주무십시오. 그렇지 않으면 다른 메시지를 보내 주십시오.다음 문을 포함하는 목록만 있는 utils.py 파일을 만들었습니다.
    opening_text = [
        "Cool, I'm on it sir.",
        "Okay sir, I'm working on it.",
        "Just a second sir.",
    ]
    
    만약 검색에 이 두 단어 (exit 또는stop) 가 없다면, 우리는 사용자에게 우리가 들었다고 말할 것이다.이를 위해, 우리는 랜덤 모듈의 선택 방법을 사용하여 opening_text 목록에서 모든 문장을 랜덤으로 선택할 것입니다.강연이 끝난 후 우리는 프로그램에서 물러났다.
    전체 과정에서 이상이 발생하면 사용자들에게 사과하고 query를'없음'으로 설정합니다.마지막으로 우리는 돌아간다query.

    주요 방법


    이 프로젝트를 실행하기 위해서, 우리는main 방법을 사용합니다.
    if __name__ == ' __main__':
        greet_user()
        while True:
            query = take_user_input().lower()
            print(query)
    
    우리가 알고 있는 바와 같이 우리가 해야 할 첫 번째 일은 greet_user() 기능을 사용하여 사용자에게 안부를 묻는 것이다.다음에while 순환을 실행하고 take_user_input() 함수를 사용하여 사용자로부터 끊임없이 입력을 받습니다.지금 우리는 인쇄만 할 뿐입니다query.
    현재main.py의 전체 코드는 다음과 같습니다.
    import pyttsx3
    import speech_recognition as sr
    from decouple import config
    from datetime import datetime
    from random import choice
    from utils import opening_text
    
    USERNAME = config('USER')
    BOTNAME = config('BOTNAME')
    
    engine = pyttsx3.init('sapi5')
    
    # Set Rate
    engine.setProperty('rate', 190)
    
    # Set Volume
    engine.setProperty('volume', 1.0)
    
    # Set Voice (Female)
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[1].id)
    
    # Text to Speech Conversion
    def speak(text):
        """Used to speak whatever text is passed to it"""
    
        engine.say(text)
        engine.runAndWait()
    
    # Greet the user
    def greet_user():
        """Greets the user according to the time"""
    
        hour = datetime.now().hour
        if (hour >= 6) and (hour < 12):
            speak(f"Good Morning {USERNAME}")
        elif (hour >= 12) and (hour < 16):
            speak(f"Good afternoon {USERNAME}")
        elif (hour >= 16) and (hour < 19):
            speak(f"Good Evening {USERNAME}")
        speak(f"I am {BOTNAME}. How may I assist you?")
    
    # Takes Input from User
    def take_user_input():
        """Takes user input, recognizes it using Speech Recognition module and converts it into text"""
    
        r = sr.Recognizer()
        with sr.Microphone() as source:
            print('Listening....')
            r.pause_threshold = 1
            audio = r.listen(source)
    
        try:
            print('Recognizing...')
            query = r.recognize_google(audio, language='en-in')
            if not 'exit' in query or 'stop' in query:
                speak(choice(opening_text))
            else:
                hour = datetime.now().hour
                if hour >= 21 and hour < 6:
                    speak("Good night sir, take care!")
                else:
                    speak('Have a good day sir!')
                exit()
        except Exception:
            speak('Sorry, I could not understand. Could you please say that again?')
            query = 'None'
        return query
    
    if __name__ == ' __main__':
        greet_user()
        while True:
            query = take_user_input().lower()
            print(query)
    
    이제 프로그램을 실행하고 테스트할 수 있습니다.
    $ python main.py
    
    결론
    이 부분에서 우리는 이미 가상 개인 보조원의 설정을 완성했다.우리는 아직 그것을 위해 어떤 기능도 추가하지 않았다.우리는 블로그의 다음 부분에서 이러한 기능들을 연구할 것이다.기대해주세요!

    좋은 웹페이지 즐겨찾기