메인 콘텐츠로 건너뛰기

문제 해결

일반적인 질문

Q. 음성 인식 정확도가 원하는 대로 나오지 않는데 어떻게 해야 하나요?

다음 사항을 확인해 주십시오. 결과 처리의 클라이언트 오류도 참조하십시오. 개선되지 않는 경우 문의해 주십시오.

  • 음성 데이터의 채널 수 확인

    스테레오 녹음의 경우 첫 번째 채널의 음성만 인식합니다. 양쪽 채널의 음성을 인식하려면 분리된 음성 파일을 각각 전송해 주십시오.

  • 음성 데이터의 샘플링 레이트 확인

    통화 음성의 경우 주로 8kHz로 녹음되며, 그 외에 널리 사용되는 음성은 16kHz 이상입니다. 会話_汎用(대화 범용) 엔진의 경우 각 샘플링 레이트에 대응하고 있지만, 연결되는 엔진이 다르기 때문에 요청 시 올바른 샘플링 레이트를 명시해야 합니다. ※ 샘플링 레이트 지정이 잘못되면 거의 인식되지 않습니다(인식 결과가 비어 있게 됩니다).

  • 음성 포맷 지정의 엔디안 확인

    헤더 없는 음성 데이터(RAW 데이터)를 전송하는 경우 샘플링 레이트 외에도 엔디안을 지정해야 합니다. 리틀 엔디안 데이터는 lsb, 빅 엔디안 데이터는 msb를 붙입니다(lsb8K, msb16K 등).

    ※ lsb나 msb 지정이 반대로 되어 있으면 거의 인식되지 않습니다(인식 결과가 비어 있게 됩니다).

  • 인식 대상 음성이 녹음되어 있는지 확인

    주변 환경이나 녹음에 사용되는 마이크 장치 등의 영향을 받으므로 발화자의 음성이 확실히 들리는 수준으로 녹음되어 있는지 들어보고 확인하십시오.

  • 발화 내용이 사용하는 엔진과 일치하는지 확인

    전문 용어가 자주 사용되는 음성은 인식 정확도가 떨어집니다. 의료, 금융, 보험 업계용 영역 특화 엔진을 준비하고 있습니다. 발화 내용이 일치할 것 같은 경우 해당 엔진을 사용해 보십시오. 자세한 내용은 음성 인식 엔진을 참조하십시오. 사내에서만 사용되는 고유 용어나 약어 등을 인식하고 싶은 경우 단어 등록 기능을 활용해 주십시오.

Q. 동영상 파일, HLS 등의 스트리밍 형식의 동영상・음성의 음성 인식은 할 수 없나요?

스트리밍 배포 동영상이나 음성을 음성 인식하기 위한 API나 샘플 프로그램은 제공하지 않습니다. 지원하지 않는 데이터 포맷의 경우, 지원하는 음성 포맷으로 변환해야 합니다.

음성 포맷을 변환하는 소프트웨어로는 프리웨어인 FFmpeg 등이 있습니다. 단, 동영상・음성 포맷에 따라 포맷 자체에 라이선스로 사용법의 제한이나 로열티 발생 여부 등이 있을 수 있습니다. 고객님의 책임 하에 확인하고 사용해 주시기 바랍니다.

동영상이나 음성을 재생하면서 음성 인식을 하고 싶은 경우, JavaScript 샘플 프로그램의 getUserMedia()getDisplayMedia()로 변경하면 마이크 입력 소리 대신 브라우저나 시스템 소리를 인식할 수 있으므로 이 방법도 검토해 보시기 바랍니다.

(예) wrp.js

변경 전

