PythonとUnityの連携(AI開発とゲーム開発の融合)

PythonとUnityの連携の必然性

f:id:gri-blog:20201101183538j:plain

AI開発ではPythonデファクト・スタンダードになっている。典型的なものとして

  • 画像解析
  • 動画解析
  • 音声解析
  • 自然言語処理
  • 感情推定
  • 物体認識
  • 姿勢推定

f:id:gri-blog:20201101192306j:plain

ゲーム開発ではUnityが、とてもよく使われている。プログラミングが分からなくても、ゲーム開発をはじめられる。ただし、細かい制御はC#などを使う必要あり。

AI開発側からするとゲーム開発の豊かな表現力がうらやましく、ゲーム開発からするとAI技術の利用はゲーム制御において魅力的なものです。両者の良いとこどりは、今後の趨勢なので、試しにUnitychan Live Assetをベースに、デモ機を作ってみました。


Unityちゃんライブステージ(PythonとUnity連携)

Unitychan Live StageにAIエフェクターを装備

Unitychan Live Stageは、ダウンロードするだけで素晴らしいステージングを再生できる。ただ、違う音楽を入れると、違和感がでてくる。理由は、音楽、ダンス、ステージがマッチしていないため。

f:id:gri-blog:20201101185052j:plain

AIエフェクターを作り、自分好みのステージングに自動で作成するようにした。AIエフェクターのメインでやっていることは、スピーカーエフェクトやライティングのタイミングを音楽に基づいて自動制御。さらにダンススピードも音楽に基づいて自動制御。カメラワークも制御したかったが時間が不足して一次断念。

