読者です 読者をやめる 読者になる 読者になる

ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

日本Splunkユーザ会 GOJAS(Japan Splunk User Group) Meetup 参加レポート

ソリューション技術部 マネージャー 山口(@kinunori)です。

プリンシパルエンジニア 兼 エンジニアリングマネージャとして、10名規模のエンジニアチームのマネジメントとWebインフラオペレーションをしてます。

弊社では、ユーザグループや勉強会など社外コミュニティへの参加・貢献を会社として推奨しており、運営メンバーや登壇者輩出や後援企業として社外コミュニティに寄与しています。

私もAPI Meetup日本Splunkユーザー会(GOJAS)の運営コアメンバーとして参加していたり、今年のJAWS Daysではスタッフとして事前準備から携わっています。

本エントリでは日本Splunkユーザー会ミートアップ(GOJAS Meetup)の参加レポートを書いていきます。(なぜコミュニティへ参加・貢献するのか、という点は長くなるので、また別のエントリで、、、)

日本Splunkユーザ会(GOJAS)とは

データアナリティクスツール Splunkのユーザコミュニティです。

貯めたデータから必要な情報を抽出し可視化するのは、ツールの使い方、標準偏差など統計に関する知識が必要となり、個人で調べて実現するのは難しい場合もあります。

そこで、便利により効率的にデータ解析を行う為、ユーザ同士による活用手法、ノウハウ共有することを目的として、完全ボランティアの有志メンバーで結成されました。

弊社では Splunkの導入・活用支援をサービスとして提供していますが、ユーザとして得た経験をもとに活用支援サービスを提供している部分もあり、登壇・運営を通してユーザコミュニティに貢献しています。

【GOJAS Meetup-02】SplunkマニアックスVol.1

今回は、既に利用しているユーザをターゲットにクリティカルな環境での活用事例セッションや、効率的なクエリを行う為のSplunk内部アーキテクチャ解説セッションが行われました。

私も司会として全体進行を担当させてもらいました!

イベントページはこちら https://gojas.doorkeeper.jp/events/56197

当日の様子(参加者のみなさん熱心メモを取りながらセッションを聞いてます) f:id:kinunori:20170322194124j:plain

Splunkでつくる、標的型攻撃対策のSIEM

株式会社サイバーエージェント 山口 玲 さん のセッション

資料非公開のようなので簡単にまとめておきます。
サイバーエージェントさんからは標的型攻撃の検知事例が発表されました。
攻撃そのものを検知し、早い段階でブロックすることを目的にSplunkを活用しているとのことです。

* 管理者アカウントの使われ方監査を分析する
    * アカウントと行使されるIPの組み合わせ
    * アカウントと使用時間の組み合わせ
    * 滅多に使われないアカウントの利用状況
    * 認証失敗が突出したアカウント
 
* DNSログ監査
    * Dynamic DNSの利用状況

* エージェントを利用した端末のプロセス情報収集
    * 起動しているプロセスが本来動作する端末で起動しているのか

よく使う検索条件をマクロ化し再利用していたり、date_hourやdate_wdayを使った営業日判定など詳細なテクニックが説明され、既に使われているユーザの方も参考になった点が多かったのではないかと思います。

また、S3の貯めたデータに対し、Amazon Athenaを利用した分析も行ったり、マシンラーニングの組み合わせで効率的な標的型攻撃検知を進めているとのことでした。(また登壇して欲しい)

サイバー犯罪に立ち向かうためのチームとデータ利活用

楽天株式会社 大野 隆弘 さん のセッション

こちらも資料非公開のようなので簡単にまとめておきます。
楽天さんからは不正ログインの検知事例が発表されました。
パスワードリスト攻撃など、ユーザアカウントへの不正ログイン・不正利用の検知を目的にSplunkを活用しているとのことです。

楽天さんではセキュリティ部署、ID開発部署、カスタマー部署国外サービス拠点など関連する部署が多く、見ているデータが異なるケースもある中で迅速に情報共有することが必要になった結果 Splunk を利用する事で解決した事例を細かく説明されました。

Splunkのダッシュボードを軸に各部署が同じ情報を参照する事で、ログの異常性判断、データからの情報加工のタイムロスを少なくし、情報を早く正確に共有しているようです。

