[PYTHON] Nehmen Sie ein Bild mit Pepper auf und zeigen Sie es auf Ihrem Tablet an

Choregraphe hat eine Box namens ** Bild aufnehmen **, in der Sie das Bild, das Pepper als Datei betrachtet, im Dateisystem von Pepper speichern können. Es gibt verschiedene Möglichkeiten, mit dieser Datei umzugehen, z. B. das Anhängen an den E-Mail-Postausgang oder das Verweisen auf sie in dem Feld, in dem das Bild auf dem Tablet angezeigt wird, jedoch beim Verweisen auf die Datei in jedem Feld Wichtig ist die Idee von Pfaden innerhalb von Pepper.

Hier werde ich einige Ideen für Pfade erläutern, indem ich ein Beispiel für die Aufnahme und Anzeige eines Bildes auf einem Tablet erstelle.

Bildspeicherzielpfad im Feld Bild aufnehmen

Wählen Sie im Fenster "Box Library" von Choregraphe das Standardfeld "Box Library"> "Vision"> "Bild aufnehmen" aus. Daraufhin wird eine Beschreibung ähnlich der folgenden angezeigt:

take-picture-desc.png

Da "Speichern in seinem Speicher in ~ / recordings / camera." steht, werden die aufgenommenen Bilder in "(Home-Verzeichnis) / recordings / camera /" des Dateisystems in Pepper gespeichert. Der Name der Bilddatei enthält im Parameter ein Element namens "Dateiname", das hier angegeben werden kann.

take-picture-param.png

Bildimportpfad im Tablet Bildfeld anzeigen

Sie können die Tablet-Box-Bibliothek> Tablet> Bild anzeigen verwenden, um Bilder auf Ihrem Tablet anzuzeigen. Die Beschreibung der Bild-URL für dieses Feld lautet jedoch wie folgt:

show-image-desc.png

