6.음성인식 모듈 사용하기

Edit

음성인식과 관련된 기능을 처리하는 모듈입니다. 아래와 같은 기능을 처리할 수 있습니다.

예를 들어 "스타벅스에서 아메리카노 주문해줘"라는 명령을 내리는 경우 이를 처리하기 위해서는 사용자의 의도가 "상품을 주문한다"라는 것과 사용자가 지정한 장소, 주문 대상 등을 알아야 합니다. Intent 분석을 통해 사용자의 의도를 확인하고, Entity 분석을 통해 필요한 데이터 정보를 확인할 수 있습니다.

아래 가이드에서는 음성인식 처리를 위한 환경 설정과 간단한 예제를 살펴봅니다. 음성인식 모듈은 윈도우 운영체제뿐 아니라 안드로이드, iOS 운영체제를 지원하지만, 가이드에서는 넥사크로 스튜디오에서 윈도우 앱을 테스트하는 부분까지만 살펴봅니다.

6.1개발 리소스 설정

음성인식 모듈이 동작하기 위한 분석 데이터를 설정하는 작업이 필요합니다. 해당 설정은 각 솔루션 설정을 따릅니다.

음성인식 모듈에서는 LUIS V2 버전 기준으로 테스트했습니다. V3 버전에서 작업하는 경우 일부 기능이 동작하지 않을 수 있습니다.

6.1.1앱 생성하기

기존 Azure 계정을 사용하거나 체험 계정을 만들어 사용할 수 있습니다. 여기에서는 Intent 분석을 위한 앱을 만들고 배포하는 단계만 살펴봅니다.

1

아래 주소로 접속합니다.

2

[Create new app] 링크를 클릭합니다.

3

앱 이름과 언어를 설정합니다.

6.1.2Intent 설정하기

1

상단 [BUILD] 탭을 클릭해서 Intents 항목으로 이동합니다.

2

[Create new intent] 링크를 클릭하고 Intent 명을 "Order"로 설정합니다.

3

학습을 위해 "Order"와 관련된 표현을 4-5개 정도 입력합니다.

서비스 가이드 문서에서는 정확한 분석을 위해 다양한 길이와 시제, 형식으로 최소 15개 정도의 표현을 입력하기를 권장합니다.

4

다시 Intents 항목으로 이동해 [Create new intent] 링크를 클릭하고 Intent 명을 "Cancel"로 설정합니다.

5

학습을 위해 "Cancel"과 관련된 표현을 2개 정도 입력합니다.

  • Can I cancel a coffee?

  • I want to cancel the hot coffee.

6

[Train] 버튼을 클릭하고 학습을 시작합니다.

7

학습이 끝나면 [Test] 버튼을 클릭하고 문장을 입력한 후 적절한 Intent가 정상적으로 추출되는지 확인합니다.

설정한 Intent 중에 높은 점수를 받은 Intent를 보여줍니다. 의도와 다르게 결과가 나오는 경우 재학습을 통해서 결과를 보정할 수 있습니다.

6.1.3Entity 설정하기

1

Entities 항목으로 이동해서 [Create new entity] 링크를 클릭하고 Entity 명을 "Size", "Menu"로 설정합니다.

2

Intents 항목으로 이동해서 기존에 등록한 문장의 단어를 클릭하면 앞에서 등록한 Entity 항목을 선택할 수 있습니다.

Entity 항목을 선택하면 아래와 같이 문장 내에 특정 단어를 Entity 항목으로 대체해서 표기합니다.

3

[Train] 버튼을 클릭하고 학습을 시작합니다.

4

학습이 끝나면 [Test] 버튼을 클릭하고 문장을 입력한 후 적절한 Intent가 정상적으로 추출되는지 확인합니다. [Inspect] 링크를 클릭하면 Entity 항목이 연결되는 것도 확인할 수 있습니다.

6.1.4공개 URL 확인하기

1

[Publish] 버튼을 클릭하면 쿼리문을 생성합니다. 쿼리문은 모듈 설치 후 속성값으로 사용합니다.

6.2모듈(Device Adaptors) 설치하기

음성인식 기능은 별도 모듈로 배포되며 설치 후 사용할 수 있습니다.

모듈 설치 파일(VoiceRecognition.xmodule)은 제품과 함께 기본 제공되지 않습니다.

별도 요청에 의해 지원하는 기능입니다.

1

넥사크로 스튜디오에서 메뉴[File > Install Module]을 선택합니다.

2

Module Package 항목을 선택하고 [Next] 버튼을 클릭합니다.

3

미리 내려받은 파일(VoiceRecognition.xmodule)을 선택하고 [Next] 버튼을 클릭합니다.

4

설치할 모듈 정보를 확인합니다. 기본 속성값은 설치 후에도 설정할 수 있습니다.

