전에 AI Speaker 제작 프로젝트에서 라즈베리파이에서 적용했던 구글 어시스턴트를 적용한 것을 생각해보니,
Google에서 제공하는 API를 윈도우에 적용해봐야겠다는 생각을 하게 되었다.
그래서 유튜브 동영상을 참고하여 도전해 보았다!
동영상을 찍은 시점과 현재가 조금 달라서 조금 시간이 걸려서 이렇게 공유해보려 한다.
시작 전에 글쓴이는 현재 파이썬 버전 3.7.7버전을 사용하고 있고
가상환경에 다른 파이썬 버전이 설치되어있기 때문에
기본적인 파이썬 라이브러리 설치 명령어가 아닌
python -m pip install <library name>
특정 버전의 파이썬에 설치하는 명령어를 사용하겠다.
py -3.7 -m pip install <library name>
이제 시작합니다!
[ google assistant sdk 설치 ]
py -3.7 -m pip install google-assistant-sdk[sample]
[ oauth lib 설치 ]
py -3.7 -m pip install --upgrade google-auth-oauthlib[tool]
google cloud platform 으로 이동하세요!
저는 이미 프로젝트를 만들었기 때문에 프로젝트 이름을 클릭합니다.
NEW PROJECT 로 새로운 프로젝트를 생성합니다.
프로젝트의 이름을 설정합니다. 위치는 특별히 중요하지 않습니다.
잘 생성되었다면 알림을 확인할 수 있습니다.
전과 같이 프로젝트 이름을 클릭하여, 생성한 프로젝트를 선택합니다.
좌측의 메뉴에서 APIs & Services - Dashboard 클릭합니다.
EBABLE APIS AND SERVICES 를 클릭합니다.
API Library 에서 Google Assistant API 를 검색합니다.
Google Assistant API 를 클릭합니다.
ENABLE 버튼을 눌러 활성화합니다.
활성화한 뒤, 다음 창에서 Credentials 메뉴를 클릭합니다.
CREATE CREDENTIALS을 클릭합니다.
OAuth client ID 를 클릭합니다.
CONFIGURE CONSENT SCREEN 을 클릭합니다.
External 을 선택하고 CREATE 버튼을 눌러 생성합니다.
앱 정보를 입력하는데, App name과 User support email은 필수사항으로 입력해야한다.
스크롤을 내려보면, 개발자 이메일 입력하는 곳이 나온다! 앱 접근을 할 때, 요청하고, 개발자는 승인해야한다.
이메일 입력 후, SAVE AND CONTINUE 버튼을 눌러 다음으로 넘어간다.
보안 증명 과정을 등록한다. ADD OR REMOVE SCOPES 버튼을 클릭한다.
꼭 필요한 절차인지는 모르겠는데 의식의 흐름대로 설정했다.
openid를 선택하고 스크롤을 내려 UPDATE 버튼을 누른다.
설정이 완료되면, Your non-sensitive scopes 에 openid가 등록된다.
스크롤을 내려 SAVE AND CONTINUE 버튼을 눌러 다음 단계로 이동한다.
3번째 단계인 Test users 단계는 생략하였다. 왜냐하면 사용자 이름도 모르겠고,
주의 사항으로 한 번 추가를 하면 지울 수가 없어서 SAVE AND CONTINUE 버튼을 눌러 다음 단계로 이동했다.
마지막으로 요약이 나온다. 스크롤을 내려 BACK TO DASHBOARD 를 클릭한다.
이 부분이 중요한데, 이걸 못 찾아서 시간이 오래 걸렸다.
PUBLISH APP를 하지 않으면 다음과 같은 에러가 발생하고, OAuth 허용을 할 수 없다.
PUBLISH APP 버튼을 누른다.
CONFIRM 버튼을 눌러 확인한다.
Verification Status를 확인하고, Credentials 메뉴로 다시 이동한다.
OAuth 2.0 Client IDs 가 생성되어야 하기 때문에, CREATE CREDENTIALS 버튼을 누른다.
OAuth client ID 를 선택한다.
Application type을 windows에서 할 것이기 때문에 Desktop app으로 선택했다.
client ID Name을 지정해준다. 각 Application type별로 여러개를 만들 수 있는 듯 하다.
이름을 지정하고 CREATE 버튼을 눌러 생성한다.
잘 생성되었다면, 다음과 같은 알림창이 나온다.
Credentials 메뉴에서 아이디 목록을 확인 할 수 있고 우측 다운로드 버튼을 눌러 JSON 파일을 다운로드 할 수 있다.
이제 Google Cloud Platform 설정은 모두 끝났다.
다운로드된 JSON 파일을 당신의 프로젝트 폴더로 위치시키고
커맨드 창에서 다음 명령어를 입력한다.
이 때, <Your client_secret_json_file_path> 대신 JSON 파일을 절대 경로를 입력한다.
보통 C:\Users 로 시작해 googleusercontent.com.json로 끝날 것이다.
다음 명령어를 메모장에 복사하여 편집하여 사용하기를 권장한다.
google-oauthlib-tool --client-secrets <Your client_secret_json_file_path> --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless
위의 명령어를 입력하면 커맨드창에서 다음과 같이 출력된다.
URL을 복사하여 web으로 열어준다.
계정을 선택하고, 로그인을 한 뒤 허용을 눌러준다.
그렇게 하면, Authorize Code가 나오는데, 이것을 복사하여 커맨트 창에 입력해준다.
[ 하드웨어 준비 ]
컴퓨터에 마이크와 스피커를 연결한다. 글쓴이는 이어폰을 연결하였다.
마이크와 스피커를 테스트 하기 위한 기본 예제를 실행시킨다.
py -3.7 -m googlesamples.assistant.grpc.audio_helpers
파이썬 모듈이 없다고 에러가 발생하였다. sounddevice 라이브러리를 설치한다.
py -3.7 -m pip install sounddevice
그 뒤, 다시 예제 명령어를 동작하니 내가 말한 음성이 녹음되었다가 내게 들렸다.
그 다음으로, 프로젝트 ID와 모델명을 등록한다.
googlesamples-assistant-devicetool --project-id <Your Project Name> register-model --manufacturer “Assistant SDK developer” --product-name “Assistant SDK light” --type LIGHT --model “<Your Model Name>”
이때, 프로젝트 이름은 하단의 표시된 부분이며, 모델명은 중복되지 않도록만 설정하면 된다. (예시, "updaun0418")
제대로 등록이 되면 다음과 같이 출력된다.
이제, 구글 어시스턴트를 실행해 보겠다!
[ 구글 어시스턴트 실행 명령어 ]
py -3.7 -m googlesamples.assistant.grpc.pushtotalk --device-model-id “updaun0418” --project-id Updaun-Blog-ILikeIt
역시 에러가 발생했다.
에러 1) ModuleNotFoundError : No module named 'pathlib2'
해결) 파이썬 라이브러리 설치(pathlib2)
py -3.7 -m pip install pathlib2
에러 2) ModuleNotFoundError : No module named 'grpc'
해결) 파이썬 라이브러리 설치(grpcio, grpcio-tools)
py -3.7 -m pip install grpcio
py -3.7 -m pip install grpcio-tools
에러 3) ModuleNotFoundError : No module named 'google.assistant'
해결) 파이썬 라이브러리 업그레이드 설치(google-assistant-sdk[samples])
py -3.7 -m pip install --upgrade google-assistant-sdk[samples]
[ 구글 어시스턴트 실행 결과창 ]
엔터를 누르고 구글 어시스턴트에게 질문을 한 뒤, 답변을 기다린다.
드디어,, 끝이 났다. 휴... 성공!!
[ 한글 지원 구글 어시스턴트 명령어 ]
py -3.7 -m googlesamples.assistant.grpc.pushtotalk --lang ko-KR
굳이 이 명령어를 하지 않아도 되는 것 같다.
혹시나 한글지원이 안될 경우 사용하면 된다.