[PYTHON] Alterserkennung mit Peppers API

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)

API in diesem Artikel eingeführt

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.

Verwendung der API

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.

  1. Aufruf einer Modulmethode über ALProxy
  2. Holen Sie sich Ereignisse und Werte über ALMemory

Hier geben wir einen Überblick über jede Methode.

Modulmethodenaufruf über ALProxy

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.

Erhalten Sie Ereignisse und Werte über ALMemory

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.

Ereignisüberwachung durch Flussdiagramm

Ganz links im Flussdiagramm können Sie eine Eingabe erstellen, die auf Speicherereignisse reagiert.

flow-memory-event.png

Einzelheiten zur Bedienung finden Sie unter Personen, die sich nähern.

Werterfassung durch Boxbibliothek, Ereignisüberwachung

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.

memory-boxes.png

In diesem Artikel werde ich Ihnen zeigen, wie Sie die Box verwenden, indem Sie als Beispiel ** Liste der Personen abrufen ** verwenden.

Werterfassung und Ereignisüberwachung per Python-Skript

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.

Versuchen zu benutzen

Beispielprojektstandort

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.

ALPeoplePerception: Holen Sie sich eine Liste von Personen

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.

  1. 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] **.

    add-memory-event.png

  2. Platzieren Sie die folgenden Felder im Flussdiagramm

  1. Stellen Sie die Verbindungen und Parameter für jede Box wie folgt ein:

    visible-people-list.png

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.

ALFaceCharacteristics: Altersschätzung

Versuchen Sie als Nächstes, den Wert "PeoplePerception / Person / / AgeProperties" zu ermitteln, der durch den Analyseprozess von "ALFaceCharacteristics" festgelegt wurde. Hier als Beispiel schätzt ** Pepper das Alter der Person, die er findet, und sagt "Bist du in der Nähe?" **.

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.

  1. 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.

    get-age-box.png

  2. 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 / / AgeProperties from" ALMemory ". Es erhält den Wert von und ruft die Ausgabe onAge` auf, wobei der Wert das Alter dieses Werts als Argument angibt.

  1. Platzieren Sie die folgenden Felder
  1. Ä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)
    
  2. Schließen Sie die in 1. und 3. platzierten Boxen wie unten gezeigt an.

    connect-get-age-box.png

  3. Ä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

Alterserkennung mit Peppers API
Gesichtserkennung mit Peppers API
Kategorieschätzung mit der Bilderkennungs-API von docomo
Altersberechnung mit Python
Extrahieren Sie Zeichen aus Bildern mithilfe der Zeichenerkennungs-API von docomo
Sprachdateierkennung durch Google Speech API v2 mit Python
Testen Sie die CloudStack-API mit Simulator
Ich habe versucht, die Gesichtserkennungs-API von Microsoft für Cognitive Services zu verwenden
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Versuchen Sie es mit der Twitter-API
Bilderkennung mit API aus null Wissen mit AutoML Vision
Laden Sie Videos mit der YouTube-API hoch
Versuchen Sie es mit der Twitter-API
Führen Sie die handschriftliche Zeichenerkennung mit Pylearn 2 durch
Versuchen Sie es mit der PeeringDB 2.0-API
Verwenden Sie configparser, wenn Sie die API verwenden
Streamen Sie die Spracherkennung mithilfe der gRPC-API von Google Cloud Speech mit Python3 auf dem Mac!
Ich habe versucht, die Docomo-Spracherkennungs-API und die Google Speech-API in Java zu verwenden
Versuchen Sie es mit der Admin-API von Janus Gateway
Abrufen von Salesforce-Daten mithilfe der REST-API
Gegenmaßnahmen gegen Proxy bei Verwendung der WEB-API
Interaktive handgeschriebene Zeichenerkennungs-App mit Pygame
Logoerkennung mit der TensorFlow-Objekterkennungs-API
[Python3] Google übersetzt Google Übersetzung ohne Verwendung von API
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
Gesichtserkennung mit Hauptkomponentenanalyse
Abrufen von Amazon-Daten mit Keep API # 1 Abrufen von Daten
Datenerfassungsnotiz mit der Backlog-API
Versuchen Sie es mit der Aktions-API von Python argparse
Erstellen Sie eine API mit hug mit mod_wsgi
Erstellen Sie die CRUD-API mit der Fast API
Führen Sie Ansible über Python mithilfe der API aus
Handschriftliche Zeichenerkennung mit KNN in Python
Bilderkennung von Früchten mit VGG16
Versuchen Sie es mit der handgeschriebenen Zeichenerkennung (OCR) von GCP.
Ich habe versucht, die checkio-API zu verwenden
Kreisförmige Objekterkennung mittels Huff-Transformation