Composite Component 모듈의 경우에는 width, height, prefixid 항목값을 설정하지만, Device Adaptors 모듈은 필요한 속성값을 설치 시 설정할 수 있습니다.

5

배포 시 업데이트 정보를 확인합니다.

모듈 설치 시 기본 설정이며 TypeDefinition에서 수정할 수 있습니다.

6

[Install] 버튼을 클릭하면 설치가 완료되고 프로젝트를 재시작합니다.

7

설치가 완료된 후 Project Explorer에서 TypeDefinition 항목 아래 DeviceAdaptors 항목을 더블 클릭하면 설치된 모듈 정보를 확인할 수 있습니다.

6.3개발 환경 설정하기

넥사크로 스튜디오에서 모듈 설치 후 기능 동작을 확인하기 위해서는 아래 작업이 필요합니다.

6.3.1Microsoft Cognitive Services 관련 파일 확인하기

모듈 설치 후 프로젝트 폴더 아래 _extlib\VoiceRecognition\Libraries\_windows_ 폴더에 3개의 DLL 파일이 생성되어 있습니다.

17.1.2.200 미만 버전을 사용하는 경우에는 해당 파일 중 MIcrosoft~ 로 시작하는 2개의 파일을 넥사크로 스튜디오 설치 폴더로 복사해주어야 합니다. 앱 배포 시에는 앱 실행 경로에 복사가 되지만, 넥사크로 스튜디오에서 앱 테스트를 위해 임시로 파일을 복사합니다. 테스트가 끝나면 파일을 삭제합니다.

17.1.2.200 이상 버전을 사용하는 경우에는 넥사크로 스튜디오 설치 폴더로 파일을 복사할 필요가 없습니다.

17.1.2.200 미만 버전에서 넥사크로 스튜디오에서 실행 시 voicerecognition.dll 파일의 경로를 찾지 못하는 경우에는 해당 파일도 넥사크로 스튜디오 설치 폴더로 복사하고 typedefinition.xml 파일에서 targetpath 설정값을 "./"로 수정합니다.

6.3.2속성값 설정하기

속성값은 모듈 설치 시에 설정하거나 Project Explorer에서 TypeDefinition 항목 아래 DeviceAdaptors 항목을 더블 클릭해서 수정할 수 있습니다.

속성

설명

entityanalyzersvcurl

LUIS Resource 항목에서 Example Query 값을 확인하고 입력합니다.

intentanalyzersvcurl

LUIS Resource 항목에서 Example Query 값을 확인하고 입력합니다.

servicelanguage

음성 출력 시 사용할 언어를 설정합니다.

serviceregion

음성 출력 시 사용할 Region 정보를 설정합니다.

subscriptionkey

speech services 키값을 확인하고 입력합니다.

음성 서비스 체험판 키는 아래 링크에서 확인할 수 있습니다.

https://azure.microsoft.com/en-us/try/cognitive-services/my-apis/?api=speech-services

6.4기능 구현

텍스트로 입력한 값을 음성으로 출력하거나 마이크를 통해 입력된 음성을 인식해 사용자의 의도를 파악합니다.

6.4.1음성 출력하기

speak 메소드를 사용해 음성을 출력합니다. 테스트 계정은 영어 출력만 지원합니다.

this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    var vc= nexacro.getEnvironment().getDeviceAdaptor("VoiceRecognition");
    if (vc)    
    {
        vc.speak("Ordering a Black Coffee Drink");
    }
};

Form 오브젝트의 onextendedcommand 이벤트 함수에서 정상적으로 음성 출력 요청이 처리되었는지 확인합니다. 음성 출력에 문제가 없다면 "onspeakcompleted" 코드값이 eventtype 속성값으로 처리됩니다.

this.Form_Work_onextendedcommand = function(obj:nexacro.Form,e:nexacro.ExtendedCommandEventInfo)
{
    trace(e.eventtype);
};

6.4.2음성 인식 처리하기

recognize 메소드를 사용해 음성을 인식하고 사용자의 의도(Intent)와 대상(Entity)를 분석하고 반환합니다. 메소드를 실행하면 비프음이 울리고 음성 입력 끝난 것으로 처리되면 다시 한 번 비프음이 울립니다.

this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    var vc= nexacro.getEnvironment().getDeviceAdaptor("VoiceRecognition");
    if (vc)    
    {
        vc.recognize();
    }
};

예를 들어 "could i have a medium coffee to go"라는 음성을 입력한 경우에는 아래와 같이 출력됩니다. 반환되는 값에 따라 이후 처리할 동작을 지정할 수 있습니다.

> Order,could i have a medium coffee to go
> onintent
> coffee,medium
> onentity
this.Form_Work_onextendedcommand = function(obj:nexacro.Form,e:nexacro.ExtendedCommandEventInfo)
{
    trace(e.data);
    trace(e.eventtype);
};