Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Windows 10 IoT Core:spraakgestuurde robot

Verhaal

In vroegere dagen van de computer vond interactie met de computer plaats via ponskaarten, trackball, lichtpistool, toetsenborden en zelfs via het touchscreen. Al deze apparaten vereisen een soort fysiek contact om ze te bedienen.

Met decennium na decennium wordt nieuwe technologie beter dan de oude. Draadloze invoerapparaten worden populair omdat ze een schoon en minder rommelig bureau bieden. Met de huidige verbetering van zowel software als hardware, is een nieuw soort invoer mogelijk, namelijk:visuele en spraakinvoer.

Dit artikel helpt u de spraakherkenningstechnologie van Windows 10 IoT Core te leren kennen. Aan het einde van het onderwerp zullen we een robot maken met Windows 10 IoT Core en Raspberry Pi 2 met de toepassing Spraakherkenning. Met deze toepassing voor spraakherkenning kan de robot verschillende bewegingstaken uitvoeren (bijvoorbeeld:vooruit, draaien, stoppen, enz.) op basis van gebruikersinteractie door spraak.

Nieuw bij de Windows 10 IoT Core? of beginners? raadpleeg eerst deze link.

Dit artikel is bijgewerkt op 30 maart 2016

Wat is spraakherkenning?

Spraakherkenning in één regel betekent vertaling van gesproken woorden naar mogelijk equivalente tekst. Spraakherkenning kan worden onderverdeeld in twee hoofdcomponenten:signaalverwerking en spraakdecoder. We hoeven ons niet druk te maken over de complexiteit ervan, omdat Microsoft daar al een oplossing voor heeft ontwikkeld. We hoeven alleen hun spraakbibliotheken te gebruiken.

Stap 1

Aan de slag met spraakherkenning

Laten we beginnen met het basisidee:

  • Spraakherkenningsgrammatica maken (SRGS-grammatica)
  • Spraakherkenningsobject initialiseren en grammatica laden (SpeechRecognizer)
  • Registreer voor spraakherkenningsgebeurtenissen en maak een handler

Spraakherkenningsgrammatica maken

Voordat we beginnen met spraakherkenning, moeten we begrijpen hoe we Universal Windows App kunnen programmeren om onze taal of commando's te begrijpen. Om dit te doen, moeten we spraakherkenningsgrammatica maken. Spraakherkenningsgrammatica kan worden gemaakt met SRGS Grammar for Universal Windows App:

  • Gebruik XML om grammaticadocumenten te maken die voldoen aan de Speech Recognition Grammar Specification (SRGS) versie 1.0, de W3C-standaard voor spraakherkenningsgrammatica's.

Opmerking:andere mogelijke manieren zijn beschikbaar in .Net Framework, maar ze werden niet ondersteund in UWP toen dit artikel werd geschreven. Welke zijn:

  • Grammatica schrijven programmatisch met behulp van leden van de klassen GrammarBuilder en Choices in de naamruimte System.Speech.Recognition.
  • Gebruik constructors en methoden van klassen in de naamruimte System.Speech.Recognition.SrgsGrammar om programmatisch SRGS-compatibele grammatica's te maken.

We beginnen met XML-grammatica. Voordat we beginnen met het maken van een grammaticabestand, moeten we bedenken en definiëren hoe de gebruiker met onze applicatie zal omgaan. In de context van dit project zal de gebruiker de robot opdracht geven om in beide richtingen te bewegen, te stoppen en opdracht te geven om obstakeldetectie in of uit te schakelen. We kunnen een lijst met spraakwoordenschat maken die als volgt is:

  • Vooruit
  • Omgekeerd verplaatsen
  • Sla rechtsaf
  • Linksaf
  • Stop
  • Activeer obstakeldetectie
  • Hindernisdetectie uitschakelen

Voor deze woordenschat moeten we XML-grammatica ontwerpen. We hoeven alleen enkele basisregels van SRGS v1 te volgen.

SRGS-grammatica