[Pfeffer-Tutorial (5): Verwenden eines Tablets](http://qiita.com/Atelier-Akihabara/items/87def938b6553ee9c1e9#%E7%94%BB%E5%83%8F%E3%81%AE%E5%87 % BA% E5% 8A% 9B), aber unter den Dateien, aus denen die Anwendung besteht (der im Bedienfeld [Projektinhalt] angezeigte Dateistrukturbaum), befinden sich die Dateien im Verzeichnis "html" auf dem Tablet. Es kann angezeigt werden.

project-content-html.png

Mit anderen Worten, wenn Sie das, was Sie im Feld "Bild aufnehmen" gespeichert haben, im HTML-Verzeichnis der Anwendung speichern können, können Sie es im Feld "Bild anzeigen" anzeigen.

Implementierungsbeispiel

Jetzt erstellen wir eine Anwendung, die ein Bild mit dem Feld ** Bild aufnehmen aufnimmt und es mit dem Feld Bild anzeigen ** auf dem Tablet anzeigt.

Wenn Sie dynamisch erstellte Dateien auf dem Pepper-Tablet anzeigen, müssen Sie außerdem einen Weg finden, um das Caching zu vermeiden. Dies wird daher separat erläutert.

Versuchen Sie zu machen

  1. Platzieren Sie die folgenden Felder
  1. Schließen Sie die Boxen wie folgt an

    connections.png

  2. Ändern Sie den Speicherort des Felds "Bild aufnehmen" in das HTML-Verzeichnis der Anwendung. Doppelklicken Sie auf das Feld Bild aufnehmen und ändern Sie den Code wie unten gezeigt. a. Fügen Sie am Anfang der Methode "onLoad" Code hinzu, um ein Objekt für den Zugriff auf "ALFrameManager" zu erstellen

    def onLoad(self):
        #Zusätzlicher Code:von hier
        self.framemanager = ALProxy("ALFrameManager")
        #Zusätzlicher Code:Bisher
        self.bIsRunning = False
        ...
    

b. Fügen Sie zu Beginn der Methode "onInput_onStart" Code hinzu, um den Pfad des HTML-Verzeichnisses abzurufen

```py
def onInput_onStart(self):
    #Zusätzlicher Code:von hier
    import os
    self.recordFolder = os.path.join(
                self.framemanager.getBehaviorPath(self.behaviorId), "../html")
    #Zusätzlicher Code:Bisher
    if( self.bIsRunning ):
        return
    ...
```
  1. Bildfeldpfadproblem anzeigen (http://qiita.com/Atelier-Akihabara/items/87def938b6553ee9c1e9#%E8%A3%9C%E8%B6%B3show-image%E3%83%9C%E3% 83% 83% E3% 82% AF% E3% 82% B9% E3% 81% AE% E5% AE% 9F% E8% A3% 85% E3% 82% 92% E3% 81% BF% E3% 81% A6% E3% 81% BF% E3% 82% 8B) Doppelklicken Sie zur Problemumgehung auf das Feld Bild anzeigen und fügen Sie der Methode _getAppName den folgenden Code hinzu

    def _getAppName(self):
        import os
        if self.frameManager:
            behaviorPath = os.path.normpath(self.frameManager.getBehaviorPath(self.behaviorId))
            appsFolderFragment = os.path.join("PackageManager", "apps")
            if not (appsFolderFragment in behaviorPath):
                self.logger.error("appsFolderFragment is not in behaviorPath")
            fragment = behaviorPath.split(appsFolderFragment, 1)[1]
            #Zusätzlicher Code:von hier
            fragment = fragment.split('/')[1]
            #Zusätzlicher Code:Bisher
            return fragment.lstrip("\\/")
        else:
            self.logger.warning("No ALFrameManager")
    
  2. Legen Sie den Namen der Speicherzieldatei für jedes Feld fest. Das Feld Bild aufnehmen darf keine Erweiterung haben und das Feld Bild anzeigen muss eine Erweiterung haben (.jpg).

    take-picture-box-param.png

    show-image-box-param.png

  3. Erstellen Sie ein HTML-Verzeichnis, um das Bild zu speichern und eine entsprechende Dummy-Datei zu importieren. Klicken Sie im Projektinhaltsfenster auf die Schaltfläche Hinzufügen und dann auf ** Verzeichnis erstellen ... **. create-html-directory.png

b. Klicken Sie auf ** Datei importieren ... **, um den Dateiauswahldialog zu öffnen. Wählen Sie eine geeignete Dummy-Datei. add-image.png

c. Ziehen Sie die Dummy-Datei und verschieben Sie sie in das HTML-Verzeichnis move-image.png Die Bilddatei kann jetzt auf Ihrem Tablet angezeigt werden.

Jetzt haben Sie ein Feld zum Aufnehmen von Bildern, um die erfassten Daten im HTML-Verzeichnis für die Tablet-Anzeige zu speichern, und ein Feld zum Anzeigen von Bildern, um diese erfassten Daten anzuzeigen.

Funktionsprüfung

Wenn Sie eine Verbindung zu Pepper herstellen und die Taste [Auf Roboter hochladen und abspielen] drücken, wird der von Peppers Kamera aufgenommene Inhalt auf dem Tablet angezeigt.

Tablet-Cache vermeiden

Selbst wenn Sie diese Anwendung mehrmals ausführen, wird der Inhalt des Tablets nicht aktualisiert.

Dies liegt daran, dass der Tablet-Webbrowser das Bild zwischengespeichert hat. Eine Möglichkeit, dies zu vermeiden, besteht darin, die Laufzeit in die URL-Abfrage aufzunehmen. Sie können dieses Problem umgehen, indem Sie der Methode "onInput_onStart" des Felds "Bild anzeigen" Code hinzufügen, der dem folgenden ähnelt.

    def onInput_onStart(self):
        #Zusätzlicher Code:von hier
        import time
        #Zusätzlicher Code:Bisher
        # We create TabletService here in order to avoid
        # problems with connections and disconnections of the tablet during the life of the application
        tabletService = self._getTabletService()
        if tabletService:
            try:
                url = self.getParameter("ImageUrl")
                if url == '':
                    self.logger.error("URL of the image is empty")
                if not url.startswith('http'):
                    url = self._getAbsoluteUrl(url)
                #Zusätzlicher Code:von hier
                url += "?" + str(time.time())
                #Zusätzlicher Code:Bisher
                tabletService.showImage(url)

Recommended Posts

Nehmen Sie ein Bild mit Pepper auf und zeigen Sie es auf Ihrem Tablet an
Nehmen Sie ein Foto mit Pepper auf und zeigen Sie es auf dem Brustdisplay an - Version 2.5.5 -.
Fügen Sie Ihre eigenen Bilddaten in Deep Learning ein und spielen Sie damit
Lassen Sie uns ein Bilderkennungsmodell mit Ihren eigenen Daten erstellen und spielen!
Beschneiden Sie Numpy.ndarray und speichern Sie es als Bild
Zeigen Sie Bilder an und spielen Sie Videos im Neovim Terminal ab
Ich habe ein Bildklassifizierungsmodell erstellt und versucht, es auf dem Handy zu verschieben
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Erstellen Sie mit Azure Custom Vision explosionsartig ein Bildklassifizierungsmodell und implementieren Sie es mit Flask
POST das Bild mit json und erhalte es mit der Flasche
Automatisieren Sie Chrome mit Python und Selen auf Ihrem Chromebook
POST das ausgewählte Bild auf der Website mit mehrteiligen / Formulardaten und speichere es in Amazon S3! !!
Holen Sie sich ein Bild von einer Webseite und ändern Sie die Größe
Erstellen Sie mit Anaconda und PyCharm eine Python-Umgebung auf Ihrem Mac
IME On / Off wird in Zusammenarbeit mit Python und Arduino durch LED angezeigt
[Linux] Registrieren Sie einen undefinierten MIME-Typ und ordnen Sie ihn einer Anwendung zu
Installieren Sie lp_solve unter Mac OSX und rufen Sie es mit Python auf.
Schneiden Sie ein Bild mit Python aus
Bildsegmentierung mit Scikit-Image und Scikit-Learn
Speichern und Abrufen von Dateien mit Pepper
Stellen Sie mit Ihrem Smartphone eine Verbindung zum VPN her und schalten Sie den Server aus / ein
Ich möchte ein Bild auf Jupyter Notebook mit OpenCV (Mac) anzeigen.
Erstellen Sie eine Django-App auf Docker und stellen Sie sie in AWS Fargate bereit
Scraping der veröffentlichten CSV mit Github Action und Veröffentlichung auf Github Pages
Ein Python-Programm, das die Größe eines Videos ändert und es in ein Bild verwandelt
Starten Sie die Webkamera, machen Sie ein Standbild und speichern Sie es lokal
Erstellen Sie eine Python3-Umgebung mit pyenv auf einem Mac und zeigen Sie NetworkX-Diagramme an
[Rails] So berechnen Sie Breiten- und Längengrade mit hoher Genauigkeit mithilfe der Geocoding-API und zeigen sie auf Google Map an
GAE - Drehen Sie mit Python das Bild basierend auf den Rotationsinformationen von EXIF und laden Sie es in den Cloud-Speicher hoch.