SummerEye part2 -環境構築2-
前回、AzureにVM立てて環境を構築しました。
が、縁あってMicrosoftの方にアドバイスを頂きました。
- 「Web Appsを使ってみては?」
- 「Custom Vision Serviceを使ってみては?」
「EC2立てたら負けって本当ですか?」って聞いたら笑っていました。
まじめな話、使いようですよね。今回はVM立てたら負け案件かもしれません。
1つ目は、環境構築の勉強をするとかいう目的がないならばシンプルにWeb Appsを使ったほうが楽だよというアドバイス。
2つ目は、Computer Vision APIはMicrosoftが用意した分類機を使うことになるが、Custom Vision Serviceを使えば自分で学習させることができるので精度を上げられるのでは、というアドバイス。
~再考~
こんな感じ。
- 写真をアップロード
- Blob(AmazonでいうS3)に保存
- URLを返す
- 3のURLを使ってComputer Vision APIをたたく
- 解析結果がJSONで帰ってくる
- ディスクリプションに応じてBlobのファイルをリネーム
- URL取得(3と同じ?)
- アップロードしたファイルがリネームされたものをダウンロード(zipとか)
Custom Vision ServiceもComputer Vision APIもAPIのたたき方は同じようなのでいつでも置き換えられそう。
とりあえずComputer Vision APIを使う(自分用に動物写真だけを分類するような学習をさせたい)。
Web Appsの部分はdjangoである必要があるのかというと、ない。
パッと見てWeb Appsを介してユーザがBlobとファイルをやり取りするとこが詰まりそうだなーと。
Computer Vision APIとのやりとりは大丈夫でしょう。
早速作ってみます。
とりあえず前回立てたVMは停止しておきます。
目次
新規Web Appでdjango(Pythonバージョン選択可能)
Web App作成
Azureポータルで「新規」から「Web App」と検索します。
選択して「作成」。
アプリ名、サブスクリプション、リソースグループを選択します。
「作成」。
デプロイ中。
デプロイが完了するとアプリケーションの設定画面が開かれます。
画像の赤枠をクリックしてクイックスタートガイドにアクセスします。
デプロイ設定
自分の用途に合わせて選択します。
今回はPythonを選択。
デプロイ方法を選択します。
Githubでソースを管理するので一番上の「クラウドベース」を選択します。
「2 デプロイオプション」の赤枠「ここ」をクリックします。
デプロイの設定画面が開かれます。
「セットアップ -> ソースの選択 -> GitHub」と選択します。
Githubのアカウント、リポジトリ、ブランチを選択します。
OKをクリックして設定を保存したのち、
「同期 -> はい」でデプロイします。
Azureポータルのトップに戻り、該当のApp Serviceを開いたら記載のURLにブラウザからアクセスします。
閲覧権限がないといわれます。。。
Pythonバージョン設定
Pythonのバージョンを変更するにはちょっと面倒なことをする必要があります。
2.7 or 3.4にしたい場合
アプリケーション設定でPythonバージョンを選択します。
オフを選択した場合は2.7が使用されます。
2.7 or 3.4以外にしたい場合
デフォルトでは2.7か3.4しか選択できないので、以下の記事を参考にアップグレードします。
ここら辺の記事が公式の新しい記事。一番参考になるはず。
- Upgrading Python on Azure App Service | Python Engineering at Microsoft
- Azure App Service での Python の管理 | Microsoft Docs
それを踏まえた丁寧な解説記事とそのコード(ただしPython 2.7)。
- Django app with HttpPlatformHandler in Azure App Services (Windows)
- prashanthmadi/azure-django-httphandler: This is a sample Django app using IIS httpplatformhandler
少し古い情報(2016/02)だとだいぶやり方が違う。
Pythonのインストールディレクトリが変わっていたり(自動生成のdjangoプロジェクトはこのやり方)。
ただし、Azure Web AppにPythonコードを置く時の挙動が参考になります。
では実際に。
「開発ツール -> 拡張機能 -> 追加」と進みます。
追加したいバージョンを選択。
「OK」と勧めます。
拡張機能を確認すると、先ほどインストール入れたものが表示されます。
「Python 3.5.4 x64」をクリックすると詳細が表示されます。
赤枠にインストールされたパスが表示されるので、コピーしておきます。
今回なら「D:\home\python354x64\python.exe」。
以下の記事を参考にデプロイ用のファイルを作成します。
リンク先はPython3.6での実装例なので、適宜書き換えます。
requirements.txtを入れておくとデプロイの際に勝手にインストールしてくれるとのこと。
When Azure detects a requirements.txt in the root of the repository, it automatically creates a virtual environment named env. This only occurs on the first deployment, or during any deployment after the selected Python runtime has changed.
Configuring Python with Azure App Service Web Apps | Microsoft Docs
変更をGithubにプッシュすると、Web App側でエラー。
確かにrequirements.txtが実行されています。
Kuduコンソールを開きます。
Pythonのインストールフォルダに移動し、requirements.txtを使ってpipでインストールします。
python.exe -m pip install --upgrade -r d:\home\site\wwwroot\requirements.txt
変更をGithubにプッシュすると、ちゃんと最新版がWeb Appにも反映されています。
URL入力して確認。
何故?不明。
ログ吐き出させてみてもこれだけ。
2017-09-20 09:29:22.749579: wfastcgi.py 3.0.0 started 2017-09-20 09:29:22.749579: Python version: 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:07:06) [MSC v.1900 32 bit (Intel)] 2017-09-20 09:29:22.763564: wfastcgi.py 3.0.0 initializing
わからないので一旦置いておきます。
Web Appでflask
django、Pythonバージョンいじったりは一旦後回し。
余裕があるときにまとめます。
flaskを以下に従ってデプロイ。
WindowsにPython環境構築
普段使いのMacと同じ環境をWindowsに構築します。
pyenvがWindowsに対応していないとのことなので、
公式から任意のバージョンのインストーラをダウンロードします。
PowerShellでdjangoをインストール、確認。
pip install django python -m django --version 1.11.5
Githubからソースをクローンしてきて、ディレクトリ移動、
python manage.py runserver 0.0.0.0:8000
これでWindowsでも作業ができる。
次回
環境構築に時間を取られすぎて本質のところを触れなかったので、
次回以降、こんな流れで実装を進めていきます。
- ローカルの画像でComputer Vision APIを叩く
- Pythonプロジェクト上からblobに画像を保存
- 画像保存からblobのURLを使ってAPIを叩く
- Pythonプロジェクト上からblobの画像をリネーム
- 画像をアップロードしたらリネームされたものをzipでダウンロード
参考
- Azure App Service Web Apps による Python の構成 | Microsoft Docs
- Azure に Python Web アプリを作成する | Microsoft Docs
- Deploying Django App to Azure App Services using Git and new version of Python
- python – How to deploy django web application on Microsoft Azure cloud services – Stack Overflow
- Microsoft Cognitive Services
- Custom Vision Serviceを使ってみた – Qiita
- Configuring Azure for Django/Python 3 – Stack Overflow