ラズパイで産業用画像検査機をつくれるのか? ~検討編~

ラズパイは安価なシングルボードコンピュータです。ご存知の通り性能は決してハイスペックなものとは言えません。そんなラズパイが画像検査機として利用できるのかを検討します。

ラズパイで産業用画像検査機をつくれるのか? ~検討編~

ラズパイは安価なシングルボードコンピュータです。ご存知の通り性能は決してハイスペックなものとは言えません。そんなラズパイが画像検査機として利用できるのかを検討します。

ラズパイで画像検査は可能であるか?

結論、モノによっては画像検査できると考えます。とはいえ、大手画像装置メーカと比較すると速度や精度の面で引けを取ります。簡単な検査 かつ 遅いタクト(1s程度)等制約をついた状態で有効だと思います。

検討1. カメラ

USBまたはMIPI CSI-2の規格のカメラが接続できます。

USB方式カメラ

USB接続のカメラ(以下、UVCカメラ)はWebカメラが多いです。種類は選べる幅も広く、FPSもFULL HDでもFPS 60を超えるものもあります。しかし、USB通信はCPU負荷が圧倒的に高いです。CPU負荷が高いと実際カメラ性能ではFPS60だとしても処理能力が追い付かず、実力値としての性能は低くなる恐れがあり、画像検査する計算量も制約が出るかもしれません。尚、産業用のUVCカメラあり、株式会社アルゴでは豊富なUVCカメラやMIPI対応カメラを取り扱っており、詳しくは不明だが、ドライバによってCPU負荷軽減を図っているようです。価格は5万程~。

MIPI CSI-2方式カメラ

ラズパイ専用に開発されたカメラモジュール(Picamera etc)が該当します。Picameraに関しては、画像データはCSI-2インターフェースを介してGPUに直接ストリーミングされます。そのため、わずかなCPU負荷でキャプチャできます。実際にカメラの性能通りのフレームレートにて撮像できるのを確認しました。キャプチャにCPUが占領されないため、画像処理等にCPUを充てられます。欠点はケーブルが20mm程度と短いことがあげられます。

検討2. レンズ

産業向けとなると対象物の大きさによって視野を可変させたくなります。そんな時は、レンズによって視野を変更させます。カメラによって適合できるレンズが変わってくるのは注意が必要です。ここでは大きく4種類のカメラについて検討します。

UVCカメラ

レンズを交換できないものが多く、クリップ式で後付けする広角レンズはあります。拡大レンズ等を取り付けることは現実的に難しいと思います。また、Webカメラ等のUVCカメラは安価なものが多いですが、その理由の一つとして、カメラのセンサはCMOSを採用していることが多いです。一般的にCMOSはCCDと比較して画質が劣ります。

産業用UVCカメラ

CSマウント・Cマウントのレンズをつけられるため、レンズの汎用性が高いです。

Picamera

イメージセンサとレンズが一体型になっているため、レンズを交換できません。

Raspberry Pi HQ Camera

Picameraを改善すべく、Raspberry Pi HQ Camera(7,000円弱)が発売されました。この製品はなんとCSマウント・Cマウントのレンズをつけられるようになりました(レンズ別売)。

検討4. 精度

ここでの精度は、画素数による分解能(1ピクセルあたりの実際の撮像サイズ)を示します。センサ自体の精度は実際に撮像した際に検証します。尚、この章では速度は度外視してカメラの最大画素数で計算します。(画素数が多ければ多いほどFPSは低下します)
速度が必要な場合は必要な条件で計算してください。また、画素数別に精度を比較するために撮像する横の視野を30mmと仮定します。

100万画素相当

1280×720(100万画素相当)として計算すると

画素分解能 = 30[mm] ÷ 1280[pix] = 23.4[μm]

1ピクセルの大きさは23.4μmです。

200万画素相当

1920×1080(200万画素相当)として計算すると

画素分解能 = 30[mm] ÷ 1920[pix] = 15.6[μm]

1ピクセルの大きさは15.6μmです。

800万画素相当

2592×1944(800万画素相当)として計算すると

画素分解能 = 30[mm] ÷ 2592[pix] = 11.6[μm]

1ピクセルの大きさは11.6μmです。

1200万画素相当

4056 x 3040(200万画素相当)として計算すると