Om SRGS-grammatica te maken, moeten enkele basisregels worden gevolgd, namelijk:

  • Rootelement moet grammatica zijn
  • De versie, de taal en de XML-naamruimte van de kenmerkgrammatica moeten aanwezig zijn.
  • Grammatica moet ten minste één regelelement bevatten. (Regelelement bevat een woord of zin die de gebruiker kan uitspreken).
  • Elk regelelement moet een uniek id-kenmerk hebben.

We hebben de vereiste basisstructuur voor SRGS-grammatica gezien. Nu moeten we er een vocabulaire voor maken. Woordenschat is een reeks woorden die de robot iets zinvols geeft.

Bijvoorbeeld:'Vooruit bewegen' of 'Omkeren', hier komt Bewegen voor Vooruit en Achteruit. Dus in de regel moet het eerst komen voor Vooruit en Achteruit. Dus we kunnen Vooruit en Achteruit extraheren in een andere regel. Zie onderstaande afbeelding:

Wat is rootregel ? Het is het startknooppunt of hoofdknooppunt dat moet worden geladen wanneer Spraakherkenning grammatica laadt. Het is optioneel. Je kunt het negeren, maar dan moet je het root-knooppunt programmatisch specificeren.

Wat is rootkenmerk in grammatica? Root-attribuut definieert opstartregel voor spraakherkenning wanneer grammatica wordt geladen. Als het niet als kenmerk is opgegeven, moet u het programmatisch specificeren.

Dit artikel is bedoeld voor beginners en daarom is het niet mogelijk om complexe SRGS-tags en attributen te behandelen. U kunt meer informatie over SRGS-grammatica vinden op MSDN en W3C.

We hebben zojuist SRGS-grammatica voor onze robot gemaakt. Nu zullen we zien hoe Spraakherkenning voor de universele Windows-app kan worden geïmplementeerd.

Spraakherkenning initialiseren en grammatica laden

SpeechRecognizer les is beschikbaar in Windows.Media.SpeechRecognition naamruimte. Importeer de naamruimte in uw codebestand. Voordat we initialiseren, moeten we een XML-grammaticabestand in ons project maken. We hebben al inhoud gemaakt voor het grammaticabestand in de vorige sectie.

Opmerking:als 'CompilationResult' mislukt, is er mogelijk een probleem met de microfooninterface. Controleer de verbinding met de microfoon. Controleer of het wordt gedetecteerd in de standaard IoT Core-app of niet.

Registreer voor spraakherkenningsgebeurtenissen en maak een handler

In de laatste stap hebben we spraakherkenning gestart en zijn we klaar om spraak te luisteren en deze te parseren. Na succesvolle parsering zal 'ContinuousRecognitionSession' een evenement met de naam 'ResultGenerated' oproepen. Deze gebeurtenis levert het parseerresultaat als gebeurtenisargumenten die kunnen worden verwerkt om een ​​taak uit te voeren op basis van gesproken spraak. We kunnen ook luisteren naar de status van de herkenner per gebeurtenis 'StateChanged' om de spreker een indicatie te geven dat de herkenner luistert.

Hier is 'MyRecognizerStateChanged' een functie die wordt gegenereerd door 'MyRecognizer' wanneer de status van de ene naar de andere wordt gewijzigd. Het geeft waardevolle statusinformatie wanneer 'MyRecognizer' is begonnen met luisteren en wanneer stopt om te luisteren. Nadat het stopt met luisteren, parseert 'MyRecognizer' de spraak met de verstrekte grammatica en verhoogt het evenement 'ResultGenerated' bij succesvol.

Let op:U hoeft de functie 'MyRecognizer_StateChanged' en 'MyRecognizer_ResultGenerated' niet zelf aan te maken. In plaats daarvan biedt Visual Studio een manier om ze automatisch voor u te maken. Je kunt ze automatisch maken door Visual Studio met behulp van  tweemaal aan de rechterkant van de +=van een evenement.

U kunt gebeurtenishandlers ook registreren direct na het initialiseren van het SpeechRecognizer-object.

We zijn bijna klaar!