Web UIなので非エンジニアも艇庫なく利用でき、結果のみを共有する事も出来るので難しいクエリなどを非エンジニアに覚えてもらう必要も無い点も大きいようでした。

実際にブロックしたはずの攻撃がブロックされていない状況があり、Splunkによる分析結果の共有で攻撃に気づいた実績もあるとのことでした。

Inside Splunk - サーチの仕組みはどうなっているか

Splunk Services Japan 小松原 貴司 さん のセッション

Splunkの中の人がSplunkユーザの為にマニアックなセッションをということでSplunkの小松原さんが登壇されました。

インデックス構造やイベントの保存プロセス、内部構造に基づく効率的なクエリ記述(実際同じ結果が返ってくるが、応答速度が倍以上違った)など、更に効率的な活用へのヒントを惜しむことなく説明されていました。

資料が公開されているのでリンクを貼ってきます。

顕微鏡の向こう側 - サーチはどのように動くか https://www.slideshare.net/takashikomatsubara50/how-search-works-tsidxterm

さいごに

GOJAS Meetup では、セッション終了後に懇親会を開催しています。 懇親会ではスピーカーへの質問やユーザ同士での相談、ディスカッションも活発に見られました。

次回は4月に GOJAS Meetup-03 を開催する予定です。 興味のある方は是非参加されてはいかがでしょうか。

運営チームと参加者による記念撮影 f:id:kinunori:20170322193856j:plain

HTC ViveのMixedReality Captureをクロマキー布無しで実現する

こんにちは! VR事業部のizmです。普段は段ボールを解体したり、発泡スチロールを砕いたり、クロマキー布にアイロンを掛ける仕事をしています。

概要

HMDを使ったVR体験の様子を外から見た人にも分かりやすく、おもしろさを伝えるという試みとして、HTC Viveでは3本目のコントローラから見た三人称視点のゲーム映像と、実世界のカメラをクロマキーで抜いたMixed reality Captureが多く用いられています。

f:id:izm_11:20170317183049p:plain

Making High Quality Mixed Reality VR Trailers and Videos — KERT GARTNER

日本語でのセットアップ方法や仕組みは以下サイトが詳しいです。

framesynthesis.jp

ちゃんとした展示ならクロマキー布を用意すれば良いのですが、毎回洗濯してアイロンを掛けるのも手間ですし、ブース設営時に3面グリーンという制約は邪魔だなあと思ったので、別の解決方法を考えてみました。

このエントリでは以下のような仕組みでクロマキー布を使わないMixed Reality Captureの合成を行う方法を提案します。

f:id:izm_11:20170317184701p:plain

普通の背景除去

OpenCVには様々な背景除去アルゴリズムが実装されています。その中で便利そうなMixture of Gaussian Distribution法を使う BackgroundSubtractorMOG2関数 を今回は採用しました。 こんな感じにセットアップします。

cv::VideoCapture cap(0);//カメラを開いて
//解像度やFPSを指定
    cap.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));
    cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720);
    
Ptr<BackgroundSubtractorMOG2> pMOG2; 
    float varThreshold = 16;
    bool bShadowDetection = true;
    pMOG2 = createBackgroundSubtractorMOG2(history_val, varThreshold, bShadowDetection); //MOG2 approach
    pMOG2->setShadowValue(4.2); // Sets the showdow color (0-black, 255-white)
    pMOG2->setShadowThreshold(.5); //Originally ftau?
    pMOG2->setVarThreshold(20); //Double
    pMOG2->setNMixtures(5); // Int
    pMOG2->setBackgroundRatio(0.7); //Double

上記コードの後、メインループでは

  1. 前景を抜き出し
  2. 2値化をした画像をマスクとして使用
  3. 元画像を切り抜き
  4. 背景部分は緑色に塗っています。(OBSのクロマキーフィルタを適用して、ゲーム画面と合成する為)

と言う感じの処理を毎フレーム行っています。

仮想のウェブカメラ映像ストリーム生成

ここが今回のキモだと思います。先の背景除去済みの映像を映像キャプチャデバイスとしてOBSに認識させなければいけません。 通常であればDirectShowフィルタとして登録したり、UVCとして振る舞うような仮想デバイスドライバを作ったりします。

f:id:izm_11:20170317185118p:plain

