GStreamerで産業用カメラを使う
TechSwordでは製造業向けの外観検査ソリューションを開発しています。
製造の現場で外観検査を実行するためには、高速にカメラストリーム入力を処理できる必要があります。
GStreamerを使うと、簡単にこのストリームを処理するためのパイプラインを構築することができます。
GStreamerとは?
GStreamerは、マルチメディアデータ(映像・音声)を処理するためのオープンソースフレームワークです。
エレメントと呼ばれる処理単位を組み合わせてパイプラインを構築し、リアルタイムでのストリーミング処理を効率的に実現できます。
内蔵カメラやUSBカメラを使って、カメラ映像を出力する簡単なパイプラインを構築してみましょう。
環境構築
まずは、公式のガイドにしたがってGStreamerをinstallします。
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
実行
次のようなコマンドを実行すると、接続されているカメラのプレビュー映像を表示することができます。
gst-launch-1.0 [OPTIONS] PIPELINE-DESCRIPTION
Mac
gst-launch-1.0 avfvideosrc ! videoconvert ! autovideosink
Linux
gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink
!で区切りの文字列が、構築したパイプラインを表します。
区切られたそれぞれの項目はエレメントと呼ばれ、GStreamerはエレメントを組み合わせることでパイプラインを構築します。
例えば、上記の例で使われているエレメントだと、
-
v4l2src/avfvideosrc: カメラやファイルなどから映像を取得するソース -
videoconvert: データの変換・加工を行うフィルタ -
autovideosink: データの出力を行うシンク
このように、ソース → フィルタ → シンクのような流れでパイプラインが構成され、各エレメントが連携することで映像処理が実現されます。
上記のエレメント以外にも、次のようなエレメントがあり、さまざまな処理を組み合わせて利用することができます。
- マルチプレクサ/デマルチプレクサ: ストリームを分割したり、統合したりするもの(映像と音声など)
- エンコーダ/デコーダ: コーデックの変換などを行うもの
製造現場への適用
製造現場では、長時間安定して動作することが求められるため、専用の産業用カメラが広く使われており、外観検査アプリケーションでは対応が不可欠です。
Baslerは、世界的に有名な産業用カメラメーカーのひとつです。
こういった産業用カメラメーカーも、GStreamerで利用するためのソースエレメントを公式で提供している場合があり、そういったメーカーのカメラだと、簡単にパイプラインに組み込むことができます。
Basler用プラグインのインストール
Basler製カメラには、専用のGStreamerソースエレメント pylonsrc が提供されています。
利用には、Pylon SDKのインストールが必要です。
まず、ダウンロードページから、Pylon SDKをダウンロードします。
GStreamerプラグインのバージョンによって、対応しているPylon SDKのバージョンが違うので注意。2025年9月19日時点での最新バージョン、v1.0.0では、pylon 7.5.0 に対応しています。
ダウンロードしたdebファイルを指定してインストールします。
sudo apt-get install ./pylon_7.5.0.15658-deb0_arm64.deb
セットアップの実行
sudo /opt/pylon/share/pylon/setup-usb.sh
次に、GStreamerプラグインをインストールします。
リリースページよりダウンロードし、
sudo apt-get install ./gst-plugin-pylon_1.0.0-1.ubuntu-20.04_arm64.deb
インストールが終わると、下記コマンドで pylonsrc エレメントを確認できるようになります。
gst-inspect-1.0 pylonsrc
Factory Details:
Rank none (0)
Long-name Basler/Pylon source element
Klass Source/Video/Hardware
Description Source element for Basler cameras
Author Basler AG <support.europe@baslerweb.com>
Plugin Details:
Name pylon
Description Basler/Pylon plugin for pylon SDK 8.0.0(10)
Filename /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstpylon.so
Version 1.0.0-local
License BSD
Source module gst-plugin-pylon
Binary package GStreamer Pylon Plug-in source release
Origin URL https://github.com/basler/gst-plugin-pylon
GObject
+----GInitiallyUnowned
+----GstObject
+----GstElement
+----GstBaseSrc
+----GstPushSrc
+----GstPylonSrc
Implemented Interfaces:
GstChildProxy
Pad Templates:
SRC template: 'src'
パイプラインの先頭をpylonsrcに変更すると、Basler製カメラからストリームを取得できます。
gst-launch-1.0 pylonsrc device-index=0 ! videoconvert ! autovideosink
まとめ
GStreamerを使って、産業用カメラの映像ストリームを取得する方法について解説しました。
今後、DeepStreamを使って、ストリームをAI解析する方法についても解説していきます!
Discussion