개발
헛소리하는 AI스피커 영실이를 따라해 봤다
5분
2021.01.08.3.5K
한지평: 영실아 나 왜 잠이 안올까?
영실이: 신경쓰이는 문제가 있나보네요.
한지평: 어 있어! 어떻게 해결하지?
영실이: 잠을 푹 자보세요. 푹 자고 내일이 오면 문제를 해결할 새로운 아이디어가 떠오를 거에요.
네 오늘은 이겁니다.
오늘 제가 만들어볼 것은
운세와 날씨를 헷갈려하는 음성비서죠.
영실이가 사람의 말을 듣고
대답을 하는 프로세스는 다음과 같은데요.

영실의 대답 프로세스
간단히 요약하자면 1. 우선 사람의 목소리를 인식해서 텍스트로 바꾸고 2. 텍스트에 맞는 정보를 분석해서 3. 해당 정보를 읽어주는 겁니다.
오늘 영실이는 아무것도 안 할랍니다.
그냥 다른 똑똑이들한테 다 부탁해버리죠 뭐.
다른 누구한테 부탁할거냐구요?
음 … 음성인식은 국내 최고의 IT기업인 카카오한테
기상데이터는 한국 일기예보의 중심 기상청한테
음성합성은 세계 최고의 IT기업 구글한테 부탁할 겁니다.

버스는 내가 탈 건데 운전은 누가 할래?
이런 말도 안되는 부탁이 가능한 이유는 구글, 네이버 카카오 등 많은 기업들이 자신이 가지고 있는 기술을 외부의 개인이나 다른 서비스가 사용할 수 있도록 공개해두기 때문입니다. 우리는 이러한 것들을 API라고 부르는데요. 오늘 영실이가 음성비서 일을 하는데 필요한 음성<->텍스트 변환, 기상정보 검색 등도 모두 이 API로 가능한 기능들입니다. API를 사용하는 법은 간단합니다. 해당 기업들에게 편지를 쓰는건데요. “얘 카카오야 나 영실인데 이 소리 좀 텍스트로 바꿔줘.”라고 말이죠. 아 물론 이걸 컴퓨터가 알아듣게 하기위해 약간 바꿔줄 겁니다. 그래서 오늘의 목표는 영실이의 헛소리 기능을 이 API만으로 구현하고자 합니다.

카카오 API를 활용한 STT
앞서 말했듯이 API를 사용하기 위해서 영실이는. “카카오야 나 영실인데 소리 좀 텍스트로 바꿔줘” 라는 내용의 편지를 보내야합니다. 물론 컴퓨터가 한글을 이해할 리 없으니, 편지의 실제 내용은 이렇게 변형되어야 할 겁니다.
영실이가 카카오에게
즉, API형식에 맞춘 방식은 requests.post(kakao_url, header=’service=dictation’ api_key=영실, data=audio) 처럼 바뀌게 되는 것이죠. 우선 간단한 코드로 "시리야"라는 물음에 "네 지평님"이라는 말을 프린트하는 듣는 코드를 짜봤는데요.
기상청 API를 활용 데이터 가져오기
이를 위해 이번에는 기상청에 편지를 쓰는데요.
영실이가 기상청에게
이번에도 역시 실제로는 requests.get(weather_url, header=’getVilageFcst, today, (66, 101)’ api_key=영실) 와 같이 API에 맞는 메시지를 보내게 됩니다. 간단히 목소리 파일만 줬던 카카오와는 달리 내가 어디 있는지(좌표 = 66,101)나 어느 날짜를 물어봤는지 (date = today)등의 정보를 포함해서 물어본 것이 눈에 띄네요. 이를 받은 기상청은 강수량, 구름상태, 기온, 습도 등의 정보를 담은 답장을 주는데요. 저는 이렇게 받은 수많은 정보 중 [기온, 풍속, 강수형태, 구름상태] 4가지의 정보를 ”바람 한 점 없이 흐린 하루가 예상됩니다. 기온은 2도이며 비나 눈 소식은 없습니다.” 와 같은 문장으로 변형시키는 코드를 추가했습니다.
여기서 쓰인 기술이 바로 음성 합성인데요.
이처럼 시리, 빅스비와 같은 음성비서 뿐만 아니라
키오스크, 로봇, 전자책 읽기 등
다양한 용도에서 사용되고 있죠.
이번 장에서는 기상청에게 부탁해서 만들어낸
"운명의 신이 당신의 잔잔한 일상에 미풍을 불어오는 날입니다."를
한지평씨에게 읽어줄 겁니다.

구글 API를 활용 텍스트 읽기
역시나 구글에게 편지를 쓸 건데요. 내용과 형태도 앞선 편지들과 크게 다르지 않습니다. 일반적으로는 “나 영실인데”를 증명하기 위해 API키를 썼다면 구글의 경우 환경변수 설정이라는 방법을 쓴다는 것만 다르네요.
영실이가 구글에게
* 본 과정의 진행순서 1. 구글 클라우드 플랫폼의 API 신청하여 환경변수 설정 2. 질문에 대한 대답문장을 구글 API를 활용하여mp3파일로 변환 3. playsound 라이브러리를 활용하여 mp3파일 재생 마침내 만들어진 텍스트를 읽어주는 기능까지 완성했습니다.