메인 콘텐츠로 건너뛰기

짧은 음성 파일 전사

보유하고 있는 짧은 음성 파일(16MB 이하)을 AmiVoice API의 HTTP 인터페이스 엔드포인트로 전송하면 간단하게 텍스트로 변환할 수 있습니다. 이 튜토리얼에서는 프로그램을 작성하는 대신 curl 명령어와 jq 명령어를 사용하여 API 사용 방법을 설명합니다. 긴 음성 파일의 경우 다음 튜토리얼인 「긴 음성 파일 전사」에서 설명합니다.

준비

이 튜토리얼을 실행하려면 다음이 필요합니다.

  • curl
  • jq
  • AmiVoice API에 등록하고 APPKEY 획득
  • 전사하고 싶은 음성 파일 준비
노트

결과를 보기 좋게 정리하기 위해 jq 명령어를 사용합니다. jq가 설치되어 있지 않아도 이후 튜토리얼에서 음성을 전사할 수 있으므로 설치하지 않고 진행해도 됩니다.

curl

사용 중인 시스템에 curl 명령어가 설치되어 있는지 확인하십시오.

curl -V

버전이 표시되지 않는 경우 https://curl.se/에서 사용 중인 OS의 패키지를 다운로드하거나 패키지 관리자를 사용하여 curl을 설치하십시오.

jq

사용 중인 시스템에 jq 명령어가 설치되어 있는지 확인하십시오.

jq -V

버전이 표시되지 않는 경우 https://stedolan.github.io/jq/에서 사용 중인 OS의 패키지를 다운로드하거나 패키지 관리자를 사용하여 jq를 설치하십시오.

APPKEY 획득

  1. AmiVoice API에 등록합니다.
  2. 마이 페이지에 로그인하여 [接続情報] 탭의 [共通接続情報]에 기재된 APPKEY를 기록해 둡니다.

AmiVoice Tech Blog에서 APPKEY를 획득하는 과정을 자세히 설명하고 있습니다. APPKEY 획득에 대해서는 AmiVoice API 사용해보기도 참조하십시오.

음성 파일

전사하고 싶은 음성 파일을 준비합니다. 여기서는 클라이언트 라이브러리의 샘플 프로그램에 포함된 음성 파일(test.wav)을 사용합니다.

노트
  • 음성 파일을 준비할 때 지원되는 음성 파일 형식에 주의하십시오. 지원 형식은 음성 형식에 대하여를 참조하십시오.
  • 16MB 이상의 음성 파일을 전송하는 경우 다음 긴 음성 파일 전사를 참조하십시오.

실행

터미널을 실행하고 다음 명령어를 복사하여 실행하십시오. 이때 test.wav 부분은 준비한 음성 파일의 경로로 대체하십시오. 또한 {APPKEY}는 자신의 키로 대체하십시오.

curl https://acp-api.amivoice.com/v1/recognize \
-F d=-a-general \
-F u={APP_KEY} \
-F a=@test.wav

결과

실행이 성공하면 다음과 같이 JSON 형식의 결과가 얻어집니다.

