検索系の相談で、図面を全文検索できないかといった相談があり
実現確度の検証のためにOpenCVのチュートリアルをやってみた。
以下は自分が行った手順の覚書です
前提
OS:
Windows10 64bit
Python:
Python3.7(Anaconda3)
目標
OpenCV環境の構築から、簡単なチュートリアル実施まで(とりあえず顔認識くらいまでは実施したい)
準備
アナコンダのインストール
OpenCVのwhlをダウンロード
・上のタブからRELEASESをクリック。
・OpenCV – 4.2.0のSourcesをクリック
・zipを解凍して、opencv_python‑4.2.0‑cp37‑cp37m‑win_amd64.whlを取り出す
※Githubから取得したファイルは、2020/06時点でエラーとなるため公式から取得したファイルを使用しました
アナコンダのナビゲータでOpenCV環境を作成
numpy と matplotlib をインストール
conda install numpy
pip install matplotlib
★ここまでに参考にした記事
基礎構築時に参考にした記事
https://qiita.com/FukuharaYohei/items/5d49938ffd33d198f0c0
CascadeClassifierエラーの対策の為に参考にした記事
http://sh0122.hatenadiary.jp/entry/2017/10/30/210411
チュートリアル
お試し的にやってみるので、まずは顔認識をしてみようと思います。
基礎が理解できればあとは基礎をカスタマイズしていくだけです。
カスケードファイルの取得
分類や認識に必要な特徴量をすでに学習済みデータが集約されたxmlファイルです
今回は顔認識の為に『haarcascade_frontalface_default.xml』を使用
https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
顔認識に使用する写真
今回使用する写真はSNOWで可愛く加工した自分の写真です。
これ認識できるのか・・・?
pythonコードをかいてみる test.pyという名前で以下の処理を書きます
import cv2
# 分類器
cascadeFile = "C:\imagepy\haarcascade_frontalface_default.xml"
# 分類器の設定
cascade = cv2.CascadeClassifier(cascadeFile)
# 入力ファイル
imageImput ="C:\imagepy\myface.jpg"
# 入力ファイルをリードする
image = cv2.imread(imageImput)
#グレースケールにする
imageGray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 出力ファイル
imageOutput = "C:\imagepy\out.jpg"
# 顔を認識する
facerect = cascade.detectMultiScale(imageGray, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))
# 顔を検出できた際の処理
if len(facerect) > 0:
# 顔に枠を付ける
for rect in facerect:
cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), (255, 255, 255), thickness=2)
# 結果を画像として保存する
cv2.imwrite(imageOutput, image)
test.pyを実行してみます
SNOWで可愛く加工した自分の写真でも顔として認識されているようです
今回の目標であるチュートリアルの実施までは完了しました。
次回は図面上にある記号やオブジェクトを認識して、全文検索可能にするといったことをやってみたいと思います。
仕事で使う図面で試験するわけにはいかないので地図内の記号を認識して、全文検索可能な状態を目指すかなー。。。