stt (Speech-To-Text)
    • PDF

    stt (Speech-To-Text)

    • PDF

    Article Summary

    概要

    CLOVA Speech Recognition REST API (以下CSR REST API)はHTTP基盤のREST APIで提供する音声認識APIであり、認識に使う言語と音声データの入力を受けてそれにあう認識結果をテキストで返却します。
    入力の音声データフォーマットはmp3, aac, ac3, ogg, flac, wavをサポートします。

    リクエスト

    MethodRequest URI
    POSThttps://naveropenapi.apigw.ntruss.com/recog/v1/stt

    リクエストパラメータ

    パラメータ名タイプ説明必須
    langstring音声認識に使う言語
    - Kor: 韓国語
    - Jpn: 日本語
    - Chn: 中国語
    - Eng: 英語
    必須

    リクエストヘッダ

    ヘッダ名説明
    X-NCP-APIGW-API-KEY-IDアプリケーションを登録する時に発行されたClient ID
    X-NCP-APIGW-API-KEY-ID:{Client ID}
    X-NCP-APIGW-API-KEYアプリケーションを登録する時に発行されたClient Secret
    X-NCP-APIGW-API-KEY:{Client Secret}
    Content-Typeapplication/octet-streamに固定
    Content-Type: application/octet-stream

    リクエストボディ

    フィールド名必須タイプ制約事項説明
    imageYesmp3, aac, ac3, ogg, flac, wavバイナリサウンドデータ(最大60秒)音声ファイル

    レスポンス

    レスポンスボディ

    フィールド名データタイプ説明
    textstring音声に対するText

    例示

    リクエスト例示

    [HTTP Request URL]
    https://naveropenapi.apigw.ntruss.com/recog/v1/stt?lang=Kor
    
    [HTTP Request Body]
    --- binary sound data ---
    

    レスポンス例示

    {
      "text": "こんにちは"
    }
    

    API例題

    次は各言語別CSR APIの実装例題です。

    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class Main {
    
        public static void main(String[] args) {
            String clientId = "YOUR_CLIENT_ID";             // Application Client ID";
            String clientSecret = "YOUR_CLIENT_SECRET";     // Application Client Secret";
    
            try {
                String imgFile = "音声ファイルパス";
                File voiceFile = new File(imgFile);
    
                String language = "Kor";        // 言語コード ( Kor, Jpn, Eng, Chn )
                String apiURL = "https://naveropenapi.apigw.ntruss.com/recog/v1/stt?lang=" + language;
                URL url = new URL(apiURL);
    
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                conn.setUseCaches(false);
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setRequestProperty("Content-Type", "application/octet-stream");
                conn.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
                conn.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
    
                OutputStream outputStream = conn.getOutputStream();
                FileInputStream inputStream = new FileInputStream(voiceFile);
                byte[] buffer = new byte[4096];
                int bytesRead = -1;
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, bytesRead);
                }
                outputStream.flush();
                inputStream.close();
                BufferedReader br = null;
                int responseCode = conn.getResponseCode();
                if(responseCode == 200) { // 正常呼び出し
                    br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                } else {  // エラー発生
                    System.out.println("error!!!!!!! responseCode= " + responseCode);
                    br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                }
                String inputLine;
    
                if(br != null) {
                    StringBuffer response = new StringBuffer();
                    while ((inputLine = br.readLine()) != null) {
                        response.append(inputLine);
                    }
                    br.close();
                    System.out.println(response.toString());
                } else {
                    System.out.println("error !!!");
                }
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }
    
    <?php
    
    $curl = curl_init();
    $file_path = "音声ファイルパス";
    
    $lang = "Kor";  // 言語コード ( Kor, Jpn, Eng, Chn )
    $client_id = "YOUR_CLIENT_KEY";
    $client_secret = "YOUR_CLIENT_SECRET";
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => "https://naveropenapi.apigw.ntruss.com/recog/v1/stt?lang=".$lang,
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => file_get_contents($file_path),
      CURLOPT_HTTPHEADER => array(
        "Content-Type: application/octet-stream",
        "X-NCP-APIGW-API-KEY-ID: ".$client_id,
        "X-NCP-APIGW-API-KEY: ".$client_secret
      ),
    ));
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }
    
    ?>
    
    const fs = require('fs');
    const request = require('request');
    
    const clientId = 'YOUR_CLIENT_ID';
    const clientSecret = 'YOUR_CLIENT_SECRET';
    
    // language => 言語コード ( Kor, Jpn, Eng, Chn )
    function stt(language, filePath) {
        const url = `https://naveropenapi.apigw.ntruss.com/recog/v1/stt?lang=${language}`;
        const requestConfig = {
            url: url,
            method: 'POST',
            headers: {
                'Content-Type': 'application/octet-stream',
                'X-NCP-APIGW-API-KEY-ID': clientId,
                'X-NCP-APIGW-API-KEY': clientSecret
            },
            body: fs.createReadStream(filePath)
        };
    
        request(requestConfig, (err, response, body) => {
            if (err) {
                console.log(err);
                return;
            }
    
            console.log(response.statusCode);
            console.log(body);
        });
    }
    
    stt('Kor', '音声ファイルパス (ex: ./test.wav)');
    
    import sys
    import requests
    client_id = "YOUR_CLIENT_ID"
    client_secret = "YOUR_CLIENT_SECRET"
    lang = "Kor" # 言語コード ( Kor, Jpn, Eng, Chn )
    url = "https://naveropenapi.apigw.ntruss.com/recog/v1/stt?lang=" + lang
    data = open('音声ファイルパス', 'rb')
    headers = {
        "X-NCP-APIGW-API-KEY-ID": client_id,
        "X-NCP-APIGW-API-KEY": client_secret,
        "Content-Type": "application/octet-stream"
    }
    response = requests.post(url,  data=data, headers=headers)
    rescode = response.status_code
    if(rescode == 200):
        print (response.text)
    else:
        print("Error : " + response.text)
    
    using System;
    using System.Net;
    using System.Text;
    using System.IO;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    
    namespace NaverAPI_Guide
    {
        class APIExamSTT
        {
            static void Main(string[] args)
            {
                string FilePath = "YOUR_FILE_NAME";
                FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read);
                byte[] fileData = new byte[fs.Length];
                fs.Read(fileData, 0, fileData.Length);
                fs.Close();
    
                string lang = "Kor";    // 言語コード ( Kor, Jpn, Eng, Chn )
                string url = $"https://naveropenapi.apigw.ntruss.com/recog/v1/stt?lang={lang}";
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Headers.Add("X-NCP-APIGW-API-KEY-ID", "YOUR_CLIENT_ID");
                request.Headers.Add("X-NCP-APIGW-API-KEY", "YOUR_CLIENT_SECRET");
                request.Method = "POST";
                request.ContentType = "application/octet-stream";
                request.ContentLength = fileData.Length;
                using (Stream requestStream = request.GetRequestStream())
                {
                    requestStream.Write(fileData, 0, fileData.Length);
                    requestStream.Close();
                }
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                string text = reader.ReadToEnd();
                stream.Close();
                response.Close();
                reader.Close();
                Console.WriteLine(text);
            }
        }
    }
    

    エラーコード

    HttpStatusCodeErrorCodeErrorMessageDescription
    413STT000Request Entity Too Large許容する音声データの容量を超えました。(最大3MB )
    413STT001Exceed Sound Data length許容する音声データの長さを超えました。 ( 60秒 )
    400STT002Invalid Content Typeapplication/octet-stream以外のcontent-typeの場合に発生します。
    400STT003Empty Sound Data音声データが入力されてません。
    400STT004Empty Language言語パラメータが入力されてません。
    400STT005Invalid Language決まっている言語以外の言語値が入力されました。
    500STT006Failed to pre-processing音声認識の前処理中にエラーが発生しました。音声データが正常的なwav, mp3, flacであるかに対する確認が必要です。
    400STT007Too Short Sound Data音声データの長さが短すぎます。 (400ms以下)
    500STT998Failed to STT音声認識中にエラーが発生しました。速やかに対応しますのでお客様サポートまでお問い合わせください。
    500STT999Internal Server Error予期せぬエラーが発生しました。速やかに対応しますのでお客様サポートまでお問い合わせください。

    この記事は役に立ちましたか?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.