Stap 2

Hoe te rijden op geparseerde spraak?

In de vorige sectie hebben we aangepaste grammatica en spraakherkenning geconfigureerd voor Universal Windows App. Wanneer Spraakherkenning met succes gesproken spraak parseert, wordt de gebeurtenis 'ResultGenerated' geactiveerd. Deze gebeurtenis bevat een geparseerd resultaat als argument. Laten we eens kijken hoe we kunnen detecteren wat er wordt gesproken en wat we moeten doen op basis van gesproken spraak:

Hier wordt het argument 'args' doorgegeven aan de gebeurtenishandler door SpeechRecognizer bij succesvolle parsering van spraak. 'args.Result.Text' is van het tekenreekstype. Het bevat de gesproken spraak als tekst. U kunt een spraakspecifieke taak uitvoeren met voorwaardelijk blokkering.

Het is niet haalbaar om de volledige code te tonen om de robot te besturen. Ik heb een statische klasse met de naam 'MotorDriver' geleverd die verschillende functies bevat om de robot te besturen. Deze klasse beheert Gpio-pinnen om de robot te besturen. De volledige broncode wordt aan het einde van het project gegeven. Als je nieuwer bent met de Raspberry Pi 2 en Windows 10 IoT, raadpleeg dan deze link om aan de slag te gaan.

Stap 3

Toestelmogelijkheden bijwerken

Voordat we de universele Windows-app op de Raspberry Pi 2 implementeren, moeten we de juiste apparaatmogelijkheden instellen zodat de applicatie kan worden uitgevoerd met specifieke hardwaretoegangsrechten. In de context van deze applicatie hebben we een extern apparaat 'Microfoon' nodig om te gebruiken. Om 'Microfoon' in pakketmanifest in te schakelen:


Alles gedaan aan de softwarekant. Nu is het tijd om hardware aan te sluiten. De broncode staat aan het einde van het artikel.

Het grootste deel van de implementatie van spraakherkenning is voltooid en het is niet haalbaar om elke regel van de code hier uit te leggen. In plaats daarvan is de broncode goed becommentarieerd. Vraag om een ​​vraag.

Stap 4

App implementeren en registreren als opstarttoepassing

Robot moet spraakopdrachten herkennen wanneer hij wordt ingeschakeld. Om dit te bereiken, moet u uw app als opstart-app registreren, zodat elke keer dat de Raspberry Pi 2 opstart, uw app net na het opstarten wordt gestart. Om dit te doen, moet u eerst uw app op de Raspberry Pi 2 implementeren en deze vervolgens registreren als opstarttoepassing.

Voor de implementatie is het goed om de pakketfamilienaam van de applicatie te wijzigen:


Na het wijzigen van de pakketfamilienaam, implementeert u de applicatie op het externe apparaat (uw Raspberry Pi 2).




Als u niet weet hoe u uw applicatie op de Raspberry Pi 2 moet implementeren, raadpleegt u deze link.

Zodra de app is geïmplementeerd, moet u de app registreren als opstarttoepassing. U kunt uw app op twee manieren als opstarten registreren:met behulp van PowerShell of de webbeheerportal van Windows IoT Core. Ik ga voor de tweede methode. Open de webbrowser en volg:



Ondervindt u problemen bij het registreren als opstart-app? Raadpleeg dit artikel.

Zodra je je app succesvol hebt geregistreerd als opstart-app, start je Raspberry Pi 2 opnieuw op en kijk je of je toepassing start na het opstarten of niet. Als dit niet het geval is, controleert u alle stappen van implementatie tot registratie. Met een succesvolle start van de app is het nu tijd om dingen aan te sluiten.

Schematisch

