【python入門】画像認識盛り込んでみた
こんにちは!
さて、個人アプリケーションにモザイク加工を入れてみたので備忘録。
加工するところは本を見ながらjupyterで動作確認→djangoに組み込むというかたち。
画像のパスの取得に苦労しました!モザイク処理の流れや画面などまだまだ理解不十分のためまた後日。今回は機械学習で画像をdjangoに盛り込んだので学習のための備忘録。
環境
django2.2.6
python3.7.4
※ anaconda使ってない方
大まかな流れ
・顔検出
1.分類器の読み込み
2.画像を読み込んでグレースケールに変換
3.顔検出
・モザイクかける
4.認識した顔座標にモザイク処理(縮小→拡大)
djangoとの連携
今回苦労したのが画像のurl
画像ファイルの変換に何度もこのエラー出ました↓
cv2.error: OpenCV(4.1.1) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
これはイメージファイルが正しく読み込まれてないことが原因らしい。
私の場合はイメージファイルのパスを絶対パスにすることで読み込んでくれました。
あとはcascadeファイルも読み込んでくれなかったので(同じディレクトリにあるのに)git hubから再度ダウンロードして任意のところに置く→絶対パスで読み込む
してました。
勉強point
・画像認識の原理
・cascade_fileによっての画像認識のちがい
・detectMultiScal
パラメータ
detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size()
image – CV_8U 型の行列.ここに格納されている画像中から物体が検出されます
objects – 矩形を要素とするベクトル.それぞれの矩形は,検出した物体を含みます
scaleFactor – 各画像スケールにおける縮小量を表します
minNeighbors – 物体候補となる矩形は,最低でもこの数だけの近傍矩形を含む必要があります
minSize – 物体が取り得る最小サイズ.これよりも小さい物体は無視されます
→パラメータによっての画像検出の検証
http://opencv.jp/opencv-2.1/cpp/object_detection.html#CascadeClassifier::detectMultiScale
cascadedetect.cppを解読したいが今のところ全く無理
https://github.com/opencv/opencv/blob/master/modules/objdetect/src/cascadedetect.cpp
こんな感じでモザイクがかかります。(フリー画像使用)
投稿画面はこんな感じで普通の投稿と分けました
※今回はカスケードファイルが正面画像の認識のものを使用しているため
正面向き以外は反応しません、、
大変参考にさせていただきました。
説明が丁寧で画像認識だけでなく自然言語処理もあります。
openCVがよく活躍してくれていたため、まだ全然理解していない。
まだまだ勉強必要。
ともあれ個人アプリケーションの発表会なるものがあるため、
機械学習はこのくらいにしてtemplateや追加機能をなんとかします!