산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Windows 10 IoT Core :음성 제어 로봇

스토리

초기 컴퓨터에서는 펀치 카드, 트랙볼, 라이트건, 키보드, 심지어 터치 스크린을 통해 컴퓨터와의 상호 작용이 이루어졌습니다. 이러한 모든 장치를 작동하려면 일종의 물리적 접촉이 필요합니다.

10년이 지나면서 새로운 기술은 이전 기술보다 향상됩니다. 무선 입력 장치는 깨끗하고 덜 어수선한 책상을 제공하기 때문에 인기를 얻고 있습니다. 현재 소프트웨어와 하드웨어가 향상되면서 시각 및 음성 입력과 같은 새로운 종류의 입력이 가능합니다.

이 문서는 Windows 10 IoT Core에서 제공되는 음성 인식 기술을 배우는 데 도움이 됩니다. 주제의 끝에서는 음성 인식 애플리케이션을 실행하는 Windows 10 IoT Core 및 Raspberry Pi 2를 사용하여 로봇을 생성합니다. 이 음성 인식 응용 프로그램은 음성에 의한 사용자 상호 작용을 기반으로 로봇이 다양한 이동 작업(예:앞으로 이동, 회전, 정지 등)을 수행할 수 있도록 합니다.

Windows 10 IoT Core가 처음이신가요? 또는 초보자? 이 링크를 먼저 참조하세요.

이 기사는 2016년 3월 30일에 업데이트되었습니다.

음성 인식이란 무엇입니까?

한 줄에서 음성 인식은 음성 단어를 가능한 동등한 텍스트로 번역하는 것을 의미합니다. 음성 인식은 신호 처리와 음성 디코더의 두 가지 주요 구성요소로 나눌 수 있습니다. Microsoft가 이미 이에 대한 솔루션을 개발했기 때문에 복잡성에 신경 쓸 필요가 없습니다. 우리는 그들의 Speech 라이브러리를 사용하기만 하면 됩니다.

1단계

음성 인식 시작하기

기본 아이디어부터 시작하겠습니다.

  • 음성 인식 문법(SRGS 문법) 만들기
  • 음성 인식기 개체 초기화 및 문법 로드(SpeechRecognizer)
  • 음성 인식기 이벤트 등록 및 핸들러 생성

음성 인식 문법 만들기

음성 인식을 시작하기 전에 유니버설 Windows 앱을 프로그래밍하여 언어나 명령을 이해하는 방법을 이해해야 합니다. 그러려면 음성 인식 문법을 만들어야 합니다. 음성 인식 문법은 유니버설 Windows 앱용 SRGS 문법을 사용하여 만들 수 있습니다.

  • XML을 사용하여 음성 인식 문법에 대한 W3C 표준인 SRGS(Speech Recognition Grammar Specification) 버전 1.0을 준수하는 문법 문서를 만듭니다.

참고:다른 가능한 방법은 .Net Framework에서 사용할 수 있지만 이 문서를 작성할 당시 UWP에서는 지원되지 않았습니다. 다음은 다음과 같습니다.

  • System.Speech.Recognition 네임스페이스에서 GrammarBuilder 및 Choices 클래스의 구성원을 사용하여 프로그래밍 방식으로 문법을 작성합니다.
  • System.Speech.Recognition.SrgsGrammar 네임스페이스에서 클래스의 생성자와 메서드를 사용하여 SRGS 호환 문법을 프로그래밍 방식으로 생성합니다.

XML 문법부터 시작하겠습니다. 문법 파일 생성을 시작하기 전에 사용자가 애플리케이션과 상호작용하는 방식을 구상하고 정의해야 합니다. 이 프로젝트의 맥락에서 사용자는 로봇이 어느 방향으로 움직이든 멈추고 장애물 감지를 작동/해제하도록 명령합니다. 다음과 같이 음성 어휘 목록을 만들 수 있습니다.

  • 앞으로 이동
  • 역방향으로 이동
  • 우회전
  • 좌회전
  • 중지
  • 장애물 감지 사용
  • 장애물 감지 해제