navigator.mediaDevices.getUserMedia(
{audio: true, video: false}

변경 후

navigator.mediaDevices.getDisplayMedia(
{audio: true, video: true}

getDisplayMedia()의 audio는 모든 브라우저가 지원하는 것은 아닙니다. Chrome과 Edge에서 동작하는 것을 확인했습니다.

마이페이지 관련 질문

Q. 클라이언트 애플리케이션별 사용량을 알 수 있나요?

클라이언트 애플리케이션별 사용량을 알려면 클라이언트 애플리케이션별로 계정을 분리해야 합니다. 계정을 분리해야 하는 경우 "서비스 제공자용 고객 관리 기능" 사용도 검토해 보십시오.

"서비스 제공자용 고객 관리 기능"을 검토하시는 경우, 자세한 내용은 문의 양식을 통해 문의해 주십시오.

Q. 단어 등록 페이지에서 파일로 단어를 등록했는데 페이지에 표시되지 않는 이유는 무엇인가요?

파일의 문자 코드가 UTF-8이 아니거나 파일 형식이 올바르지 않아 등록되지 않았을 가능성이 있습니다. 파일의 문자 코드와 형식을 확인해 주십시오.

클라이언트 라이브러리 관련 질문

Q. 음성 인식 서버에 연결 중 인터넷이 끊겼다가 복구된 후에는 어떻게 재개 처리를 해야 하나요?

새로 소켓을 생성해도 문제는 없지만, 종료 처리를 하고 재연결하는 것을 권장합니다. 클라이언트 라이브러리의 경우 wrp.disconnect() 후 다시 wrp.connect()부터 시작하면 재연결할 수 있습니다.

(예)

wrp.construct();
wrp.connect();
wrp.feedDataResume();
wrp.feedData();
wrp.feedData();
wrp.feedData();
--> 오류 발생
wrp.disconnect();
wrp.connect();
wrp.feedDataResume();
wrp.feedData();
wrp.feedData();
wrp.feedData();
wrp.feedDataPuse();

Q. Android 애플리케이션에서 서버 연결에 실패하는 이유는 무엇인가요?

Android에서는 메인 스레드(UI 스레드)에서 서버에 연결할 수 없습니다. 별도의 스레드에서 수행해 주십시오. 또한 네트워크 작업을 수행하기 위한 권한 설정(android.permission.INTERNET)이 필요합니다.

샘플 프로그램 관련 질문

Q. 비동기 인터페이스의 샘플 프로그램이 있나요?

Python 샘플 코드는 비동기 HTTP 인터페이스를 확인해 주십시오. 또한 AmiVoice Tech Blog에서 소스 코드와 함께 샘플 애플리케이션을 공개하고 있으니 참고해 주십시오.

Q. Windows 배치 파일에서 curl 명령을 실행하면 파라미터가 유효하지 않은 이유는 무엇인가요?

Windows 배치 파일에 명령을 작성하여 실행할 때 "%20"을 "%%20"과 같이 이스케이프해야 합니다. 명령의 내용을 확인해 주십시오.

Q. Windows 명령 프롬프트에서 일부 문자가 깨지는 이유는 무엇인가요?

Windows 명령 프롬프트는 UTF-8의 4바이트 문자 표시를 지원하지 않기 때문에 문자가 깨집니다.

Q. PHP에서 "PHP Warning: PHP Startup: Unable to load dynamic library 'openssl'"이 발생하는데, openssl.so가 반드시 필요한가요?

openssl이 내장되어 컴파일된 PHP의 경우 필요하지 않습니다.

서버 연결 관련 질문

Q. APPKEY 인증에 실패하는 이유는 무엇인가요?

지정한 파라미터 및 신용카드 등록 상태를 확인해 주십시오. 또한 계약 후 AmiVoice API를 사용할 수 있게 되기까지 10분 정도 걸릴 수 있습니다.

Q. 연결 시 SSL 인증서 오류가 발생하는 이유는 무엇인가요?

다른 회사의 보안 솔루션인 Zscaler를 사용하는 환경에서는 Zscaler의 인증서를 지정해야 한다는 내용을 이용 중인 고객님으로부터 연락을 받았습니다.

Q. 타임아웃으로 인해 연결에 실패하는 이유는 무엇입니까?

방화벽이나 프록시 서버 등의 네트워크 설정에 의해 차단되었을 가능성이 있습니다. 방화벽 및 프록시 서버 설정을 확인해 주십시오.

웹 브라우저는 네트워크 설정이 되어 있을 가능성이 있으므로, JavaScript 버전의 샘플을 시도해 보십시오. 프록시 서버 설정이 필요한 환경에서 AmiVoice API 클라이언트 라이브러리를 사용하는 경우, setProxyServerName() 메소드로 프록시 서버 설정을 해 주십시오.

Q. HTTP 상태 431이나 414가 반환되는 이유는 무엇입니까?

요청의 헤더나 URI, 쿼리 문자열이 너무 깁니다. profileWords를 쿼리 문자열로 지정하는 경우에는 요청 본문으로 지정하도록 해 주십시오.

음성 인식 결과와 작업 상태에 관한 질문

Q. 단어 등록 페이지에서 등록한 단어가 반영되지 않는 이유는 무엇입니까?

요청 파라미터에 프로파일 ID 파라미터를 지정해야 합니다. 'profileId'와 'profileWords'는 독립된 요청 파라미터가 아니라, d 파라미터의 '하위 파라미터'임에 주의해 주십시오. 자세한 내용은 마이페이지의 단어 등록을 확인해 주십시오.

Q. 직접 준비한 음성 파일을 음성 인식할 수 없는 이유는 무엇입니까?

AmiVoice API가 지원하지 않는 음성 포맷을 사용하고 있거나, 음성 파일의 음성 포맷과 파라미터로 지정한 음성 포맷이 일치하지 않을 가능성이 있습니다. AmiVoice API가 지원하는 음성 포맷인지, 파라미터 지정이 올바른지 확인해 주십시오. 또한, 서버에 음성 파일의 데이터가 아닌 파일명이 전송되는 경우도 있으므로 주의해 주십시오. 음성 포맷에 대해서는 음성 포맷을 확인해 주십시오.

Q. 단어 등록에서 반각 '|'나 반각 ':' 등 사용할 수 없는 문자가 포함된 단어를 사용하고 싶을 때는 어떻게 해야 합니까?

다른 문자열로 대체하여 등록하고, 음성 인식 결과를 받은 후 처리에서 원래 문자로 대체하는 등의 처리가 필요합니다. 예를 들어 URL 인코딩한 문자를 등록해 두고, 애플리케이션에서는 음성 인식 결과의 문자열을 URL 디코딩하도록 합니다.

Q. 로그 저장 없음이 활성화되어 있는지 확인하는 방법이 있습니까?

마이페이지의 '이번 달 사용량'에서 '로그 저장 있음'과 '로그 저장 없음'의 사용량을 확인해 주십시오. 이용 분이 '로그 저장 없음'의 사용량에 가산되어 있다면, 로그 저장 없음이 활성화된 것입니다. 이전에는 로그 저장 없음의 경우, 음성 인식 결과의 "utteranceid" 값 끝에 [nolog]가 들어갔지만, 끝의 [nolog]는 폐지되었습니다.

Q. 비동기 HTTP 인터페이스의 작업 상태가 queued인 이유는 무엇입니까?

요청이 성공한 후 음성 인식이 완료되기까지는 전송한 음성의 길이에 따라 시간이 걸립니다. 작업 상태 조회를 하면 처리가 진행됨에 따라 status는 다음과 같이 변화합니다.

queued → started → processing → completed

queued 상태인 경우에는 음성 인식이 완료되지 않았으므로, 잠시 기다렸다가 다시 결과 조회 요청을 해 주십시오.

또한, 처리 도중에 오류가 발생한 경우에는 completed가 되지 않고 어느 상태에서든 error로 전환됩니다.

queued → error
queued → started → error
queued → started → processing → error

음성 인식 요청이 성공하면 statuscompleted 또는 error가 될 때까지 30초 간격으로 작업 상태 조회를 하는 등의 처리를 해 주십시오.

Q. 구두점 후에 줄바꿈을 넣으려면 어떻게 해야 합니까?

AmiVoice API에는 자동으로 줄바꿈을 삽입하는 기능이 없으므로, 클라이언트 측에서 음성 인식 결과 텍스트를 가공해야 합니다. (예) JavaScript에서 '。'를 '。'와 br 태그로 치환.

text = text.replace(/。/g, "。<br>");

Q. 히라가나 음성 인식 결과를 얻을 수 있습니까?

음성 인식 결과 JSON에는 단어별 '읽기' 정보가 포함되어 있습니다.

JSON의 자세한 내용은 각 API의 음성 인식 결과 응답(동기 HTTP 인터페이스, 비동기 HTTP 인터페이스 , WebSocket 인터페이스 )를 참조해 주십시오. 'spoken'이 각 단어의 읽기가 됩니다.

단, 이 '읽기'는 발음 그대로의 것이므로 '후리가나'와는 다를 수 있습니다. 예를 들어, '私 は'라는 표기에 대한 읽기는 'わたくし わ'가 됩니다.

기타 질문

Q. BIZTEL의 음성 인식 서비스 이력 연동에서 '会話_汎用(대화 범용)' 이외의 엔진이 오류가 나는 이유는 무엇입니까?

현재 BIZTEL에서 전송되는 음성 데이터 포맷(샘플링 레이트 16kHz 미만)에 대응하는 것이 '会話_汎用(대화 범용)'뿐이기 때문에 다른 엔진에서는 오류가 발생합니다.

Q. AudioCodes사의 VoiceAI Connect에서 AmiVoice를 사용할 때 등록한 단어를 반영할 수 있습니까?

Connection Engine Name(folderId)에서 연결 엔진 이름 뒤에 프로파일 ID 지정을 추가하여,

<연결 엔진 이름> profileId=<:프로파일 ID>

와 같이 하여 프로파일 ID를 지정할 수 있다는 것을 이용 중인 고객님으로부터 연락을 받았습니다. 자세한 내용은 AudioCodes사에 확인해 주시기 바랍니다.