Hardware-onderdelen bestaan ​​uit robotchassis (met DC-motoren), Raspberry Pi 2 (met Windows 10 IoT Core), batterij, afstandssensor, enz. Stroom komt van de Motor Battery (getoond in afbeelding links 'Battery:9-12VDC') en gaat direct naar de H-Bridge motor driver. Voor Raspberry Pi 2 is een aparte voeding nodig. USB PowerBank is geschikt om Raspberry Pi 2 van voldoende stroom te voorzien. Bij afwezigheid van USB PowerBank of gefilterde 5VDC-voeding is een apart spanningsregelaarcircuit (met behulp van 7805) vereist om Raspberry Pi en ultrasone afstandssensor op te starten.

Als u geen USB PowerBank of 5VDC gefilterde voeding hebt, kunt u Motor Battery (getoond in bovenstaande afbeelding aan de linkerkant - oranje kleur, batterij:9-12VDC) gebruiken om Raspberry Pi 2 op te starten. Het schema voor de configuratie vindt u op het einde van het artikel (genaamd 'Schematic:Motor Battery').

Waarom weerstanden met ultrasone afstandssensor?

Ultrasone afstandssensor werkt op 5V, terwijl Raspberry Pi 2 werkt op 3,3V. We kunnen de Echo-pin van de sensor niet rechtstreeks aansluiten op de pin van de Raspberry Pi, omdat deze een output van 5V heeft. Het zal Raspberry Pi verbranden. We moeten dus de uitgangsspanning van de sensor naar 3,3 V verlagen voordat we naar Raspberry Pi sturen. De spanning van de sensor kan worden verlaagd door een spanningsdelercircuit te gebruiken. Vout kan dus als volgt worden berekend:

R1 =1000 ohmR2 =2000 ohmVin =5V (Echo-pin van de sensor)Vout =5 * (2000 / (1000 + 2000)) =3,3V (naar de Raspberry Pi 2)

WAARSCHUWING:Sluit de echo-pin van de ultrasone afstandssensor niet rechtstreeks aan op de GPIO-pin van de Raspberry Pi. Het kan Raspberry Pi doorbranden. Gebruik in plaats daarvan een logische niveau-omzetter of een geschikte spanningsdeler.

Eindmontage




Bekende problemen

Spraakherkenning werkt niet (Build 10586)

Spraakherkenning en synthese werken op geen enkel IoT-apparaat (RPi2, MinnowBoard MAX en Dragonboard 410c) als je Windows IoT build 10586 hebt geïnstalleerd.

Oplossing: Op dit moment is er geen geldige oplossing beschikbaar. Ik hoop dat het Windows IoT-team deze bug in de volgende build zal oplossen. Maar als je spraakherkenning wilt manipuleren, keer dan terug naar de oude versie 10240 en het zal als een speer werken.

Microfoonprobleem

Spraakherkenning vereist absoluut een microfoon van hoge kwaliteit. Je kunt nog steeds een microfoon van lage kwaliteit gebruiken als deze dichtbij is, maar als de microfoon ver weg is, ongeveer 1-2 meter, wordt hij niet nauwkeurig herkend.

Oplossing: (Optie 1):Koop een microfoon van hoge kwaliteit. Soms kan het gebeuren dat het zelfs na een microfoon van hoge kwaliteit niet correct wordt herkend. In dat geval is een luide stem nodig. (Optie 2):Draadloze microfoon zou geweldig zijn. U kunt de robot zelfs vanaf grote afstand besturen zonder u zorgen te maken over externe ruis. Je kunt er een kopen of je eigen maken door deze video te raadplegen.

Vertraging in verwerking van herkenning

Het is duidelijk dat de herkenner enige tijd nodig heeft om spraak te verwerken. Het is geen probleem of probleem, maar het kan problemen veroorzaken in het realtime systeem.

Stel dat we een snelle robot annex auto hebben die ons spraakcommando volgt. Laten we aannemen dat de auto ons spraakcommando volgt na 600-2000 ms (vanwege verwerkingsvertraging). Dus als we bevelen om te stoppen, zal de auto het signaal na enige tijd ontleden, wat kan leiden tot een catastrofale gebeurtenis.

Oplossing:  Op dit moment (toen dit artikel werd geschreven) is er geen passende oplossing beschikbaar. Hoop dat het in de toekomst wordt opgelost.