{"results":[{"tokens":[{"written":"\u30a2\u30c9\u30d0\u30f3\u30b9\u30c8\u30fb\u30e1\u30c7\u30a3\u30a2","confidence":1.00,"starttime":522,"endtime":1578,"spoken":"\u3042\u3069\u3070\u3093\u3059\u3068\u3081\u3067\u3043\u3042"},{"written":"\u306f","confidence":1.00,"starttime":1578,"endtime":1866,"spoken":"\u306f"},{"written":"\u3001","confidence":0.72,"starttime":1866,"endtime":2026,"spoken":"_"},{"written":"\u4eba","confidence":1.00,"starttime":2026,"endtime":2314,"spoken":"\u3072\u3068"},{"written":"\u3068","confidence":1.00,"starttime":2314,"endtime":2426,"spoken":"\u3068"},{"written":"\u6a5f\u68b0","confidence":1.00,"starttime":2426,"endtime":2826,"spoken":"\u304d\u304b\u3044"},{"written":"\u3068","confidence":1.00,"starttime":2826,"endtime":2938,"spoken":"\u3068"},{"written":"\u306e","confidence":1.00,"starttime":2938,"endtime":3082,"spoken":"\u306e"},{"written":"\u81ea\u7136","confidence":1.00,"starttime":3082,"endtime":3434,"spoken":"\u3057\u305c\u3093"},{"written":"\u306a","confidence":1.00,"starttime":3434,"endtime":3530,"spoken":"\u306a"},{"written":"\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3","confidence":1.00,"starttime":3530,"endtime":4378,"spoken":"\u3053\u307f\u3085\u306b\u3051\u30fc\u3057\u3087\u3093"},{"written":"\u3092","confidence":1.00,"starttime":4378,"endtime":4442,"spoken":"\u3092"},{"written":"\u5b9f\u73fe","confidence":1.00,"starttime":4442,"endtime":4922,"spoken":"\u3058\u3064\u3052\u3093"},{"written":"\u3057","confidence":1.00,"starttime":4922,"endtime":5434,"spoken":"\u3057"},{"written":"\u3001","confidence":0.45,"starttime":5434,"endtime":5562,"spoken":"_"},{"written":"\u8c4a\u304b","confidence":1.00,"starttime":5562,"endtime":5994,"spoken":"\u3086\u305f\u304b"},{"written":"\u306a","confidence":1.00,"starttime":5994,"endtime":6090,"spoken":"\u306a"},{"written":"\u672a\u6765","confidence":1.00,"starttime":6090,"endtime":6490,"spoken":"\u307f\u3089\u3044"},{"written":"\u3092","confidence":1.00,"starttime":6490,"endtime":6554,"spoken":"\u3092"},{"written":"\u5275\u9020","confidence":0.93,"starttime":6554,"endtime":7050,"spoken":"\u305d\u3046\u305e\u3046"},{"written":"\u3057\u3066","confidence":0.99,"starttime":7050,"endtime":7210,"spoken":"\u3057\u3066"},{"written":"\u3044\u304f","confidence":1.00,"starttime":7210,"endtime":7418,"spoken":"\u3044\u304f"},{"written":"\u3053\u3068","confidence":1.00,"starttime":7418,"endtime":7690,"spoken":"\u3053\u3068"},{"written":"\u3092","confidence":1.00,"starttime":7690,"endtime":7722,"spoken":"\u3092"},{"written":"\u76ee\u6307\u3057","confidence":0.76,"starttime":7722,"endtime":8090,"spoken":"\u3081\u3056\u3057"},{"written":"\u307e\u3059","confidence":0.76,"starttime":8090,"endtime":8506,"spoken":"\u307e\u3059"},{"written":"\u3002","confidence":0.82,"starttime":8506,"endtime":8794,"spoken":"_"}],"confidence":0.998,"starttime":250,"endtime":8794,"tags":[],"rulename":"","text":"\u30a2\u30c9\u30d0\u30f3\u30b9\u30c8\u30fb\u30e1\u30c7\u30a3\u30a2\u306f\u3001\u4eba\u3068\u6a5f\u68b0\u3068\u306e\u81ea\u7136\u306a\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u73fe\u3057\u3001\u8c4a\u304b\u306a\u672a\u6765\u3092\u5275\u9020\u3057\u3066\u3044\u304f\u3053\u3068\u3092\u76ee\u6307\u3057\u307e\u3059\u3002"}],"utteranceid":"20220602/14/018122d637320a301bc194c9_20220602_141433","text":"\u30a2\u30c9\u30d0\u30f3\u30b9\u30c8\u30fb\u30e1\u30c7\u30a3\u30a2\u306f\u3001\u4eba\u3068\u6a5f\u68b0\u3068\u306e\u81ea\u7136\u306a\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u73fe\u3057\u3001\u8c4a\u304b\u306a\u672a\u6765\u3092\u5275\u9020\u3057\u3066\u3044\u304f\u3053\u3068\u3092\u76ee\u6307\u3057\u307e\u3059\u3002","code":"","message":""}

인식 결과에 포함된 일본어는 UTF-8을 Unicode로 이스케이프한 형식입니다. 사용 중인 개발 언어에 내장된 JSON 파서 등으로 쉽게 원래 형태로 되돌릴 수 있습니다. 여기서는 jq 명령어를 사용하여 변환합니다.

curl -F a=@test.wav "https://acp-api.amivoice.com/v1/recognize?d=-a-general&u=<APPKEY>" | jq

이번에는 인식 결과의 일본어가 읽을 수 있는 형식으로, 들여쓰기가 된 상태로 표시될 것입니다. 결과에 포함된 text를 찾으십시오. 여기에 음성을 전사한 결과가 있습니다.

"text": "アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことを目指します。"

다음은 응답의 전체 예시입니다. 전사한 결과뿐만 아니라 단어 단위의 결과나 음성 시간, 신뢰도 등의 정보도 얻을 수 있습니다. 자세한 내용은 음성 인식 결과를 참조하십시오.

