SummerEye part1 -環境構築-
本郷テックガレージの企画で「Web サービス開発短期集中プログラム」というものに参加しています。
目的は「月9万円ぐらい稼げるウェブサービスを作ろう」です。
寄付支援サイトもその一環で作っているのですが、明らかに稼げなさそうなのでサイドプロジェクトのサイドプロジェクトを走らせることにしました。
今回のSummerEyeは典型的なユーザの時間を削減することに貢献するパターンです。
目次
概要
ネットサーフィンをしていて、ときめく動物の画像があったら保存します。
たまーに見返してときめきます。
よほど気力が余っていれば、ちゃんと動物種ごとにフォルダ分けして保存するのですが。
ご覧の有様です(新しいPCなのでまだコレクションが少ない方)。
なんとなく、フォルダ分けをしようと試みるものの、大抵はanimalフォルダに突っ込んでしまいます。
溜め込むのはそれでいいのですが、探すのが大変です。
ふと、「薪をくわえてるゴールデンレトリーバーの画像を見返したいな」と思った時、探せません。
ファイル名もほとんどは無意味な英数字の羅列なので検索ができません。困る。
というわけで今回作るウェブサービスは、
「画像をアップロードするといい感じの名前にリネームしてくれるやつ」です。
環境
今回こんな感じの環境です。
- Azure VM D1 Standard
- Ubuntu 16.04 LTS
- Apache/2.4.18 (Ubuntu)
- Python 3.5.1
- django 1.11.5
- DNS summereye.eastus.cloudapp.azure.com
構成
今回は自分で画像認識することが目的ではないので使えるものを使います。
雰囲気こんなイメージ。
- ウェブサイト上に画像を複数枚アップロードする
- Computer Vision APIを叩いてキャプションを取得
- キャプションでリネーム
- zipファイルにして返す
細かいところは追々考える。
Computer Vision API使うならウェブサーバもAzureに置くのが良い感じ。
CNN以来Azure触っていなかったので良い復習になるでしょう。
ウェブサイト、どうしましょうか。
将来的には少し拡張して、zipファイルダウンロードする前に確認画面を挟みたい。
機械で大まかにリネーム、人間が最終チェックして気に食わないファイル名は修正、みたいな感じにしたい。
djangoでいいんかなあとも思うけど。
とりあえず会員機能も決済機能もなしに作ってみる。
AzureにVirtual Machineを立てる
全然覚えていない。
ここら辺の過去記事を参考にします。
割と飛ばしめで。
OS選択まで
Virtual Machineを選択、追加、Ubuntu 16.04 LTS選択。
適当に情報を入力。
インスタンス選択まで
AWSのt2.small相当のもので良いかな。
ぶっちゃけ料金表はわかりづらいので調べる。
わかりやすいとこ発見。
- Microsoft Partner Network ブログ | Azure 仮想マシンサイズの選択方法の指針【4/6 更新】
素直にD1シリーズの一番小さいの(D1 Standard)を選択します。クレジットは余っているし。
VM作成
頑張って作っています。
DNS設定
この動画を参考に適当な名前をつけてあげる。
SSH接続チェック。
適当にエイリアス作っておく。いつでも簡単SSH。
VM上でウェブサーバ起動
ここら辺参考に思い出しながら環境構築。
Azureポータルでセキュリティグループを開く。
以下を参考に80番ポートを開く(あとで必要になるので8000番も開けて置く)。
- Microsoft Azure | How to open ports to a virtual machine with the Azure portal
Apacheいれて、起動&再起動時にスタートかかるように設定。
Centにすればよかったかな。apt-get慣れない。
apache以外にも後々pyenv installで必要となるものもインストール。
sudo apt-get update sudo apt-get install apache2 apache2-dev sudo apt-get install libssl-dev libbz2-dev libreadline-dev libsqlite3-dev libsqlite3
適当にindex.htmlにHelloなんとかを記述。
VMのIPアドレスなりDNSなりをブラウザに入力。
表示された。
ローカルでdjangoプロジェクト開始
自分が残したメモを頼りにします。
久方ぶりにPyCharmを起動しました。
ファンが唸る。
VMでPython開発環境を整備
過去記事を参考にpyenv、Python、djangoをインストール。
Pythonはローカルとバージョンを合わせます。
pyenvインストール
cd /usr/local/bin sudo git clone git://github.com/yyuu/pyenv.git ./pyenv echo 'export PYENV_ROOT="/usr/local/bin/pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc source ~/.bashrc pyenv --version pyenv 1.1.3-36-g90ac836
Pythonインストール
pyenv install 3.5.1 pyenv global 3.5.1 python -V Python 3.5.1
djangoインストール
pip install django python -m django --version 1.11.5
その他インストール
pip install django PyMySQL mysqlclient pip install -U cryptography
ローカルとちゃんと揃えました。
djangoプロジェクトをクローン
git使ってローカルのソースコードを持ってくる。
ここら辺のgitignoreをお借りします。
開発サーバで走らせてみると、エラー。
django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named '_sqlite3'
ググったらこれみたい。
そのうちsqlite使わないからいいんだけど。
pyenvでPythonを再インストールします。
一つ注意しなければいけないのは、django のデータベースに sqlite3 を使うつもりなら python をビルドする前に sqlite-devel をインストールしておかなければならないという事。
CentOSでnginx+uwsgi+djangoを試してみる – Debian GNU/Linux 3.1 on PowerMac G4
時間がかかりましたが解決。
python manage.py runserver 0.0.0.0:8000
と行きたいところですが、8000番ポートが空いていないのでAzureポータルに戻ります。
セキュリティグループで8000番を開けたらAzure VM上で再度開発サーバを起動。
これでとりあえず開発環境は整いました。
本番環境の構築にはmod_WSGIとApacheの連携をする必要があります。
これは一旦置いておきます。
次回
Computer Vision APIを試します。
以下参考。
- Creating a face detection API with Python and OpenCV (in just 5 minutes) – PyImageSearch
- 最近の画像認識の実力~MS の最先端の研究成果 Computer Vision API を Python で使ってみた – Qiita
- Computer Vision APIのサンプル(UWP編) – Qiita
本当にVMつけっぱで大丈夫か若干不安。
クレジット残ってるはず。。。
余談
名前がつけられていない画像ファイル
-> 「名前はまだ無い。」
-> 「吾輩は猫である。」
-> 夏目漱石
-> SummerEye
ダジャレです。
さらに余談。
「吾輩は猫である」は著作権が切れているので青空文庫でフリーで読めます。