スコアヘッダ認識
やりたいこと
リザルト画像中からスコア表示部分のヘッダを認識する
手段
機械学習ライブラリdlibの物体検出モジュール(structural_object_detection_trainer)を試してみる。
前準備
- dlibのインストールに数回失敗(boostが入ってなかった)
- virtualenvを久しぶりに使ったので再度Google先生に教えを請う
- python3 + opencv3でコケる
python3 + opencv3
/usr/local/Cellar/opencv3/3.1.0_3/lib/
にpython3.5がなかった
→$ brew reinstall opencv3 --with-python2 --with-python3
してみる
(ついでに --with-contrib
)
→ ok
$ pip install numpy
virtualenvから使えるようにチマチマ
$ echo /usr/local/opt/opencv3/lib/python3.5/site-packages >> $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")/opencv3.pth
データ
学習データ : 27 テストデータ : 14 ラベリングはimglabのGUIで行ったため、回転にうまく対応できているか不安
学習結果
Training accuracy: precision: 1, recall: 1, average precision: 1
Testing accuracy: precision: 1, recall: 1, average precision: 1
実験
また別のリザルトを拾ってきて、うまく認識できるか試す
import os import dlib import cv2 IMG_DIR = './experiment_img/' cv2.namedWindow("img", cv2.WINDOW_NORMAL) detector = dlib.simple_object_detector("detector.svm") files = os.listdir(IMG_DIR) for file in files: ftitle, fext = os.path.splitext(file) if fext != '.jpg': continue # Load image abspath = os.path.abspath(IMG_DIR + file) print(abspath) img = cv2.imread(abspath) if img == None: print('Failed to read image') break # Detecting dets = detector(img) for d in dets: cv2.rectangle(img, (d.left(), d.top()), (d.right(), d.bottom()), (0, 0, 255), 2) # Show image cv2.imshow("img",img) cv2.waitKey(0) cv2.destroyAllWindows()
成功例
失敗例
まとめ
回転に弱いので検出失敗したら画像を少しづつ回転させて検出させる