レスポンス
{
"results": [
{
"tokens": [
{
"written": "アドバンスト・メディア",
"confidence": 1,
"starttime": 522,
"endtime": 1578,
"spoken": "あどばんすとめでぃあ"
},
{
"written": "は",
"confidence": 1,
"starttime": 1578,
"endtime": 1866,
"spoken": "は"
},
{
"written": "、",
"confidence": 0.72,
"starttime": 1866,
"endtime": 2026,
"spoken": "_"
},
{
"written": "人",
"confidence": 1,
"starttime": 2026,
"endtime": 2314,
"spoken": "ひと"
},
{
"written": "と",
"confidence": 1,
"starttime": 2314,
"endtime": 2426,
"spoken": "と"
},
{
"written": "機械",
"confidence": 1,
"starttime": 2426,
"endtime": 2826,
"spoken": "きかい"
},
{
"written": "と",
"confidence": 1,
"starttime": 2826,
"endtime": 2938,
"spoken": "と"
},
{
"written": "の",
"confidence": 1,
"starttime": 2938,
"endtime": 3082,
"spoken": "の"
},
{
"written": "自然",
"confidence": 1,
"starttime": 3082,
"endtime": 3434,
"spoken": "しぜん"
},
{
"written": "な",
"confidence": 1,
"starttime": 3434,
"endtime": 3530,
"spoken": "な"
},
{
"written": "コミュニケーション",
"confidence": 1,
"starttime": 3530,
"endtime": 4378,
"spoken": "こみゅにけーしょん"
},
{
"written": "を",
"confidence": 1,
"starttime": 4378,
"endtime": 4442,
"spoken": "を"
},
{
"written": "実現",
"confidence": 1,
"starttime": 4442,
"endtime": 4922,
"spoken": "じつげん"
},
{
"written": "し",
"confidence": 1,
"starttime": 4922,
"endtime": 5434,
"spoken": "し"
},
{
"written": "、",
"confidence": 0.45,
"starttime": 5434,
"endtime": 5562,
"spoken": "_"
},
{
"written": "豊か",
"confidence": 1,
"starttime": 5562,
"endtime": 5994,
"spoken": "ゆたか"
},
{
"written": "な",
"confidence": 1,
"starttime": 5994,
"endtime": 6090,
"spoken": "な"
},
{
"written": "未来",
"confidence": 1,
"starttime": 6090,
"endtime": 6490,
"spoken": "みらい"
},
{
"written": "を",
"confidence": 1,
"starttime": 6490,
"endtime": 6554,
"spoken": "を"
},
{
"written": "創造",
"confidence": 0.93,
"starttime": 6554,
"endtime": 7050,
"spoken": "そうぞう"
},
{
"written": "して",
"confidence": 0.99,
"starttime": 7050,
"endtime": 7210,
"spoken": "して"
},
{
"written": "いく",
"confidence": 1,
"starttime": 7210,
"endtime": 7418,
"spoken": "いく"
},
{
"written": "こと",
"confidence": 1,
"starttime": 7418,
"endtime": 7690,
"spoken": "こと"
},
{
"written": "を",
"confidence": 1,
"starttime": 7690,
"endtime": 7722,
"spoken": "を"
},
{
"written": "目指し",
"confidence": 0.76,
"starttime": 7722,
"endtime": 8090,
"spoken": "めざし"
},
{
"written": "ます",
"confidence": 0.76,
"starttime": 8090,
"endtime": 8506,
"spoken": "ます"
},
{
"written": "。",
"confidence": 0.82,
"starttime": 8506,
"endtime": 8794,
"spoken": "_"
}
],
"confidence": 0.998,
"starttime": 250,
"endtime": 8794,
"tags": [],
"rulename": "",
"text": "アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことを目指します。"
}
],
"utteranceid": "20220602/14/018122d65d370a30116494c8_20220602_141442",
"text": "アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことを目指します。",
"code": "",
"message": ""
}

음성 인식 엔진 변경

쿼리 파라미터의 d=-a-general 부분은 음성 인식 엔진을 지정합니다. -a-general会話_汎用(대화 범용) 엔진을 지정하는 것입니다. 예를 들어, -a-medgeneral로 변경하면 의료 용어에 특화된 会話_医療(대화 의료) 범용 엔진을 사용하여 문자 변환할 수 있습니다. 사용 가능한 엔진 목록은 음성 인식 엔진을 참조하십시오.

curl https://acp-api.amivoice.com/v1/recognize \
-F d=-a-medgeneral \
-F u={APP_KEY} \
-F a=@test.wav

다음 단계

  • 여기서 사용한 AmiVoice API의 동기 HTTP 인터페이스를 포함하여 AmiVoice API를 사용하여 음성을 문자로 변환하는 방법은 이용 가이드에서 설명하고 있습니다.
  • 이용 가이드 중에서 특히 요청 시 설정할 수 있는 파라미터에 대해서는 요청 파라미터, 응답의 상세 내용은 음성 인식 결과, AmiVoice API의 동기 HTTP 인터페이스에 대해서는 동기 HTTP 인터페이스를 참조하십시오.
  • 또한 API 레퍼런스는 동기 HTTP 인터페이스를 참조하십시오.
  • HTTP 인터페이스를 이용할 때의 통신 처리와 절차를 클래스 라이브러리화하고, 음성 인식 애플리케이션에 필요한 인터페이스만 구현하면 쉽게 음성 인식 애플리케이션을 만들 수 있는 클라이언트 라이브러리(Hrp)를 제공하고 있습니다. 먼저 샘플 프로그램 HrpTester를 실행해 보십시오. Hrp 클라이언트 라이브러리의 인터페이스 사양에 대해서는 클라이언트 라이브러리의 Hrp(HTTP 인터페이스 클라이언트)를 참조하십시오.