こんにちは。システムズエンジニアリングセンターの駒宮です。
今年1月よりRPA開発チームで実装、テストなどを担当しています。
先月、弊社で開催された「オープンハウス2018」にRPAチームからもブースを展示しました。ご来場いただいた皆様、また、RPAブースで笑顔(?)で写真撮影に応じ下さった皆様、本当にありがとうございました。
今回の記事は、その際に展示した「感情分析RPAロボット」制作の裏話を記事にして投稿します。
1.PCカメラを起動し顔写真を撮る
2.顔認証AIサービスであるMS FaceAPIを呼び出し、顔写真から感情・特徴を抽出
3.Word文書に分析結果のレポートを作成
4.レポートを物理プリンタで印刷
RPA と AI が進化し密に連携することにより、適用できる業務範囲が広がっていきます。具体的には機械学習による画像認識技術の発展によって、写真や動画を認識して処理したり、予測や判断を伴う業務の自動化も行えるようになります。今回作成したロボットもRPAの特徴である複数アプリをまたいだ処理と、AIによる画像認識を連携させたものとなっています。
「感情分析RPAロボ」は、5つのワークフローから構成されています。ワークフロー、Activity数についてはご存じない方はRPAロボットの規模、開発生産性を算出する方法をご覧ください。
ワークフロー | 概要 | Activity数(=開発規模) |
Main.xaml | 全体制御 | 102 |
CaptureFaceImage.xaml | PCカメラで撮影 | 8 |
RequestFaceAPI.xaml | FaceAPIリクエスト | 5 |
ReportEmotion.xaml | Wordレポート作成 | 51 |
PrintResult.xaml | 物理プリンタで印刷 | 8 |
およそ1週間で作成することができました。制御系以外のそれぞれのワークフローは比較的簡単に実装することができます。例えば「物理プリンタで印刷(PrintResult.xaml)」の場合、ショートカットキーを次のように入力します。
- ショートカットキー:F10 → F → P → P
これによって、下図の右のようにOffice Wordが画面遷移して、レポートを印刷します。
ここでは、「Send Hotkey」Activityを使用しています。このように、ショートカットキーを使うと便利です。同じような画面遷移を「Click」Activityでも実現できますが、Send Hotkeyの方が安定して動作します。その理由は、Send Hotkey、Clickが対象とする要素が違うからです。Send Hotkeyは「Word」を対象とした操作ですが、Clickは「Wordのタブの中の〇〇タブ」のように、より詳細な対象要素の情報が必要になります。
Click Activityで「ファイル(タブ)」をクリックしようとすると下のように、『対象要素を特定するセレクター情報に信頼性がありません。』という旨のメッセージが出てしまいます。これに対処することは可能ですが、そうしてできたワークフローは不安定なものとなってしまいます。
今回使用したMS FaceAPIは、顔写真のBinaryデータを送ると分析結果をJson形式の文字列(String)で返却するというものです。UiPath Studioにはweb APIを利用するために「HTTP Request」というActivityが用意されているのですが、Binaryデータを送ることができません(できるのかもしれませんが実現できませんでした…)。
そこで、今回は自前のActivityを作成してこの問題を解決しました。UiPathには様々な拡張パッケージがあり、自分で作ることもできます。拡張パッケージの作り方については公式の解説(Creating a Custom Activity)があります。このように、UiPathは既存のパッケージで対応できない部分に関しても、拡張して対応することができます。
いかがでしたでしょうか?今回は、顔写真をMS FaceAPIにリクエストし、その分析結果をレポートに整形するという内容でした。このようにRPAとサービスAIを連携させることで、RPAの適用範囲を広げることができます。
・SendHotKeyは便利
・HTTP Requestではまった
・Custom Activityで解決した
おまけでランキング機能を実装しました(左のメッセージ)。得点は、感情8種類全ての割合が等しい(各12.5%)場合を100点満点としました。MS FaceAPIを困惑させる微妙な表情を作ることで高得点となります。右が今回のハイスコアで、RPAチームの山﨑が出しました。画像は掲載の許可が下りませんでしたが、悲しみと軽蔑の中に嫌悪や驚きを微妙に含ませた、微妙な顔をしていました。
以上です!