졜근 λ§Žμ€ μŒμ„±μΈμ‹ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜λ“€μ΄ 개발되고 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μŒμ„±μΈμ‹ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 인식λ₯ μ€ μ€‘μš”ν•œ μ²™λ„μž…λ‹ˆλ‹€. Watson STT의 경우 μ΄λŸ¬ν•œ 인식λ₯ μ„ ν–₯상 μ‹œν‚¬ 수 μžˆλŠ” νŠΈλ ˆμ΄λ‹ 방법을 μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ³Έ μ‹œλ¦¬μ¦ˆμ—μ„œλŠ” NodeJSλ₯Ό μ΄μš©ν•˜μ—¬ Watson STTλ₯Ό μ΄μš©ν•œ μŒμ„± 인식 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“œλŠ” 방법을 μ„€λͺ…ν•˜κ³ , Watson STT의 μŒμ„± μΈμ‹μœ¨μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•œ νŠΈλ ˆμ΄λ‹ 방법에 λŒ€ν•˜μ—¬ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. λ³Έ μ‹œλ¦¬μ¦ˆλŠ” 총 3개둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

각 μ‹œλ¦¬μ¦ˆμ˜ μ†ŒμŠ€λŠ” https://github.com/blbird/STT μ—μ„œ ν™•μΈν•˜μ‹€μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

Watson STT μ‚¬μš© μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ œμž‘

μš°μ„  μ‹œλ¦¬μ¦ˆμ˜ 첫번째둜 NodeJSλ₯Ό μ΄μš©ν•œ Watson STT μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ œμž‘ν•΄ 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. 이 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 마이크λ₯Ό 톡해 μž…λ ₯ 받은 μŒμ„± 데이터λ₯Ό Watson STTλ₯Ό μ΄μš©ν•˜μ—¬ μΈμ‹μ‹œν‚¨ ν›„, μΈμ‹λœ ν…μŠ€νŠΈλ₯Ό 화면에 좜λ ₯ν•˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€.

1. Watson STT μ„œλΉ„μŠ€ 생성
  • IBM cloudμ—μ„œ Watson STT μ„œλΉ„μŠ€λ₯Ό 생성 ν•©λ‹ˆλ‹€.

2. Watson STT μ‚¬μš©μ„ μœ„ν•œ credential 생성
  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©ν•  credential 정보λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 1)λ²ˆμ—μ„œ λ§Œλ“€μ–΄μ§„ μ„œλΉ„μŠ€μ—μ„œ Service Credentials λ©”λ‰΄μ˜ New Credential λ²„νŠΌμ„ 톡해 μƒˆλ‘œμš΄ credential을 μƒμ„±ν•©λ‹ˆλ‹€.

3. config.js λ³€κ²½
  • 2) μ—μ„œ μƒμ„±ν•œ credential 정보λ₯Ό config.js 파일의 module.exports.credential 뢀뢄에 λ°˜μ˜μ„ ν•©λ‹ˆλ‹€.
  • λ˜ν•œ μ•žμœΌλ‘œ STT νŠΈλ ˆμ΄λ‹μ— μ‚¬μš©ν•  customization model name 및 base model 등을 μ§€μ •ν•©λ‹ˆλ‹€.
4. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ (μ†ŒμŠ€ stt_stream.js)
  • λ³Έ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ micλ₯Ό 톡해 μž…λ ₯ 받은 μŒμ„± 데이터λ₯Ό Watson STTλ₯Ό μ΄μš©ν•˜μ—¬ ν…μŠ€νŠΈλ₯Ό μ–»λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€.
    μš°μ„  Watson STTλ₯Ό μ‚¬μš©ν•˜λŠ” NodeJS μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” package.json의 dependencies에 β€œwatson-developer-cloud” pacakgeλ₯Ό μΆ”κ°€ν•˜μ…”μ•Ό ν•©λ‹ˆλ‹€. 그리고, λ³Έ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” mic의 μž…λ ₯을 λ°›κΈ° μœ„ν•΄ β€œmic” λͺ¨λ“ˆμ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.
  • STT λͺ¨λ“ˆμ˜ μ‚¬μš©μ€ μ•„λž˜ 처럼 μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    const SpeechToTextV1 = require('watson-developer-cloud/speech-to-text/v1');
    const speechToText = new SpeechToTextV1(credential);
  • startRecording() ν•¨μˆ˜λŠ” newMicDevice() ν•¨μˆ˜λ₯Ό 톡해 mic λͺ¨λ“ˆ μ΄ˆκΈ°ν™” 및 μž…λ ₯ 받은 μŒμ„± μŠ€νŠΈλ¦Όμ— λŒ€ν•œ eventλ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€. λ˜ν•œ STT instance 생성 및 μƒμ„±λœ STT instance에 μŒμ„± 데이터λ₯Ό μ „λ‹¬ν•˜κΈ° μœ„ν•΄ createRecognizeStream() ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μŒμ„± 데이터λ₯Ό μž…λ ₯ν•˜κΈ° μœ„ν•œ μŠ€νŠΈλ¦Όμ„ μƒμ„±ν•˜κ³ , μž…λ ₯ 받은 μŒμ„± μŠ€νŠΈλ¦Όμ„ 이 μƒμ„±λœ μŠ€νŠΈλ¦Όμ— μ „λ‹¬ν•©λ‹ˆλ‹€. λ§Œμ•½ νŠΉμ • νŒŒμΌμ„ μ΄μš©ν•˜μ—¬ STTλ₯Ό μ‚¬μš©ν•˜μ‹œλ €λ©΄ recognize() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€. createRecognizeStream()에 μ‚¬μš©λ˜λŠ” μ˜΅μ…˜μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
    • content_type : μŒμ„± 데이터 포맷. (ex. audio/wav, audio/mp3 λ“±). λ³Έ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” audio/l16을 μ‚¬μš©ν•©λ‹ˆλ‹€. 이 포맷의 경우 μƒ˜ν”Œλ§ rate(rate)κ³Ό μ±„λ„μˆ˜(channels)에 λŒ€ν•œ μ˜΅μ…˜μ΄ λͺ…μ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
    • model : μ‚¬μš©ν•  베이슀 λͺ¨λΈ id
    • customization_id : λ‘λ²ˆμ§Έ λ¬Έμ„œμ— λͺ…μ‹œλœ ν…μŠ€νŠΈ νŠΈλ ˆμ΄λ‹ ν•œ customization model id
    • acoustic_customization_id : μ„Έλ²ˆμ§Έ λ¬Έμ„œμ—μ„œ λͺ…μ‹œλœ μŒμ„± 데이터λ₯Ό νŠΈλ ˆμ΄λ‹ν•œ acoustic customization model id
    • smart_formatting : λ‚ μ§œ, μ‹œκ°„, 숫자 λ“±μ˜ 데이터λ₯Ό 읽기 μ’‹κ²Œ λ°”κΏ” 쀌.

    이외에 μ—¬λŸ¬κ°€μ§€ μ˜΅μ…˜μ΄ μžˆμœΌλ‹ˆ, λ‹€λ₯Έ μ˜΅μ…˜λ“€μ— λŒ€ν•΄μ„œλŠ” λ‹€μŒ 링크λ₯Ό ν™•μΈν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.
    https://www.ibm.com/watson/developercloud/speech-to-text/api/v1/#recognize_audio_websockets

  • STT에 μ˜ν•΄ μΈμ‹λœ ν…μŠ€νŠΈλŠ” μ•„λž˜μ™€ 같이 STT μž…λ ₯ stream의 data 이벀트λ₯Ό 톡해 ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

    recognizeStream.on('data', function(event) {
    let resultTranscript = event.toString();
    console.log('transcript : ' + resultTranscript);
    });
5. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

– npm install
– node stt_stream

ν† λ‘  μ°Έκ°€

이메일은 κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ μž…λ ₯창은 * 둜 ν‘œμ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.