ラベル 勉強会 の投稿を表示しています。 すべての投稿を表示
ラベル 勉強会 の投稿を表示しています。 すべての投稿を表示

2015年10月18日日曜日

ささみの会で #IkaLog の話をしてきました。

私の Twitter をご覧になっている方であれば作っていることは知っていたでしょうし、スライドがかなり反響を呼んでいるので、すでにご存じの方も多いかもしれませんが、金曜日に、「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側 というタイトルでスピーカーをやってきました。



IkaLog (イカログ) は、任天堂の Wii U 向け塗りシューティングゲーム「スプラトゥーン」の画面を、 HDMI キャプチャデバイス越しに監視して様々なことをするソフトです。ゲーム開始・終了やゲーム中の状況画面認識して、数値や文字列として扱えるようにする認識処理、そして、その認識結果を CSV, JSON, Twitter, Slack, Fluentd, またスプラトゥーン戦績専用 SNS とも言える stat.ink に投稿する機能などをプラガブルに実装できます。

IkaLog 開発開始のきっかけは INTEROP の会場で知人と会ったことでした。帰りに秋葉原付近で夕飯を食べている際に世間話をしていたらスプラトゥーンに興味を持っていたことがわかり、

「これはもうアキヨドで WiiU とスプラトゥーンを買って帰るしかないですね」
「えっ... それは.... でもまだプレイする判らないし。」
「でも判ってからでは間に合わないかもしれないですよ!」
「プリフェッチですか!間に合わないのはまずいですね、、、。」

という会話でスプラトゥーンにはめ、後日のモツ鍋では

「スプラトゥーン、その後どうですか?」
「がんばってます。全試合記録を取ってるんですよ (Excel ファイルドヤァ)」
「wwwwwww」

という会話からスプラトゥーンの機械学習や画面認識を話だけで鍋がからっぽになり、その日から開発の検討をはじめました。最初はゲーム開始・終了時のフレームを各一枚認識する程度でしたが、いまではゲームの進行がある程度リアルタイムに解析できるようなものになってきました。

今回、プレゼンテーション枠をもらったときに何も話をしようか悩んだのですが(Fluent-bitまわりの話をしようかとも思った)、プライベートプロジェクトとしてはいちばん時間をとっているのが IkaLog だし、 IkaLog の紹介をすることにしました。

ただ、ささみの会は、経験上ITインフラエンジニア、ネットワークエンジニア、セキュリティエンジニアなどが参加していることが多いのです。今回ははせがわようすけさんというガチエンジニアが登壇するというものの、突然ゲームの画像認識の話をして外してしまうのもアレなので、画像認識のしくみやアルゴリズムの話に寄せることにしました。結果として、セッション中に眠くなってしまった人たちを、突然の機械学習の話とデモでたたき起こして最後まで突っ走ることができました。

IkaLog の画面認識は、それほど難しいことはしていません。フォアグラウンド、バックグラウンドを白・黒にわけた画像ファイルと、フォアグラウンドとバックグラウンドがどのような色であるか、という情報をもたせておいて、期待値にどれだけ近いかでマッチングしているのがほとんどです。文字(列)、ブキ画像の認識には機械学習を使っていますが、使っているのはK近傍法と呼ばれる、機械学習のなかでもいちばんシンプルなアルゴリズムで十分実現できています。画面認識とか機械学習とかにまじめに取り組んでいる方からすればお粗末な内容ですが、まあ、こんなやり方もあるんだよ、と、知らない人に知ってもらえたなら、それでいいかなと思っています。


 はてなブックマークや Twitter などで見つけたコメントにちょっと思ったことを書いてみると

