ロボット【Pepper(ペッパー)】写真を撮って任意の連番で任意のフォルダに保存してみよう!


こんばんわ〜♪

今日は、Pepperで撮った写真を任意の連番で任意のフォルダに保存したいと思います!

もちろん、現在保存されている画像の最後の連番から続けて保存できるようにファイル名を指定しますよ♪

とりあえずTakePictureボックスを用意して下の画像通りに追加入力します!

box_picture

次はshowImageボックスを用意します、同じように追加入力してね♪

box_showImage01

box_showImage02

忘れずにお馴染みのパス問題の対策もしときますっ(´д` ;)

box_showImage03

それが終わったら、いよいよphythonボックスを作りこんでいきたいと思います。

今回はソース内に細かくコメントを書いといたので、そっちを参考にしてね( ´ ▽ ` )ノ


  
 
class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        #ALFrameManagerへのアクセス用オブジェクト
        self.framemanager = ALProxy("ALFrameManager")

    def onUnload(self):
        pass

    def onInput_onStart(self):
        #htmlディレクトリのパスを取得する
        import os,glob
        self.recordFolder = os.path.join(
            self.framemanager.getBehaviorPath(self.behaviorId),"../html")
        #htmlフォルダ内からIMGがファイル名の頭についた拡張子が.jpgファイルを取得する
        self.files = glob.glob(self.recordFolder + '/IMG*.jpg')
     #ファイルが存在しなかった場合のファイル名を格納
        self.nextFileName = "IMG00001"

        if len(self.files) > 0:
            self.tempNum = 00001

            for file in self.files:

         #取得したファイルのパスを除いたファイル名のみを出力
                self.temp = os.path.basename(file)

                #ファイル名から連番の部分のみを摘出する
                self.temp = self.temp[3:8]

                if self.tempNum < '%05d' % ((int)(self.temp) + 1):
                    self.tempNum = '%05d' % ((int)(self.temp) + 1)

            #次のファイル名を格納する
            self.nextFileName = "IMG" + str(self.tempNum)

        #格納した次のファイル名を出力する
        self.onStopped(self.nextFileName)

    def onInput_onStop(self):
        self.onUnload()
        self.onStopped()
 



このソースではプロジェクト直下のhtmlフォルダに保存するように指定しているので、他のフォルダを用意して保存したいって人は、19行目の.getBehaviorPath(self.behaviorId),”../html”)のhtmlの部分を変えてみてね♪

ちなみにファイル名はIMG00001からの連番になるようになってます!

そんなファイル名嫌だ!」って人は、23と37行目の”IMG”って書いてある所を変更してください。

ただ・・・その名称を変えちゃうとその他もろもろ変えなきゃいけなくなるので、ソースが全く読めない人は変えないでねっ( ^ 人 ^ )

変えなきゃいけなくなる箇所は21,26,32,35行目です。

IMGの部分のみ3文字の他の名称に変えるだけであれば、21行目の’/IMG*.jpg’のIMGの部分を変更後の名称に変更すればOKなので、とりあえずそこだけ変える方がいいかも?

ここまで出来たら早速繋げちゃいましょう!

proj_picture

画像のRightHandTouchボックスとLeftHandTouchボックスは、TactileR.HandボックスかTactileL.Handボックスの中からif > 0ボックスを切り取って使ってね♪

メモリイベントを設定するのが面倒な人はTactileR.HandとTactileL.Handボックスをそのまま使ってもOKです♪

メモリイベントは左側の上から2番目の青いプラスのボタンをクリックして設定します。

このメモリイベントっていうのが左側から伸びている灰色のコードの出所となっている所です!

んで、効果音はTakePicuture自身には付いてないので、シャッター音を付加してます。

あとは〜撮ったあと、撮った画像を視認できるように画像を表示させるためにshowImageボックスを設置してるってことぐらいかな・・・

説明が長くなっちゃいましたが、実行しちゃいましょう!

・・・今回は実行しただけじゃダメですよ?

ちゃんとPepperの目の前に行ってPepperの右手を触ってあげてくださいね♪

カシャっという音とともにPepperのタブレットに撮った写真が写っていますよねっ?

写ってない?

じゃ、も1回最初っから見直してみてねっ( ´ ▽ ` )ノ



福岡でロボット開発といえば、株式会社システムトランジスタ(通称シストラ)ロボティクス部d^ω^bからのお知らせでした。

  • このエントリーをはてなブックマークに追加

コメント

  1. まつもと より:

    初めまして、松本と申します。

    いつも記事を参考にさせて頂いております。

    質問が1点あります。
    こちらの記事を参考に同じアプリを作成したのですが、写真が4回までしか連番で保存されず、4回目以降は最新のファイルに上書きを繰り返してしまいます。
    これは連番の開始番号を変えても同じでした。
    (例)開始IMG00001の場合はIMG00004番で繰り返し上書き。開始IMG00003の場合はIIMG00006番で繰り返し上書き。

    解決方法があればご教授お願い致します。
    何卒、宜しくお願い致します。

    • tanaka より:

      こんにちわ~♪
      コメントありがとうございます(*^ω^*)/
      バグ付きの記事を掲載してしまい申し訳ありません・・・。
      34行目のif文を以下のように書き換えて頂けますと最小限の変更で4回目以降も連番で保存できるかと思います。
      if self.tempNum < '%05d' % ((int)(self.temp) + 1): 機会があれば別記事にて、もう少しまともなソースを載せるつもりですので、これに懲りずにこれからも足を運んで頂けますと幸いです(*^人^*) 不具合報告ありがとうございました♪

      • まつもと より:

        tanakaさん

        返信ありがとうございます!
        無事に連番で保存することができました。

        また新しい記事楽しみにしております。

        ありがとうございました。

  2. まつもと より:

    初めまして、松本と申します。

    いつも記事を参考にさせて頂いております。

    質問が1点あります。
    こちらの記事を参考に同じアプリを作成したのですが、写真が4回までしか連番で保存されず、以降は最新のファイルに上書きを繰り返してしまいます。
    これは連番の開始番号を変えても同じでした。
    (例)開始IMG00001の場合はIMG00004番で繰り返し上書き。開始IMG00003の場合はIIMG00006番で繰り返し上書き。

    解決方法があればご教授お願い致します。
    何卒、宜しくお願い致します。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください