[PYTHON] Prenez une image avec Pepper et affichez-la sur votre tablette

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.

Chemin de destination d'enregistrement de l'image dans la zone Prendre une photo

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:

take-picture-desc.png

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.

take-picture-param.png

Chemin d'importation de l'image dans la zone Afficher l'image de la tablette

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:

show-image-desc.png

[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é.

project-content-html.png

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.

Exemple d'implémentation

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.

Essayer de faire

  1. Placez les boîtes suivantes
  1. Connectez les boîtes comme suit

    connections.png

  2. 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
    ...
```
  1. 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")
    
  2. 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)

    take-picture-box-param.png

    show-image-box-param.png

  3. 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 ... ** create-html-directory.png

b. Cliquez sur ** Importer un fichier ... ** pour ouvrir la boîte de dialogue de sélection de fichier. Sélectionnez un fichier factice approprié. add-image.png

c. Faites glisser le fichier factice et déplacez-le dans le répertoire html move-image.png 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.

Contrôle de fonctionnement

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.

Éviter le cache de 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

Prenez une image avec Pepper et affichez-la sur votre tablette
Prenez une photo avec Pepper et affichez-la sur l'écran du coffre -Chorégraphe 2.5.5
Mettez vos propres données d'image dans Deep Learning et jouez avec
Créons un modèle de reconnaissance d'image avec vos propres données et jouons!
Crop Numpy.ndarray et enregistrez-le en tant qu'image
Afficher des images et lire des vidéos dans le terminal Neovim
J'ai fait un modèle de classification d'images et essayé de le déplacer sur mobile
Remarques sur le traitement d'images HDR et RAW avec Python
Installez le sélénium sur votre Mac et essayez-le avec python
Créez un modèle de classification d'images de manière explosive avec Azure Custom Vision et implémentez-le avec Flask
POSTER l'image avec json et la recevoir avec flask
Automatisez Chrome avec Python et Selenium sur votre Chromebook
POSTEZ l'image sélectionnée sur le site Web avec multipart / form-data et enregistrez-la sur Amazon S3! !!
Récupérer une image d'une page Web et la redimensionner
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm
IME On / Off est affiché par LED en coopération avec Python et Arduino
[Linux] Enregistrez un type mime non défini et associez-le à une application
Installez lp_solve sur Mac OSX et appelez-le avec python.
Découpez une image avec python
Segmentation d'image avec scikit-image et scikit-learn
Enregistrer et récupérer des fichiers avec Pepper
Connectez-vous au VPN avec votre smartphone et éteignez / rallumez le serveur
Je souhaite afficher une image sur Jupyter Notebook à l'aide d'OpenCV (mac)
Créez une application Django sur Docker et déployez-la sur AWS Fargate
Récupérer le csv publié avec Github Action et le publier sur les pages Github
Un programme python qui redimensionne une vidéo et la transforme en image
Démarrez la webcam, prenez une image fixe et enregistrez-la localement
Créez un environnement Python 3 avec pyenv sur Mac et affichez des graphiques Network X
[Rails] Comment calculer la latitude et la longitude avec une grande précision à l'aide de l'API Geocoding et l'afficher sur Google Map
GAE --Avec Python, faites pivoter l'image en fonction des informations de rotation d'EXIF et importez-la dans Cloud Storage.