한지평: 영실아 나 왜 잠이 안 올까?
영실이: 신경 쓰이는 문제가 있나 보네요.
한지평: 어 있어! 어떻게 해야 할까?
영실이: 잠을 푹 자보세요.

 

영실이는 드라마 스타트업의 AI스피커입니다.

이 AI스피커는 한지평 씨의 전문 심리상담사를 자처하지만
공감능력 결여 및 습관성 난청으로 상담 성공률이 0%에 수렴합니다.

그런데 어쩝니까, 미운 정이 더 무서운걸..
한지평 씨는 위로받지 못할걸 알면서도 매일 영실이를 부르곤 합니다.

https://youtu.be/yZht7Ek1NUs

드라마 스타트업 1화는 그림 같은 집에 살고 있는
성공한 벤처투자 심사역 한지평 씨를 비추며 시작합니다.

런닝머신에서 내려온 한지평 씨는
여유로운 표정으로 AI비서에게 묻죠.

“오늘 날씨 어때”

이에 우리의 영실이는 자신 있게 답합니다.

“오늘의 운세는 다음과 같습니다. 오늘은..”

영실이는 지평의 표정엔 아랑곳하지 않은 채
단호하게 운세를 끝까지 읊습니다.

“헤이 영실! 하우스 더 웨덜 투데이!!”
“영실아 운세 말고 날씨!”
다시금 영실이에게 날씨를 요청하는 지평을 보니
시리에게 ‘사랑해’를 구걸하는 누군가가 떠오르네요.

네,
오늘은 이 영실이를 만들어 볼 겁니다.
물론 이 AI비서는 적당히 멍청한 탓에
운세와 날씨를 헷갈려 반대로 대답하죠.

오늘 영실이가 한지평 씨의
질문에 대답할 방식은 다음과 같은데요.

운세를 물어보자 날씨로 대답하는 영실이

1. 음성인식 : 마이크를 통해 들어오는 음성을 “오늘 날씨 어때?”라는 문자열로 변환하면
2. 데이터 추출 : “오늘”과 “날씨”에 해당하는 기상정보를 추출하고
3. 음성합성 : 이렇게 가져온 기상정보를 문장으로 만든 후 음성으로 변환할 겁니다.

음.. 주요 기능 하나하나가
심상치 않아 보이는군요..

날씨는 어떻게 예측할 것이며..
목소리는 누구 걸로 할 거고..