이 어휘를 위해서는 XML 문법을 설계해야 합니다. SRGS v1의 몇 가지 기본 규칙만 따르면 됩니다.

SRGS 문법

SRGS 문법을 생성하려면 다음과 같은 몇 가지 기본 규칙을 따라야 합니다.

  • 루트 요소는 문법적이어야 합니다.
  • 속성 문법의 버전, 언어 및 XML 네임스페이스가 있어야 합니다.
  • 문법에는 하나 이상의 규칙 요소가 포함되어야 합니다. (규칙 요소는 사용자가 말할 수 있는 단어 또는 구문을 포함합니다).
  • 각 규칙 요소에는 고유한 id 속성이 있어야 합니다.

SRGS 문법에 필요한 기본 구조를 보았습니다. 이제 이에 대한 어휘를 만들어야 합니다. 어휘는 로봇에게 의미 있는 명령을 생성하는 단어의 집합입니다.

예:'앞으로 이동' 또는 '뒤로 이동'의 경우 여기에서 이동은 앞으로 및 뒤로 이동합니다. 따라서 원칙적으로 정방향 및 역방향보다 먼저 와야 합니다. 따라서 Forward 및 Reverse를 다른 규칙으로 추출할 수 있습니다. 아래 이미지 참조:

루트 규칙이란? ? Speech Recognizer가 문법을 로드할 때 로드할 시작 노드 또는 루트 노드입니다. 선택 사항입니다. 무시해도 되지만 프로그래밍 방식으로 루트 노드를 지정해야 합니다.

루트 속성이란? 문법 태그에서? 루트 속성은 문법을 로드할 때 음성 인식기에 대한 시작 규칙을 정의합니다. 속성으로 지정되지 않은 경우 프로그래밍 방식으로 지정해야 합니다.

이 문서는 초보자용이므로 복잡한 SRGS 태그 및 속성을 다룰 수 없습니다. MSDN 및 W3C에서 SRGS 문법에 대해 자세히 알아볼 수 있습니다.

저희는 로봇을 위한 SRGS 문법을 방금 생성했습니다. 이제 유니버설 Windows 앱용 음성 인식기를 구현하는 방법을 살펴보겠습니다.

음성 인식기 초기화 및 문법 로드

음성 인식기 클래스는 Windows.Media.SpeechRecognition에서 사용할 수 있습니다. 네임스페이스. 네임스페이스를 코드 파일로 가져옵니다. 초기화하기 전에 프로젝트에 XML 문법 파일을 생성해야 합니다. 이전 섹션에서 문법 파일에 대한 콘텐츠를 이미 생성했습니다.

참고:'CompilationResult'가 실패하면 Mic 인터페이스에 문제가 있을 수 있습니다. 마이크와의 연결을 확인하십시오. 기본 IoT Core 앱에서 감지되는지 확인하세요.

음성 인식기 이벤트 등록 및 핸들러 생성

마지막 단계에서 음성 인식기를 시작했으며 음성을 듣고 구문 분석할 준비가 되었습니다. 성공적인 구문 분석 후 'ContinuousRecognitionSession'은 'ResultGenerated'라는 이벤트를 발생시킵니다. 이 이벤트는 구문 분석 결과를 음성에 기반한 작업을 수행하기 위해 처리할 수 있는 이벤트 인수로 제공합니다. 또한 'StateChanged' 이벤트를 통해 인식기의 상태를 수신하여 화자에게 인식기가 수신 중이라는 표시를 제공할 수도 있습니다.

여기서 'MyRecognizerStateChanged'는 상태가 변경될 때 'MyRecognizer'에 의해 발생되는 함수입니다. 'MyRecognizer'가 듣기 시작했을 때와 듣기 위해 멈추었을 때 귀중한 상태 정보를 제공합니다. 수신을 중지한 후 'MyRecognizer'는 제공된 문법에 대해 음성을 구문 분석하고 성공하면 'ResultGenerated' 이벤트를 발생시킵니다.

참고:'MyRecognizer_StateChanged' 및 'MyRecognizer_ResultGenerated' 함수를 직접 만들 필요는 없습니다. 대신 Visual Studio는 자동으로 생성하는 방법을 제공합니다. 이벤트의 +=오른쪽에 있는 를 두 번 사용하여 Visual Studio에서 자동으로 만들 수 있습니다.

