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だけで何もかも出来るわけではなく、いろんなものを「うまいこと」まとめる必要がありますよ。