Python

猫ちゃん判定アプリ作成への道(第3回:CentOS上でPython3.6、OpenCV3.1が使えるようになるまで)

前回の時点でWindows環境下で動くアプリケーションはできていた
今回は

〇環境
・CentOS7
・python3.6
・OpenCV3.1
で前回までのアプリが同じように動くようにしたい

〇Python3.6のインストール
CentOS上にデフォルトでpython2系がインストールされていた。今回は2系と3系両方とも存在している状態にしようと考えた。

以下のサイトを参考に実施
参考

無事にインストール。python -Vで確認すると3.6.1と表示。3系がインストールされている。

ここで注意!前回のソースでは一番上に

#!/usr/bin/python

と記述している。インタプリタというがここで指定しているPythonがソース上で動くPythonになる。
cd /usr/bin/pythonで移動後python –versionでバージョンを確認すると2.7.2と表示。。。

今のままだとpython2系が動いてしまうので /user/bin/上に/usr/bin/python3を作成。
pyenvの3.6.1を見るように設定したうえでソースの#!/usr/bin/pythonを#!/usr/bin/python3に書き換えてあげることで3系で動くようになった。

3系の構文でエラーになり最初は悩んでいたがこの#!/usr/bin/pythonにはこんな意味があったなんて。。。無知は怖い。。。

〇OpenCV3のインストール
以下のサイトを参考
参考

そうすると以下のエラーが出てしまうnasmのバージョンが低いと怒られてしまう。。。
仕方なく以下のサイトからnasmを最新化した
参考

この作業なしに無理やり作業を継続しようとすると最終的にエラーが出てしまう。。。nasmのバージョン違いが原因と発見するまで約半日。。。
その後はサイト通りに必要なものをインストールしてあげればOpenCVがインストールできる。

今回はLinux環境での作業であった。
筆者はこれまでの仕事環境下ではWindowsをメインにやってきたためLinuxでの作業の経験が不足気味であると痛感した。。。
今後本格的にPythonをやっていこうと思えばいずれ行きつくLinux上での戦い!今回はその序章であったのかもしれない

続く

猫ちゃん判定アプリ作成への道(第2回:猫ちゃん判定アプリ完成へ)

第2回:猫猫ちゃん判定アプリ作成へ
〇開発環境
・windows10
・python3.6
・PyCharm Community Edition 2017.1.5
・Android Studio
・xampp

〇第1回から
猫の顔を認識するための分類機作成にチャレンジしたが失敗。。。
仕方がなく既存の猫の顔用の分類機(openCVに初期で準備されている)を利用することにした
次回以降、自作分類機作成にチャレンジしてみたいし、作成できれば学習させることができる(まさにAI!)
画像を受け取り、猫の顔を認識できれば「cat」、認識できなければ「not cat」と返すようにしてみた

以下ソース

〇せっかくなのでAndroidと連携
7月からandroidアプリの作成をやっていたので
①Androidで画像を選択
②pythonへ画像データを送信
③結果をJSONで返す
④Androidに結果を表示
の流れでやってみようと試みる。がどうやってPythonに画像データを送ればよいのか。。。
requestBodyに画像データを入れて送ってみた

python側でRequestBodyから読み込み画像ファイルに書き込んでその画像で判別すれば行けるのではとやってみるも以下のソースではだめだった。。。

ファイルへの書き込みは成功しているが画像として開けない。。。そもそもだが受け取るデータがこれだとstr型で受け取られる。それをbyteとして書き込んでいる。
受け取るときにbufferとして受け取り書き込んでみる

画像として開けるようになった。これでAndroidとPythonの連携ができるようになった!!

〇今回のアプリの精度
既存の分類機を使っている且新たに学習していかないので猫画像でも猫じゃないとでた画像は今のままではずっと猫じゃない画像として認識される。
今後余裕があれば学習できるように改善していきたい。
今の時点の精度は
①正面を向き、口を大きく開いていない猫画像は猫と判定
②犬やサル、トラ、チータ、猫っぽい人などは猫じゃないと判定
参考

③トラ模様のヤマネコなど一部特殊な猫に関しては猫じゃないと判断されることも。。。
参考

④片方の目しか映っていない、顔がつぶれているなどの状態だと猫じゃないと判断される。
参考

〇今後
今回は既存の分類機を使って終わりなので分類機を作成および学習させていくことに挑戦していきたい。どんどん学習し、どんどん精度が上がっていく。
そのようなアプリ作成を次は挑戦してみたい!!(今回もそんなアプリを目指したが時間の関係上次回こそ!!)

猫ちゃん判定アプリ作成への道(第1回:OpenCVで顔認識)

第1回:OpenCVで顔認識
〇開発環境
windows10
python3.6
PyCharm Community Edition 2017.1.5

〇OpenCVの導入
サイト
opencv_python‑3.2.0+contrib‑cp36‑cp36m‑win_amd64.whlをインストール

②コマンドプロントを開き 以下のコマンドを実行でインストール完

〇安倍総理とトランプ大統領、その他の人物の識別
参考

①参考サイトのソースまるまるコピー、ファイル格納場所およびラベル取得位置(安倍総理:001、トランプ大統領:002が取得できるように)修正
・トレーニング画像で安倍総理画像5枚(画像命名:aaa_001_1.jpg、aaa_001_2.jpg~aaa_001_5.jpg)、トランプ大統領画像5枚(画像命名:aaa_002_1.jpg、aaa_002_2.jpg~aaa_002_5.jpg)
計10枚を格納
・テスト画像で安倍総理画像2枚(画像命名:bbb_001_1.jpg、bbb_001_2.jpg)、トランプ大統領画像2枚(画像命名:bbb_002_1.jpg、bbb_002_2.jpg)
計4枚を格納
②動かしたがエラー。。。
error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale
③調べたところHaar-like特徴分類器を取得するPathが間違っていることが判明
cascadePath = “haarcascade_frontalface_default.xml”
→cascadePath = “C:/~/opencv/sources/data/haarcascades_cuda/haarcascade_frontalface_default.xml”
④実行→動いてくれた!!
トレーニング画像で学習した結果、テスト画像4枚をそれぞれ認識してくれた

⑤ただ現状人の顔を認識→トレーニングした画像から似た画像を返す動き
・試しに話題の稲田元防衛大臣とオバマ元大統領を入れて実施してみるとトランプと返ってくる(稲田さんに失礼かな。。。)
・小泉進次郎衆議院議員だと安倍総理と返ってきてしまう

⑥さすがに稲田さんがかわいそうなので画像のラベルから一致しない場合はそれ以外と表示するように修正。
→稲田さん、オバマさん、小泉さんはその他で表示された。現状正解率100%

次週 特徴分類機を自作にチャレンジ

最後に今回のソースを張っておきます!この行数でできるのはすごいですね!!