ただのモツ鍋の人ではなかったのか @hasegaw …すごすぎ(震

ワタシ、イカログ チョットツクレル

環境構築がめんどくさい

当初 IkaLog は GitHub から拾ってきて Python3 環境で実行するしか利用する手段はありませんでした。HDMI キャプチャデバイスに加えて Python3, OpenCV 、そのほか Python モジュールを揃えるというのはエンジニアでない人にとっては無理に等しいかと思います。もともと IkaLog は完全にコンソールアプリケーション(しかも設定は Python 直書き)だったのでユーザが大変限られていました。

そこで、敷居を下げるために wxPython を利用した GUI フロントエンドを追加して、設定を yaml ベースで保存・読み込みできるようにして、 py2exe で Windows アプリケーションの形態にすることで多少敷居を下げる努力をしました。その際には、正直、わたし自身としてはまったくもって不要な機能ですが、 py2exe すると requests モジュールが壊れて使えなくなるのを密かにパッチして対応していたり、 OpenCV のビデオキャプチャ機能がタコなので、 OpenCV の機能を使わずにキャプチャデバイスを列挙するためのライブラリを別途準備して DLL 化し同梱したり、といった対応を行っています。

これでもまだめんどくさいようで、自分の努力がまだまだ足りないんだなと思っています。(嫌味とかではないです。仕組みなど的に、中々ハードルを下げきれないな、と。)

OCR ではスプラトゥーンの独特のフォントを誤認識するのか

手元のテストではスプラトゥーンの独自のフォントをベースに OCR ソフトをトレーニングした状態で評価を行ってきました。しかし、文字数が少ないデータを処理すると、 OCR ソフトが文字の大きさや向きなどの検出に失敗して読み取れなかったり、3と8と0を間違えたり、1と7を間違えたりする現象が多発しました。大きめの文字ならよいのですが、画面上に(K/Dで)出てくるもっとも小さい数字の認識率は相当低く実用的だとは考えられませんでした。

もうすこし OCR まわりの背景について説明すると、 TesseractOCR 自体に手を入れるかどうか悩みましたが、三つの理由でその方針はやめました。ひとつ目は、1〜2桁の数字がそのまま読み取れなかった事です。経験上、数字の列を確実に見つけて読み取らせるには最低限4桁必要であることが、試行錯誤の結果としてわかっていました。しかし、読み取り率を上げるための事前処理で桁数を増やした画像を作って、読み取り結果から不要な情報を省く処理を毎回するのはコードの維持的にかなり厳しいです。

二つ目は、ガチなOCRエンジンに対して私が手を出したところで、今後認識率の問題に遭遇したときに私が問題に対処し続けられるかどうかというと自信がなかったからです。三つ目は、Python3 で書かれている IkaLog から tesseract を呼ぼうとすると自分で binding を整備するか、子プロセス呼び出しで頑張るしかなく、現在エンジンがシングルスレッドで動作している IkaLog にとっては OCR エンジンとやりとりしている時間がもったいないのです。これらの理由から TesseractOCR にこだわらずに別に OCR エンジンを探してみたり、 OCR 関係のアルゴリズムを色々あさったりしていました。電車の中でペーパー検索したりとか。


はせごーさんの本気を見た、、、 

今回のネタは楽しみながら本気を出しました。私がこれ以前に Windows 向けでソフトを公開したのは 2002年、まだ Windows 向けに iTunes がなかったころに自分で iTunesDB や MPEG1.0 Layer 3 、ID3などを解析して、ドラッグアンドドロップで iPod に曲を転送できる dogpod というツールを作っていました。それ以来の新作ってかんじなので約 12 年ぶりぐらいに、公開して使ってもらえるようなソフトウェアを書いて、表に出してるのですが、楽しみながらやっています。

しょーもない事に必死になるエンジニア ワロタ。
ただ、湧きだすモチベーションをしっかりと形に落す事は重要。
このノウハウが色々なプロジェクトに活用できる。イカ恐るべし

しょーもない事に時間を費やしてしまって、すみません。けっこう時間をかけて作ってしまいました。

先述のとおり、ささみの会の参加者はいわゆるSI系のITエンジニアが多いわけです。その人たちに50分に及んでスプラトゥーンの話をしても業務に役立ててもらえないだろう、という葛藤もありました。実際、会場にはスプラトゥーンのプレイヤーは私を除くと2人しかいませんでした。そういう状況でも時間を割いてくださったエンジニアの方々に楽しんでもらえるよう、機械学習やOpenCVの話をスライドに盛り込みました。なので、どちらかというとアルゴリズム的な話に時間を割いています。結果として機械学習などへのとっかかりとなってもらえれば幸いです。

ところで、ささみの会ではオーディエンス+運営スタッフ+スピーカーで合計60名前後の時間を各50分いただきました。つまりは0.3人月ぶんの時間をこのプレゼンテーションでリアルタイムに奪ってしまったことになります。さらに Slideshare へのアクセスは最初の 24 時間で 35000 を超えてしまいました。合計70枚のスライドを秒速1秒でめくり続けたとして0.4人月、でも、さすがにそれほど速くは読めないでしょうから、スライドあたり2秒かけたとして少なくとも0.8人月の時間を、公開から24時間の Slideshare アクセスで閲覧者から奪ってしまったことになります。

結果として、このしょーもないプレゼンから24時間で1人月以上の時間を奪ってしまいました。私が IkaLog にかけた時間よりも多くの時間を費やしてプレゼンをご覧いただいた皆様には大変感謝しておりつつ、こんな内容で人の時間を奪うことに責任を感じています。


それではみなさん、よいスプラトゥーンライフを。

2011年5月30日月曜日

#ssmjp に参加してきました。

5月26日(水)に開催されたささみの会(#ssmjp、新橋勉強会とか別の名前が色々あるようですが)にてプロジェクトマネジメント的観点からプレゼンテーションをさせていただきました。ちょっと私のスケジュールがテンパっていた都合、事実上私の都合に合わせて開催していただいたような感じで……。 @togakushi さんには大変ご迷惑おかけしました。


さて、プロジェクトマネジメントというと、普通は限られた予算・時間・リソース内でいかに仕事を片付けるかという話が一般的にされるわけですが、今回はそれとはちょっと違います。本業における私の立場では、プロジェクトマネジメントというよりはプロジェクトをリードする立場で、いかにプロジェクトが円滑に回るように、最短で片付くように、という観点から支援していく立場にあります。この立場で仕事をしているうちに思ったことなどを資料にまとめて 30 分ほどお話しさせていただきました。

前日の夜、酔いつぶれた状態で資料を作り始め、途中でやめて寝てしまうという事件があったため(wあまり内容がまとまっていない、私の私見と独断ベースの「仲間と一緒に戦うための心得」みたいな感じになってしまいましたが……。

某社の新人さんも何名かいらっしゃっていたようで……もし、私の話を聞いて、今後、より主体的に仕事に取り組んでくれるような若手になってくれたら ——— この夜の目的としては達成と言えるのかな、とか、そんなことを思っています。


東京OpenSolaris勉強会 2011.05に参加してきました。

5月28日(土)に開催された、東京OpenSolaris勉強会 2011.05に参加してきました。

@nslope さんに「自宅ZFSで盛り上がろうず!」とお声がけをいただいたので、構成的にヘンタイな我が家のZFS環境について簡単に紹介させていただきました。


OpenSolaris 界隈の方はマニアックな方々ばかりなので今頃私が ZFS 自体の話をしても全然面白くなりませんし、ということで、あくまでもZFS的に非一般的な我が家のZFS環境についての紹介とさせていただきました。




私の自宅では、 CentOS 5 の Xen 環境において OpenSolaris の開発版スナップショットが動いており、 ZFS ファイルサーバとして利用しています。こうしてある理由としてはファイルサーバとしてZFSの最新機能を活用しつつ Linux とのコンソリデーションを実現する、またOpenSolarisに対応できないような安価なハードウェアでもZFSの恩恵を得るために、そういった構成にしています。

ZFSのオイシイところは、信頼性と管理性だと思います。Linuxのmdraidなどは意図せぬ停電やカーネルパニックでアレイの不整合などが起きると大変です。しかし、ZFSの場合は書き込み操作がトランザクション保護されており、中途半端な書き込み操作が多少起きたぐらいではデグレードしません。仮にデグレードしても、 End-to-end checksum による確認が可能なので、デグレ中や復旧作業後にデータが維持できているかどうかを判断できる点も魅力です。また、(喩えれば水と油を1つのバケツに溜めておける、と私はZFSを紹介することが多いのですが)データの管理が非常にフレキシブルなのもポイントです。

私は基本的には「重要なデータは持たない」(データを持つと管理コストが生じるので)という方針にしていますので、仮に手元のデータがロスしても精々数日ヘコむぐらいで済むよう心の覚悟をいつもしている(つもりな)のですが、これまで3年以上の運用期間中に2回のデグレが発生しても、嬉しいことに、データロスにまでは至っていません。また、これまでの経験から、使い始めた当初は色々と罠があった ZFS ですが、だいたいイケるところが見えてきたので、これからも ZFS を使っていくつもりです。

青山のオラクルさんのビルにて Linux の上に乗った OpenSolaris の話をしたり、リプレース時のOS候補は FreeBSD-current だとか話をしたりとかなり KY でしたがニヤニヤしながら聞いてくださった参加者の皆さん、ありがとうございました。

qpstudy 06 の懇親会に参加してきました。

5月28日(土)に開催された qpstudy 06 の懇親会に参加してきました。 qpstudy は IT インフラストラクチャを扱うエンカイチックな勉強会で、 qpstudy 03 の頃から、都合がつけばできる限り参加するようにしています。これまで勉強会の参加記録などは blog には書いてなかったんですが、折角 trackback 企画があるのでチャレンジ!

(本当は本編にも参加したかったんだけど、東京 OpenSolaris 勉強会 2011.05でテーマとして ZFS を扱うということで、 @nslope さんに私の都合を考慮して(??)日程を決めていただいていた事もあり……昼過ぎ〜夕方には東京 OpenSolaris 勉強会@外苑前、それが終わってから割と急いで大森のニフティさんにハシゴするという感じに……)

本編では @sho7650 さんのリードにより、普段の宴会チックな qpstudy とは全く雰囲気が違う勉強会になっているなーというのを Twitter のタイムライン越しに感じていたのですが、残念ながらそれが終わった頃にやっとこ現地到着。あ、通用口まで迎えにきてくださった @ysaotome さん、ありがとうございます。

懇親会は例によってピザとビールを囲んでの LT 大会です。折角なので私も LT やらせていただきました。





本当は別のネタを仕込んでいたのですが、このスライドのほうが、勉強会本編のテーマにも沿ってるかも知れなくてGoodかな?と思い、セレクト。簡単にご紹介すると、明治35年に行われた八甲田山の雪中行軍のお話をベースに、プロジェクトを円滑を進めるためには以下のような点が重要だよね?という感じでまとめさせていただきました。


  • スコープを把握する

  • 問題を見つけたら対策をとる。判断を先送りしない

  • 主体的・積極的に問題に取り組む。他人まかせにしない

今あらためて見るとヘボいスライドだなぁ……



後、もう一本。ちょっと時間が余っているということだったので、 LT で @masudaK さんが発表されていた「海外MLに積極的に出ようよ!」という内容に共感したので、全くの突然でしたが、カーネル/VM探検隊向けに作成した LT 資料でも簡単に発表させてもらいました。


なお、 LT の発表時間実績が 5 分 0 秒ジャストだったのは、、、、、偶然ですw