아유.. 아무리 생각해봐도
제 스스로 이 기능을 다 구현하기엔
능력과 의지가 골고루 부족합니다:(

그래서 오늘은 이 기능들..
다 남들한테 부탁하려고 합니다.

아, 누구한테 부탁할 거냐고요?

음성인식은 국내 최고의 IT기업인 카카오한테
기상데이터는 한국 일기예보의 중심 기상청한테
음성합성은 세계 최고의 IT기업 구글한테 부탁할겁니다.

바로, API를 통해서 말이죠,
  • 본문은 API에 대한 지식이 있으면 더 이해가 편합니다.
    혹시 API의 개념이 헷갈리시는 분이 있다면 다음 장으로 넘어가기 전에 아래 글을 꼭꼭 읽어주세요.

[링크] 서버가 API를 뭐..? 개발자의 외계어 쉽게 이해하기

 


 

 

00
API가 뭐였죠?

프로그램과 프로그램의 상호작용 방식

구글, 네이버, 카카오 등 많은 기업들은 브랜드 홍보나 수익 창출 등 다양한 이유로
보유한 기술이나 데이터를 외부에서 쓰도록 공개하곤 합니다.

* 이후 API 제공 기업을 ‘API 플랫폼’으로 통칭

가입절차를 확 줄여준 간편 로그인 기능이나 쇼핑 앱마다 보이는 카카오페이 결제 기능,
날씨 앱에서 사용하는 날씨 데이터 모두 API 플랫폼의 기능/데이터를 외부의 앱이 사용한 예시죠.

이런 기능이 만들어 지기까진
일반적으로 다음의 절차를 거쳐야 하는데요.

1. 외부 앱의 개발자가 API 플랫폼의 개발자 홈페이지에 가입
2. API 플랫폼에게 해당 기능이나 데이터에 대한 접근 허가 신청
3. (외부 앱이 적절하다고 판단될 경우) API 플랫폼이 신청을 수락
4. 외부 앱은 API 플랫폼이 정해놓은 규칙에 따라 원하는 기능/데이터를 요청

즉, API 플랫폼이 허락만 해준다면
각 기능들을 직접 만들 필요 없이
편하게 쏙쏙 뽑아먹을 수 있다는 거죠.

다행히 카카오의 음성인식, 기상청의 기상예측 서비스, 구글의 음성합성은 신청하는
모두에게 무료로 기능을 제공합니다.



이제 우리에게 카카오, 구글, 기상청이라는
든든한 빽(?)이 있다는 사실을 확인했으니,

다음 장부터는 영실이가 이 세 API 플랫폼들과
실제로 어떻게 소통할지 알아보겠습니다.

 


 

01
음성인식 (Speech to Text)

목표 : 마이크로 입력한 목소리를 문자열로 변환하기
사용 API: kakaoAPI

컴퓨터는 소리를 이해할 수 없습니다.
그래서 우리가 컴퓨터와 대화하기 위해선
목소리를 문자로 변형시키는 과정이 선행돼야 하죠.

이 기능을 음성인식이라고 부르는데요.
이 음성인식은 AI비서뿐만이 아니라 번역기나 자막 자동 생성 등 다양한 곳에서 활용됩니다.

영실이와의 대화 또한 사용자의 목소리 파일을 영실이가 이해할 수 있는 문자로 바꾸는 데서 시작할 건데요.

앞서 말했듯 음성인식은 카카오의 API를 사용할 겁니다.

즉 영실이는 카카오에게

“카카오야 나 영실인데 소리 좀 텍스트로 바꿔줘”

라는 내용의 편지를 보내야 하죠

아 물론 실제 코드에선
“카카오야”대신 카카오 URL을,
“나 영실인데”대신 신청 후 받은 API KEY
“이 소리 좀”대신 오디오 파일의 위치
“텍스트로..”대신 service=dictation을 써넣어야 합니다.

때문에 실제로 보내는 편지는 아래와 같을 겁니다.

requests.post(kakao_url, api_key=영실, data=audio, service=dictation )

우선 간단한 코드로
“시리야”라는 물음에
“네 지평님”이라는 말을 프린트하는 듣는 코드를 짜 봤는데요.

테스트에 활용한 코드는 아래와 같습니다.

mic_test.py

자 다음 장에선 이제 이렇게 만들어진 텍스트를
[운세질문인지 [날씨질문인지 구분
“다음 빽”인 기상청에게 물어보러 갈 겁니다.

* 본 과정의 전체 진행순서

1. 카카오 개발자 사이트에 애플리케이션 등록하여 API 키 발급
2.speechrecognition라이브러리를 사용해서 마이크 소리 담기
3. API에서 받은 response의 value를 텍스트로 받기

 


 

02
기상청 API

목표 : 위치와 날짜에 맞는 기상정보 가져오기
사용 API: 기상청 동네예보 API

카카오에게 부탁해 한지평 씨의 요청을 이해하게 된 영실이,
이번엔 질문에 맞는 기상정보를 가져와야 합니다.

이를 위해 기상청에

“기상청아 나 영실인데 날씨 좀 알려줘”

라는 편지를 쓰는데요.

물론 기상정보를 제공받기 위해서는
“어느 지역”의 “어느 날짜”날씨인지 알아야 하므로
“유성구”의 “오늘” 날씨 좀 알려줘의 내용이 추가되겠네요.

‘유성구 온천2동’을 기상청이 제공하는 좌표로 변환하면
X좌표는 66, Y좌표는 101에 해당하니
기상청에게 실제로 보낼 코드는 다음과 같을 겁니다.

requests.get(weather_url, header=’getVilageFcst, today, (66, 101)’ api_key=영실)

이를 받은 기상청은 습도, 풍향, 기온, 강수량 등
다양한 날씨 정보를 담은 답장을 주는데요.

저는 이렇게 받은 많은 정보 중
[기온, 풍속, 강수형태, 구름 상태] 4가지의 정보만 뽑아

”바람 한 점 없이 흐린 하루가 예상됩니다. 기온은 2도이며 비나 눈 소식은 없습니다.”

와 같은 문장으로 변형시켰습니다.

이번 과정을 통해 영실이는 “오늘/내일 운세가 뭐야?”라는 질문에
날씨를 설명해주는 문장을 만들 수 있게 되었는데요.

반대로 한지평 씨가 “날씨”를 물어보면
“운명의 신이 당신의 잔잔한 일상에 미풍을 불어오는 날입니다.”
를 대답하도록 설정했습니다.

* 본 과정의 진행순서

1. 기상청 open API 신청하여 동네예보 API key 발급
2. 질문 날짜(오늘 / 내일)와 질문자의 지역 좌표를 변환
3. API에서 받은 날씨정보를 문장으로 변환

 


 

 

03
Voice synthesize (Text to Speech)

목표 : 만든 텍스트를 음성으로 변환하기
사용 API: Google text to speech API

최근 “AI 프로젝트 다시 한번” 보셨나요?
12년 전 돌아가신 터틀맨 님의 목소리를 AI로 복구하는 데 성공해 엄청난 반향을 일으켰죠.

여기서 쓰인 기술이 바로 음성합성인데요.
이처럼 음성합성은 시리, 빅스비와 같은 음성비서뿐만 아니라 키오스크, 로봇, 전자책 읽어주기 등
다양한 용도로 사용되고 있죠.

이번 장에서는 기상청에게 부탁해서 만들어낸

바람 한 점 없이 흐린 하루가 예상됩니다. 기온은 2도이며 비나 눈 소식은 없습니다.”

혹은 “운명의 신이 당신의 잔잔한 일상에 미풍을 불어오는 날입니다.”를
한지평 씨에게 읽어줄 차례입니다.

역시나 구글에게 편지를 쓸 건데요.
내용과 형태도 앞선 편지들과 크게 다르지 않습니다.



일반적으로는 “나 영실인데”를 증명하기 위해 API 키를 썼다면
구글의 경우 환경변수 설정이라는 방법을 쓴다는 것,
그리고 request문이 아닌 google.cloud라는 라이브러리를 썼다는 점만 다르네요.

* 본 과정의 진행순서

1. 구글 클라우드 플랫폼의 API 신청하여 환경변수 설정
2. 질문에 대한 대답 문장을 구글 API를 활용하여 mp3파일로 변환
3. playsound 라이브러리를 활용하여 mp3파일 재생

 


 

음성인식과 기상정보 추출에 이어 마침내 만들어진 텍스트를 읽어주는 기능까지 완성했습니다.
드디어 찾아온 결과 확인 시간, 영실이는 질문에 대해 제대로 대답할 수 있을까요?

다행히도 정상적으로(?) 운세 질문에는 날씨를, 날씨 질문에 운세를 답해주는 친절한 영실이를 만날 수 있습니다.

이번에 만든 영실이를 직접 만나보려면 아래의 파일을 확인해보세요.

youngshil.py

 

오늘은 이렇게 다양한 API를 활용한 음성비서를 만들어봤는데요.
꽤나 간단한 코드를 통해서 이런 음성비서를 만들 수 있다는 사실이 놀랍네요.

아 물론 운세나 날씨 질문이 아닐 경우
“무슨 말씀이신지 모르겠어요” 만 뱉는 바보 음성비서긴 하지만 말이죠.

언젠간 우리 영실이도 스타트업의 ‘눈길’같은 기능을 추가할 수 있기를 꿈꾸며
오늘은 이만 마무리해보려 합니다.

부족한 실력으로 인해 코드가 비효율적이거나 틀릴 수 있으니, 보다 좋은 방법이나
새로운 방법에 대한 조언을 해주신다면 정말 감사하겠습니다.

본 글은 IT 아웃소싱 플랫폼, 위시켓과 함께 만든 콘텐츠입니다.
위시켓에서 빠르고 안전한 외주를 경험해보세요.

 

돌망님이 브런치에 게재한 글을 편집한 뒤 모비인사이드에서 한 번 더 소개합니다.