Darkside(https対応しました)

2021年10月05日の記事

2021年10月5日(火) 21:57

切り出し成功

 動画として映像を取得すると基本的にアスペクト比16:9に近くなる。ラジコンカメラとしては320×240で充分だが、いちおう当面は本番480×270で試すことにする。
 いま960×540で取得しているので、一部だけを切り出して送信用映像を作る方法を調べる。

ret, img = cam2.read()
img = img[135 : 405, 240 : 720]

という感じで、取得したイメージを簡単にクロップできるようだ。

 しかし、表示サイズは変化せずデジタルズーム状態にjなってしまった。

 しばし悩んだものの、受信側で認識される画像サイズはテンプレートファイルの方に記載されていることに気付いた。
 テンプレートファイルを修正し、480×270で受信側に表示されるようにする。

 これが出来るようになったので、送信機のキー操作で切り出し領域を左右に動かすプログラムにしてみた。無事に、カメラをパンしているような状況が再現できた。
 こうなると後は、操縦用カメラの映像に傾斜センサーの情報をスーパーインポーズできれば完成だ。

@app.route('/video_feed')
def video_feed():
  return Response(get_image(240), mimetype='multipart/x-mixed-replace; boundary=frame')

def get_image(x):
  while True:
    pin1 = GPIO.input(19)
    if pin1 == 0:
      ret, img = cam1.read()
      if ret is False:
        raise("CAM1R_NG")
        continue
      ret, jpeg = cv2.imencode('.jpg', img)
      jpeg = jpeg.tobytes()
      yield (b'--frame\r\n'
          b'Content-Type: image/jpeg\r\n\r\n' + jpeg + b'\r\n')

    if pin1 == 1:
      ret, img = cam2.read()
      if ret is False:
        raise("CAM2R_NG")
        continue

      pin2 = GPIO.input(21)
      pin3 = GPIO.input(23)
      if pin2 == 1:
        if x > 0:
          x = x - 1
      if pin3 == 1:
        if x < 479:
          x = x + 1

      img = img[135 : 405, x : x+480] # y範囲, x範囲

      ret, jpeg = cv2.imencode('.jpg', img)
      jpeg = jpeg.tobytes()
      yield (b'--frame\r\n'
          b'Content-Type: image/jpeg\r\n\r\n' + jpeg + b'\r\n')

 スーパーインポーズ自体は成功しているし、傾斜センサーが読めることも確認済み。しかし、最後の成功は2年前である。それに、Cとか CPython とか使ってたはず。今の Jetson Nano 環境とすんなり合体できるかどうかは、分からない。

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

この記事へのトラックバックPingURL
Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4