OpenCVとPythonでPLCnext上の赤色ライトを検出
OpenCVは最も使用されているコンピュータビジョンライブラリの一つです。顔認識、物体追跡、バーコードスキャンなどに使用でき、このブログでより重要なのは、ライトがオンかオフかを検出することです。このブログでは、PLCnextでOpenCVとPythonを始めるのを助け、画像を前処理して赤色ライトを検出する小さなコードサンプルを紹介します。このブログは、以前のブログ記事で説明されたPLCnextコントローラでのOpenCV使用の代替方法です。
前提条件
今日はAXC F 2152コントローラを使用しますが、AXC F 1152でも同じ手順を実行可能で、AXC F 3152とRFC 4072sでも非常に類似の手順で可能です。今日の唯一の前提条件は、使用するコントローラにBalena Engineがインストールされていることです。Balena Engineのインストール手順はPLCnext GitHubページで確認できます。8GBのSDカードの使用を推奨します。SSH接続とWinSCPを使用してコントローラにアクセスします。これらのツールの使用方法はこのブログの範囲外です。フォーラムや簡単なGoogle検索で良いガイドが見つかります。
OpenCV-Pythonイメージのダウンロード
Balena Engineのインストール後、コントローラへのSSHセッションを開始し、再度rootユーザーとしてログインします。
次のコマンドを実行し、コーヒーでも飲みながら待ちましょう。イメージがコントローラにダウンロードされるまでしばらくかかります。
balena-engine pull pxcbe/opencv-python
インストールの検証
このステップでは、イメージを検証し、イメージにインストールされているOpenCVのバージョンを取得します。次のコマンドを実行します。
すべてが順調なら、コンテナがOpenCVバージョンを出力し、自身を削除します。執筆時点でのインストールバージョンは:4.1.0
balena-engine run -it --rm \ pxcbe/opencv-python \ python -c "import cv2; print(cv2.__version__)"
作業ディレクトリのセットアップ
WinSCPを開き、/opt/plcnextディレクトリにopencvフォルダを作成します。パスは/opt/plcnext/opencvになります。
このリポジトリの内容をダウンロードし、先ほど作成したディレクトリにコピー&ペーストします。
.jpgを独自の画像に変更し、app.pyをニーズに合わせて修正できます。
スクリプトのテスト
GitHubページからダウンロードしたスクリプトをテストし、コンテナをインタラクティブに実行します。rootとして次のコマンドを実行:
balena-engine run -it --rm -v /opt/plcnext/opencv/:/opencv_app pxcbe/opencv-python /bin/bash
コンテナ内のシェルセッションに入ります。opencv_appディレクトリに移動:
cd opencv_app
スクリプトを開始:
python app.py
シェルに出力が表示され、/opt/plcnext/opencvフォルダに3つの新しい画像が作成されるはずです。WinSCPフォルダを更新して初めて見える場合があります!
何をしたか?
ライトがオンかオフかを判断する前に、初期画像(この場合「open_cv.jpg」)に対していくつかの前処理を行う必要があります。最初に通常行うのは、計算能力を節約するために画像をリサイズすることです。これはapp.pyファイルの12行目(cv2.resizeコマンド)で行われます。出力は元の画像と同じに見えますが、初期画像の50%のサイズです。
次のステップは画像をグレースケールにすることです。17行目の関数でグレースケール化し、結果は以下の画像のようになります。
前処理パイプラインの最後のステップは画像の閾値処理です。特定の値未満のピクセルは黒、同じ値以上のピクセルは白になります。画像の閾値処理にはいくつかの方法があり、中にはより良い結果をもたらすものもあります。しかし、今日は21行目のcv2.thresholdで十分です。結果は次の画像にあります。白と黒のピクセルのみを持つ小さな画像サイズになりました。定点カメラからライトがオンかどうかを検出するシンプルな方法は、関心領域(ROI)を定義し、白いピクセルをスキャンすることです。ただし、より複雑なアルゴリズムの方がより良い結果をもたらします。このトピックを扱った他のブログを「参考資料」にリンクしました。
参考資料
https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html
https://docs.opencv.org/master/dd/d43/tutorial_py_video_display.html
https://medium.com/@kenan.r.alkiek/https-medium-com-kenan-r-alkiek-traffic-light-recognition-505d6ab913b1
このビデオを視聴するにはマーケティングCookieを承認してください。
このビデオを視聴するにはマーケティングCookieを承認してください。
コンテナについてまだ不安がありますか?
以下のブログが興味深いかもしれません:
https://www.plcnext-community.net/en/hn-makers-blog/481-node-red-and-getting-started-with-docker.html
https://www.plcnext-community.net/en/hn-makers-blog/482-node-red-with-docker-tips-and-best-practice.html
https://www.docker.com/resources/what-container
免責事項
これはPLCnextコントローラでOpenCVを使用する方法の一つです。このブログでは、PLCnextターゲット向けにOpenCV C++をクロスコンパイルする方法を学べます。より手間がかかるように見えますが、本番システムでは確実に価値があります。プロジェクトにとって最適な方法が何か、関係者と議論して十分な検討を行ってください。
このイメージは定期的なアップデートを受けません。このプロジェクトの拡張やメンテナンスに興味がある場合は、axsupport@phoenixcontact.beまでご連絡ください。
アプリケーションによって大きく異なるため、コンテナを無期限に実行する方法は意図的に省略しました。
自分で適切な方法を見つけるか、プロジェクトに関わる人々と相談してください。
クレジット
コンテナの作業は、mohaseebの作業に大きく基づいています。
産業技術
- Raspberry Piでリアルタイム顔認識:エンドツーエンドガイド
- Raspberry PiとOpenCVによる自動ビジョンベース物体追跡
- LEDストリップアクセサリー完全ガイド:接続、制御、カスタマイズ
- Mastercam Unit 7:画像管理とツールパス作成
- PLCnext AXC F 2152変数にアクセスするためのPython RESTライブラリ
- TableauダッシュボードでPLCnextをリアルタイム監視
- PLCnextクラウドデータからPower BIダッシュボードを作成
- Azure IoT HubのPLCnext ControlデータでリアルタイムGrafanaダッシュボードを作成
- JlinkでPLCnext Control上のJava 9アプリを最適化
- 新型デュアルチップ検出器が量子光の超高速測定を実現
- Python 演算子完全マスター: 包括的ガイド