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.
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:
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.
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:
[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.
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.
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.
Standard Box Library> Vision> Bild aufnehmen
Tablet-Box-Bibliothek> Tablet> Bild anzeigen
Schließen Sie die Boxen wie folgt an
Ä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
...
```
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")
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).
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 ... **.
b. Klicken Sie auf ** Datei importieren ... **, um den Dateiauswahldialog zu öffnen. Wählen Sie eine geeignete Dummy-Datei.
c. Ziehen Sie die Dummy-Datei und verschieben Sie sie in das HTML-Verzeichnis 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.
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.
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