패턴인식(Pattern Recognition)의 한 분야인 음성인식은 오늘날(현 2014년) 많이 대중화가 되어있고, 다양한 분야에서 활용되고 있습니다.  음성인식에서 두각을 나타내고있는 여러 대기업들중 Google에서 제공하는 STT(Speech To Text)의 활용법에 대해 간단히 정리한 내용입니다.  글쓴이는 음성인식 분야에 무지하며, 이를 참조해서 읽어주세요.


인식률은 사람의 성별, 사용된 마이크, 주변 잡음, 인식할 단어의 수, 얼마나 문법적으로 올바른 문장을 발화하는가 등 다양한 요소에 의해서 좌우됩니다. 따라서 인식 성능이 얼마나 나올 것인가를 결정하려면 이러한 조건들이 명확하게 알아야하고, 그 후에야 대강의 성능을 예측하여 볼 수 있습니다.

[출처] 음성인터페이스연구실 게시판 발췌하였습니다.



1. Google의 음성인식


① x-webkit-speech (HTML5 Speech Input API)


2011년 Google이 자사 브라우저 Chrome 버전11.0.696.16 Beta 버전부터 HTML5 Speech Input API Specification를 지원하였습니다. 이는 다른 미들웨어(Flash, ActiveX)의 도움없이 브라우저에서 마이크로부터의 input을 캡쳐해 낼수 있게됩니다.  x-webkit-speech라는 이름으로 input태그에 아래와같이 x-webkit-speech속성만 추가하시면, 음성인식 샘플테스트를 해보실 수 있습니다. 아래 마이크를 클릭하시고 말해보세요~(크롬에서만 동작)

 

 <input x-webkit-speech="" id="mike" style="width:500px;height:100px"> 


 <- 마이크 클릭


테그의 속성하나만을 추가해도 음성인식이 되는 매력적인 기능이지만 슬프게도 2014년 4월 현재, 다른 브라우저의 지원이 부족하고, 태그의 속성으로만 사용할 수 있기에 확정성이 용이하지 못하였습니다. 이러한 이유로 x-webkit-speech의 사용은 점점 사라져 가는 추세입니다. 대신 자바스크립트API인 Web Speech API가 등장하게 됩니다.



② New Approach : Web Speech API


2013년 Chrome 버전25 부터 Web Speech API Specification를 지원하게 됩니다. 음성을 텍스트포멧으로 변환(Speech To Text, 이하 STT)이 순수 웹브라우저만으로 가능해 졌습니다.


 (데모소스코드)   



 Speech Input API 스펙은 HTML5스펙이었다면, Web Speech API는, HTML5스펙에 포함된 것이 아니라 따로 독립적인 Speech API가 독립적으로 분리되어 있습니다.  Web Speech API 소개를 간추리면 아래와 같습니다.


*출처:Web Speech API Creates Interactive Experiences




③ 크롬브라우저 확장기능인 Google Voice Search Hotword


이 기술을 이용해 Google은 'Hands free'라는 모토로 확장기능을 제공하고 있습니다. 이는 Apple의 Siri와 같은 개념으로, 말로써 검색을 하고, 이메일을 보내는 등 좀 더 편리한 PC웹브라우징을 하실 수 있습니다.


Google Voice Search Hotword(beta)로 가셔서 설치하시고, 설정->확장 프로그램-> Google Voice Search Hotword(Beta) 0.1.1.5 사용 설정을 합니다.



 google.co.kr 이 아닌 google.com으로 접속하시면 다음과 같이 'OK Google'이라고 말하세요. 라는 문구를 검색어 창에서 확인하실 수 있습니다. Apple의 Siri와 같이, Chrome브라우저에서 음성명령만으로 검색이 가능해졌습니다. 단, 아직 베타버전이어서 한국어 지원을 하지 않습니다.




2. 어떻게 동작하는가


Google Speech API는 크게 두가지 형태로 디자인 되었습니다.


