Machine Vision
マシンビジョンは、カメラ、制御された照明、画像解析を用いて、生産ライン上の部品をリアルタイムで検査、測定、識別し、位置決めします。
マシンビジョン(MV)とは、産業オートメーションにおいて、カメラ、光学機器、照明、画像解析を使って製品を検査し、部品を測定し、コードを読み取り、機械を誘導することです。すべての結果は、部品の排除や仕分け、ロボットの操縦などの動作につながります。これは、制御ループに組み込まれたコンピュータービジョンです。包装ラインのビジョンシステムは、ラインのサイクルタイム内、つまり高速ボトリングラインでは部品ごとに数十ミリ秒以内に各判断を完了し、デジタルI/Oまたは産業用ネットワークを通じてプログラマブルロジックコントローラー(PLC)に結果を通知する必要があります。タスクは通常、4つの種類に分類されます。誘導(ロボット用の部品位置特定)、検査(欠陥や欠落した特徴の検出)、測定(寸法の測定)、識別(光学文字認識によるバーコード、データマトリクスコード、印刷文字の読み取り)です。
マシンビジョン、コンピュータービジョン、画像処理の違い#
マシンビジョンは、ノイズ除去やエッジ強調によって画像を変換する画像処理と、あらゆる環境の画像から意味を抽出するコンピュータービジョンを、産業用機械に適用します。マシンビジョンは、ハードウェアとその統合によって定義されます。具体的には、制御された照明と光学機器、ライン上のセンサーでトリガーされるカメラ、決定論的なタイミング、アクチュエーターに配線された出力です。3つの分野の違いは主に適用範囲にあり、最新のマシンビジョンシステムでは、他のコンピュータービジョンアプリケーションと同じディープラーニングモデルが使われています。
マシンビジョンシステムの構成要素#
- 照明: 照明によってカメラに見えるものが決まります。バックライトは部品をシルエットにしてエッジを正確に測定できるようにし、拡散ドームライトは光沢面の反射を抑え、低角度の暗視野ライトは傷や浮き出し文字を目立たせ、投影したレーザーラインは3Dの高さプロファイルを明らかにします。
- 光学機器: テレセントリックレンズは、部品までの距離が変化しても倍率を一定に保つため、部品の位置に左右されずに測定できます。
- カメラ: エリアスキャンカメラは1回の露光で個々の部品を撮影し、ラインスキャンカメラは鋼材、紙、織物などの連続素材を1行ずつ画像化します。3Dセンサーはレーザー三角測量、ステレオビジョン、または飛行時間方式を使用します。GigE Vision、USB3 Vision、GenICamなどのインターフェース規格により、ソフトウェアから異なるベンダーのカメラを制御できます。
- 処理とI/O: 光電センサーまたはエンコーダーが撮影をトリガーし、スマートカメラまたは産業用PCが解析を実行します。結果はPLCに送られ、近年はGPUまたはNPUを搭載したエッジハードウェアが使われることも増えています。
ルールベースのツールとディープラーニング#
従来のマシンビジョンソフトウェアは、決定論的なツールを連結して処理します。しきい値処理、ブロブ解析、エッジ検出、パターンマッチング、エッジ間の距離を測るノギス型ツールなどです。この例では、コインの写真にブロブ解析を適用して、部品数を数え、大きさを測定します。
import numpy as np
from scipy import ndimage as ndi
from skimage import data, filters, measure, segmentation
# Grayscale photo of 24 Greek coins on a gray background, bundled with scikit-image
image = data.coins()
# Seed the background (dark) and the parts (bright), then grow both along edge strength
markers = np.zeros_like(image)
markers[image < 30] = 1
markers[image > 150] = 2
mask = ndi.binary_fill_holes(segmentation.watershed(filters.sobel(image), markers) == 2)
# Blob analysis: label each part, ignore specks, and gauge each diameter in pixels
parts = [r for r in measure.regionprops(measure.label(mask)) if r.area > 300]
diameters = [part.equivalent_diameter_area for part in parts]
print(f"{len(parts)} parts, diameters {min(diameters):.0f}-{max(diameters):.0f} px")24 parts, diameters 37-63 pxが出力されます。すべてのコインが検出され、測定されています。本番システムでは各直径を許容範囲と比較し、結果をPLCに送信します。この写真では背景が左上に向かって明るくなり、コインと同程度のグレー値を持つため、単一の大津の大域しきい値処理では画像が96個のブロブに分割されます。本番ラインでは、照明を制御することでこの問題を防げます。
ルールベースのツールは高速で説明可能であり、形状が固定された部品には正確ですが、木目、食品、さまざまな形の化粧品の欠陥など、自然なばらつきには対応しにくい場合があります。物体検出、インスタンスセグメンテーション、異常検知のモデルは、例からそうしたケースを学習します。欠陥画像で学習したYOLO26セグメンテーションモデルは、傷や亀裂をピクセル単位で輪郭化します。UltralyticsのエクスポートモードでTensorRTまたはOpenVINOに変換すると、産業用PCまたはNVIDIA Jetson上でリアルタイム推論を行い、ラインのサイクルタイムに収めることができます。
実際のアプリケーション#
- 自動光学検査: 電子機器のラインでは、プリント基板を検査し、部品の欠落、位置ずれ、逆向きの取り付け、はんだ接合部の不良を検出します。部品を配置する前に、3Dはんだペースト検査を行うこともよくあります。
- 医薬品・包装検査: システムは充填量、キャップ、ラベルを確認し、OCRで各パッケージに印刷されたロットコードと使用期限を読み取ります。
- ビジョンガイドロボティクス: ロボットは3Dセンサーと姿勢推定を使い、無造作に積まれた部品の位置を特定して、ビンピッキングに適したつかみ方を選びます。
- 自動車製造: 3Dセンサーが車体パネル間の隙間と段差を測定し、車両がラインを出る前にカメラで塗装面と溶接部を確認します。