Uitspraak verschil

Mensen uit verschillende regio's gebruiken verschillende uitspraken voor een enkel woord. Spraakherkenning kan spraak niet ontleden als de uitspraak van het gesproken woord anders is dan waarvoor het is geprogrammeerd.

Oplossing:  U kunt de taal en regio specificeren in het SRGS XML-grammaticabestand om de uitspraak voor de specifieke regio te ontleden.

Laten we zeggen dat we Engels (VK) willen ontleden, we moeten het kenmerk van de grammaticatag xml:lang=”en-GB” instellen. Hier is de ISO-landcode voor het VK GB. Dus 'en-GB' vertelt de spraakherkenner om spraak te ontleden op basis van de Engelse (VK) uitspraak. Een ander voorbeeld, voor Canadees Frans, gebruik “fr-CA”.

Omgevingslawaai

Ongewenst geluid en trillingen, veroorzaakt door een of meer externe entiteiten, hebben invloed op de nauwkeurigheid van de verwerking. Soms zal de herkenner spraak niet verstaan, zelfs niet als deze correct is uitgesproken.

Oplossing: Het is misschien niet mogelijk om dergelijke ruis op te lossen of te elimineren. Op het huidige niveau van technologie kunnen we alleen maar hopen dat we dergelijke technologie in een ruisvrije omgeving kunnen gebruiken. Een andere mogelijke oplossing is het gebruik van een intelligente microfoon die ruis kan verminderen (de zogenaamde ruisonderdrukkingsmicrofoon).

USB-microfoon / USB-geluidskaart herkent niet

Met de release van build 10531 ondersteunt Windows IoT Core generieke audioapparaten. De meeste USB-microfoons of USB-geluidskaarten vereisen een algemeen USB-stuurprogramma. Als uw apparaat een generieke driver gebruikt, zal het werken.

Werk succesvol met mijn RPi2 (Amazin.in)

Oplossing: Probeer een andere USB-microfoon of USB-geluidskaart.

In mijn geval heb ik een USB-geluidskaart gekocht. Het werkte perfect. Ik heb de microfoon aangesloten op de microfoonaansluiting van de geluidskaart. U kunt een USB-geluidskaart kopen via Amazon.com of andere online winkelwebsites. Indiaan kan een USB-geluidskaart kopen bij Amazon.in.

Toekomstige verbeteringen

Er is geen beperking als het gaat om nieuwe ideeën. Dit artikel onderzoekt de basisimplementatie van de spraakherkenning. Verder kunt u het project uitbreiden door een visuele indicatie te geven van het geparseerde resultaat. Zet bijvoorbeeld de groene led een seconde aan na een succesvolle parse van het gesproken commando, anders zet je de rode led een seconde aan. Om onbedoelde commando's te voorkomen, kun je de robot bovendien programmeren om te instrueren wanneer hij moet luisteren en wanneer hij slaapt.

Is het je opgevallen?

Degenen die de geanimeerde titelafbeelding van het project zorgvuldig hebben gezien, zullen weten dat ik iets niet heb behandeld dat ik daar heb laten zien. Bekijk het goed en probeer die verborgen functie in je robot te implementeren.

Veel succes 🙂

Bron:  Spraakgestuurde robot

Productieproces

  1. Windows 10 IoT Core – Hartslagpulsen lezen
  2. Windows IoT:deur met gezichtsherkenning
  3. Bewegingsgestuurde AWS IoT-knop
  4. Windows 10 IoT Core op Raspberry Pi 2 – Adafruit-sensorgegevens
  5. Windows 10 IoT Core en SHT15
  6. Windows 10 IoT Core voor Raspberry Pi 3 Model B+
  7. Raspberry Pi-robot bestuurd via Bluetooth
  8. Gebaargestuurde robot met Raspberry Pi
  9. RASPBERRY PI WIFI ROBOT GECONTROLEERD VANAF ANDROID SMART PHONE
  10. GoPiGo v2 met Windows IoT
  11. Wifi-gestuurde robot met Raspberry Pi