getCaptureDataについて

アプリ開発に関する質問 getCaptureDataについて

  • このトピックには5件の返信、3人の参加者があり、最後にrikuokajiにより4年、 9ヶ月前に更新されました。
6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • 投稿者
    投稿
  • #1245
    ohtakazuki
    参加者

    こんにちは!
    PaPeRoのカメラの映像をストリーミング的に取得したいと思います。
    takePicture命令を試してみましたが、
    一旦PaPeRo本体にファイルとして画像が保存されるため、
    保存-取出のオーバヘッド、及び書込と読込の同期タイミングが気になります。

    そこで、getCaptureData(pythonのsend_get_capture_data)を評価しようと思いましたが、
    共有メモリからの取得方法が分かりませんでした。
    1.startCapturingで、共有メモリIDにはどういった値を設定すれば良いか
    2.getCaptureDataで、最新のキャプチャデータを共有メモリから取得するにはどうしたらよいか、
    pythonからの使い方を教えて頂ければ幸いです。

    #1248
    sakaguchi@spi
    参加者

    この「共有メモリID」はLinuxの共有メモリを作成し、そのIDを指定する必要があります。
    Pythonからはsysv-ipcというパッケージ(http://semanchuk.com/philip/sysv_ipc/)を使用して、共有メモリの作成・読み取りを行うことができます。

    sysv-ipcパッケージですが、pipでインストールしようとするとgccが必要になるため、こちらでクロス環境でコンパイルしたものを添付いたします。

    使い方としては、

    import sysv_ipc
    camera_shm = sysv_ipc.SharedMemory(None, sysv_ipc.IPC_CREX, 0o666, 640*480*2)
    papero.send_start_capturing(camera_shm.id, 640*480*2, “VGA”)

    などとしてキャプチャを開始し、

    papero.send_get_capture_data(camera_shm.id, “VGA”)

    でキャプチャを指示、”getCaptureDataRes”メッセージを受信したら

    data = camera_shm.read()

    とすればデータを取得できると思います。
    ※VGAカメラの場合、データはYUV422(YVYU)なので、RGBとして使用したい場合は変換する必要があります。
     SXGAカメラでは試してみていませんが、仕様から考えるとJPEGで取得されるような気がします。

    • この返信は4年、 9ヶ月前にsakaguchi@spiが編集しました。
    Attachments:
    You must be logged in to view attached files.
    #1260
    ohtakazuki
    参加者

    なるほど。プロセス間通信で使う共有メモリ、、、ですよね。
    勉強になりました。
    コンパイルまでして頂き、ありがとうございます。
    試してみます。

    #1271
    rikuokaji
    参加者

    まだまだ勉強中で分からないことだらけですが、質問させてください。
    コチラの投稿のようなことを
    Windows10のPython3.5環境で
    実現させたいのですが、
    sysv-ipcというパッケージのインストール方法をご教授頂きたいです。

    sakaguchi@spiさんの添付ファイルの中身が以下の様になっていましたが、
    setupファイル等がないので手が止まってしまいました。

    usr\lib\python3.4\site-packages
    のディレクトリ内に
    sysv_ipc.cpython-34m.so

    usr\lib\python3.4\site-packages\sysv_ipc-0.7.0-py3.4.egg-info
    のディレクトリ内に
    dependency_links.txt
    installed-files.txt
    SOURCES.txt
    top_level.txt
    PKG-INFO

    どうかよろしくお願い致します。

    #1272
    sakaguchi@spi
    参加者

    このAPIはPaPeRoの制御部から、Linuxのプロセス間通信の機能の「共有メモリ」というものを使って、画像データを受け渡す方式になっています。
    なので、データを受け取る側は同じマシン(PaPeRo内)で実行されている必要があります。

    WindowsのPythonから制御を行うためには、PaPeRo内で共有メモリの作成・読み取りを行い、Windows側へTCP-IPなどでデータを送信するプログラムを作成する必要があるかと思います。
    (PaPeRo内にPythonをインストールしてあれば、上記方法で作成できると思います)

    なお、上記のsysv-ipcパッケージは、PaPeRo本体の/Extension/pkgroot内に直接展開すると、Pythonから呼び出せるようになります。

    • この返信は4年、 9ヶ月前にsakaguchi@spiが編集しました。
    #1277
    rikuokaji
    参加者

    丁寧にご説明頂きありがとうございます。
    いろいろと試してみます。

6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • このトピックに返信するにはログインが必要です。