.Exeの開発記

遊戯王について書きます

kerasで'_thread._local' object has no attribute 'value'

私は今Python3.7.3を使用してDjangoでWebアプリの開発をしています.
WebアプリはKerasとOpenCVを使用した簡単な画像処理アプリを予定しています.
しかし,実際に実行すると
'_thread._local' object has no attribute 'value'
といったエラーが出ます.Kerasのveersionは2.3.0です(9/28日では最新).
Django上での実行ではなくkeras単体で動作させるとこのエラーがでないので謎です.
Stack over flow で検索すると以下の記事が該当します.
stackoverflow.com
質問が約1週間前と新しい.質問と回答が英語なので簡単に訳してみると,
Q「'_thread._local' object has no attribute 'value'ってエラーが出るんだけど」
A「kerasを2.2.5にダウングレードしたら解決したよ」
マジか.
さっそく
pip uninstall keras
pip install keras==2.2.5
で再インストールした.
実行してみると
TypeError: Unexpected keyword argument passed to optimizer: learning_rate
違うエラーが出る

またまた調べてみると今度はKeras2.3.0にアップグレードしたら直ったよ的な記事を発見.
完全に盥回し状態です.

OpenCV imwriteとimreadで日本語の入ったファイルを扱う

こんにちは.Exeです.
今日はPythonを用いてOpenCVを使用した時に個人的に躓いたところです.

パスに日本語名が入っていると失敗する

OpenCVで画像を読み込む関数imreadとファイルに書き出すimwriteについて.
imreadはimread(filename)で画像の読み出し.imwriteはimwrite(filename, img)でファイルに書き出しができる.
しかし,filenameに日本語が含まれていると読み込みもしくは書き込みに失敗するっぽい(しかもエラーを吐かず).
この問題に対処するにはimreadはnumpy.fromfileを使い,imwriteは.tofileを使用することで解決できるっぽい.
実際に"./actress/園田みおん/"ディレクトリにあるファイルを使用する際にimread,imwriteを使用していたら,失敗してたが,fromfile,tofileを使用することで想定の結果を得ることができた.

気づくのが遅れて画像処理しまくったせいでまたやり直しだ...
1週間を返してくれ

Google Colabが熱い(個人的に)

こんにちはExeです.最近私の中ではGoogle Colabが熱いです.
機械学習をやるためにつよつよPCが必要かと考え数十万の出費を覚悟していましたが,Google ColabのおかげでGPU代は0円に.
出費はGoogle Driveを100GBにアップグレードした280円だけ.
Google Colab 最強か??

Google Colabのリンクはこちらから.全て無料で使えます.Google アカウントを持っていればOK

colab.research.google.com

OpenCV+Pythonで顔認識

この記事はPythonOpenCVを利用して画像から顔を認識することを試した備忘録です.使用したのはPython3.6.2です.また,今回のプログラムを使用する前にpipを用いてnumpyとOpenCVのインストールを行いました.

 

使用した画像はこちら.私の押しの園田みおんさんの画像を使いました.

f:id:exe_dev:20190822211917j:plain

出典 : https://news.livedoor.com/article/image_detail/15209688/?img_id=18577181

 

ソースコードはこちら.

 

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
 
img = cv2.imread('./sonoda/6.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

このソースコードOpenCVの公式ドキュメントのコード(http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html)を使用したものになります.

画像はプログラムと同じディレクトリにsonodaという名前のディレクトリを作成し,その中に6.jpgという名前で保存しました.

また,今回は顔の検出にhaar cascadeを使用しました.

使用したhaarcascade_drontalface_alt.xmlOpenCVgithub(https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt.xml)からダウンロードできます.

 

実行結果は次のようになりました.

f:id:exe_dev:20190822212422p:plain

しっかり顔を認識していることが確認できます.

問題点

自撮りのような顔が傾いている画像だと顔が認識されづらいです.

その場合は今回の画像のように正面を向いているように画像を回転させる必要があるようです.(処理数が増えるけど,どうすんだこれ??)