첫째, 크롬브라우저에 음성엔진이 built-in

둘째, 구글서버로 음성Data를 보내고 feedback받는 형태


두개지 방법에는 장단점이 있습니다. 크롬브라우저 자체 내에 음성인식엔진이 내장되어 있는경우 서버를 거치지 않기때문에 속도가 빠름니다.  서버를 거치게 될 경우, 내장엔진에 저장되어있는 data보다 훨씬 방대한 data가 저장되어 있기때문에, 내장음성엔진에 비해 정확도가 더 높다고합니다.



3. Google Speech API Server 이용해보기

※ Google Speech API 의 사용은 개발목적과 개인사용에 한합니다.  


 ① Chromium-dev 가입 

Chromium-dev Community로 가셔서 회원가입을 합니다. 가입하지 않으면 API설정에 Speech API 자체가 보이지 않습니다.


 ② Speech API 사용설정

Chromium-dev에 가입하셨다면 Google Developers Console로 가보면 Speech API가 보일것입니다.  STATUS를 ON으로 바꿔주세요. 하루 50번의 요청제한이 있습니다. 단, 요청횟수를 더 늘릴 수도 있습니다.



③ key만들기




④ Google서버로 요청


Google Speech API를 이용하시려면, HTTP POST 요청을 합니다. Google Speech API v2버전에서는 다음의 두가지 data형식을 인식할 수 있습니다. 클라이언트가 어떤 언어로 되어있든, Google서버에 요청시 아래의 형태를 맞추셔야합니다. 


Data 인코딩 정보

1. FLAC

Flac file; 44100Hz 32bit float, exported with Audacity. Check the audio folder in this repository for some hilarious examples.

Channels       : 2

Sample Rate    : 44100

Precision      : 32-bit

Sample Encoding: 32-bit Float


2. 16-bit PCM

The following audio options are confirmed working for 16-bit PCM sample encoding:

Channels       : 1

Sample Rate    : 16000

Precision      : 16-bit

Sample Encoding: 16-bit Signed Integer PCM


요청 Header정보

1. Flac

Content-Type: audio/x-flac; rate=44100;

FLAC파일의 rate와 똑같이 맞춰주셔야 합니다. 일반적으로 44100Hz로 맞추지만, 다른 rate도 지원을 합니다.


2. 16-bit PCM

Content-Type: audio/l16; rate=16000;

16bit signed-integer로 인코딩된 파일은 44100Hz 혹은 16000Hz를 지원합니다. 


※주의 : 오디오 캡처할때 rate와 header의 rate는 같아야 합니다!


HOST 주소

https://www.google.com/speech-api/v2/recognize


KEY값
AIzaSyCnl6MRydhw_5fLXIdASxkLJzcJh5iX0M4

위의 키값은 위에서 언급한 Google Hotword Chrome Extension에서 쓰이는 키값으로, 소스코드에서 추출한 키값입니다.  Google Developers Console에서 생성된 키값을 입력하여도 되고,  Google Hotword Chrome Extension에서 추출한 키값을 입력하셔도 됩니다. 다만, 생성한 키값은 하루 50회 이용제한이 있고, Google Hotword Chrome Extension에서 추출한 키값은 이용제한이 없습니다.

2014년 5월. 위의 키값은 더이상 동작하지 않습니다. Google에서 막아놓은듯 합니다. 그리고 v1버전도 어쩌다 동작할 때도 있는듯 하고, 직접 추출된 50회 이용제한 Key값또한 50회 이상 되고 있군요.  하루중 몇번씩 되었다 안되었다 하는.... ㅠㅠ


LANG값

var langs =

