오늘은 음원을 text로 바꾸는 예제입니다.
음성을 받아서 음원을 생성하는 예제와 연결하면 음성을 text로 변환할 수 있습니다.
음원을 생성하는 예제는 아래에 첨부했습니다.
실행결과입니다.
사용한 음성파일은 ETRI 에서 제공해주는 음원을 사용했습니다.
해당 음원은 아래의 링크를 클릭하셔서 다운받으시면 됩니다
https://aiopen.etri.re.kr/demo/Recognition
ETRI API를 사용하기 전에 키 발급을 먼저 하셔야 합니다.
아래의 링크를 들어가시면 발급 신청 방법이 작성되어있습니다.
https://aiopen.etri.re.kr/servicePrepare
다음은 예제코드에 대한 내용입니다.
[ 간단 요약 ]
서버 코드 : 클라이언트에게 음성파일을 받아서 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
'Nodejs' 카테고리의 다른 글
[Nodejs] express js에서 AWS S3스토리지에 저장된 파일 존재하는지 확인하기 (0) | 2023.07.27 |
---|---|
[node.js]URL path 방식으로 파라미터를 전달하는 라우팅 기법 (0) | 2023.06.27 |
[Node.js] express로 페이지간 텍스트 주고받기 (0) | 2023.05.18 |
[Nodejs] Multer를 이용해서 단일 파일 업로드하기 (0) | 2023.05.09 |
[node.js] express 라우팅 기본 예제 (2) | 2023.04.30 |