본문 바로가기
Nodejs

[Node.js] ETRI OpenAPI의 음성인식 api 사용해보기 (STT)

by teamnova 2023. 5. 22.
728x90

오늘은 음원을 text로 바꾸는 예제입니다.

음성을 받아서 음원을 생성하는 예제와 연결하면 음성을 text로 변환할 수 있습니다.

음원을 생성하는 예제는 아래에 첨부했습니다.

 

실행결과입니다.

 

사용한 음성파일은 ETRI 에서 제공해주는 음원을 사용했습니다.

해당 음원은 아래의 링크를 클릭하셔서 다운받으시면 됩니다

https://aiopen.etri.re.kr/demo/Recognition

 

AI API/DATA

 

aiopen.etri.re.kr

 

 

ETRI API를 사용하기 전에 키 발급을 먼저 하셔야 합니다. 

아래의 링크를 들어가시면 발급 신청 방법이 작성되어있습니다.

https://aiopen.etri.re.kr/servicePrepare

 

AI API/DATA

오픈API서비스 이용방법 키 발급 신청 1. “AI API·DATA” 홈페이지의 API Key 발급 및 확인 페이지로 이동합니다. 2. API Key 발급 및 확인 페이지의 키 발급 신청하기 버튼을 클릭합니다. 3. 이메일 인증

aiopen.etri.re.kr

 

 

다음은 예제코드에 대한 내용입니다.

 

 

[ 간단 요약 ]

서버 코드 : 클라이언트에게 음성파일을 받아서 ETRI Open API 서버에 음성 파일을 Base64로 Encoding 하여 HTTP 통신으로 전달한다.

이후 ETRI Open API 서버가 음성인식 결과를 응답메세지에 넣어서 반환해주면, 그 결과를 클라이언트에게 전송하고 파일을 삭제한다.

클라이언트 코드 : 서버에게 샘플링 주파수(sampling rate 또는 sampling frequency) 16kHz로 녹음된 음성 파일을 전송한다.

이후 서버가 보낸 Response를 받으면 그 결과를 화면에 출력한다.

 

 

먼저 node.js에 아래의 모듈 설치해주세요.

$ npm install multer
$ npm install request

 

* 전체코드입니다!

(서버코드) index.js 코드입니다.

const express = require("express");
const http = require("http");
const app = express();
const server = http.Server(app);
var fs = require('fs');
var openApiURL = 'http://aiopen.etri.re.kr:8000/WiseASR/Recognition';
var accessKey = '발급 키';
var languageCode = 'korean';

var request = require('request');
var multer = require('multer');
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json())

// 저장경로 설정 : 현재 디렉토리.
var upload = multer({ dest: __dirname })


const PORT = 5000;

server.listen(PORT, () => {

    console.log(`Server running on http://localhost:5000`);

    app.get('/', (req, res) => {
    // 현재 디렉토리에 있는 test.html 파일을 클라이언트에게 보낸다.
        res.sendFile('test.html', { root: (__dirname) });
    });


    // 클라이언트에게 음성파일을 받아서
    // 단일 파일 업로드 : upload.single('uploaded_file')의 매개변수(uploaded_file)는 form을 통해 전송되는 파일의 name속성을 가져야 함.
    app.post('/user', upload.single('uploaded_file'), function (req, res){

        var audioFilePath = req.file.path;

        // 파일 가져오기. (동기)
        var audioData = fs.readFileSync(audioFilePath);   

        // 음성 파일을 Base64로 Encoding 하여
        var requestJson = {
                 'argument': {
                    // 언어 : 한국어로 설정.
                 'language_code': languageCode,
                 // 음성 파일을 Base64로 Encoding.
                'audio': audioData.toString('base64')
            }
        };

        var options = {
         url: openApiURL,
         body: JSON.stringify(requestJson),
            headers: {'Content-Type':'application/json','Authorization':accessKey}
        };

        // ETRI Open API 서버에 HTTP 통신으로 전달한다.
        request.post(options, function (error, response, body) {


            //  ETRI Open API 서버가 음성인식 결과를 응답메세지에 넣어서 반환해주면, 
            if(!error){

                // 그 결과를 클라이언트에게 전송하고 
                let json = JSON.parse(body);
                res.status(200).send(json.return_object.recognized);
    
                // 파일을 삭제한다.
                fs.unlink(req.file.path, function(err){
                    if(err) {
                    console.log("Error : ", err)
                    }
                })
            }
            

        });
    });

})

 

 

(클라이언트 코드) test.html 코드입니다.

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

</head>
<body>

<form action="/user" enctype="multipart/form-data" method="post">
  <div class="form-group">
    <input type="file" class="form-control-file" name="uploaded_file">
    <input type="text" class="form-control" placeholder="Number of speakers" name="nspeakers">
    <input type="submit" value="Get me the stats!" class="btn btn-default">
  </div>
</form>

</body>
</html>

 

 

아래의 게시글을 들어가시면 음원 생성하는 예제가 있습니다.

2023.05.12 - [안드로이드 자바] - [Java][Android] 내 음성을 raw pcm data format 음원에 저장하기.

2023.05.26 - [JavaScript] - [Javascript] 내 음성을 raw pcm data format 음원에 저장하기.

 

 

참고링크

https://aiopen.etri.re.kr/guide/Recognition

 

AI API/DATA

JSON parsing을 위해 Gson 라이브러리를 사용하여 제공하고 있습니다. Gson 라이브러리에 대한 자세한 설명은 https://github.com/google/gson 에서 확인 하실 수 있습니다. import java.io.DataOutputStream; import java.i

aiopen.etri.re.kr