Choregraphe a une boîte appelée ** Take Picture ** qui vous permet de sauvegarder l'image que Pepper regarde sous forme de fichier dans le système de fichiers à l'intérieur de Pepper. Il existe différentes façons de gérer ce fichier, comme le joindre à la boîte d'envoi du courrier électronique ou le référencer dans la boîte qui affiche l'image sur la tablette, mais lors du référencement du fichier dans chaque boîte Ce qui est important, c'est l'idée de chemins dans Pepper.
Ici, je vais vous expliquer quelques idées de chemins en créant un exemple de prise d'image et de l'afficher sur une tablette.
Dans le panneau Bibliothèque de boîtes de Choregraphe, sélectionnez la boîte standard Bibliothèque de boîtes> Vision> Prendre une photo et vous verrez une description similaire à la suivante:
Puisqu'il dit «stockez-le dans sa mémoire dans ~ / enregistrements / caméras», les images capturées sont enregistrées dans »(répertoire personnel) / enregistrements / caméras /« du système de fichiers dans Pepper. Le nom du fichier image a un élément appelé «Nom de fichier» dans le paramètre, qui peut être spécifié ici.
Vous pouvez utiliser la bibliothèque de la boîte de la tablette> la tablette> la boîte Afficher l'image pour afficher des images sur votre tablette, mais la description de l'URL de l'image pour cette boîte est la suivante:
[Tutoriel Pepper (5): Utilisation d'une tablette](http://qiita.com/Atelier-Akihabara/items/87def938b6553ee9c1e9#%E7%94%BB%E5%83%8F%E3%81%AE%E5%87 % BA% E5% 8A% 9B), mais parmi les fichiers qui composent l'application (l'arborescence de la structure des fichiers affichée dans le panneau [Contenu du projet]), les fichiers du répertoire html
se trouvent sur la tablette. Il peut être affiché.
En d'autres termes, si vous pouvez enregistrer ce que vous avez pris dans la zone Prendre une photo dans le répertoire html
de l'application, vous pouvez l'afficher dans la zone Afficher l'image.
Maintenant, créons une application qui prend une image avec la case ** Prendre une photo et l'affiche sur la tablette avec la case Afficher l'image **.
De plus, lors de l'affichage de fichiers créés dynamiquement sur la tablette de Pepper, il est nécessaire de concevoir un moyen d'éviter la mise en cache, cela sera donc expliqué séparément.
Standard Box Library> Vision> Prendre une photo
bibliothèque de boîtes de tablettes> tablette> Afficher l'image
Connectez les boîtes comme suit
Remplacez l'emplacement de la zone Prendre une photo par le répertoire html
de l'application. Double-cliquez sur la case Prendre une photo et modifiez le code comme indiqué ci-dessous.
a. Ajoutez du code au début de la méthode ʻonLoad pour créer un objet pour accéder à ʻALFrameManager
def onLoad(self):
#Code supplémentaire:d'ici
self.framemanager = ALProxy("ALFrameManager")
#Code supplémentaire:Jusque là
self.bIsRunning = False
...
b. Ajoutez du code pour obtenir le chemin du répertoire html au début de la méthode ʻonInput_onStart`
```py
def onInput_onStart(self):
#Code supplémentaire:d'ici
import os
self.recordFolder = os.path.join(
self.framemanager.getBehaviorPath(self.behaviorId), "../html")
#Code supplémentaire:Jusque là
if( self.bIsRunning ):
return
...
```
Afficher le problème du chemin de la boîte d'image (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) Pour contourner le problème, double-cliquez sur la zone Afficher l'image et ajoutez le code suivant à la méthode _getAppName
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]
#Code supplémentaire:d'ici
fragment = fragment.split('/')[1]
#Code supplémentaire:Jusque là
return fragment.lstrip("\\/")
else:
self.logger.warning("No ALFrameManager")
Définissez le nom du fichier de destination d'enregistrement pour chaque boîte. La zone Prendre une photo ne doit avoir aucune extension et la zone Afficher l'image doit avoir une extension (.jpg)
Créez un répertoire html
pour enregistrer l'image et importer un fichier factice approprié.
Cliquez sur le bouton Ajouter dans le panneau de contenu du projet, puis sur ** Créer un répertoire ... **
b. Cliquez sur ** Importer un fichier ... ** pour ouvrir la boîte de dialogue de sélection de fichier. Sélectionnez un fichier factice approprié.
c. Faites glisser le fichier factice et déplacez-le dans le répertoire html Le fichier image est maintenant prêt à être visualisé sur votre tablette.
Vous avez maintenant une boîte Prendre une photo pour stocker les données capturées dans le répertoire html
pour l'affichage de la tablette, et une boîte Afficher l'image pour afficher ces données capturées.
Lorsque vous vous connectez à Pepper et appuyez sur le bouton [Upload to Robot and Play], le contenu pris par l'appareil photo de Pepper sera affiché sur la tablette.
Même si vous exécutez cette application plusieurs fois, le contenu de la tablette ne sera pas mis à jour.
Cela est dû au fait que le navigateur Web de la tablette a mis l'image en cache. Une façon d'éviter cela consiste à inclure le temps d'exécution dans la requête URL. Vous pouvez contourner ce problème en ajoutant un code similaire au suivant à la méthode «onInput_onStart» de la zone Afficher l'image.
def onInput_onStart(self):
#Code supplémentaire:d'ici
import time
#Code supplémentaire:Jusque là
# 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)
#Code supplémentaire:d'ici
url += "?" + str(time.time())
#Code supplémentaire:Jusque là
tabletService.showImage(url)
Recommended Posts