๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ionic

Ionic Speech Recognition

by frontChoi 2022. 1. 1.
๋ฐ˜์‘ํ˜•

๐Ÿšถ‍โ™‚๏ธSpeech Recognition

Speech Recognition์ด๋ž€ ์‚ฌ๋žŒ์ด ๋งํ•˜๋Š” ์Œ์„ฑ์–ธ์–ด๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ํ•ด์„ํ•ด ๋‚ด์šฉ์„ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋กœ ์ „ํ™˜ํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค๊ณ 

์œ„ํ‚ค๋ฐฑ๊ณผ์— ์ ํ˜€์žˆ๋‹ค.

 

์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋‚ด๊ฐ€ ๋งํ•œ ์Œ์„ฑ์„ ๋ฐ์ดํ„ฐ๋กœ ๋‚ด ๋ณด๋‚ด์ฃผ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ ๊ฒƒ ๊ฐ™๋‹ค.

speech recognition

 

๐Ÿ˜›Ionic Speech Recognition Plugin ์„ค์น˜

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌ๊ธ€ Speech Recognition๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” Plugin ์„ค์น˜๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๋‚˜๋Š” ํ˜„์žฌ Ionic + Cordova๋กœ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

$ ionic cordova plugin add cordova-plugin-speechrecognition 
$ npm install @awesome-cordova-plugins/speech-recognition

์œ„ ์„ค์น˜๋ฅผ ํ•˜๊ณ  ๋‚˜์„œ ํ˜„์žฌ ๊ธฐ์ค€์œผ๋กœ config.xml์— ์•„๋ž˜ ๋ฌธ๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

<config-file parent="/manifest" target="AndroidManifest.xml" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
  <queries>
    <intent>
    	<action android:name="android.speech.RecognitionService" />
    </intent>
  </queries>
</config-file>

Speech Recognition

 

๐ŸฅIonic ์ ์šฉํ•˜๊ธฐ

์‚ฌ์šฉํ•œ ๋ณ€์ˆ˜

  • isRecording : ๋…น์Œ์ƒํƒœ ํ‘œ์‹œ
  • options : speech Recognition ์˜ต์…˜

ํ˜„์žฌ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์˜ต์…˜์€ 3๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

  • language : ์Œ์„ฑ์ธ์‹์„ ์•Œ์•„๋“ค์„ ์–ธ์–ด
  • showPopup : ํŒ์—…์„ค์ •์—ฌ๋ถ€ true๋ฅผ ํ•˜๋ฉด ๊ตฌ๊ธ€ speech recongnition์ด ๋œฌ๋‹ค
  • showPartial : ์‹ค์‹œ๊ฐ„์œผ๋กœ ์Œ์„ฑ์„ ๋ฐ›์•„๋“ค์ผ์ง€ ์„ ํƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. false๋กœ ํ•˜๋ฉด ํ•œ ๋ฌธ์žฅ์„ ๋งํ•˜๊ณ  ๋‚˜์„œ, ๊ฒฐ๊ณผ๋ฅผ ์ค€๋‹ค.

์‚ฌ์šฉํ•œ ํ•จ์ˆ˜ ๊ธฐ๋Šฅ

  • recording : ๋…น์Œ์„ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ฉฐ, subscribe์—์„œ ์„ฑ๊ณตํ•˜๋ฉด matches๋ฅผ ๋ฐ›๊ณ , ์‹คํŒจํ•˜๋ฉด error๋ฅผ ๋ฐ›๋Š”๋‹ค.
  • stopRecording : ๋…น์Œ์„ ์ค‘์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
import { Component, ChangeDetectorRef } from '@angular/core';
import { SpeechRecognition } from '@awesome-cordova-plugins/speech-recognition/ngx';
@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {
  isRecording: boolean = false;
  options = {
    language: 'en-US',
    showPopup: false,
    showPartial: true
  }
  constructor(private speechRecognition: SpeechRecognition, private cd: ChangeDetectorRef) {}

  recording() {
    this.isRecording = true;

    this.speechRecognition.startListening(this.options)
      .subscribe(
        (matches) => {
          console.log(`success : `, matches);
          this.isRecording = false;
          this.cd.detectChanges();
        },
        (error) => {
          console.error(`recording : `, error);
          this.isRecording = false;
          this.cd.detectChanges();
        })
  }

  stopRecording() {
    this.isRecording = false;
    this.speechRecognition.stopListening().then((value) => {
      console.log('value : ' , value);
    })
  }
}

์•„๋ž˜๋Š” HTML ์ด๋‹ค

isRecording์ด true์ด๋ฉด ๋ถ‰์€์ƒ‰์œผ๋กœ, isRecording์ด false์ด๋ฉด ํ‘ธ๋ฅธ์ƒ‰์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

<ion-header [translucent]="true">
  <ion-toolbar [color]="isRecording ? 'danger' : 'primary'">
    <ion-title>
      Blank
    </ion-title>
  </ion-toolbar>
</ion-header>

<ion-content>
  <ion-button expand="block" (click)="recording()">๋…น์Œ</ion-button>
  <ion-button expand="block" (click)="stopRecording()">๋…น์Œ์ค‘์ง€</ion-button>
</ion-content>

 

๐Ÿค” ์ ์šฉ ๊ฒฐ๊ณผ

 

์•„๋ž˜๋Š” ๋…น์Œ์„ ํ•˜๊ธฐ์ „ ์‚ฌ์ง„์ด๋‹ค.

๋…น์Œ์ „

๋…น์Œ์ค‘์ผ๋•Œ๋Š” ๋ถ‰์€์ƒ‰ ํ‘œ์‹œ๋ฅผ ํ•˜์˜€๋‹ค.

๋…น์Œ์ค‘

 

๊ทธ๋ฆฌ๊ณ  ๋…น์Œ๊ฒฐ๊ณผ๋ฅผ ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๋…น์Œ๊ฒฐ๊ณผ

์œ„ ์‚ฌ์ง„ ์ฒ˜๋Ÿผ success์— ๋‚˜์˜จ ๊ฒƒ์ด ๋‚ด๊ฐ€ ๋งํ•œ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค.

 

๐Ÿ›บ ํ›„๊ธฐ

ํšŒ์‚ฌ์—์„œ ์ ์šฉํ•œ ๊ฒƒ์€ ์ด๊ฒƒ๋ณด๋‹ค๋Š” ๋ณต์žกํ•˜๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ์–ผ๋งˆ๋™์•ˆ ๋งํ•˜๋Š”์ง€๋ฅผ ํ•ด์•ผ ํ•˜๊ธฐ๋•Œ๋ฌธ์— timer๊ธฐ๋Šฅ๋„ ํ•„์š”ํ•˜๋ฉฐ , ํ•˜๊ณ ๋‚˜์„œ ๋‚˜์˜ ๋ฐœ์Œ ์œ ์‚ฌ๋„์˜ ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋„ ํ•„์š”ํ•˜๋‹ค.

๋‹ค์Œ์œผ๋กœ๋Š” timer๋ฅผ ์ ์šฉํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€