備忘録:Pepperで外部モジュールを利用するときの方法


Pepperで外部モジュールを利用するときの方法は、いくつかQiitaの投稿にも掲載され参考にさせていただきました。内容を私なりに整理してみました。
私もPythonに詳しい訳ではなく、Choregrapheを使うようになってやり始めた初心者です。

背景

Pepperの機能確認をしていく中で、「Pepperが写真を撮り、撮った写真を送りたい」とういう要望での調査を実施していると、Qiitaに下記の記事を見つけました。

『pepperが撮影した写真をS3にuploadしてslackでUP』

早速、自分で実装してみることにしました。

そこで、問題!!

記事には、

使ったもの
- boto
- slack_client
- websocket
アプリのルートに「lib」ディレクトリを作成して、上記ファイルをインポートした。

と記述されていました。
最初は、サンプルのコードばかりに気をとられ実装してもエラーで動きません。
それもそのはず、S3を使うためのbotoやslackのPythonライブラリが読み込まれていないことに気づきました。

通常、Pythonでは、pip install という便利なコマンドでインストールできるようですが、Pepperでは使えないらしい。

解決方法!!

それが、

アプリのルートに「lib」ディレクトリを作成して、上記ファイルをインポートした。

実装方法

それでは具体的に私の行った手順を記載します。

手順

  1. それぞれのライブラリを入手する
  2. Choregrapheのプロジェクトフォルダ内にlibディレクトリを作成する
  3. 作成したlibディレクトリの中に 1. で入手したライブラリをコピーする
  4. Choregrapheでプロジェクトを開くと追加されたライブラリの読込確認があるのですべて読み込む

この手順を行うことで先に記述したエラーも解消され、記事『pepperが撮影した写真をS3にuploadしてslackでUP』の内容が実装できました。

(補足)

手順1:ライブラリの入手方法
一旦、自分のパソコン内のPythonに pip install コマンドでライブラリのインストールをしました。
そして、Pythonディレクトリ内の "site-packages" というディレクトリにインストールされたライブラリフォルダをコピーしました。(\boto , \slackclient , \websocket)

まとめ

実際に動作確認ができたあと、改めてPythonコードの確認をしてみました。
そこで気づいたことを補足します。

タイトルの「Pepperで外部モジュールを利用するときの方法」として最後まとめると、上記に記載した手順1~4とさらに実装されたPythonコードにも記述すべき内容があります。それらを手順5に補足します。

手順5:Python Scriptボックスの中で、作成したlibディレクトリを参照できるようにする


    def onLoad(self):
        #put initialization code here
        self.framemanager = ALProxy("ALFrameManager")


    def onInput_onStart(self):
        #self.onStopped() #activate the output of the box
        import sys, os
        self.folderName = os.path.join(
                    self.framemanager.getBehaviorPath(self.behaviorId), "../lib")
        if self.folderName not in sys.path:
            sys.path.append(self.folderName)