blogこの広告は、90日以上更新していないブログに表示しています。dodosoftdodosoftアドベントカレンダーネタで、ちょっと変わった顔画像認識をやってみてます!dlibとkeras使ってやる予定!ほんとにできるかは分からんけど・・・。以下のようなライブラリを含むイメージのDockerfileです。画像の読み込みや編集に利用。顔のパーツの認識に利用。APIとして公開するために利用。Learningに利用。データの読み込み、書き出しに利用。その他機械学習に利用。機械学習の検証に利用。Dockerfileは、いかに最小の構成に抑えてイメージファイルを小さくするか、というところが腕の見せどころの一つのようですが、その点作成したDockerfileは非効率です。できるだけ小さいイメージにしようと、Minicondaをベースに使ってみたものの、いろいろインストールしてたら非常にでかくなりました。ちっちゃくしたかったら、alpineベースで、自前で各種ライブラリビルドしたらいいかもね!Dockerイメージのビルド&実行Dockerfile等、イメージ作成に必要なファイルを取得します。image-recognition-example上記リポジトリにはサイズが大きすぎて含めませんでしたが、追加で必要なファイルが一つあります。顔パーツの学習済みのデータです。shape_predictor_68_face_landmarks.dat.bz2をダウンロードして、解凍して、上記リポジトリワークツリーのwork直下においてください。こんな感じになるように。shape_predictor_68_face_landmarks.dat続いて、以下のコマンドで、Dockerイメージのビルドし、コンテナを開始します。取得するファイルは2GBほどありますので、気長にお待ち下さい。./start.shstart.shの中でやっていることは非常に単純です。errorの繰り返しなので、こういったシェルスクリプト書いておくと便利でした。-vオプションで指定)、ホストマシンでソースを書き換えると、変更がそのままコンテナにも反映されるようになっています。start.shが実行完了したら、以下のアドレスにアクセスしてみてください。http://localhost:5000/次のような、つまらないフォームが表示されます。顔を含む好きな画像ファイルをアップロードしてみてください。]こんな感じで、画像のどこに顔があって、顔のパーツはどのように構成されているかが点の集合で分かります。POSTでも認識できるようにAPIにしてます。使わないけど興味本位で。client.pyが、リクエストを送るコマンドです。躓きプログラムはこちら。dlibもOpenCVもFlaskも、世の中にたくさん情報が溢れてるので、躓いた所だけ。Predictorの68の点shape_predictor_68_face_landmarks.datは、顔の各パーツの点の集合を返してくれます。どの点からどの点までが目で、どの点からどの点まで鼻で・・というのがわからないので調べました。68)}Flaskのリクエストボディから画像読み込みdetect_faces()関数で、顔検出のAPIを公開しています。画像のバイナリデータをPOSTすると、顔のパーツなどをjsonで返すというものです。そのリクエストボディ読み込みにちょっと癖がありました。Flaskではリクエストボディは、request.get_data()でbytes型として取得できます。これをインメモリでOpenCVで読み込むには、以下のように、bytearrayに変換し、numpy配列に変換しないとOpenCVの画像デコード関数(cv2.imdecode())はデコードしてくれませんでした。Pythonの*-likeオブジェクト、よーわからん。cv2.IMREAD_COLOR)以上、環境構築+ちょっとお試しでした。〜Heroku〜Herokuで無料でDockerイメージを動かしてみます。〜Heroku〜月別アーカイブ参加グループdodosoftはてなブログをはじめよう!uphyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。