[['Afrikaans',       ['af-ZA']],

 ['Bahasa Indonesia',['id-ID']],

 ['Bahasa Melayu',   ['ms-MY']],

 ['Català',            ['ca-ES']],

 ['Čeština',          ['cs-CZ']],

 ['Deutsch',         ['de-DE']],

 ['English',          ['en-AU', 'Australia'],

                     ['en-CA', 'Canada'],

                     ['en-IN', 'India'],

                     ['en-NZ', 'New Zealand'],

                     ['en-ZA', 'South Africa'],

                     ['en-GB', 'United Kingdom'],

                     ['en-US', 'United States']],

 ['Español',          ['es-AR', 'Argentina'],

                     ['es-BO', 'Bolivia'],

                     ['es-CL', 'Chile'],

                     ['es-CO', 'Colombia'],

                     ['es-CR', 'Costa Rica'],

                     ['es-EC', 'Ecuador'],

                     ['es-SV', 'El Salvador'],

                     ['es-ES', 'España'],

                     ['es-US', 'Estados Unidos'],

                     ['es-GT', 'Guatemala'],

                     ['es-HN', 'Honduras'],

                     ['es-MX', 'México'],

                     ['es-NI', 'Nicaragua'],

                     ['es-PA', 'Panamá'],

                     ['es-PY', 'Paraguay'],

                     ['es-PE', 'Perú'],

                     ['es-PR', 'Puerto Rico'],

                     ['es-DO', 'República Dominicana'],

                     ['es-UY', 'Uruguay'],

                     ['es-VE', 'Venezuela']],

 ['Euskara',         ['eu-ES']],

 ['Français',        ['fr-FR']],

 ['Galego',          ['gl-ES']],

 ['Hrvatski',        ['hr_HR']],

 ['IsiZulu',         ['zu-ZA']],

 ['Íslenska',        ['is-IS']],

 ['Italiano',        ['it-IT', 'Italia'],

                     ['it-CH', 'Svizzera']],

 ['Magyar',          ['hu-HU']],

 ['Nederlands',      ['nl-NL']],

 ['Norsk bokmål',    ['nb-NO']],

 ['Polski',          ['pl-PL']],

 ['Português',       ['pt-BR', 'Brasil'],

                     ['pt-PT', 'Portugal']],

 ['Română',          ['ro-RO']],

 ['Slovenčina',      ['sk-SK']],

 ['Suomi',           ['fi-FI']],

 ['Svenska',         ['sv-SE']],

 ['Türkçe',          ['tr-TR']],

 ['български',       ['bg-BG']],

 ['Pусский',         ['ru-RU']],

 ['Српски',          ['sr-RS']],

 ['한국어',            ['ko-KR']],

 ['中文',             ['cmn-Hans-CN', '普通话 (中国大陆)'],

                        ['cmn-Hans-HK', '普通话 (香港)'],

                        ['cmn-Hant-TW', '中文 (台灣)'],

                        ['yue-Hant-HK', '粵語 (香港)']],

 ['日本語',           ['ja-JP']],

 ['Lingua latīna',   ['la']]];


Request 예제 (Flex로 만든 예제, Google서버로 요청하는 부분입니다.)

 .

 .

 .                         

 var PATH:String = "https://www.google.com/speech-api/v2/recognize?output=json&lang=ko-kr&key=AIzaSyCnl6MRydhw_5fLXIdASxkLJzcJh5iX0M4";

 var urlRequest:URLRequest = new URLRequest(PATH);

 var urlLoader:URLLoader = new URLLoader();

 urlRequest.contentType = "audio/x-flac; rate=44100";

//urlRequest.contentType = "audio/l16; rate=16000";

 urlRequest.data = flacData;

 urlRequest.method = URLRequestMethod.POST;

 urlLoader.dataFormat = URLLoaderDataFormat.TEXT;

 urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);

 urlLoader.addEventListener(ErrorEvent.ERROR, urlLoader_error);

 urlLoader.load(urlRequest);

 .

 .

 .



JSON으로 리턴되며, XML은 지원하지 않습니다.

 {

"result":[

{

"alternative":[

  {"transcript":"안녕하세요","confidence":0.57016742}

 ,{"transcript":"아냐세요"}

 ,{"transcript":"안냐세요"}

                                          ]

  ,"final":true

                }

 ]

,"result_index":0

 }


