음성인식 기술 API 란?
최신 인공지능 기술에 기반하여 한국어, 영어, 다국어(일본어/중국어/독어/불어/스페인어/러시아어/베트남어/아랍어/태국어)에
대해 고성능의 음성인식 정확률을 제공하는 서비스로서, 사용자가 발성한 녹음된 입력 음성 데이터(단위 파일 또는 버퍼)를
음성인식 서버로 전달하여 문자(텍스트)로 제공합니다. 음성인식 API는 HTTP 기반의 REST API 인터페이스로
JSON 포맷 기반의 입력 및 출력을 지원하며 ETRI에서 제공하는 API Key 인증을 통해 사용할 수 있는 Open API 입니다.
API 호출 1일 허용량
| 기술명 | API명 | 1일 허용량 |
|---|---|---|
| 음성인식 기술 |
· 한국어 인식 API · 영어 인식 API |
1,000건/일 (최대 20초/건당) |
|
· 중국어 인식 API · 일본어 인식 API · 독어 인식 API · 불어 인식 API · 스페인어 인식 API · 러시아어 인식 API · 베트남어 인식 API · 아랍어 인식 API · 태국어 인식 API · 이탈리아어 인식 API · 태국어 인식 API · 말레이어 인식 API · 포르투칼어 인식 API · 말레이어 인식 API · 인도네시아어 인식 API · 광둥어 인식 API · 네달란드어 인식 API |
1,000건/일 (20초 이내/건당) |
음성인식 기술 API 사용하기
음성인식 기술 API는 REST API이며, 다의어 조회의 대상 어휘 데이터를 HTTP 통신으로 ETRI Open API 서버에 전달하면 됩니다. 서버가 제공하는 REST API의 URI는 다음과 같으며 POST 방식으로 호출해야 합니다.
http://epretx.etri.re.kr:8000/api/WiseASR_Recognition
[HTTP Request Header]
"Authorization" : "YOUR_ACCESS_KEY"
[HTTP Request Body]
{
"request_id": "reserved field",
"argument": {
language_code": "LANGUAGE_CODE",
"audio": "BASE64_OF_AUDIO_DATA"
}
위와 같은 HTTP 요청을 e-PreTX 서버로 전달하면 서버는 JSON 형태의
Text 데이터를 HTTP 응답 메시지로 반환합니다. 다음은 HTTP 응답 예제 입니다.
[HTTP Response Header]
Access-Control-Allow-Origin:*
Connection:close
Content-Length:0
Content-Type:application/json; charset=UTF-8
[HTTP Response Body]
{
"request_id": "reserved field",
"result": 0,
"return_type": "com.google.gson.internal.LinkedTreeMap",
"return_object": {음성인식 결과 JSON}
}
음성인식용 안드로이드 앱 및 개발 환경
안드로이드 앱 제작에 참고가 가능한 소스코드 환경을 android studio 개발 환경으로 gitHub에 오픈하였으니 오픈 API를 사용한 app개발 시에 참고하시면 됩니다.
(Git에 올라와 있는 소스 코드는 리뉴얼 되기 전 버전입니다. 참고하시어 관련 소스 수정 하시기를 바랍니다.)
https://github.com/ETRISLP/EtriOpenASR
https://github.com/ETRISLP/EtriOpenASR
구현 예제(Python)
python 3.0을 기준으로 작성되었습니다.
HTTP 통신을 위해 urllib3 라이브러리를 사용하여 제공하고 있습니다. Python 3.0 이하의 버전에서
예제를 실행하기 위해서는 별도로 urllib3의 설치가 필요합니다.
설치에 대한 설명은 https://pypi.python.org/pypi/urllib3 를 참고하시기 바랍니다.
설치에 대한 설명은 https://pypi.python.org/pypi/urllib3 를 참고하시기 바랍니다.
urllib3 라이브러리에 대한 자세한 설명은 https://urllib3.readthedocs.io/en/latest/
에서 확인 하실 수 있습니다.
#-*- coding:utf-8 -*-
import urllib3
import json
openApiURL = "http://epretx.etri.re.kr:8000/api/WiseASR_Recognition"
accessKey = "YOUR_ACCESS_KEY"
audioFilePath = "AUDIO_FILE_PATH"
languageCode = "LANGUAGE_CODE"
file = open(audioFilePath, "rb")
audioContents = base64.b64encode(file.read()).decode("utf8")
file.close()
requestJson = {
"argument": {
"language_code": languageCode,
"audio": audioContents
}
}
http = urllib3.PoolManager()
response = http.request(
"POST",
openApiURL,
headers={"Content-Type": "application/json; charset=UTF-8","Authorization" : accessKey},
body=json.dumps(requestJson)
)
print("[responseCode]" + str(response.status))
print("[responBody]")
print(str(response.data,"utf-8"))
음성인식 기술 API 레퍼런스
다음은
파라미터에 대한 설명입니다.
| Field 명 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
| access_key | String | O | API 사용을 위해 ETRI에서 발급한 사용자 API Key 입니다. |
| argument | Object | O | API 사용 요청 시 분석을 위해 전달할 내용입니다. |
| language_code | String | O | 음성인식의
입력 음성 언어 코드입니다. 요청할 수 있는 언어 코드는 아래와 같습니다.
|
| audio | String | O | 음성인식을 할 녹음된 음성파일의 base64-encoded string 입니다. |
분석된 결과는 다음과 같은 내용이 포함되어 있습니다.
| JSON Key 이름 | 설명 |
|---|---|
| recognized | 음성 언어 코드에 따른 음성인식 결과 |
음성인식이 제대로 이루어지지 않았을 경우에는 음성인식 결과 대신 오류 메시지가 반환됩니다.
| 분류 | 오류 메시지 | 설명 |
|---|---|---|
| 한/영 음성인식 | ASR_NOTOKEN | 파일이 요구사항(샘플링 주파스 16kHz)에 맞지 않을 때 |
| 다국어 음성인식 | SayTranError NoToken | 음성 인식 실패 |
| SayTranError NoSpeech | 발화 구간 검출 실패 | |
| SayTranError NetworkError | 네트워크 에러 | |
| SayTranError NetworkError - SR data block broken | 네트워크 에러 | |
| SayTranError NetworkError - BufferOverflow | 네트워크 에러 | |
| SayTranError InputError - sr unknown LANG | 지원하지 않는 언어 | |
| SayTranError InputError - sr header mismatchr | 헤더 프로토콜이 파싱불가한 오류가 발생한 경우 | |
| SayTranError EngineBusy - sr engine full | 가용 채널이 없는 경우 |
음성인식 API의 오류 코드 목록은 다음과 같습니다.
| http status code | result | reason | 설명 |
|---|---|---|---|
| 403 | -1 | Empty Auth Header | Authorization 헤더가 없는 경우 |
| 403 | -1 | Invalid Key | KEY
API 키가 없는 경우 |
| 403 |
-1 | Blocked KEY | API
키가 관리자에 의해서 차단된 경우 |
| 403 |
-1 | Daily Limit Exceeded | 일간 호출 제한에 걸린 경우 |
| 403 |
-1 | Monthly
Limit Exceeded |
월간 호출 제한에 걸린 경우 |
| 403 |
-1 | Yearly
Limit Exceeded |
연간 호출 제한에 걸린 경우 |
| 403 |
-1 | Too Many Keys | 같은 IP에서 여러 API 키가 사용된 경우 |
| 403 |
-1 | Too Many IPs | 하나의 API 키를 여러 IP 에서 사용한 경우 |
| 403 |
-1 | Not Allowed IP | API
호출 가능한 IP 가 아닌경우 (API 설정에서 허용된 IP가 아닌경우) |
| 403 |
-1 | Not Allowed Subpath | 하위경로 접근 제한이 되어 있는 경우 |
| 403 | -1 | Invalid
API |
등록되지
않은 API를 요청한 경우 |
| 408 | -1 |
Request
Timeout |
서버의
요청 대기가 시간을 초과한 경우 |
| 413 |
-1 | Body
Size Limit Exceeded |
요청
바디가 설정된 값보다 큰 경우 |
| 429 |
-1 | Concurrent
Limit Exceeded |
연속호출
허용 범위를 넘어서 호출한 경우 |
| 500 | -1 | Internal Server Error | 내부 오류 발생한 경우 |
제약사항
본 음성인식 API는 상용서비스를 목표로 하지 않으므로 신규 또는 전문 어휘를 실시간으로 반영하지 않고 있습니다.
이에 따라 전문 분야의 어휘나 신조어 등 사전에 등록되지 않은 어휘 및 해당 어휘를 포함하는 문장에 대해서는
음성인식 성능이 저하될 수 있음을 양지하여 주시기 바랍니다. (본 음성인식 기술은 의사 형태소(pseudo morpheme)라는 기본 인식 단위를 사용함으로써 상용 서비스 적용 시, 어휘 적용범위(coverage)를 쉽게 제고할 수 있게 구현되어 있습니다.)
