Numpyで高速に四角書き込みする前に、それ以外の部分を仕上げることにした。


まず、状態・判定を絵で表示して、わかりやすくする。

「準備完了」絵、「検査中」絵、「Good」判定絵、「Bad」判定絵をGIMPで作成し、400x300のpngファイルで保存した。


これをメモリに先に読み込み、メモリから高速に表示・更新しようとしたが、「準備完了」の表示はできたが、他の絵に更新ができない。

いろいろ調べると、OpenCVを使用すればできるようだが、できるだけシンプルに仕上げたい。

かなり試行錯誤した結果、表示だけメモリに読み込み表示、他はSSDから読み込む方法で妥協した。

image_path_push = 'C:/code/py311/Ta2S Inspection soft/pic_PUSHStart.png'
image_path_inspect = 'C:/code/py311/Ta2S Inspection soft/pic_Inspect.png'
image_path_good = 'C:/code/py311/Ta2S Inspection soft/pic_GoodPUSHStart.png'
image_path_bad = 'C:/code/py311/Ta2S Inspection soft/pic_BadPUSHStart.png'
image_push = sg.Image('C:/code/py311/Ta2S Inspection soft/pic_PUSHStart.png')

(image_path_pushは不要だが、しばらく残す)

layout = [
    [sg.Frame('', [
        [sg.Image(data=cv2.imencode('.png', frame_resized)[1].tobytes(), key='-IMAGE-')]], key='-FRAME1-'),
     sg.Frame('', [[sg.Text('反射光感度  高感度:10<==>70:低感度  n/255')],
                   [sg.Slider((10, 70), 30, 10, orientation='h', key='SLIDER1', enable_events=True)],
                   [sg.Text('透過光感度  高感度:10<==>70:低感度  n/255')],
                   [sg.Slider((10, 70), 30, 10, orientation='h', key='SLIDER2', enable_events=True)],
                   [sg.Text(' ')],[sg.Text(' ')],
                   [sg.Text('検査スタート')], [sg.Text('[PUSH]または[スペース]キーを押してください')],
                   [sg.Text(' ')],
                   [sg.Text('終了')], [sg.Text('[ESC]キーを押してください')],
                   [sg.Text(' ')],[image_push]])]
]


    elif event == ' ':
        image_push.update(filename=image_path_inspect)

欠点座標を収めるpos_listに数値が入っているかどうかで判断して更新。

        window['-IMAGE-'].update(data=cv2.imencode('.png', frame_resized1)[1].tobytes()) # BGR=>RGB表示
        if pos_list == []:
            image_push.update(filename=image_path_good)
        else:
            image_push.update(filename=image_path_bad)

シンプルでGOOD! うれしい!!


そうこうしていると、撮影前に毎回設定している露光調整が、

cap.set(cv2.CAP_PROP_EXPOSURE,  r_time)

効いていないことがあることが判明。

確認してみると、7秒もasynsioを入れないと、安定しない。

        asyncio.run(asyncio.sleep(7))

泣く泣く露光調整を初期設定で固定にした。


更に、カメラをずらしてみたりしていると、平均値計算を始める前に、撮影が終了していないことが、判明。

1回前の撮影データで計算・判定していただと!!!

確認してみると、2秒もasynsioを入れないと、安定しない。

        ret, frame2 = cap.read()
        asyncio.run(asyncio.sleep(2)) # 撮影2秒待ち/2秒入れないと前の画像が残る

撮影は絶対必要なので、2秒asynsioを入れて対処。


VSCodeで動くようになったので、

次は、細かな不具合修正と、

NotePCデモ用の低HD解像度1366x768バージョンの作成、

バッチファイル起動での動作チェックに進む。

コメント

このブログの人気の投稿