Sie können Informationen zu verschiedenen von NAOqi Framework bereitgestellten APIs anzeigen, indem Sie [Hilfe] - [Referenz-API] von Choregraphe öffnen. In diesem Artikel werde ich die Verwendung der API anhand der Beispiele ** ALPeoplePerception API ** und ** ALFaceCharacteristics API ** erläutern.
Darüber hinaus verfügen die ** ALPeoplePerception-API und die ALFaceCharacteristics-API nicht über die Möglichkeit, den Betrieb mit virtuellen Robotern zu überprüfen, und es ist eine tatsächliche Pepper-Maschine erforderlich. ** Ich möchte, dass Sie mit der eigentlichen Pfeffermaschine im Aldebaran Atelier Akihabara experimentieren. (Reservierungs-URL: http://pepper.doorkeeper.jp/events)
ALPeoplePerception API
** People Perception ** API ist auch in [Pepper Tutorial (6): Berührungssensor, menschliche Erkennung] verfügbar (http://qiita.com/Atelier-Akihabara/items/0a5826fb018a4d0e4268#1-4) Wie Sie sehen können, handelt es sich um eine API, mit der Personen in der Umgebung von Pepper erkannt und identifiziert werden können.
Wenn eine Person vom Pepper-Sensor erkannt wird, wird eine temporäre Identifikations-ID festgelegt und diese Information wird in einem Bereich namens "ALMemory" gespeichert. Die Anwendung kann das Ereignis von "ALPeoplePerception" über "ALMemory" abrufen und etwas tun oder die von "ALPeoplePerception" in "ALMemory" gespeicherten Informationen verwenden.
Diese API enthält Informationen zur menschlichen Erkennung, z. B.:
ALFaceCharacteristics API
** Gesichtsmerkmale ** API ist eine API, die Gesichtsinformationen für jede von ALPeoplePerception erkannte Person analysiert und zusätzliche Informationen wie Alter, Geschlecht und Lachen erhält.
ALFaceCharacteristics
bietet die folgenden Informationen, die aus Gesichtsmerkmalen abgeleitet wurden:
Jeder dieser Werte ist auch mit einem Wert zwischen 0 und 1 versehen, um den Grad der Sicherheit anzuzeigen. Darüber hinaus werden die folgenden Werte bereitgestellt.
Wenn Sie diese APIs verwenden, organisieren wir zunächst den Zugriff auf die APIs. Es gibt zwei Möglichkeiten, die verschiedenen von der API bereitgestellten Funktionen zu verwenden.
ALProxy
ALMemory
Hier geben wir einen Überblick über jede Methode.
Viele der APIs wie "ALPeoplePerception" und "ALFaceCharacteristics" werden in Form von ** Modulen ** bereitgestellt.
Module werden von Python-Klassen bereitgestellt, und auf von der API bereitgestellte Methoden kann über die ALProxy-Klasse zugegriffen werden. Um beispielsweise die von ALFaceCharacteristics bereitgestellte Methode "analyseFaceCharacteristics" aufzurufen, schreiben Sie das folgende Python-Skript.
faceChar = ALProxy("ALFaceCharacteristics")
faceChar.analyzeFaceCharacteristics(peopleId)
Geben Sie beim Ausführen eines Python-Skripts in Pepper wie Python Box die Zeichenfolge an, die den Modulnamen in ALProxy
als Argument angibt. Dadurch erhalten Sie eine ALProxy-Instanz für den Zugriff auf das Modul. Dadurch kann die Anwendung die von der API bereitgestellten Methoden aufrufen.
Als wir [Speicherereignisse] einführten (http://qiita.com/Atelier-Akihabara/items/0a5826fb018a4d0e4268#3-3), führten wir die Behandlung von Ereignissen nach Schlüssel ein, aber die Informationen, die von verschiedenen APIs von Pepper gesammelt wurden, sind Es wird einmal in einem Mechanismus namens "ALMemory" zusammengefasst. Die Anwendung kann die folgenden Operationen an "ALMemory" ausführen.
Es gibt die folgenden Möglichkeiten, ALMemory
zu verwenden.
Ganz links im Flussdiagramm können Sie eine Eingabe erstellen, die auf Speicherereignisse reagiert.
Einzelheiten zur Bedienung finden Sie unter Personen, die sich nähern.
Durch Verwendung der Box im Speicher der erweiterten Boxbibliothek ist es möglich, Werte zu erfassen und festzulegen, Speicherereignisse zu überwachen usw., indem Boxen kombiniert werden.
In diesem Artikel werde ich Ihnen zeigen, wie Sie die Box verwenden, indem Sie als Beispiel ** Liste der Personen abrufen ** verwenden.
Da "ALMemory" auch als das oben beschriebene Modul implementiert ist, kann über "ALProxy" wie folgt darauf zugegriffen werden.
memory = ALProxy("ALMemory")
ageData = memory.getData("PeoplePerception/Person/%d/AgeProperties" % peopleId)
In diesem Artikel verwenden wir ** Altersschätzung ** als Beispiel, um den Wert zu erhalten.
Die hier vorgestellten Projekte sind unter https://github.com/Atelier-Akihabara/pepper-face-characteristics-example verfügbar.
Sie können das Beispielprojekt verwenden, indem Sie die Datei von GitHub https://github.com/Atelier-Akihabara/pepper-face-characteristics-example abrufen. Es gibt verschiedene Möglichkeiten, um es zu erhalten, aber eine der einfachsten Möglichkeiten besteht darin, das Archiv über den Link [ZIP herunterladen] abzurufen.
Die resultierende Datei enthält Ordner mit zwei Projekten, ** Liste der sichtbaren Personen ** und ** Alter **. Dieser Ordner enthält eine Datei mit der Erweiterung ".pml". Sie können sie also öffnen, indem Sie darauf doppelklicken, um Choregraphe zu starten und das Projekt zu verwenden.
Ich werde die Punkte für jedes Beispielprojekt erklären.
Lassen Sie uns zunächst das Verhalten überprüfen, wenn Pepper eine Person erkennt, indem Sie das Ereignis "PeoplePerception / VisiblePeopleList" verwenden, um ** eine Liste der Personen abzurufen, die derzeit für Pepper sichtbar sind **. Ich werde.
Das Beispielprojekt ist ** Liste der sichtbaren Personen **. Sie können die von GitHub erhaltenen Dateien öffnen, indem Sie im Ordner "Liste sichtbarer Personen" auf "sichtbare Personenliste.pml" doppelklicken. Es wird wie folgt erstellt.
Klicken Sie auf die Schaltfläche ** Speicherereignis hinzufügen [+] auf der linken Seite des Flussdiagramms **, geben Sie ** PeoplePerception [A] ** in den Filter ein und aktivieren Sie ** PeoplePerception / VisiblePeopleList [B] **.
Platzieren Sie die folgenden Felder im Flussdiagramm
Stellen Sie die Verbindungen und Parameter für jede Box wie folgt ein:
Führen Sie dieses Projekt aus und klicken Sie auf Log Viewer (http://qiita.com/Atelier-Akihabara/items/7a898f5e4d878b1ad889#-%E5%8F%82%E8%80%83%E3%82%A8%E3%83 % A9% E3% 83% BC% E3% 81% AE% E8% A1% A8% E7% A4% BA% E3% 81% A8% E3% 83% AD% E3% 82% B0% E3% 83% 93 Bitte überprüfen Sie die Meldung in% E3% 83% A5% E3% 83% BC% E3% 82% A2). Wenn sich eine Person in Pepper bewegt, sollte das folgende Protokoll ausgegeben werden.
[INFO ] behavior.box :onInput_message:27 _Behavior__lastUploadedChoregrapheBehaviorbehavior_1790002616__root__AgeDetection_5__Log_1: Get: []
[INFO ] behavior.box :onInput_message:27 _Behavior__lastUploadedChoregrapheBehaviorbehavior_1790002616__root__AgeDetection_5__Log_2: Raised: [179318]
Sie können sehen, dass das Ereignis "PeoplePerception / VisiblePeopleList" eine Liste der Kennungen von Personen enthält, die für Pepper sichtbar sind, und zwar in Form von "179318".
Als nächstes verwenden wir "ALFaceCharacteristics", um die Informationen des menschlichen Gesichts zu erhalten, die durch diese Kennungen angezeigt werden.
Versuchen Sie als Nächstes, den Wert "PeoplePerception / Person /
Im vorherigen Beispiel haben wir die IDs aller Personen erhalten, die Pepper gefunden hat, aber hier Grundlegendes Bewusstsein Ich werde die Funktion von verwenden. Wir verwenden das Feld "Tracker> Basic Awarenss" in der Standard-Box-Bibliothek, um Personen zu verfolgen und die ID der verfolgten Person aus der Ausgabe "HumanTracked" abzurufen.
Das Beispielprojekt ist ** get-age **. Von den von GitHub erhaltenen Dateien können Sie sie öffnen, indem Sie im Ordner "get-age" auf "get-age.pml" doppelklicken. Es wird wie folgt erstellt.
Erstellen Sie eine Get Age-Box als leere Python-Box Diesmal ist die Eingabe- / Ausgabekonfiguration wie folgt. Informationen zum Erstellen finden Sie unter Python Box-Konzept.
Doppelklicken Sie auf das Feld Alter abrufen, um den Skripteditor zu öffnen und ein Python-Skript wie das folgende zu schreiben.
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
self.memory = ALProxy("ALMemory")
self.faceChar = ALProxy("ALFaceCharacteristics")
def onUnload(self):
pass
def onInput_onPeopleDetected(self, peopleId):
if peopleId < 0:
return
r = self.faceChar.analyzeFaceCharacteristics(peopleId)
if not r:
self.onUnknown()
return
ageData = self.memory.getData("PeoplePerception/Person/%d/AgeProperties" % peopleId)
self.logger.info("Age Properties: %d => %s" % (peopleId, ageData))
if ageData and len(ageData) == 2:
self.onAge(ageData[0])
else:
self.onUnknown()
Dieser Code ruft die Methode "analyseFaceCharacteristics" von "ALFaceCharacteristics" für die ID der Person auf, die über die Eingabe "onPeopleDetected" angegeben wurde. Wenn dieser Aufruf erfolgreich ist, "PeoplePerception / Person / und ruft die Ausgabe
onAge` auf, wobei der Wert das Alter dieses Werts als Argument angibt.
Ändern Sie den Typ des Say-Textfelds in Number und passen Sie das Say-Textfeld an (http://qiita.com/Atelier-Akihabara/items/8df3e81d286e2e15d9b6#%E8%A3%9C%E8%B6%]. B3say-Text% E3% 83% 9C% E3% 83% 83% E3% 82% AF% E3% 82% B9% E3% 81% AE% E3% 82% AB% E3% 82% B9% E3% 82% BF% E3% 83% 9E% E3% 82% A4% E3% 82% BA), um Ihre Aussagen zu ändern
sentence += "Sie sind%Ungefähr d Jahre alt" % int(p)
Schließen Sie die in 1. und 3. platzierten Boxen wie unten gezeigt an.
Ändern Sie den Inhalt des mit der Ausgabe "onUnknown" verbundenen Say-Felds in "Ich weiß nicht".
Wenn Sie diese Anwendung ausführen, wird Basic Awareness gestartet und Pepper dreht Ihr Gesicht als Reaktion auf Ihre Umgebung. Wenn Sie eine Person finden, wird die ID der Person in das Feld "Alter abrufen" eingegeben und Sie sagen: "Sind Sie dabei?" Selbst wenn Sie eine Person finden und das Gesicht schwer zu erkennen ist, schlägt der Erkennungsprozess fehl und Sie sagen "Ich weiß nicht".
Auf diese Weise ist es möglich, eine Anwendung zu realisieren, die das Alter einer von PeoplePerception erkannten Person anhand der Informationen aus der ** ALPeoplePerception API **, ** ALFaceCharacteristics API ** schätzt. ist. Auch wenn die Funktion nicht in der Box-Bibliothek enthalten ist, können viele Funktionen durch Zugriff auf die API mit "ALProxy" und "ALMemory" realisiert werden.
Recommended Posts