SpeechRecognizer 개체를 초기화한 직후에 이벤트 핸들러를 등록할 수도 있습니다.

거의 완료되었습니다!

2단계

구문 분석된 음성으로 운전하는 방법은 무엇입니까?

이전 섹션에서는 유니버설 Windows 앱에 대한 사용자 지정 문법 및 음성 인식기를 구성했습니다. Speech Recognizer가 음성을 성공적으로 구문 분석하면 'ResultGenerated' 이벤트가 발생합니다. 이 이벤트는 구문 분석된 결과를 인수로 포함합니다. 말하는 내용을 감지하는 방법과 음성을 기반으로 수행할 작업을 살펴보겠습니다.

여기서 'args' 인수는 성공적인 음성 구문 분석 시 SpeechRecognizer에 의해 이벤트 핸들러에 전달됩니다. 'args.Result.Text'는 문자열 유형입니다. 그것은 텍스트로 말한 음성을 포함합니다. 조건부 블록을 사용하여 음성 특정 작업을 수행할 수 있습니다.

로봇을 구동하기 위한 완전한 코드를 보여주는 것은 가능하지 않습니다. 로봇을 구동하는 다양한 기능을 포함하는 'MotorDriver'라는 정적 클래스를 제공했습니다. 로봇을 구동하기 위한 Gpio 핀을 관리하는 클래스입니다. 완전한 소스 코드는 프로젝트가 끝날 때 제공됩니다. Raspberry Pi 2 및 Windows 10 IoT를 처음 사용하는 경우 이 링크를 참조하여 시작하세요.

3단계

기기 기능 업데이트

유니버설 Windows 앱을 Raspberry Pi 2에 배포하기 전에 애플리케이션이 특정 하드웨어 액세스 권한으로 실행되도록 적절한 장치 기능을 설정해야 합니다. 이 응용 프로그램의 컨텍스트에서 사용할 외부 장치 '마이크'가 필요합니다. 패키지 매니페스트에서 '마이크'를 활성화하려면:


모두 소프트웨어 측에서 수행됩니다. 이제 하드웨어를 연결할 시간입니다. 소스 코드는 기사 끝에 제공됩니다.

음성 인식을 구현하는 주요 부분은 완료되었으며 여기에서 코드의 모든 라인을 설명하는 것은 실현 가능하지 않습니다. 대신 소스 코드가 잘 주석 처리되어 있습니다. 무엇이든 물어보세요.

4단계

앱을 시작 애플리케이션으로 배포 및 등록

로봇은 전원이 켜질 때마다 음성 명령을 인식해야 합니다. 이를 위해서는 앱을 시작 앱으로 등록해야 Raspberry Pi 2가 부팅될 때마다 부팅 직후 앱이 시작됩니다. 그러려면 먼저 앱을 Raspberry Pi 2에 배포한 다음 시작 애플리케이션으로 등록해야 합니다.

배포하기 전에 애플리케이션의 패키지 패밀리 이름을 변경하는 것이 좋습니다.


패키지 제품군 이름을 변경한 후 원격 장치(Raspberry Pi 2)에 애플리케이션을 배포합니다.




Raspberry Pi 2에 애플리케이션을 배포하는 적절한 방법을 모르는 경우 이 링크를 참조하세요.

앱이 성공적으로 배포되면 앱을 시작 애플리케이션으로 등록해야 합니다. PowerShell 또는 Windows IoT Core의 웹 관리 포털을 사용하는 두 가지 방법을 사용하여 앱을 시작 프로그램으로 등록할 수 있습니다. 두 번째 방법으로 가겠습니다. 웹 브라우저를 열고 다음을 따르십시오:



시작 앱으로 등록하는 데 문제가 있습니까? 이 문서를 참조하세요.

앱을 시작 앱으로 성공적으로 등록했으면 Raspberry Pi 2를 재부팅하고 부팅 후 애플리케이션이 시작되는지 확인합니다. 그렇지 않은 경우 배포에서 등록까지의 모든 단계를 확인합니다. 앱이 성공적으로 시작되었으므로 이제 연결할 차례입니다.