画素分解能 = 30[mm] ÷ 4056[pix] = 7.40[μm]

1ピクセルの大きさは7.40μmです。

4200万画素相当

7716×5360(4200万画素相当)として計算すると

画素分解能 = 30[mm] ÷ 7716[pix] = 3.89[μm]

1ピクセルの大きさは3.89μmです。

UVCカメラ

カメラの種類は豊富にあるため、Webカメラで一般的に多く普及する種類は100万画素~200万画素です。よって30mmの横視野の画素分解能は15.6μm ~ 23.4μm 程度です。

産業用UVCカメラ

こちらもカメラの種類は豊富にあります。私が調べた中での存在する種類(画素数が少ない側は省く)としては、100万画素~4200万画素です。よって30mmの横視野の画素分解能は3.89μm ~ 23.4μm 程度です。

Picamera v2

最大800万画素です。よって30mmの横視野の画素分解能は最小11.6μm程度です。

Raspberry Pi HQ Camera

最大1200万画素です。よって30mmの横視野の画素分解能は最小7.40μm程度です。

検討3. 画像処理プログラム

画像処理は大きく2つの方針があります。自作するかオープンソースのライブラリを使うかです。前者はよほどのプログラム言語に精通していない限りお勧めできません。速度や最適なCPU負荷を考慮したプログラミングは難易度が高いからです。やるとしたら、速度の速いC,C++,Rustが考えられます。筆者のプログラムスキルでは到底実現できないので、オープンソース前提で進めます。

OpenCV

最も有名な画像処理ライブラリです。「ドキュメントが充実、使用できる言語の豊富さ、多数の画像処理機能」が特徴です。一般的にプログラム言語によって速度は変わります。例えば、pythonは速度が遅いことで有名です。それではOpenCVをpythonで操作すると遅くなるか?答えはNoです。画像処理速度は言語に依存しません。というのもpythonを介してC言語のプログラムを実行しているからです。安心して自分の得意な言語を使用できます。ただし、繰り返し処理等はその言語内で実行されるのであまり繰り返し等を多用する場合は遅くなる要因となるかもしれません。

dlib C++ Library

顔認識で一躍有名になった画像処理ライブラリです。OpenCVよりも顔認識は精度が良いとの検証もあります。機械学習がメインのライブラリのため、「表裏検出」など相似度を検出したい場合に有効かもしれません。

検討4. 速度

考えるべき時間は、画像取込と画像処理の2つです。この2つを足した時間が画像検査可能な時間(タクト)となります。

画像取込

フレームレートが直結しています。例えば、FPSが60であれば、17ms程度となります。FPSの数値が高ければ高いほど高速な検査へとつながります。

画像処理

画像処理速度は検査内容と画像サイズによって大幅に異なりますので一概にいくつと算出できません。例えば、ブロブ検査は検査速度が速いほうですが、機械学習による検査では秒単位で検査時間がかかるかもしれません。この辺りは、検証を進めていき検証値として別記事にて更新します。

検討5. 耐久性

運用する上で一番気になるのが耐久性です。安定した稼働ができることが第一の条件になります。考えられる懸念点と対策を挙げます。対策したうえで問題なく実環境で稼働の検証が大切です。

電源周り

電源とSDカードに起因する動作の不安定性が依然として残っています。CPUがSDカードにアクセス中に電源断されると簡単にデータが吹き飛ぶことも珍しくありません。その対策はSDカードROM 化することをお勧めします。サージ対策もすべきです。

耐静電気

静電気にとても弱いです。絶縁ケース等による対策が必要です。

防水性・耐油性

皆無です。防水ケース等による対策が必要です。

温度

ラズパイ4の性能ですと0~50℃と範囲は狭いです。CPUの温度が上昇すると性能が落ちる傾向にもあるので冷却ファンやヒートシンクの対策が必要です。

まとめ

環境面では多々課題はあります。現時点での考察としては検査難易度・重要度が低い検査であれば有用となる可能性は十分にあります。また、私がコストと性能を加味して最良と思う組み合わせ以下となります。

  • カメラ → Raspberry Pi HQ Camera
  • レンズ → お好きなレンズ
  • 画像処理ライブラリ → OpenCv
  • ラズパイ → ラズパイ4 8GB

今後の検証はラズパイ4 8GBとpicamera V2(これしか持っていません。。。)で進めていきます。