4. Google Speech API Server를 통해 서비스가 가능한가


Google Speech API는 무료이지만 공식적인 API(Official Public API)는 아닙니다.  말인즉 공식적인 API가 아니므로, Google은 사전예고없이 API를 바꿔버리면 예상치 못한 여러 에로사항이 생길 가능성이 다분합니다. 한가지 예로 2012년 Google의 일방적(?)인 Google Weather API차단으로 이를 이용해 날씨서비스를 하던 많은 기업들이, 다른 Weather API로 갈아탓더랬습니다. (stackoverflow) 또한 위에서 업급했던 것처럼, 개발과 개인에게만 사용을 허가합니다. 



5. 흥미로운 음성 엔진들


① Sphinx (100% Open Source Toolkit For Speech Recognition)


CMUPhinx는 미국 펜실베이니아에 위치한 카네기멜론대학(Carnegie Mellon University)의 Sphinx그룹과 Sun Microsystems연구소, Mitsubishi Electric Research Labs (MERL), and Hewlett Packard (HP)들이 협력해서 연구개발중인 음성엔진입니다.  (소스코드Tutorial





② MIT의 WAMI

WAMI는 MIT 연구실에서 만든 iPhone, iPod Touch 모바일 웹브라우저에서 음성인식을 하는 toolkit입니다. 이것도 역시 오픈소스입니다.


③ Online Speech Recognition API





6. Flex로 구현해본 음성인식 샘플


크로스 브라우징 Google STT 구현을 위해, 마이크Input을 Flex로 받아와서 처리를 해보았습니다.  




7. 끝으로...(Graphic User Interface -> Voice User Interface)


후드래빗님의 의견처럼 '음성인식 기술이 새로운 인터페이스로 자리잡고 있다' 에 100% 동의합니다. 아니면 '이미 자리잡았다' 가 될 수도 있겠네요. Warable Device, 자동차, 의료, 스마트TV, 게임, 교육 등등 다양한 분야에 활용되고 있습니다. MS의 코타나, 구글의 Now, 애플의 Siri 등 공룡기업들의 '개인비서' 서비스가 강세를 보이는 가운데, 우리나라에서도 음성인식 기술에 대한 연구가 활발하게 진행중입니다. 대표적으로 2010년 네이버는 음성검색엔진을 자체 기술로 개발하기시작한 이래로, 현재는 Google음성엔진에 못지않은 음성인식률을 보이고 있습니다. '다음'은 음성 검색 서비스 강화를 위해 음성인식 전문기업 '다이알로이드'를 인수하고, 최근(2014년2월)에 '다음'은 국내최초로 국내최초로 '모바일 음성 인식 API' 를 공개하기도 하였습니다. 


인공지능과 Voice User Interface의 끝을 보여주는 영화 'her'  


끝으로 우리나라가 IT강국이라 하지만, 순수 '대한민국 소프트웨어 기술'이라 내세울 만한 것 하나 없는 이 현실에서, 소수의 우리나라 음성인식 기술자분들의 노고에 감사를 드립니다~



* 참고 (이 글은 아래의 사이트를 참고로 작성하였습니다.)


* W3C 음성인식 커뮤니티 : W3C Speech API Community Group

* W3C 오디오 API : Web Audio API

* W3C Speech Input : HTML5 Speech Input API Specification

* W3C Speech : Web Speech API Specification

* Web Speech Presentation문서 : Web Speech API Creates Interactive Experiences

* Web Speech API 사용법 : Example on how to user Web Speech API

* Google Speech API v1(Github) - Google Speech To Text API

Google Speech API v2(Github) - Reverse Engineering Google's Speech To Text API (v2)

* Chomium Speech 소스코드 - http://src.chromium.org/viewvc/chrome/trunk/src/content/browser/speech/

* 도움글 : Accessing Google Speech API / Chrome 11

* 도움글 : Google’s Speech API (옵션설명)

* 도움글 : stackoverflow질문답변

* nodejs for Google Speech API : Google Speech API wrapper for node

* 관련유틸 : SoX (콘솔 사운드파일 포멧변경유틸)

* 관련기사 : 이젠 노트북과 PC에서도 "OK, 구글" … 구글, 음성 검색 확장 기능 공개

* 관련기사 : 넥서스5의 핵심 기능 'Ok Google', 한국어로는 사용 불가

* 관련글 : 음성검색, '열려라 참깨'의 비밀

* 관련글 : KLDP 게시판 글 (음성인식 공부방법, 책, 참고사이트)

* 음성인식 강의 : 충북대학교 권오욱 교수의 음성인식 한글강의

* 충북대학교 : 음성통신연구실 SC Lab

* 카이스트 음성인식연구실 : 한국과학기술원 전기전산학과 음성 인터페이스 연구실

* 음성관련 논문자료 : 사단법인 한국 음성 학회

* 음성/언어정보연구센터 :  ETRI

* HTK 공식 홈페이지 :  http://htk.eng.cam.ac.uk/

* AS3-STT : SimpleSoundApp

* Flash on flac encoder : Flach Encoder

* Flash-Red5-Spring-Sphinx : Java Speech Recognition and Adobe Flex

* Java이용, Google STT 예제 : SPEECH TO TEXT LIBRARY FOR PROCESSING

* Java 음성API 개발 문서 : Java Speech API Programmer's Guide

* Sphinx관련 URL 모음 : Open Source Speech Software from Carnegie Mellon University

* Sphinx Java 예제 만들기 : How to Make Simple Speech to Text Recognition using Java Sphinx

* 음성인식오픈소스 링크모음 : Open source Speech Projects

* Flash기반 음성인식 예제 : Voice Gesture

* Java기반 음성인식 (TalkingJava SDK 이용, NON-COMMERCIAL 라이센스) : Speech To Text using Java API

* Java 사운드 : Java Sound, An Introduction

저작자 표시 비영리 변경 금지
신고

'HTML5 > HTML News' 카테고리의 다른 글

[HTML5] HTML5 링크모음  (0) 2014.11.10
Google Speech API, 그리고 음성인식 기술  (11) 2014.04.18
WebRTC, 그리고 표준전쟁  (1) 2013.11.05
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 지나가던 길냥이 2014.06.03 14:32 신고  댓글주소  수정/삭제  댓글쓰기

    @@!!
    대단하네요~~~
    저도 x-webkit speech로 웹 프로그램을 만들었다가 구글에서 blink로 바꾸면서 webkit 코드를 삭제하는 바람에
    지금 제 웹프로그램이 쓸모없이 되어 버려서 망연자실하던 중이었습니다.....
    다른 사이트 돌아다닐 필요없이 여기 방문했더니
    정보가 다 압축되어 있네요!! 감사합니다.

  2. warchife 2014.06.06 02:10 신고  댓글주소  수정/삭제  댓글쓰기

    내용 잘 봤습니다.
    질문 하나만 드리겠습니다. 제가 google speech api를 이용한 ios 어플을 만들고 있는데 음성파일을 구글에 전송하고 텍스트를 받아야 하는데
    계속 403에러가 뜹니다. 물론 API키는 생성 시켜놨고 그걸 썼는데도 계속 에러가 뜹니다. 구글에서 여기저기 돌아다녀봐도 찾기가 너무 힘들어서 질문 드려봅니다.
    어떻게 해야 하나요?

    • KevinKim SuperKev 2014.06.11 15:17 신고  댓글주소  수정/삭제

      무제한 사용 Key값은 더이상 동작하지 않습니다. Google에서 막은듯하고, 개인적으로 생성된 50회 제한이 있는 키값을 이용하세요. 지금현재 2014.06월11일 50회 제한에 걸려도 계속 동작되고 있으며, 이 또한 언제 막힐지.... ㅠㅠ 그리고 Content-Type이 맞지않는 경우에도 403에러를 띄움니다~

  3. 열심연구생 2015.02.06 19:31 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 구글 STT를 이용한 프로젝트 하고 있는 학생입니다 ㅠㅠ
    이런 상세한 글을 남겨주셔서 엄청~~~~ 도움이 많이 되고 있습니다 !!!><
    ㅜㅜ pcm 파일을 이용해서 하고 있는데 400에러가 뜹니다..ㅠㅠ 도와주세요!!ㅠㅠ

    • KevinKim SuperKev 2015.02.11 09:47 신고  댓글주소  수정/삭제

      400에러가 난다는 것만으로는 무엇이 문제인지 추측하기 힘드네요~ 클라이언트가 무엇으로 작성되었나요? 구글서버로 보낼때 헤더정보와 Data인코딩정보가 일치하여야 합니다. 보내는 Data가 올바르면 구글서버는 응답합니다~ ^^

  4. 음성에 빠진.. 2015.04.10 16:09 신고  댓글주소  수정/삭제  댓글쓰기

    Chromium-dev Community에 회원가입하고, Google Developers Console에 확인해 보아도 Speech API가 보이질 않습니다. 아마 서비스가 중단된듯 합니다. 가입시에 신용카드 번호까지 입력했는데.... 며칠전, 스택오버플로우에도 서비스가 않된다고 언급한 개발자가 있어요... 앞으로 어떤 제품을 선택해서 개발을 해야할지......, 인식율이 제일 중요한데.... 마이트로 소프트. 스핑크스, 뉴앙스.... 셋 중에서 선택해야 하나요?????



    • KevinKim SuperKev 2015.04.10 17:16 신고  댓글주소  수정/삭제

      아직 동작합니다~ 메뉴가 조금 바뀌었네요. API Libaray에서 'google speech'로 검색하시면 SpeechAPI가 나옴니다. 'Enable API'버튼을 눌러서 활성화 시켜주시면 Enabled APIs에 'Speech API'메뉴가 보일겁니다~:)

  5. 실버벨 2015.07.06 22:57 신고  댓글주소  수정/삭제  댓글쓰기

    상세하게 너무 잘 적어 주셔서 많은 도움 받고 갑니다. 혹시 위에 적어 주신 예제처럼 웹 방식으로 데이타를 보내서 리턴을 받은 방식의 STT 를 제공하는 API 가 있을까요. 상용이라도 상관없습니다. 혹시나 아는 제품이 있으시면 공유해 주시면 감사하겠습니다. 혹시 구글 스피치 API 도 상용으로 제공하나요?

    • code5381@hotmail.com 2015.07.08 14:02 신고  댓글주소  수정/삭제

      Google STT는 상용제품은 없는걸로 알고있습니다. 그리고 구글링 하면 음성인식 엔진을 파는곳을 쉽게 찾으실 수 있을겁니다. 그런데 너무 비싸여... ㅠ 개인적으로는 구글이 음성인식을 무료로 풀기를 기다리고 있습니다. ㅎ

  6. 늘푸른 2017.05.26 10:57 신고  댓글주소  수정/삭제  댓글쓰기

    선생님 전문가시네요
    잘알진못하지만 좋은정보감사합니다
    다름이 구글에서 음성인식으로 웹페이지 검색이 가능한거 처럼 음성인식 검색 엔진을 이용해서 사내서버에있는 업무 자료등을 쉽게 검색할수있는 시스템을 개발해보려고합니다
    가능성과 여러가지 궁금한점이 있어서그러는데
    연락처를 여쭤보고 싶지만
    제연락처 남깁니다 꼭 연락부탁드립니다
    01031177753입니다 다시한번부탁드립니다



티스토리 툴바