도식

하드웨어 부품은 로봇 섀시(DC 모터 포함), Raspberry Pi 2(Windows 10 IoT Core 포함), 배터리, 거리 센서 등으로 구성됩니다. 모터 배터리(왼쪽 'Battery:9-12VDC'의 이미지 참조)는 H-Bridge 모터 드라이버에 직접 연결됩니다. Raspberry Pi 2에는 별도의 전원 공급 장치가 필요합니다. USB PowerBank는 Raspberry Pi 2에 충분한 전력을 제공하는 데 적합합니다. USB PowerBank 또는 필터링된 5VDC 공급 장치가 없는 경우 Raspberry Pi 및 초음파 거리 센서의 전원을 켜려면 별도의 전압 조정기 회로(7805 사용)가 필요합니다.

USB PowerBank 또는 5VDC 필터링된 전원이 없는 경우 모터 배터리(위의 왼쪽 이미지 – 주황색, 배터리:9-12VDC)를 사용하여 Raspberry Pi 2의 전원을 켤 수 있습니다. 구성에 대한 회로도는 다음에서 제공됩니다. 기사의 끝(이름:'설계도:모터 배터리').

왜 초음파 거리 센서가 있는 저항기입니까?

초음파 거리 센서는 5V에서 작동하는 반면 Raspberry Pi 2는 3.3V에서 작동합니다. 센서의 Echo 핀은 5V 출력을 가지므로 Raspberry Pi의 핀에 직접 연결할 수 없습니다. 그것은 라즈베리 파이를 태울 것입니다. 따라서 Raspberry Pi로 보내기 전에 센서의 출력 전압을 3.3V로 낮추어야 합니다. 분압회로를 이용하여 센서의 전압을 낮출 수 있습니다. 따라서 Vout은 다음과 같이 계산할 수 있습니다.

R1 =1000ohmR2 =2000ohmVin =5V(센서의 에코 핀)Vout =5 * (2000/(1000 + 2000)) =3.3V(Raspberry Pi 2로)

경고:초음파 거리 센서의 에코 핀을 라즈베리 파이의 GPIO 핀에 직접 연결하지 마십시오. 라즈베리 파이를 태울 수 있습니다. 대신 로직 레벨 변환기 또는 적절한 전압 분배기를 사용하십시오.

최종 회의




알려진 문제

음성 인식이 작동하지 않음(빌드 10586)

음성 인식 및 합성은 Windows IoT 빌드 10586을 설치한 경우 IoT 장치(RPi2, MinnowBoard MAX 및 Dragonboard 410c)에서 작동하지 않습니다.

해결책: 현재 유효한 솔루션이 없습니다. Windows IoT 팀이 다음 빌드에서 이 버그를 해결하기를 바랍니다. 그래도 음성 인식을 조작하려면 이전 버전 10240으로 되돌리면 매력처럼 작동합니다.

마이크 문제

음성 인식에는 고품질 마이크가 필요합니다. 저품질 마이크는 가까이 있을 때 사용할 수 있지만 마이크가 1~2미터 정도 떨어져 있으면 정확하게 인식하지 못합니다.

해결책: (옵션 1) :고품질 마이크를 구입합니다. 가끔 고품질 마이크를 사용해도 제대로 인식하지 못하는 경우가 있습니다. 그런 경우에는 큰 목소리가 필요합니다. (옵션 2) :무선 마이크가 좋을 것입니다. 먼 거리에서도 외부 소음 걱정 없이 로봇을 제어할 수 있습니다. 이 동영상을 참조하여 구매하거나 직접 만들 수 있습니다.

인식기 처리 지연

인식기가 음성을 처리하는 데 시간이 필요하다는 것은 분명합니다. 문제나 문제는 아니지만 실시간 시스템에 문제가 발생할 수 있습니다.