もう少し、細かく書くと、メインでやっているのは、事前にMP3の楽曲ファイルをPythonで自作したMusic Recognizerへ投入し、音楽ごとに、こんなことを自動で行っている。

  • Beatのタイミングの検知
  • Harmonyのタイミングの検知
  • 音楽のテンポの推定(いわゆるBPM
  • Keyの推定(調を推定。これを使って色の変化をさせたかったが時間の都合上、断念)

f:id:gri-blog:20201101185310j:plain

より全体像を記述すると、上記のような感じ。再生する音楽ごとに、Music Feature (Beat, Harmony, Tempo, Key)をPythonで取り出す。この取り出したデータをCSVファイルにして、UnitychanのC#の該当部分に対して、それぞれのタイミングを読み込めるように変更。Beatのタイミングでスピーカーのエフェクターが自動で切り替わる、と言った感じ。このプログラムをかませることによって、音楽の特徴量の取り出し方を変えるだけで、さらに複雑な制御やコンテンツの大量生成が可能になる。

また、リアルタイムでUnitychanのステージングを変えたい要望もあるため、Python側でマイクとカメラをベースにした入力信号を取り込むことにした。入力信号はリアルタイムで認識され、制御命令に変換してUDP通信でUnity側へ送信。Unity側で制御命令を理解してUnitychanのステージングを変更する。

Gotoイベント事業などで使える技術

今回、ご紹介した技術は、経済産業省主導のGotoイベント事業などを含めて使えそうだと思います。例えば、無観客ライブの配信などに対して演出効果の自動化などです。邪魔なエフェクトは本末転倒ですが、ステージセットの準備も難しい状況下であり、自動で素晴らしい演出ができるならば、視聴者の没入感を効率的に促進できる余地があります。上記に加え、こんなことにも使えそうです。

  • ミュージシャンのライブ配信でのエフェクト
  • ナイトクラブのライブ配信でのエフェクト
  • シチュエーションに応じた音楽再生
  • オープニング動画の自動生成

お問合せ等

デモや開発の依頼は、こちらのリンク先のフォームより、お気軽にお問合せください。

また、GRIに入って一緒に開発してみたい人、こちらより、お問合せください。

古幡征史

分析会社GRIが開発したAI予測ツール「ForecastFlow」は何がいいのか

3秒で知りたい方へ、結論はこちら

社会人をやっていると1度や2度はあると思うんです。エレベーターで乗り合わせた部長に急に、「ForecastFlow」とは何であって、何かいいのか秒で言ってくれと問い詰められることが。しかも部長は短気。そんなこと無いかもしれないけど、答えはこちらで

『我々分析会社のGRIが作っていて、GRIが導入支援まで請け負える、機械学習のツール』

です。

3分くらいは読んでもいい方へ、開発ストーリーなども

この機械学習のツール』が何なのかをもう少し詳しく言うと、「ForecastFlow」は我々GRIが開発した機械学習モデルの自動構築システム(AutoMLと呼ばれる)です。

AutoMLとは何かというと、

続きを読む

XD.LOGSTORAGEに保存されたアクセスログをPythonで取得

こんにちは!
分析官のMです。

最近、業務でHIRAMEKI XDというマーケティングプラットフォームに触れる機会がありました。 HIRAMEKI XDにはwebサイトのアクセスログをユーザーに紐付けて収集・整理することができるXD.LOGSTORAGEという機能があります。 保存されたアクセスログGUIで取得できるのですが、API(ログストレージAPI)を利用して取得することもできます。

本記事ではXD.LOGSTORAGEに保存されたアクセスログをログストレージAPIを利用してPythonで取得する方法を共有します。

ログストレージAPIの仕様

大まかな仕様は以下の通りです。

サーバリクエストパターン

https://www.xdata.jp/report/v2/api/storage/download/[site_id]/[targtet_date]/[profile_id]

[site_id]には契約時に発行されたサイトID(6桁)、
[targtet_date]にはダウンロードしたいアクセスログの日時(YYYYMMDDHH)、
[profile_id]にはダウンロードしたいログのプロファイルID(アクセスログの場合は"0000000001")を入力します。

ユーザ認証

APIログイン認証はBasic認証です。
HIRAMEKI XDにログインする際のメールアドレス、パスワードを利用します。

実装

今回は2020年9月1日 0時台のアクセスログをzip形式で取得してみました。
下図がそのコードになります。

f:id:gri-blog:20200920172559p:plain

2行目:HTTPライブラリのrequestsをインポート
5~8行目:URLを指定
11,12行目:メールアドレスとパスワードを指定
15行目:アクセスログ取得
18,19行目:ログ格納先を指定
22,23行目:ローカル環境に保存(デコードされていない状態のアクセスログをres.contentで取得)

さいごに

XD.LOGSTORAGEに保存されたアクセスログは基本的には1時間単位でしか取得できないので、 例えば1か月分のログをダウンロードする場合、GUIだと約720(=24h×30日)回、ダウンロードボタンをクリックする必要があります。 それに対し、ログストレージAPIとfor文を駆使すれば、1回のPython実行で任意の期間のログをダウンロードすることができるので、近々実装してみたいと思います。
APIリクエストは1分間に30回までという制約があるので、そこは注意が必要ですね...

DeepFakeでBaka Mitai/Dame Daneつくってみた

MIT Technology Reviewの記事で、海外で「龍が如く」の「ばかみたい」をDeepFakeで画像から勝手に口パクさせるのが流行ってるとのことで、Kapwing Appさんのチュートリアルにしたがって、やってみました。

できたもの


Baka Mitai/Dame Da Neつくってみた この動画を作るのは1時間半くらいかかりましたが、実際の作業は数分で完成します。


DeepFakeのソース画像、Driving動画、アニメーションされた動画 ソース画像は動きのない画像(左)で、それをDriving動画(真ん中)に合わせて、無理やり画像をアニメーション化させること(右)を機械学習によって行います。

構成図

f:id:gri-blog:20200912133551j:plain チュートリアルに従って作ってみたときの構成図です。メインで使うのはColaboratory上のPython Notebookです、これはAliaksandrSiarohinさんが用意したデモ用のノートブックで、これをポチポチとボタンを押していきます(コーディングをしなくてもデモで自分用の動画を作れます)。コードはAliaksandrSiarohinのGitからcloneさせます。自分で動画を作るためのソース画像(動かしたい画像)、Driving動画(動きを真似する元動画)、チェックポイントファイル(顔の特徴点の関係性を定義した訓練済みデータ)をGoogle Drive上に入れます。なお、今回の時間の大半は1時間20分くらいは、このチェックポイントファイルをニュージーランドのファイル共有サービスから持ってくるのに時間がかかりました(700MBくらいのファイル2つ)。もしかしたら、AliaksandrSiarohinさんのドライブから持ってきたら、もっと速いかもです。また、画像、動画の編集などはオンラインで使えるKapwingを使いました。

元となっている論文(First Order Motion Model for Image Animation)

f:id:gri-blog:20200912141312j:plain

この論文で提案されているアルゴリズムは、従来のkeypointのアノテーションを大量に必要とするアルゴリズムと異なり、対象物の事前知識なしに使えるところが、手軽に使える点です。

元となっているモノマネ動画


Lip Sync Shun Akiyama Baka Mitai (Yakuza)

動きを真似するための元動画は、こちらのDobbsyrulesさんのモノマネ動画です。龍が如くの歌マネが、なぜ海外で流行っているか分からないのですが、めっちゃ面白いです。

全体として

f:id:gri-blog:20200912142056p:plain Deep Learningの訓練などがとても大変な作業ですが、ある範囲のアウトプットに限定させるAIプラットフォームが用意できるならば、手軽に利用することが分かりました。GartnerのHypeサイクルに見られる、黎明期にあるAIプラットフォームのタネは、こういうものを組み合わせたものなのだろうと思います。

古幡征史

Macとiphoneで無料ツールを使ったリアル音声字幕生成をやってみた

コロナ下の影響でウェブ会議の回数が増えていると思います。PCのスペックや通信環境によっては相手の声が聞き取りづらく、相手の音声が字幕で出すことができればいいのにと思う人も多いのではないでしょうか?今回は簡単にリアル音声字幕変換を行なってみました。

こんな人におすすめ

  • Maciphoneだけでリアル音声字幕を生成してみたい
  • 無料ツールだけで気軽に試したい
  • 複雑な設定をせずに試したい

使用するツール

字幕生成概要

UDトークの音声文字変換で生成した文章をzoomの字幕機能で表示する

実際に行なってみた


Macとiphoneを用いたリアル音声字幕変換

 

参考サイト

 

 Ohta

はじめてのデータ活用プロジェクトでのモデル作りのタスク

データ活用プロジェクトでAIモデルを短期間で構築するタスクを、どのように規定すべきか?この観点が、新入社員や転職してきた人は、抜けていることが多いです。プロとして研究やデータサイエンス業務を続けるには、モデル構築の計画立案スキルは身に付けなければいけない技術になります。

はじめてのAI活用の難しさ

慣れている人にとっては、モデル構築のタスクは当たり前のものですが、不慣れな人にとっては暗中模索の作業です。よって、全く計画を立てられないということになります。モデルを作るために何をすれば良いか分からず、計画を立てられない。計画のないプロジェクトに上司は「Yes」と言えない。仮に上司も不慣れであれば、どのように仕事を進めるべきか、上手くアドバイスすることが難しい。これが、AI活用の難しさの第一歩です。

プロジェクトの開始と目標設定

はじめてのモデル構築の目標を、自信がないためか、「XXモデルを構築すること」としたくなるかもしれません。これは、ビジネスマンとしてNGです。新しいプロジェクトで「何かの作業をする」という目標は、成果として測定できないためマネージャはOKを出しません。とは言え、XX予測モデルを構築し「利益率を5%向上させる」という目標は、はじめてモデル構築する人にとっては、根拠のない無意味な目標で、単なる願望です。また、目標の期間設定をしないため、非常に危険です。AIモデルの精度はデータの特性に大きく依存するため、やってみなければ分からないケースが多く、精度が判明するまで時間がかかることもあります。ただし、この事実を頼りにするあまり、無計画では、ダラダラと長期間のPoC(実証実験)を行った末、モデルはできたが結局は使いものにならないことが分かった、という結果に陥ることもあります。作業している本人は真面目な努力を積み重ねたので、努力を認めて欲しいかもしれないですが、「使い物にならないモデルかの判別を最小期間で行う努力をしたか?」という観点ではゼロ点と評価されます。

はじめてのモデル構築のプロジェクトでは、例えば目標を「1か月先、あるいは2か月先にモデルが使い物になる可能性があるかの判定基準を提供する」とするのが無難です。期間設定は、データの準備の時間に応じて変動することが多いです。最悪、可能性さえ分からないこともありますが、それ以上、その人に、そのタスクを任せるのは辞める決断をできます。

初期目標を達成するためのチェックリスト

初期モデルで検証をするためには、モデルに関して下記の次元にてデータの切り口を明確化する必要があります

  • ユーザ: 例えば、新規会員なのか、優良顧客なのか?
  • 商品次元: ユーザの使っている対象商品やサービス
  • 地域次元: 対象地域、購入ルート、ECなど
  • 時間次元: データ参照期間、ターゲット期間

上記の次元にて、ターゲットと特徴量の関係を明確にし、精度検証の方法を確立します

これら初期モデルを作るためには、データ分析を行い、なぜそのモデルにすべきかの理由(予測モデル構築の目的の明確化)を明らかにする必要があります。目的の典型例は、新たな顧客創造、ユーザの顧客満足向上、効果的な施策立案による利益拡大、業務自動化による省力化や高速化などが挙げられます。データ分析を実施して最大成果の範囲が見えてきますが、多くの場合、事後的に目的が明確化されることも多いです。

モデルを作成するためのタスクは下記の通りですが、まとめて考えることが多く、プロジェクトの進行と共に各タスクを詳細化して、先行タスクからやり直すことを繰り返します。

  • データ収集: 必要データの洗い出しとデータソースの特定、データ抽出方法の確定
  • データ整形: 整形ツールの選定、データクレンジング、フィルタ条件、結合条件
  • モデル作成: 機械学習であれば一枚表の作成、機械学習モデルの訓練実施
  • モデル検証: モデルは意味のあるものか?精度の検証、重要特徴量の確認

スプリントの作成

PoC実験をする際も、アジャイル開発手法のスプリント管理は有用です。1~2か月先のモデル作成までの目標、そこにたどり着くまでの1~2週間単位の目標、直近の目標を達成するためのタスクに分解を行います。スプリントを1~2週間の単位で設定し、各自が割り当てられたタスクを報告し、適宜微修正しながらプロジェクトを進行させます。時間は不可逆なので、間違えたら時間ロスが大きい不確かな要素を、できるだけ早期に分析により解決します。この不確かな要素の選定が、最も重要なスキルになり、経験と共に身に付けるべき内容です。

モデル作成の流れとその後

初期モデルを納得できるレベルと検証できたら、モデルの運用へと流れます。モデル運用自体が、大きめのテーマなので別記事にて後述しますが、こちらは、より高頻度のサイクルで実行していきます。

f:id:gri-blog:20200906160858j:plain

古幡征史

グラフ上での配色の魔力

人を惹きつけるグラフを作るための配色について解説してみます。

グラフを見てもらう

人を惹きつけるグラフを考える前に、忙しい人は「1秒以内に最初の決断をする」という事実を知る必要があります。時間をかけてデータをグラフにしても、あなたの苦労とは関係なく、見る人は即断即決で見るべきか決めてしまいます。ぱっと見、「ごちゃごちゃしている」という印象を持たれたら、それ以上は見てもらえません。人を惹きつけるには多くの工夫が必要ですが、最も簡単で効果的なものは配色です。従って、配色さえ注意していないグラフは、人に見せる準備が整っていないと言えます。

上手い人を真似る

f:id:gri-blog:20200905123256j:plain

良い配色のグラフを作るには、専門家を真似るのが手っ取り早いです。例えば、データジャーナリズムに力を入れている、The Economist誌。2019年度グラフィック詳説(Graphic-Detail)の色使いを真似するだけで、1秒の関門を通過できる確率が一気に高まります。The Economist誌の記事がグラフに力を入れているのは、読者の視線の流れの傾向が、次のようになることを調査の上で知っているからです

  • グラフや写真をまず見て
  • 次にグラフの読み方の補足説明
  • 記事タイトル
  • 記事本文

上手い人のやり方は真似した方が良いです。

自分なりの配色を作る前に

配色の真似だけでは、グラフをたくさん作っていく上で色が足りなくなっていきます。次のステップは、自分なりのカスタム配色(カラーパレット)を作れるようになることです。相性の良い色の関係を教えてくれるサイトが多く存在しますが、それらのメインターゲットはウェブページのデザイナー向けだったりするので、グラフで利用する配色としては、不適切なことがほとんどです。自分も何回か試しましたが、微妙な配色が提案され、いつの間にか使わなくなりました。そんな中で、Palettonはグラフ用の配色選びが簡単で便利です。他のサイトで上手くできないことを、Palettonができている理由を説明する前に、背景として色が、色の3属性で成り立っていることを説明します。

f:id:gri-blog:20200905124616p:plain

  • 色相(Hue): 純色(赤や青や緑などの色)を360度で表現したもの
  • 彩度(Saturation/Chroma): 純色と白または黒との混合
  • 明度(Lightness, Value): 明るさ

色の選択は、色の3属性を3次元から選ぶ行為で、さらにグラフでは何色か選ぶので、実は難しい作業です。

Palettonで自分なりの配色を作ってみる

f:id:gri-blog:20200905131417j:plain

Palettonは、この辺のことを実に見事なUI表現で克服しています。まず、色円環内(外側のドーナツ)の丸点を動かしPrimary Colorの色相(Hue)を選び、さらに対比する色相を同様に外側の丸点で決定します。これで色相は決ったので、後は彩度と明度を2次元の中(内側の円)から選択するという、範囲を狭めることに成功しています。真ん中に5つの丸点があり、5つの丸点の真ん中が、ベースとなる色の彩度と明度の組み合わせです。5つの丸点の角度や幅を変えることで、彩度と明度のバリエーションを同時に4つ選ぶことができます。

色相(Hue)とは?

f:id:gri-blog:20200905132509j:plain

色相の範囲は、どのように決まっているかと言うと、太陽光とその光を捉える瞳のメカニズムの関係から決まっています。太陽光は電磁波の内の一つですが、人の見える光の範囲が可視光線で、これは波長の範囲(380 nm〜780 nm)が対応します。光をプリズムに通すと、スペクトル(赤・橙・黄・緑・青・藍・紫)が見えます。これが色相に対応します。

発達言語から色の区別の複雑さを知る

f:id:gri-blog:20200905153819j:plain

人類は色の区別をどのように他の人に伝えてきたのでしょうか?言語としての色の区別の歴史が分かると、グラフで区別しようとしている色の複雑度も理解しやすくなります。Berlin and Kay (1969) "Basic Color Terms"の研究によると、様々な言葉の色表現の進化の歴史は類似性があり、おおよそ以下のようです。

  • ステージ1: 黒と白
  • ステージ2: 赤
  • ステージ3: 黄色と緑
  • ステージ4: 青
  • ステージ5: 茶色
  • ステージ6: ピンクとオレンジと紫とグレー

実際の雰囲気は?

f:id:gri-blog:20200905170409j:plain

Tableauのsuperstoreのデータを使って、Tableauのデフォルトの色と、The Economist風、適当にPalettonで作った配色でダッシュボード比較をしてみました。同じデータですが、印象はどのように変わったでしょうか?デフォルトのTableauの配色は判別つきやすいのは事実です。ただ、慣れてくると、またかぁ、って思われます。The Economist風のものは、ストーリを語りやすくなっています。Palettonのも、簡単に選んだ割に、ちゃんとした配色がでていると思います。配色を変えるだけで、魔法にかかったかのように、見栄えがよくなります。

まとめ

見づらいダッシュボードの典型例は、ごちゃごちゃして何を伝えたいか分からない。作者は、全部が重要だから、全部を目立たせたいので、全部派手な色になってしまった。こういうときは、今回ご紹介したPalettonなどを使って、落ち着いた配色を選んでみて、多くの色が使えない状況から、ダッシュボードを作ってみるのが良いのではないでしょうか。

参考資料

ドイツのLisaさんの記事を参考に、Palettonを使ってみたら良かったので、記事にしてみました。

blog.datawrapper.de

Palettonは、紹介した配色の選択以外にもランダムで、良い色合いが選べます

paletton.com

色の3属性や言語発達の歴史はスタンフォード大学講義資料Wikiを参考にしました。

古幡征史