この部分を真面目に書くとDirectshowフィルタのサンプルコード等と睨めっこする事になって大変そうですが やざわラボさんのycaptureというライブラリが仮想のウェブカメラとして振る舞う事ができます。丁度今回の用途にぴったりなので、ありがたく使わせていただきます。

ycapture(わいきゃぷちゃ)

ycapture上で送信するフレームデータとしてOpenCVのcv::Matから送る場合はBGRをRGBに変換して送ると良いです。以下は送信例です。

cv::cvtColor(image, dst, cv::COLOR_BGR2RGB);
        
HRESULT hr = sender->Send(ms, dst.cols, dst.rows, dst.data);

実験結果

意図した通りOBS上でクロマキー布なしでクロマキー合成っぽいことが出来そうです。

今後の展望

何も考えずにベタで処理を書いたら背景除去だけでCPUをほとんど使い切ってしまいました。これだとViveで遊んでいるゲーム自体の処理が重くなってしまいそうです。 なので、BackgroundSubtractorMOG2をGPUにオフロードする、縮退して背景除去してからマスク伸長する、などで負荷を軽減したいです。

今回は照明の変化に対して強いかなあという理由で動的に背景データを更新していくアルゴリズムを採用しましたが、遊んでいる最中にプレーヤーがじっとしていると背景と誤認識してしまうことがあります。 いっそのこと、背景除去が得意なKinect v2などでカメラを置き換えるのも良いかもしれません。

実際に使って良い感じであれば、今回のソフトウェアを公開します。(まだちゃんと試してないので…ごめんなさい)

Tips

  • ycaptureを32bitビルドした場合、OBSは32bit版を起動すること(64bit版だと映像キャプチャデバイス欄に出てこない)
  • オートフォーカスを無効化出来るウェブカメラを使うと良い(Logicool製のウェブカメラはそういった自動制御を抑制するユーティリティソフトがあります)

視線追跡型VRゴーグル 「FOVE0」を試してみたお話 [開封・準備編]

こんにちは! VR事業部の長谷川です。今回はFOVE0について書いていきます。

FOVE0とは?

FOVE.Incによって開発された視線追跡型のVRゴーグルです。Oculus Rift、HTC VIVE、PlayStation VRのようにVRを体験できるだけでなく、それらにはない視線入力により、眼球の動きで操作することができます。

詳細はこちらをご覧ください。

まずは開封!

ダンボールを開けると白い箱が見えてきます。

f:id:waffle_maker:20170215181253j:plain

Oculus Rift DK1のときのケースよりも大きいです。

f:id:waffle_maker:20170215181311j:plain

箱を開けると、FOVEのロゴが入った紙が入っています。

f:id:waffle_maker:20170215181328j:plain

裏面は各国の言語で注意書きが書いてあります。

f:id:waffle_maker:20170215181345j:plain

一通りの部品が綺麗に収納されています。

f:id:waffle_maker:20170215181402j:plain

中身はこの通りです。

f:id:waffle_maker:20170215181419j:plain

CAMERA KITの中には、ポジショントラッキング用のカメラ、三脚、ケーブルなどが入っています。

f:id:waffle_maker:20170215181432j:plain

次は実際に使ってみます。

PCの設定

FOVE0はPCに接続して使う必要があります。PCの推奨スペックはここに記載がありました。 メモリ8GB以上、GTX970、AMD R9 290以上であるため、2年半前のOculus Rift DK2の使用要件に相当する性能が必要です。

まず、FOVE0用のランタイムソフトをインストールします。

ここから、FOVE SETUPという箇所をクリックしてexeファイルを取得し、画面の指示に沿ってインストールします。

インストール後、「プログラムの起動」にチェックをつけ手からウィザードを終了すると、FOVE VRというアプリがタスクトレイに常駐します。

f:id:waffle_maker:20170215181449p:plain

この状態でFOVE0とポジショントラッキング用カメラをPCと接続します。その後、キャリブレーションツールを起動すると、装着した人の視線入力位置を調整します。FOVE VRアプリは赤で囲ったアイコンです。

f:id:waffle_maker:20170215181451p:plain

ここまでで、FOVE0を動かす準備が整いました。

次回は実際に試した結果を書いていきたいと思います。