開発ブログ

第18回 パペロで写真を撮影してブラウザで表示してみた

投稿日時:2019年5月20日 11:05

こんにちは。ピャペロンです!
今回はパペロで写真を撮影してブラウザで表示してみたよ。

使用するハード
・PaPeRo i実機

使用するソフト
・Windows 10
・テキストエディタ(Visual Studio Code
・Python 3.4(PaPeRo i)
・WinSCP
・Tera Term


中央ボタンを押すと写真を撮影します。
ブラウザで<パペロのアドレス:7979>に接続すると撮影した画像が表示されます。
右ボタンを押すと終了します。


中央ボタン押下

写真撮影

ブラウザでパペロに接続して写真表示

右ボタンで終了

 

● PaPeRo i でPythonを使えるようにする | PaPeRo i [非公式] Developer Forumを参考にパペロにPython 3.4をインストール

● パペロに /Extension/www/ ディレクトリを作成して[ ln -s /tmp/ ]コマンドで /Extension/www/ に /tmp/ へのリンクを作成してください。

● /Extension/www/index.html を配置します。

● takePicture.py をパペロに配置して[python3 takePicture.py -wssvr ws://192.168.5.1:8088/papero]で実行してみよう。


index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>画像</title>
  6. </head>
  7. <body>
  8. <h1>画像</h1>
  9. <img src="tmp/papero.jpg">
  10. </body>
  11. </html>


takePicture.py

  1. import logging
  2. logger = logging.getLogger(__name__)
  3. logging.basicConfig(level=logging.DEBUG)
  4. import sys
  5. import pypapero
  6. import time
  7. import os
  8. import http.server
  9. import socketserver
  10. import threading
  11. import shutil
  12. class Papero(pypapero.Papero):
  13.     TAKE_PIC_FILE = "papero.jpg"
  14.     def __init__(self, simulator_id, robot_name, arg_ws_server_addr):
  15.         self.end = False
  16.         return super().__init__(simulator_id, robot_name, arg_ws_server_addr)
  17. class HTTP_Server: #HTTPサーバー
  18.     ROOT_DIR = "/Extension/www/" #ドキュメントルートディレクトリ
  19.     def __init__(self, *args, **kwargs):
  20.         os.chdir(self.ROOT_DIR)
  21.         self.HOST = ""
  22.         self.PORT = 7979
  23.         self.httpd = socketserver.TCPServer((self.HOST, self.PORT), http.server.SimpleHTTPRequestHandler)
  24.         self.thread = threading.Thread(target=self.run)
  25.         return super().__init__(*args, **kwargs)
  26.     
  27.     def run(self):
  28.         logger.debug("serving at port " + str(self.PORT))
  29.         self.httpd.serve_forever()
  30.         self.httpd.server_close()
  31.         logger.debug("run : http_server close")
  32. def send_event_message(msg): #パペロのメッセージを処理
  33.     if msg[0]["Name"] == "detectButton" and msg[0]["Status"] == "C": #中央ボタンで撮影
  34.         papero.send_turn_led_on("ear", ["W3W3", "10"])
  35.         papero.send_take_picture("JPEG", papero.TAKE_PIC_FILE)
  36.         #logger.debug("shutil.move : " + shutil.move("/tmp/papero.jpg", "/Extension/www/papero.jpg")) #写真をドキュメントルートディレクトリに移動
  37.     elif msg[0]["Name"] == "detectButton" and msg[0]["Status"] == "R": #右ボタンで終了
  38.         http_server.httpd.shutdown() #serve_forever() ループに停止するように指示し、停止されるまで待ちます
  39.         papero.end = True
  40.     elif msg[0]["Name"] == "detectButton" and msg[0]["Status"] == "L":
  41.         pass
  42. if __name__ == "__main__":
  43.     simulator_id, robot_name, ws_server_addr = pypapero.get_params_from_commandline(sys.argv)
  44.     while True:
  45.         papero = Papero(simulator_id, robot_name, ws_server_addr)
  46.         if papero.errOccurred == 0:
  47.             break
  48.         time.sleep(1)
  49.     http_server = HTTP_Server()
  50.     http_server.thread.start() #HTTPサーバースレッドの開始
  51.     papero.send_start_speech("起動が完了しました")
  52.     
  53.     while not papero.end:
  54.         msg = papero.papero_robot_message_recv(None)
  55.         send_event_message(msg)
  56.     
  57.     http_server.thread.join() #HTTPサーバースレッドが終了するまで待機
  58.     papero.papero_cleanup()
  59.     logger.debug("end")


0

最新開発ブログ一覧  (一覧で確認
2020年8月19日 14:08
開発ブログ
第30回 パペロで赤外線アレイセンサを動かしてみよう!【中編:顔の表面温度を測ってみよう】
by 管理者
2020年7月22日 16:07
開発ブログ
第29回 パペロで赤外線アレイセンサを動かしてみよう!【前編:簡易サーモグラフィを作ろう】
by 管理者
2019年11月20日 17:11
開発ブログ
第28回 パペロでJulius4.5を実行してみた
by 管理者
2019年11月13日 09:11
開発ブログ
第27回 JuliusをPaPeRoi向けにクロスコンパイルしてみた
by 管理者
2019年9月19日 17:09
開発ブログ
第26回Linaro Toolchainでクロスコンパイルしてみた
by 管理者

コメントは受け付けていません。