PG

猫ちゃん判定アプリ作成への道(第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上での戦い!今回はその序章であったのかもしれない

続く

正規表現

PHPの文字列にマッチする正規表現をJavaのPatternの正規表現で定義してみる

命題1 ダブルクオーテーションで始まり、ダブルクオーテーションで終わる
命題2 文字列内に「\”」が存在する可能性がある

これを目指しました。

一番簡単なのは

次にループ展開形式にすると、

しかし、このループ展開形式の正規表現だけだと、やっぱりダメなので、二つを強引に合わせて、

これだけでもかなり複雑な正規表現になりました。もっときれいに表現できるはずなのですが、もうこれ以上頭が回らないので、とりあえずこれで進める

猫ちゃん判定アプリ作成への道(第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の連携ができるようになった!!

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

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

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

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