🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

9142閲覧

PythonでRealSenseの映像を保存・再生したい

tsuna0058

総合スコア4

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/10/23 04:31

前提・実現したいこと

AnacondaでPythonを使い、RealSenseD435を動かして色々と試しているところです。
そこで今後の作業効率向上のために、RealSenseで撮った動画を保存して、別のプログラムでもそのファイルを読み込んで深度データの利用や動画の加工などをできるようにしたいと考えています。

後述のサイトのプログラムを参考に試してみたところ、動画をbagファイルで保存するところまではできました。しかし、保存したファイルを読み込むプログラムでエラーが出てしまいます。
色々調べてみましたが、何が間違っているのか理解できずに困っております。

どうすればbagファイルを読み込んで利用することができるのでしょうか?
また、読み込んだファイルからは、RealSenseで撮っている映像をリアルタイムで処理している時と同じように、深度データなどを取得することはできますか?

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) <ipython-input-2-3b47aa8de336> in <module>() 20 21 # Start streaming ---> 22 pipeline.start(config) 23 24 try: RuntimeError: Failed to resolve request. Request to enable_device_from_file("./data/d435data.bag") was invalid, Reason: Failed to create ros reader: Error opening file: ./data/d435data.bag

該当のソースコード

参考サイト➀
動画の保存・読み込みはこちらのサイトを参考にしました。
http://mirai-tec.hatenablog.com/entry/2018/07/29/150902

参考サイト➁
基本のプログラムはこちらのサイトのものを使用しました。
https://qiita.com/namahoge/items/6e9c7a0a1a27c99a6390

➁のプログラムのconfigの部分に、➀を参考にして下記の一行を追加いたしました。

config.enable_device_from_file('./data/d435data.bag')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

bag file を再生する場合、config.enable_stream はいらないようです。
もしくは、bag file と同じ設定にしないと "Failed to resolve request." が出るようです。
設定自体は realsense-viewer で確認できます。

以下、bag ファイルから RGB カラー画像を取り出して mp4 に変換するスクリプトを載せておきます。

import pyrealsense2 as rs import numpy as np import cv2 import glob import os import argparse parser = argparse.ArgumentParser() parser.add_argument('--visualize', action='store_true') args = parser.parse_args() bagfiles = glob.glob('*.bag') num_bags = len(bagfiles) for progress, bagfile in enumerate(bagfiles): mp4file = os.path.basename(bagfile).split('.')[0]+'.mp4' if os.path.isfile(mp4file): continue config = rs.config() config.enable_device_from_file(bagfile) pipeline = rs.pipeline() profile = pipeline.start(config) device = profile.get_device() playback = device.as_playback() for stream in profile.get_streams(): vprof = stream.as_video_stream_profile() if vprof.format() == rs.format.rgb8: frame_rate = vprof.fps() size = (vprof.width(), vprof.height()) fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') # ファイル形式(ここではmp4) writer = cv2.VideoWriter(mp4file, fmt, frame_rate, size) # ライター作成 print('{}/{}: '.format(progress+1, num_bags),bagfile, size, frame_rate) try: cur = -1 while True: frames = pipeline.wait_for_frames() color_frame = frames.get_color_frame() color_image = np.asanyarray(color_frame.get_data()) color_image = cv2.cvtColor(color_image, cv2.COLOR_RGB2BGR) writer.write(color_image) if args.visualize: cv2.namedWindow(bagfile, cv2.WINDOW_AUTOSIZE) cv2.imshow(bagfile, color_image) cv2.waitKey(1) next = playback.get_position() if next < cur: break cur = next finally: pipeline.stop() writer.release() cv2.destroyAllWindows()

投稿2021/04/13 23:22

編集2021/04/13 23:24
mah110.matthew

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問