2411030830 追記修正
2411032220 赤文字部分追記
【目的】
製造現場などで不良項目ごとの不良発生数を自動記録したい
【目標】
白あるいは黒の碁盤目上の赤マグネットを計数
【想定手順】
1:白あるいは黒の碁盤目(水平30列X垂直20行)の角座標を検出。
碁盤は磁石吸着可能な平板。
2:広角曲歪(太鼓)の補正
3:角座標に応じて碁盤目の画像を長方形化(射影変換)
4:変換後の画像内の各マスにおける赤マグネット有無を検出。
5:列ごとの一番高い位置の赤マグネットのある行番号を最大行番号とする。
行番号は一番下が1、上へ1ずつ増。
列番号は一番左が1、右へ1ずつ増。
6:各列の最大行番号をリストに格納、変換後の画像とともに記録
【達成方法】
・Windows11
・Python3、openCV
・市販WEBカメラ(UVC規格対応)
【事前調査】
出典1
OpenCVとArUcoを使用した画像の射影変換
https://neenet-pro.com/python-opencv-aruco-example/
・対象の4角抽出用
出典2
OpenCVでオセロ盤の盤面を認識する
https://qiita.com/tanaka-a/items/fe6b95ae922b684021cc
・射影変換はそのまま使える
・今回の手順では単純にRGBの強度で認識できるのではないかと思われるが、
照明によるマグネットのテカリの影響など不具合の想定の参考となる。
出典3
20mmならつまみやすく、かつ量産市販で安価。
碁盤目は25mmマスで想定するとよさそうだ。
出典4
手元のRX100が初代機でWEBカメラ非対応だそうで、
この際、安いWEB会議カメラでどうなるかも見ておこうということで入手。
今日ポチって明朝に着荷というのもすごいのに、FHD画像が2000円以下で
得られるとな。
列方向 1920画素÷30マス=60画素以上/マス
行方向 1080画素÷20マス=50画素以上/マス
画面に全部キレイにはいらないし、射影補正でこれの半分以下になるとしても、
今回目的ならばある程度の自動計数に耐えるかも。検査用ではなく計数用なので高級な工業用カメラである必要もなさそうだし、
静止画に高速シャッターは不要で、30fpsもあれば十分、ということでソフト開発用ならこれで十分の感・
ただし現場で使う本番用は、↓こういうので簡単に画角を調整して、
かつ安価に交換できるのがよいかと思っています。
2411030830追記
今回のカメラは広角95度。
比較的近距離からの撮像は大きな太鼓形の歪がありました。
1m以上離しても周辺は太鼓になります。上下よりも左右が膨らみが大きい。
広角で近距離ならこうなるのはある程度当たり前だと気づくも、今更。。。
openCVでこの歪も補正できるようです。
出典5
OpenCV&Pythonで、簡単に魚眼レンズの歪み補正を行う方法
事前にチェスボードを準備し、それを使用予定の距離で真正面から撮像し、
魚眼レンズの歪補正計数を求めるそうです。
Pythonのコードも掲載されていてありがたいです。
歪補正計数を用いて処理した画像を射影変換する手順になりそうです。
2411030830追記終了
解説の詳しい出典はこちら。
出典6
OpenCVによるカメラキャリブレーション
補正用画像は少なくとも10枚以上撮れとのこと。
カメラレンズのキャリブレーションとしてはそれが正しいのだと思いますが、
今回目的の固定位置固定対象撮像ならば1枚でもよさそうな・・・
あ。でも先の出典5では25枚撮像するようです。
このあたりは、やってみてということで。
2411032220追記
補正の手順を読んでみましたが、なんかよくわからなくなりました。
再度ネット上を探して↓コレがわかりやすいかったです。
出典7
[コピペで試せる] Python OpenCV で行う、カメラキャリブレーション
学生向けでしょうか、文章の端折りがなくて、すーーっと読んでいけました。
たぶん先の出典5,6で頭を少し鍛えたからかもしれません。
表題に書いてあるとおりコピペで行けそうです。
が、それは後日。
2411032220追々々記終了
以上、追記中。以後も進捗次第追記予定 2411032220