画像から

グラフ値を読み取る

ヘンテコ技術

PyLadies Tokyo

@maaya8585

https://slides.com/maaya/pyladies-xr-opencv/live

声帯損傷のため声が出ません・・・

ごめんなさい・・・

ので資料に文字多めです・・・

Today's Topic

  • Open CV 便利だよ!

  • 便利すぎて黒魔術としても使えるよ!

Who am I....?

Maaya Ishida   @maaya8585

  • PyLadies Tokyo の人

  • Cloud Solution Architectな人

  • ディズニーの人

  • フラの人

Agenda

  • Open CV とは ~おさらい~

  • 魔術事例

  • まとめ

Agenda

  • Open CV とは ~おさらい~

  • 魔術事例

  • まとめ

What is Open CV

  • Open Source Computer Vision Library

  • BSDライセンス(学術・商用OK)

  • Windows/macOS/Linux/iOS/Android で利用可能

  • C++ / Python / Java / (C)

    • OpenCV3.0からPython3にも対応が始まったが、Python3.5以降を使うとバグに当たることがある....

Open CV できること

  • フィルター処理

  • 変形処理

  • 輪郭抽出

  • オブジェクト追跡

  • 領域分割

  • カメラキャリプレーション

  • 特徴点抽出

  • 深度推定

  • 物体認識&機械学習

Open CV できること

  • フィルター処理

  • 変形処理

  • 輪郭抽出

  • オブジェクト追跡

  • 領域分割

  • カメラキャリプレーション

  • 特徴点抽出

  • 深度推定

  • 物体認識&機械学習

画像処理の何でも屋さん

Open CV できること

  • フィルター処理

  • 変形処理

  • 輪郭抽出

  • オブジェクト追跡

  • 領域分割

  • カメラキャリプレーション

  • 特徴点抽出

  • 深度推定

  • 物体認識&機械学習

Open CV できること

  • フィルター処理

  • 変形処理

  • 輪郭抽出

  • オブジェクト追跡

  • 領域分割

  • カメラキャリプレーション

  • 特徴点抽出

  • 深度推定

  • 物体認識&機械学習

Pillow のがお手軽

Agenda

  • Open CV とは ~おさらい~

  • 魔術事例

  • まとめ

mission

稼働している機械の

異常判定をせよ。

mission

職人技だった故障判定を機械にやらせたい。

mission

職人技だった故障判定を機械にやらせたい。

平均グラフ

正常

異常

mission

職人技だった故障判定を機械にやらせたい。

  • 平均データからX離れた点がY個以上あったらアラート

  • Deep Learningの故障予測モデルとかを流用してアラート

などなど 何かしらで実現できそうやな!

数値でもらえば。

Pre-mission

【緊急クエスト】~ そろそろOpenCVの季節です ~
難易度★★★★☆☆☆
[メイン依頼]  グラフ画像から数値を取得せよ

[目的地]  MySQL Data Base

[報酬金]  ?????z
[契約金]  ?????z
[狩猟環境] Windows7 / Python3 

[特殊条件] 僕にもわからないにゃ! 都度聞いてくれにゃ!

[依頼者]  IoTやりたいにゃんこ社員

Pre-mission

  • 画像を2値化する

  • 輪郭抽出を行う

  • 不要な抽出点の削除・補完を行う

グラフ線の画像座標が分かれば比較ができる

Pre-mission

画像を2値化する

import cv2

IMAGE_DIR = os.path.abspath(os.path.dirname(__file__)) + '/comparison/'

source = cv2.imread(IMAGE_DIR + '1.png')

# モノクロ画像化
gray = cv2.cvtColor(imread, cv2.COLOR_RGB2GRAY)
# 2値化
ret, th1 = cv2.threshold(gray, 130, 255, cv2.THRESH_BINARY)

Pre-mission

輪郭抽出

import cv2

# 輪郭抽出
ret, contours, hierarchy 
         = cv2.findContours(th1, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

  • cv2.RETR_TREE : 全輪郭を検出し、全階層情報を保持する. その他 RETR_LIST などがある

  • cv2.CHAIN_APPROX_NONE: 近侍方法のフラグ保持方法。 取得した輪郭を全部保持する。 その他 CHAIN_APPROX_SIMPLEなどがある

Pre-mission

輪郭抽出

cv2.CHAIN_APPROX_SIMPLE

cv2.CHAIN_APPROX_NONE

Pre-mission

削除と補完

Pre-mission

削除と補完

# coordinates => 先ほど輪郭抽出で得た座標配列

# X座標準にソート
coordinates.sort(key=lambda x: (x[0], x[1]))

# 外枠データ(xもしくはyに0もしくはmax値を持っているデータを削除

# x=1-max値までのデータが揃っているかチェック
#揃っていない場合は一つ前の値と同じ値を登録する

全部描こうかなとか思ったけどクソ長いのでやめた

Pre-mission complete!

数値化できれば

何でもできるね!!

数値さいこう!!

 

# 今回の数値は他と比較できないけれども

Debug

def display_image(img):
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

OpenCVは作業途中の処理を可視化できる

debugに使う処理はモジュール化しておくのがオススメ

IMAGE_DIR = os.path.abspath(os.path.dirname(__file__))
image_source = cv2.imread(IMAGE_DIR + '/2.png')

gray = cv2.cvtColor(image_source, cv2.COLOR_RGB2GRAY)
display_image(gray)

ret, th1 = cv2.threshold(gray, 130, 255, cv2.THRESH_BINARY)
display_image(ret)

Agenda

  • Open CV とは ~おさらい~

  • 魔術事例

  • まとめ

Agenda

数値さいこう!!

OpenCVは画像加工ライブラリというよりは

画像分析ツールだよ

画像系魔術依頼も怖くない!!!

怖いけど。

Fin.

OpenCV

By maaya ishida

OpenCV

  • 2,182