📹

GStreamerで産業用カメラを使う

に公開

TechSwordでは製造業向けの外観検査ソリューションを開発しています。
製造の現場で外観検査を実行するためには、高速にカメラストリーム入力を処理できる必要があります。

GStreamerを使うと、簡単にこのストリームを処理するためのパイプラインを構築することができます。

GStreamerとは?

GStreamerは、マルチメディアデータ(映像・音声)を処理するためのオープンソースフレームワークです。
エレメントと呼ばれる処理単位を組み合わせてパイプラインを構築し、リアルタイムでのストリーミング処理を効率的に実現できます。

内蔵カメラやUSBカメラを使って、カメラ映像を出力する簡単なパイプラインを構築してみましょう。

環境構築

まずは、公式のガイドにしたがってGStreamerをinstallします。

https://gstreamer.freedesktop.org/documentation/installing/on-linux.html?gi-language=c

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 が提供されています。
https://github.com/basler/gst-plugin-pylon

利用には、Pylon SDKのインストールが必要です。

まず、ダウンロードページから、Pylon SDKをダウンロードします。
https://www.baslerweb.com/ja-jp/downloads/software/2907135243/?downloadCategory.values.label.data=pylon

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プラグインをインストールします。

リリースページよりダウンロードし、
https://github.com/basler/gst-plugin-pylon/releases/tag/v1.0.0

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解析する方法についても解説していきます!

株式会社TechSword

Discussion