雑コラBOTを作ろう⑦: Azure Functionsで画像加工をして雑コラを作る

LINEで送る
Pocket

Michaelです。

「雑コラBOT」の作成の過程からAzure Functionsの設定方法を紹介する「雑コラBotを作ろう」の7回目です。
今回は、いよいよ「雑コラ」を作る仕組みを作成し、雑コラBotを完成させます。
<h2>構成 </h2>
画像処理用のPython関数に画像処理ライブラリを追加して、画像に顔を貼り付けられるようにします。
貼り付ける顔画像は、Blob Storageから取得します。


<h2>画像の準備 </h2>
貼り付ける顔の画像を用意します。
画像は何でもいいですが、今回はFace API貼り付ける人物の顔をFace APIで検出して、顔の範囲を切り出したものを用意しました。

画像のファイルはBlob Storageの任意のパスにアップロードしておきます。

<h2>バインドの設定 </h2>
貼り付ける顔画像を取得するためのバインドを設定します。
画像処理用の関数の「統合」メニューで「+新しい入力」をクリックし、「Azure BLOB ストレージ」バインドを選択します。
「Azure BLOB ストレージ input」のパスには、先ほどの画像を保存したBlob Storageのパスを指定し、保存をクリックします。


<h2>ライブラリのインストール </h2>
PythonライブラリをAzure Functionsにインストールします。
今回は、Pythonの画像処理ライブラリ「Pillow」を使ってコラ画像を作成するため、KuduのCMDコンソールで下記のコマンドを入力し、「Pillow」をインストールします。
※ ライブラリのインストールに関してはこちらの記事 も参照ください。

D:\home\site\tools\python.exe -m pip install Pillow
<h2>スクリプト </h2>
スクリプトは以下のように作成しました。

 
<h2>スクリプトの説明 </h2>
1. ライブラリの読み込み
必要なライブラリを読み込みます。
画像処理用の「Pillow」とBytes型で保持している画像データをPillowで読み込めるように「io」を追加しています。

2. 画像データをPillowの形式に変換
Bytes型の画像データをPillowで読み込みます。
ここで、顔画像も同時に読み込んでおきます。

3. 検出した顔の位置・サイズ情報を取得
Face APIで顔を検出した顔のサイズを取得します。
検出結果の「faceRectangle」キーから、顔の左上端の座標と顔の幅・高さのピクセル数が取得できます。

4. 顔画像のリサイズ
貼り付ける顔画像を貼り付け先の顔のサイズにリサイズします。

5. 顔の貼り付け
リサイズした顔画像を貼り付けます。

6. 画像の出力
Pillowで加工した画像データを保存します。
Pillowから画像の保存ができるため、画像出力のスクリプトを置き換えています。
<h2>実行結果 </h2>
Slackのチャンネルに画像のURLを投稿するとコラ画像が返ってきます

同様に画像を5人の子供の写真に変更しても、雑コラされた


<h2>まとめ </h2>
「雑コラBot」の紹介含め8回にわたった「雑コラBotを作ろう」は、今回の雑コラBot完成でようやく最終回となりました。このBotを使えば、たくさんのコラ画像を効率的に作成でき、業務最適化に役立てられます。
「雑コラ」なんてしないという方も、これまでに紹介した設定はAzure Functionsを使用する上での基本的なものであるため、Azure Functionsを使う場合にはぜひ参考にしてみてください。

ちなみに完成した「雑コラBot」は、記事作成の過程でパフォーマンス最適化を行ったことで、最初に紹介した雑コラBotと比較してレスポンス時間が1/3~1/2程度まで短縮されました。
次回は、Azure Functionsのパフォーマンス最適化について検証していきます。

LINEで送る
Pocket