動作実演できるように、この連休を利用し、準備していたが、IMX577カメラモジュールを使用すると、どうも撮影画像が3分割にズレて表示されることが多々ある。タイミングの問題か、とも思い、タイミング調整をしてみるが、

asyncio.run(asyncio.sleep(0.5))

IMX577カメラモジュールだけ発生するので、IMX577カメラモジュールの問題かもしれない。

どちらにしろIMX577カメラモジュールは、レンズが100度で他の75度とは焦点距離が違いすぐには使用できないため、動作実演するにはカメラモジュールを上下させる機構が必要になるが、いい案が思いつかない。


あきらめて、IMX298カメラモジュールに付け替えて動作確認を始めたが、解像度を4000x3000から4656x3496に切り替えられず、撮影画像も暗く、変なバグ持ちになっている。

いろいろ修正してみたが、わからない。IMX298カメラモジュールが4000x3000にも対応しているだけに、なかなか原因がわからない。


最終的にわかったのは、

def camera_setting(CAY1,CAX1,DL,VCAP1,EXP1,IMX1,FCS): # カメラの設定
    global cap,ret,frame
    os.environ["OPENCV_VIDEOIO_MSMF_ENABLE_HW_TRANSFORMS"] = "0" # カメラ起動の短縮
    print(datetime.datetime.now(), 'Capture用カメラ割り当て・設定')
    # 複数カメラ接続では、過去にWindowsに認識させた順に、勝手に0から番号が割り振り直されるので注意
    # Desktopは0、カメラ有りのNotePC等では1等にする必要あり(内臓が優先される)
    cap = cv2.VideoCapture(VCAP1, cv2.CAP_DSHOW)
    asyncio.run(asyncio.sleep(0.5)) # 反映待ち

IMX298は、関数内でカメラNo.を指定する時に、反映待ち時間を入れないと、IMX577の情報が残ってしまい、誤動作するようだ。

原因は、IMX298の反応の遅さ、Windows11をシャットダウンせずにカメラを付け替えた、などが考えられるが・・・

検証は、後日に先送り!


また、global変数にcapを指定すると、

def print_camera_properties(cap): #カメラ設定の読み込み・表示、IMX298は非対応
    print("カメラプロパティ:")
    print(" - CAP_PROP_FRAME_WIDTH: ", cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    print(" - CAP_PROP_FRAME_HEIGHT: ", cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

カメラプロパティ:

 - CAP_PROP_FRAME_WIDTH:  4656.0

 - CAP_PROP_FRAME_HEIGHT:  3496.0

IMX298で読み出せなかったカメラの解像度が読み出せるようになり、動作確認がしやすくなった。IMX298は非対応のコメントも消していこう。


動作実演できないかもと、冷や汗ものだったが、何とかなって良かった。

本当は、続けてノートパソコンにコピーして動作確認すべきだが、ちょっと逃避中。

コメント

このブログの人気の投稿