IoT+カメラ=OpenCV

製造や倉庫の現場では、パソコンではなく、IoTでは、超小型マイコン(Raspberry piなど)が使われるようになっています。

これらのボードには、キーボードは「ない」ことが多く、そのかわり「物理的なボタン」「センサー」「カメラ」を使って入力します。

(場所の制限があってPCが置けない、手袋をしていたり、手が汚れているから、キーボードに触れられない、ということもあります。)

ところで、最近では、お客様企業自身でRaspberry pi+カメラを購入し、据え付けることが簡単にできるようになりました。

一緒にシステムやPythonでプログラムを組んだりしますが、そのときにカメラの処理で色々役立っているのが OpenCVです。

 

ここでは、一通りセットアップが済んでいるものとして、Pythonで色々やってみましょう。

 

まず、

import cv2

です。

 

画像の読み込みは

img = cv2.imread(“hogehoge.jpg”)

です。

ここで、

>>>print(type(img))
<class ‘numpy.ndarray’>

 

imgは「numpyの配列」なんですね。(numpyはPythonに標準付属しているものではないのですが、ここは後々感動できるでしょう)

画像の表示は、

cv2.imshow(‘Original Image’, img)

です。

 

画像の幅、高さを取得するには、 shapeから

height, width = img.shape[0:2]

です。

 

画像をセンターを中心にN度回転するには、まず行列を作ります。(度、なんですね)

rotationMatrix = cv2.getRotationMatrix2D((width/2, height/2), N, 1)

 

その後、アフィン変換命令をつかって、行列と画像を演算します。(演算は理系の人は大丈夫でしょう)

rotatedImage = cv2.warpAffine(img, rotationMatrix, (width, height))

 

これを表示すればいいですね。

cv2.imshow(‘Rotate’, rotatedImage)

 

以上です。

この方法は静止画でも動画でも使えます。

カメラの取り付けや表示にあわせて微妙に回転・拡大縮小・反転・台形補正など、こういう感じで簡単に出来ます。

簡単ですよね。

 

カメラに映った「QRコード」「文字」「外形形状」を認識できますが、

ほかにも、映像やセンサのデータを使い・・

 人がはいってはいけないところに人がいたり・・

 材料がセットされていなかったり・・

 ゴミが混じっていたり・・

 寸法がおかしかったり・・

 温度や圧力がおかしかったり・・

すると、必要なデータをサーバーに送ったり、「ピンポーン!」みたいなことができます。

 

 

画像やセンサー波形データを、判断する部分は、「AI機械学習」とよばれる分野。

画像やデータを、クラウドや社内のデータベースに入れる部分はITとよばれる分野。

IoTや現場の高度なソフトウエア処理は「エッジコンピューティング」とよばれる分野。

専用の機器や機械類を動作させるのは「FA」とよばれる分野。

 

AIだけで何もかも出来るわけではなく、いろんなものを「うまいこと」まとめる必要がありますよ。