우리의 음성 명령을 따르는 고속 로봇 겸 자동차가 있다고 가정합니다. 차가 600-2000ms 후에 (처리 지연으로 인해) 음성 명령을 따를 것이라고 가정해 보겠습니다. 따라서 우리가 정지 명령을 내리면 자동차는 잠시 후 신호를 분석하여 치명적인 사건으로 이어질 수 있습니다.

해결책: 현재(이 기사가 작성되었을 때) 적절한 솔루션이 없습니다. 희망, 그것은 미래에 해결될 것입니다. 🙂

발음 차이

지역이 다른 사람들은 한 단어에 대해 다른 발음을 사용합니다. 음성 인식기는 음성 단어의 발음이 프로그래밍된 것과 다른 경우 음성을 구문 분석할 수 없습니다.

해결책: SRGS XML 문법 파일에 언어와 지역을 지정하여 특정 지역의 발음을 파싱할 수 있습니다.

예를 들어 영어(영국)를 구문 분석하려면 문법 태그 속성을 xml:lang="en-GB"로 설정해야 한다고 가정해 보겠습니다. 여기서 영국의 ISO 국가 코드는 GB입니다. 따라서 'en-GB'는 음성 인식기에 영어(영국) 발음을 기반으로 음성을 구문 분석하도록 지시합니다. 캐나다 프랑스어의 또 다른 예는 "fr-CA"를 사용합니다.

환경 소음

하나 이상의 외부 개체에 의해 발생하는 원치 않는 소리 및 진동은 처리 정확도에 영향을 미칩니다. 때때로 인식기는 음성이 올바르게 말하더라도 이해하지 못합니다.

해결책: 이러한 노이즈를 해결하거나 제거하는 것이 불가능할 수 있습니다. 현재의 기술 수준에서는 이러한 기술을 소음이 없는 지역에서만 사용할 수 있기를 희망할 수 있습니다. 또 다른 가능한 솔루션은 소음을 줄일 수 있는 지능형 마이크(노이즈 캔슬링 마이크라고 함)를 사용하는 것입니다.

USB 마이크/USB 사운드 카드가 인식하지 못함

빌드 10531 출시와 함께 Windows IoT Core는 일반 오디오 기기를 지원합니다. 대부분의 USB 마이크 또는 USB 사운드 카드에는 USB 일반 드라이버가 필요합니다. 장치가 일반 드라이버를 사용하는 경우 작동합니다.

내 RPi2(Amazin.in)로 성공적으로 작업

솔루션: 다른 USB 마이크나 USB 사운드 카드를 사용해 보십시오.

제 경우에는 USB 사운드 카드를 구입했습니다. 그것은 완벽하게 작동했습니다. SoundCard의 Mic 잭에 Microphone을 연결했습니다. Amazon.com 또는 기타 온라인 쇼핑 웹사이트에서 USB 사운드 카드를 구입할 수 있습니다. 인도인은 Amazon.in에서 USB 사운드 카드를 구입할 수 있습니다.

향후 개선 사항

There is no limitation when it comes to new ideas. This article explores the basic implementation of the speech recognition. Further, you can extend the project by providing visual indication of parsed result. For example, turn on green led for a second after successful parse of spoken command else turn on red led for a second. In addition, to prevent accidental commands, you can also program the robot to instruct when to listen and when sleep.

Did you notice?

Those who have carefully seen animated title image of the project will know that I have not covered something that I have shown there. Watch it carefully and try to implement that hidden feature in your robot.

Good Luck 🙂

Source:  Speech Controlled Robot

제조공정

  1. Windows 10 IoT Core – 심박수 펄스 읽기
  2. Windows IoT:얼굴 인식 도어
  3. 동작 제어 AWS IoT 버튼
  4. Raspberry Pi 2의 Windows 10 IoT Core – Adafruit 센서 데이터
  5. Windows 10 IoT 코어 및 SHT15
  6. Windows 10 IoT Core for Raspberry Pi 3 Model B+
  7. Bluetooth를 통해 제어되는 Raspberry Pi Robot
  8. Raspberry Pi를 사용한 제스처 제어 로봇
  9. Android 스마트폰으로 제어되는 RASPBERRY PI WIFI 로봇
  10. Windows IoT 기반 GoPiGo v2