bluejoyq

Merge branch 'changshin' into 'master'

Changshin

Add machineRead.js
Add STT.js

See merge request !8
const apiRequest = require('./apiRequest');
const isBase64 = require('is-base64');
//const Lame = require("node-lame").Lame;
const fs = require("fs");
//const Mp32Wav = require('mp3-to-wav')
/**
* @param {Object} clientData 클라이언트에서 보낸 데이터
* @param {String} clientData.audio base64로 인코딩된 음성 데이터 16hz로 샘플링 되야함
* @returns {text:String} 음성을 인식한 결과
* @description 음성 인식을 요청해 결과를 내놓는 함수이다.
*/
const apiReq = async ( clientData ) => {
fs.writeFileSync('./audio/audio_input.mp3', Buffer.from(clientData.audio.replace('data:audio/mp3; codecs=opus;base64,', ''), 'base64'));
const mp32Wav = new Mp32Wav('./audio/audio_input.mp3')
mp32Wav.saveForWav(Buffer.from(clientData.audio.replace('data:audio/mp3; codecs=opus;base64,', ''), 'base64'),'./audio/audio_input.wav',_,16000,1)
//let audiodata = fs.readFileSync('./audio/audio_input.mp3').toString('base64')
console.log(Buffer(clientData.audio,'base64'))
let getSTT = {};
try {
getSTT = await apiRequest.ETRI( "WiseASR/Recognition", { "language_code" : "korean", "audio" : audiodata } );
}
catch ( err ) {
throw new Error ( err.message );
}
return { "text" : getSTT.return_object.recognized };
}
/**
* @param req request
* @param req.bdoy.data req.body.data.audio에 요청하는 데이터가 들어있어야한다
* @description 오디로를 텍스트로 바꿔준다.
*/
const STT = async ( req, res ) => {
let clientData,
voiceTemp;
try {
clientData = req.body.data
if( !clientData.audio.length ) {
throw new Error( "client audio empty" );
}
else if( !isBase64( clientData.audio ) ) {
throw new Error( "Type error : audio type should be base64" );
}
}
catch( err ) {
console.log( err );
res.json( { "return_code" : -1, "error_code" : err.message } );
res.status( 403 );
return false;
}
try {
voiceTemp = await apiReq( clientData );
}
catch( err ) {
console.log( err );
res.json( { "return_code" : -1, "error_code" : err.message } );
res.status( 502 );
return false;
}
res.send( { "return_code" : 0, "return_data" : voiceTemp } );
res.status( 200 );
};
module.exports=STT;
\ No newline at end of file
const apiRequest = require('./apiRequest');
/**
* @param {{url:string,title:string,passage:string}[]} searchResults 검색 결과 정리한것.
* @param {string} keywordText 기계독해 시킬 질문의 텍스트
* @returns {{url:string,title:string,passage:string,confidence:number}[]} searchResults의 각 object에 confidence 속성을 추가해 돌려준다.
* @description 기계독해를 사용하는 함수
*/
const machineRead = async ( searchResults, keywordText ) => {
let keyNum = 6,
ResultArray = [],
divideSearchResults = [];
for( let i = 0; i <= searchResults.length; i += keyNum ) {
divideSearchResults.push( searchResults.slice( i, i + keyNum ) );
}
for( let divideSearchResult of divideSearchResults ) {
try{
await apiRequest.multiETRI( divideSearchResult, keywordText );
}
catch ( err ) {
throw new Error( err.message );
}
ResultArray = ResultArray.concat( divideSearchResult );
}
searchResults = ResultArray;
return searchResults;
}
module.exports = machineRead;