Een eenvoudige benadering om Marvin nieuwe trucs te leren

Open Source Remote Services gebruiken om een ​​NAO-robot nieuwe cognitieve vaardigheden te geven

Een paar jaar geleden heb ik een NAO-robot, genaamd Marvin, geholpen om steen-papier-schaar te leren spelen met Apache Spark Machine Learning en Apache CouchDB. Ons advocacy-team voor ontwikkelaars nam Marvin mee op tournee naar een aantal technische conferenties over de hele wereld.

Met toegang tot een breed scala aan gratis open source state-of-the-art deep learning-modellen, wilde ik hem altijd een nieuwe set cognitieve vaardigheden bijbrengen. Gespecialiseerde objectdetectiemogelijkheden kunnen bijvoorbeeld dienen als basis voor een Where’s Wally-achtige game. Een PoseNet-model zou een nieuwe carrière als mime kunnen lanceren. Eindeloze mogelijkheden!

Bij het onderzoeken van mogelijke opties om die vaardigheden te implementeren, kwam ik snel tot een aanpak die de resourcevereisten voor de robot minimaliseert en een hoge mate van flexibiliteit biedt: verbind hem met [externe] diensten die die vaardigheden implementeren.

Om een ​​vaardigheid te benutten, Marvin:

Een basisgedragsdefinitie in Choregraphe (de desktop-app die wordt gebruikt om animaties en gedragingen voor NAO’s te maken) die deze stappen implementeert, kan er als volgt uitzien:

Deze basisgedragsdefinitie bestaat uit:

Om acceptabele prestaties te bereiken, gebruikte ik meestal een lokale netwerkopstelling, waarbij ik de robot verbond met microservices die op Docker op een laptop werden uitgevoerd.

Kun je me nu zien?

Laten we als voorbeeld een op objectdetectie gebaseerde interactie nemen.

Door de Inception ResNet v2 model-dienende microservice van de gratis Model Asset Exchange te implementeren, kunt u het model-dienende REST API-eindpunt van de service (Swagger-specificatie) gebruiken om objecten in het gezichtsveld van de robot te detecteren en te identificeren.

Als je een POST -verzoek doet aan / mode / voorspellen , waarbij je als parameter een afbeelding doorgeeft die de camera heeft vastgelegd, bevat het antwoord een array van voorspellingen , die voor elk gedetecteerd object een label en een waarschijnlijkheid bevatten.

Dit is hoe het relevante deel van de JSON-reactie eruitziet voor Marvins kijk op mijn werkruimte:

De Python-broncode in het analyse_view -script in de gedragsdefinitie van de robot implementeert de interactie met de microservice als volgt:

Om de basisopstelling te testen, laat ik de robot gewoon de gedetecteerde objecten vocaliseren (zoals het wordt getoond in het codefragment hierboven) met behulp van de ingebouwde tekst-naar-spraak-module.

Over het algemeen duurt het maar een paar minuten om Marvin een nieuwe vaardigheid te ‘leren’. Wat we nog moeten doen (en dit is in de meeste gevallen het tijdrovende deel van dit soort projecten) is de vaardigheid te verpakken in boeiend gedrag dat het publiek vermaakt en Marvins snauwerige persoonlijkheid benadrukt.

Als je een NAO-robot bezit (of toegang hebt tot) een NAO-robot, volg je de instructies die ik je op github heb gegeven om je robot een paar nieuwe vaardigheden te leren. Bekijk de Model Asset eXchange voor meer gratis open source, inzetbare en trainbare machine learning-modellen.