クライアントの公開(CPU)
本稿では、先ほどGPUインスタンスに設定したAPIに対して画像をアップロードし、処理結果を受け取って画面に表示するためのクライアントについて説明します。 クライアント
クライアントのソースコードの内容 ダウンロードしたソースコードの Client フォルダーにある app.py がクライアントとして機能する部分になります。
@app.route('/', methods=['GET', 'POST']) のアノテーションが付けられた show_page() はクライアントの {ベースURL:5000/} にGETメソッドもしくはPOSTメソッドでアクセスした際に行われる処理を書いています。
GETメソッド、つまりブラウザーで直接通常のアクセスをした際には、 templates フォルダーの index.html を表示する処理を行っています。
POSTメソッド、つまり先ほど表示した index.html で upload ボタンを押したときは、設定された画像を指定のサイズまで縮小し、APIを通してサーバーにアップロード、返ってきた長方形を示すJSONに従って画像に長方形を書き込み、縮小していた場合には元のサイズまで戻す、その後編集された画像を result.html で表示する、という処理を行っています。
convert_img(im) は画像ファイルをリクエストの中に含めるためにバイナリデータに変換する処理を行っています。
settings.pyの設定 Client フォルダーの settings.py は、環境などによって変えられる設定を書いています。
- BASE_URI の部分は、 {GPUインスタンスのグローバルIP:5000/} と書いてください。
インスタンスのグローバルIPの確認方法については、チュートリアルのWebサーバの構築をご確認ください。 - ENDPOINT の部分は、変更しないでください。
- MAX_SIZE の部分は、ピクセル数の制限を書いてください。これを超えたサイズの画像はそのサイズまで縮小されます。なお、お使いのGPUインスタンスの処理能力により変更可能ですが、 512 より大きい数字であることが推奨されます。
- get_url() の部分は、変更しないでください。
ここでは、実際にクライアントをCPUインスタンス上で機能させる方法について説明します。 クライアントの公開
なお、このプロセスを行う際には、必ずファイアウォールの設定を確認し、アクセスが予定されたIPアドレスに制限されていることをご確認ください。
ファイアウォールの設定を行います。 ファイアウォールの設定
基本的な IP の制限等についてはファイアウォールの設定をご確認ください。
その後、ポートの設定を行います。
Flaskはデフォルトで5000番のポートを使用するため、ファイアウォールでその通信を許可します。
- エッジ (赤で囲われた部分)から MEC-XXX-XXX という名前のエッジ(青で囲われた部分)を選択します。
- ファイアウォールの作成を参考に、新しいルールを作成します。
- アプリケーション から Flask を選択し、許可します。
最初に、Apacheなどの他のウェブサーバーが起動していないかを確認し、起動していた場合は以下のコマンドを実行し、停止してください。 クライアントの起動
$ sudo systemctl stop httpd順番に以下のコマンドを実行してください。
- Clientフォルダーに移動する。
$ cd Client
- python で app.py を実行する。
$ python app.py
* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: xxx-xxx-xxx
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://xxx.xx.x.xx:5000/ (Press CTRL+C to quit)