Darkside(https対応しました)

2021年10月4日(月) 21:17

デジタルズーム

 いろいろ調べているうちに、遂に真相を発見した。何のことはない、ソースリストを書き換えまくるうちにミスしていたのだった。
 2台のカメラ両方に、sensor_id=1 が記述されていたことに気付いた。ようやく、気付いた。
 そりゃあ、これじゃ絶対に2台めは成功しない。

 修正すると、あっさり2台同時に映像が取得できるようになった。なるほど、みんな困っていなかったわけだ(汗)。

 こうして、ようやくいろいろな調査がマトモにできるようになった。
 まず、カメラからのナマ映像をモーションjpeg にすることは、そもそも無理っぽい。そういう機能を、カメラが持っていないようだ。もちろん機能を持ったカメラも世の中にはあって、そういう場合はモーションjpeg を設定すると有効になる。
 フレームレートの変更は、相変わらず無理。しかしこれにより、やはりCSI接続ではデーターバスは充分に大きな帯域を持っていると判明。データーバスの帯域制限とか無関係だった。

 そのうち、また訳の分からないエラーが出てきたので調べて行くと、フレームレートの設定は無効じゃなかったのかもしれないと思われ始めた。情報表示上はフレームレートの設定を無視して最大フレームレートが常に設定されるが、ならばとフレームレートの設定を省略すると「可能な最大フレームレートを超えている」とエラーが出るのだ。
 厄介なのはこの手のエラーでカメラのクローズを通過せずに異常終了すると、もう二度と正常実行できなくなること。エラーを食らうたびに、ACアダプターを抜いて暫く放置してから電源入れ直し、リモート接続し直し、元の状況に戻して・・・と手間が掛かりまくる。

 ようやく2台同時使用に復活させ、望遠カメラの向きが悪いので調整。そのとたん、いきなりエラーが出た。
 その後は「カメラは1台しか接続されていません」と2台めをオープンできなくなった。故障?

 例によって長時間ACアダプターを抜いておき、復活させると正常に戻った。なかなか厄介だ。
 ともあれ更に、クリッピングに成功。最大解像度から中央をクロップしてデーター取得する。これにより、解像感を損なわずデジタルズーム状態。

 最終的には、ここから更に部分的に切り抜いて無線に乗せる。30メートル先の空き缶も、充分にカメラ越しで照準できそうだ。

GST_STR1 = 'nvarguscamerasrc \
  ! video/x-raw(memory:NVMM), width=1280, height=720 \
  ! nvvidconv ! video/x-raw, width=(int)960, height=(int)540, format=(string)BGRx \
  ! videoconvert \
  ! appsink max-buffers=1 drop=True'

GST_STR2 = 'nvarguscamerasrc sensor_id=1 \
  ! video/x-raw(memory:NVMM), width=3264, height=1848, framerate=(fraction)25/1 \
  ! nvvidconv left=1152 right=2112 top=654 bottom=1194 \
  ! video/x-raw, width=(int)960, height=(int)540, format=(string)BGRx \
  ! videoconvert \
  ! appsink max-buffers=1 drop=True'

cam1 = cv2.VideoCapture(GST_STR1, cv2.CAP_GSTREAMER)
if cam1.isOpened() is False:
  raise("CAM1_NG")

cam2 = cv2.VideoCapture(GST_STR2, cv2.CAP_GSTREAMER)
if cam2.isOpened() is False:
  raise("CAM2_NG")

written by higashino [Sタンク 1/16] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4