HANDAI JK Engineering Blog

HANDAI JKの技術ブログです

活動内容をよく聞かれるので、過去のイベント写真を独自解釈で紹介(2)

こんにちは、HANDAI JKの杉森です! ブログコンテストがまだまだ開催中です! 応募記事もぜひ読んでください!

さて、今回は前回からの続きで、活動内容について過去の写真を用いて紹介したいと思います! 紹介するイベント名はJK TRIAL #1JK LT #3インターンシップ大報告回です!

前回の記事はこちらから

handai-jk.hatenablog.jp

目次

JK TRIAL #1 (2018/5/28)

簡単に言えばプログラミング教室ですね! サブタイトルが『学校では教えてくれない実践プログラミング』だったようです! (ここから私情が多くなるので、飛ばしたい方は目次からお願いします...)

f:id:handaijk:20200524032109j:plainf:id:handaijk:20200524032046j:plain

会場にコードや実行環境を用意し、それを使ってプログラミングについてのポイントなどを解説していくスタイルのようですね! せっかくなので、そのときのスライドの一部も公開します。

f:id:handaijk:20200524032226p:plain
これは本当に注意しないと後でやらかす (経験談)

f:id:handaijk:20200524032231p:plain
これのせいで絶賛苦しんでます... 絶対に書いて、他人はエスパーじゃないから

f:id:handaijk:20200524032114j:plainf:id:handaijk:20200524032052j:plain

「WHAT IS BEAUTIFUL CODE」

このワードは個人的にめちゃくちゃ刺さります...

過去の自分のコードは逮捕ものです orz

私情が入ってしまいましたが、こうしてTRIALは行われていたようです! 今もオンラインでプログラミング教室をしていますが、やっぱりリアルでやりたいですね!

JK LT #3 (2018/7/9)

LT大会は早くも3回目の開催となりました!

オープニング

f:id:handaijk:20200524032121j:plainf:id:handaijk:20200524032104j:plain

これらはオープニングの様子の一部です! このころからScience Studio Aは僕らにとっては大事なイベント会場だったことがよく分かります!

LT中の様子

f:id:handaijk:20200524032128j:plainf:id:handaijk:20200524032133j:plain

エンジニア面接を初めて受けた際の感想をプレゼンしていますね! 逆求人は色んな企業から来たりするので、面白いですね!

f:id:handaijk:20200524032140j:plainf:id:handaijk:20200524032137j:plain

HANDAI JK2代目リーダーが登壇しています!なかなかインパクトのあるタイトルですね! 彼はこれまでの経歴を元に、どういったことをすべきなのかを問いかけているようです!

f:id:handaijk:20200524032056j:plainf:id:handaijk:20200524032059j:plain

こちらはOSについて登壇されていますね! Windows 10やMac OS XもこのハイブリッドカーネルOSに該当しますね! また、今のWindowsの基盤となるOSが生まれた話は「闘うプログラマー」という本の題材となっているので、よければ読んでください! 壮絶な話で面白かったです!

インターンシップ大報告回 (2018/10/24)

夏休みが明けたころの時期ということで、夏休み期間中のインターンシップについてLTを行ったようです!

オープニング

f:id:handaijk:20200524052056j:plainf:id:handaijk:20200524052102j:plain

いつものように初代リーダーがオープニングをしていますが、このころは金髪だったそうです。インターンシップとはについてと一体どういう内容をやるのかについて大まかに説明しています!

登壇者の様子とインターン参加企業

ここからは登壇者がプレゼンしている様子を画像とともに紹介していきます! (インターンに関する非公開の情報はブログ等での公開が禁止されている場合が多いため、伏せさせていただきます。あらかじめご了承ください)

f:id:handaijk:20200524051542j:plainf:id:handaijk:20200524051545j:plain

こちらはDeNAへのインターンに参加した際の様子についてですね! 寿司が写っていたりとなかなか楽しそうですね!

f:id:handaijk:20200524051549j:plainf:id:handaijk:20200524051553j:plain

こちらは日鉄ソリューションズへのインターンシップについてです! 選考フローは企業によって大きく違うので、こういった情報の確認は大切ですね!

f:id:handaijk:20200524051611j:plainf:id:handaijk:20200524051617j:plain

ダイキン富士通研究所インターンについてです! これらは中々出しづらい情報もLT内で話されていたようで、こちらで掲載できないのが残念です...

f:id:handaijk:20200524051600j:plainf:id:handaijk:20200524051607j:plain

SeesaaFringe81へのインターンについてです!

この他にも、Wano楽天Cookpadカリフォルニア大学へのインターンについても登壇されていたようです! たくさんの参加、ありがとうございました! インターンシップについては、過去にブログ記事の投稿を行っているので、この記事の最後にリンクを掲載していますので、ご覧ください! (許可は取っています)

まとめ

今回は長めになりましたが、その期間内に様々なイベントが行われていたことを知っていただけていたらそれで良かったと思います。次回は、とある企業さんがスポンサーとして参加してくださったイベントの紹介を行いたいと思います!

handai-jk.hatenablog.jp

handai-jk.hatenablog.jp

handai-jk.hatenablog.jp

活動内容をよく聞かれるので、過去のイベント写真を独自解釈で紹介(1)

こんにちは、HANDAI JKの杉森です! やっと研究室に配属されました笑 少しずつ色んなことが前に進んでいるのかなと思っています! 宣伝になりますが、ブログコンテストまだまだ開催中です! (2020/5/31まで) 軽い気持ちで記事を書いてみてほしいと思います! さて、今回から情報関係とは異なる記事の投稿になりますが、活動内容について過去の写真を用いて紹介したいと思います!

経緯

HANDAI JKの運営に関わって1年、HANDAI JKのリーダーとなって半年になりましたが、急遽交代となったため、引継ぎもろくにできていませんでした。少しずつファイルの整理や閲覧をしていると、最近過去のイベントの写真が大量に保管されているのを発見しました! 活動内容について聞かれることも多いので、ブログを始める前の過去の活動内容について、残された資料と写真から独自解釈で紹介したいと思いました!

LTとは

過去に主催したイベントのほとんどはLT大会となっているので、このLTについて説明しようと思います! LTとは、Lightning Talksの略です。Lightningは稲妻を意味する英語であり、つまりは「短いプレゼンテーション」を指します。基本的にルールはなく、時間制限は設けられていることが多いです。つまり、時間内だったら発表したいことは自由、発表の仕方も自由となっています! IT系業界ではどこかで耳にするワードですので、覚えておくといいと思います!

LT #1 (2018/1/31)

こちらは写真が残っていないので、実施したという記録だけが残っていました。HANDAI JKができたのは、2017年の12月のようなので、そこから2ヶ月以内に初回が実施されたようです!

LT #2 (2018/4/25)

ここから写真が残っていました! 2回目のLT大会実施時の様子です! 参加者の割合は4月ということもあり、1年生の参加が多かったようです!

開始前の様子

f:id:handaijk:20200515005420j:plainf:id:handaijk:20200515005410j:plain

これらは開始前の受付と会場の様子です!会場は、豊中キャンパスにあるサイエンスコモンズ Science Studio Aという場所です。 若かりし頃の先輩も写っていますね! (彼が執筆した記事でおすすめの記事がこちらです。面白いです!)

handai-jk.hatenablog.jp

オープニング

f:id:handaijk:20200515005425j:plainf:id:handaijk:20200515005428j:plain

これらはオープニングの様子の一部です! LT大会のメリットが分かりやすく書いてあります! 右の写真がHANDAI JKの初代リーダーです! (彼の記事でおすすめのものはこちらです。プログラミングを始めようと思う人はご覧ください!)

handai-jk.hatenablog.jp

LT中の様子

f:id:handaijk:20200515005437j:plainf:id:handaijk:20200515005441j:plain
f:id:handaijk:20200515005507j:plainf:id:handaijk:20200515005516j:plain

こちらは登壇者の様子です。様々な内容でLTが行われていますね! Amazon Dash ButtonでどのようなLTをしたのかが個人的に気になります! どこかに資料残ってないかな...

f:id:handaijk:20200515005456j:plainf:id:handaijk:20200515005447j:plain

こちらはLT中の参加者の様子です。みなさん真剣な表情です! このときはゲストを呼んだようなので、学生以外の方も多く参加されているようです!

エンディング

f:id:handaijk:20200515005557j:plainf:id:handaijk:20200515005555j:plain

「約2時間の長丁場でしたが、みなさんお疲れ様でした!」 と過去の画像を見ながら思ってました笑 LT大会は大体2時間~3時間くらいの時間を設けて行なっています!

まとめ

今回はHANDAI JK LT #1と#2を紹介しました。知名度も低く、運営もままならない状態のようでしたが、こうして開催されていたことを知っていただけたら幸いです! まだまだ過去のイベントについても紹介しながら、これまでどういったことをしてきたのかを少しでも知っていただけたらなと思います!

おまけ(現在のJK運営は何してる?)

現在、オンラインでのLT大会を開催するために、企画・準備を進めています! 開催が決定した際にはブログやTwitterで告知いたしますので、ぜひ参加してください! ブログコンテストやプログラミング教室も行なっていますので、興味があればこちらも参加お願いします!

視点移動を解析するeyetrackingと様々な分野への応用~デジタルサイネージ、ゲームUI、スポーツ~

この記事では、現在実用化され、様々な分野で応用されているeyetracking技術と、ゲームUI開発への応用を提案した論文を紹介します。

eyetrackingとは

eyetrackingとは、視点の場所や東部に対する眼球の動きを計測し、追跡する方法であり、アイトラッカーと呼ばれる機器を利用します。 アイトラッカーのトップシェアを誇るのはトビー・テクノロジー社。 www.tobiipro.com

アイトラッキング技術は心理学や認知科学等のほか、ヒューマン・コンピュータ・インタラクションやマーケティングなど、様々な分野で応用されています。

eyetrackerの仕組み

ここでは、トビー・テクノロジー社のウェアラブルタイプのアイトラッカーを例にその仕組みを説明します。 f:id:handaijk:20200510195359j:plain

画像のように、グラスには瞳孔検出のための近赤外LEDと、アイトラッキングカメラ、視野映像の記録用シーンカメラが装備されています。赤外線はその反射をアイトラッキングカメラで記録することで瞳孔を解析し、どこを向いているのかを認識します。 アイトラッキングにはキャリブレーションという技術が必要となります。これは性格に視点を算出するためのプロセスです。目の幾何学的特徴を取得し、それをもとに3Dアイモデルをカスタマイズすることで視点を算出します。3Dアイモデルには角膜や中心窩の位置、形状など様々な情報が含まれています。

応用例

アイトラッキングを応用した事例をいくつか紹介します。

セールスプロモーション

デジタルサイネージ電子看板)が、消費者の商品選択率の向上に役立つという仮説検証の調査に、アイトラッキングが利用された事例です。

デジタルサイネージの評価測定| トビー(視線計測)

画像のように全く同じデザインの広告を、POPとして張り付けた場合と、電子看板として設置した場合で、アイトラッキングを行い、どの位置をどのくらいの時間眺めていたかを検証しました。

f:id:handaijk:20200510195756j:plain

二種類の商品で検証しており、これは商品認知度の差を考慮しているためである。(左:認知度高、右:認知度低) その結果、認知度の高い商品に関しては、POPとデジタルサイネージの注視時間はさほど変わらなかったが、認知度の低い商品の場合はデジタルサイネージに対して注視する時間が7倍も長かったそうです。

条件 緑茶 酸素水
POP 0.93sec 0.89sec
デジタルサイネージ 2.55sec 2.16sec

f:id:handaijk:20200510200257j:plain

疲れないゲームUIの開発

とある卒業論文に興味深いアイトラッカーの応用例を見つけたので紹介します。

https://gamescience.jp/2015/Paper/Saiki_2015.pdf

シューティングゲームを例として、ゲームのUI配置による目の疲労度をアイトラッカーで分析してみようという内容である。実験内容は以下の通りである。 3DシューティングゲームのUI配置を、周囲利用型と全面利用型、周辺配置型に分類し、それぞれに対応したゲームを制作、21名の被験者にプレイしてもらい、フリッカー値(光の点滅が見える限界の頻度値であり、目の疲労度とともに減少する性質を持つ)の推移を計測する。

f:id:handaijk:20200510200440p:plainf:id:handaijk:20200510200424p:plain

実験の結果、周辺配置型UIの場合、視線移動量が多く、フリッカー減少率が大きいことに対し、全面利用型は比較的減少率が小さいことが分かったという。 また、シューティングゲーム経験者の方が、未経験者よりも視点移動が多く、フリッカー減少率が大きいことも判明した。

スポーツ分野での応用

スポーツ分野でも、アイトラック技術が利用されています。 エキスパートと初心者では、視覚探索がどのように違うのか、それによって何をどう判断しているのかを分析し、トレーニング方法を確立したり、より効率的なチュートリアルを作成したりすることにつながります。 例えば、F1ドライバーの例を挙げてみましょう。世界的に有名なF1ドライバーNico Hulkenbergの運転中の視覚をトラッキングした結果、道路、カーブ、コーナーの内側の頂点といった個所を集中してみていることがわかりました。他の情報を得るために視点を移動させる時間はわずか1/10秒だったという。

Through the eyes of an F1 driver - Tobii

近年急成長を遂げているe-sportsの分野でも、eyetrackerによる視点の分析はよく話題に上がります。シューターゲーム最大手であるCS:GOの世界大会では、2017年にアイトラッカーが導入され、視聴者たちはプロの選手たちがどこを見ているのかを見て楽しむことができた。このように、視聴者側に新たな楽しみを与えるといった点で、アイトラッカーを利用する事例も少なくはない。最近はアイトラッカーを利用してゲームをプレイしてみる動画を挙げているYouTuberもしばしば見かけられる。

まとめ

現在、トビー社の製品を筆頭に、非常に高レベルな視点解析が可能となっている。人が行う「見る」という行為は常に付きまとうものであり、あらゆる判断の材料となる。そういった中で人の視点を解析し、その原因、理由から人の心象心理を予測し、セールスや能力向上などに利用することがその分野の発展につながることは自明であろう。我々の「見る」という行為そのものすら、「見られる」時代となったのである。

出典

アイトラッキング - Wikipedia (2020/05/10アクセス)

アイトラッキング世界最大手|トビー・テクノロジー(2020/05/10アクセス)

http://tobii.23video.com/through-the-eyes-of-an-f1-driver (2020/05/10アクセス)

https://gamescience.jp/2015/Paper/Saiki_2015.pdf (2020/05/10アクセス)

論文紹介 一体いつからAIを遣っていないと錯覚していた?

f:id:handaijk:20200504033517p:plain
[1]

はじめに

今回は以下の論文をかなりざっくり紹介します.巷では「Deep BLEACH」なんて呼ばれ話題になりました.

Unpaired Photo-to-manga Translation Based on The Methodology of Manga Drawing Hao Su, Jianwei Niu, Xuefeng Liu, Qingfeng Li, Jiahe Cui, Ji Wan, Submitted on 22 Apr 2020 arxiv : https://arxiv.org/abs/2004.10634

概要

  • 敵対的生成ネットワーク(Generative Adversarial Network, GAN)をもとに,写真を漫画風に変換するMangaGANを提案
  • 人気漫画から新しいデータセットを構築
  • なめらかな線,ノイズ除去,もとの写真の情報保存を実現するための損失関数を提案

GANとは

  深層学習のモデルには,数値を予測したり,物体を認識したり,その他にも様々なものがあります.その中でもGANは,画像を生成するモデルです.

大量の画像データセットをGANに学習させると,GANは「データセットにありそうでない画像」を生成します.例えば,実在するいろんな人物の顔の画像を学習させると,この世に存在しない人の顔画像を生成することができます(図1).

f:id:handaijk:20200504033623p:plain:w300
図1 StyleGAN[2]による顔画像生成. すべてこの世に実在しない人物です

GANのモデルは,画像を生成するGenerator(生成器)と,それがデータセットに含まれている画像か,Generatorによって生成された画像かを見破ろうとするDiscriminator(識別機)で構成されます(図2).GeneratorはDiscriminatorを騙すように,DiscriminatorはGeneratorを見破れるようにと,競わせるように学習することで,より「データセットにありそうでない」画像を生成することができます.

f:id:handaijk:20200504034454p:plain
図2 GANの基本構成[3]

GANによる画像のスタイル変換

画像のスタイル変換とは,今回のMangaGANのように写真を漫画風にしたり,線画画像を写真にしたり,昼間の風景を夜景にしたり(図3)といったように,「入力画像の構図を大きく変えずに,全体の画風や色味を変換する」タスクです.

f:id:handaijk:20200504034639p:plain:w300f:id:handaijk:20200504034655p:plain:w300
図3 pix2pix[4]によるスタイル変換

目的

この解説の1番上に貼った画像だけ見ると,「この技術何に使うの?」と思う方もいるかも知れませんが,至極まっとうな背景があります.漫画を書くというのはとても時間のかかる作業であり,作業を分担しようにもプロの画風,例えば久保帯人先生の画風を真似るというのは簡単にできることではありません.そういった時間のかかる,プロにしかできない作業をAIで支援するというのがこの研究の目的です.

写真→漫画の変換を目指す上で,以下の4つの問題があります.

  1. 漫画における人の顔は抽象的で,白黒で,誇張されているという点で写真と大きく異なる
  2. 顔の輪郭,各パーツの位置やサイズは作者によって大きく異なる
  3. 入力となる人物と,漫画の画風の両方に似せなければならない
  4. 漫画のデータセットを集めるのが大変

既存のスタイル変換技術は,この4点が理由で写真→漫画において十分な結果を得られていません.そこでこのMangaGANの登場です.

モデル概要

モデルの概要が図4です.

f:id:handaijk:20200504034813p:plain
図4 処理のパイプライン

まず,右下の(f)にあるように,MangaGANの仕組みは実際の漫画を書く際の手法にインスパイアされています.はじめに誇張した輪郭を描き,目,鼻,口などの位置を決め,その後細部を描きます.

MangaGANもこれを真似るように,輪郭等の大まかな部分と細部の処理を分けて行います. ざっくりいうと,入力画像から各パーツを切り出し,それぞれにスタイル変換を施します(上段).同時に,入力画像から輪郭や各パーツの位置とサイズを抽出して漫画風に変換し(下段),それに基づいてパーツを合成します.

損失関数

詳しく説明しようとすると数式がいっぱい出てきて大変なので,ここもざっくりと説明します.

パイプラインの上段,各パーツのスタイル変換には以下の4つの損失関数を用います.

  1. GeneratorはDiscriminatorを騙すように,DiscriminatorはGeneratorを見破るように仕向けるAdversarial Loss,  {L_{adv}}
  2. 写真の特徴と漫画の特徴をうまく保存するためのCycle Consistency Loss,  {L_{cyc}}
  3. 滑らかな線画を生成するためのStructural Smoothing Loss,  {L_{SS}}
  4. 入力と出力をさらに似せるためのSimilarity Preserving Loss,  {L_{SP}}

これら4つのLossに重みをつけて足し合わせます.

f:id:handaijk:20200504034943p:plain

次に下段,幾何情報の変換には, {L_{adv}} {L_{cyc}},そして漫画向けに顔を誇張するためのcharacteristic loss,  {L_{cha}}を用います.

f:id:handaijk:20200504035019p:plain

実験結果と考察

MangaGANおよび他の手法での生成結果が図5です.

f:id:handaijk:20200504035128p:plain
図5 多手法との比較結果

右端のMangaGANは,瞼が誇張されたり,眉毛や口がすっきりしたりといったBLEACHの画風をうまく捉えつつ,髪型や眉の太さなどは元となっている人物の情報が保持されています.

おわりに

以上がMangaGANの紹介でした.「顔写真をBREACH風に変換する」というキャッチーなコンセプトと裏腹に,モデルも損失関数も非常に細かい工夫がなされていて非常に勉強になりました.実際に漫画を書く手法に着想を得たというのも面白いですね.

あまり細かい解説はしていませんが,これを機にGANに興味を持ってもらえたら嬉しいです!

参考文献

[1] Unpaired Photo-to-manga Translation Based on The Methodology of Manga Drawing Hao Su, Jianwei Niu, Xuefeng Liu, Qingfeng Li, Jiahe Cui, Ji Wan, Submitted on 22 Apr 2020

[2] Karras, Tero, Samuli Laine, and Timo Aila. "A style-based generator architecture for generative adversarial networks." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.

[3] クレスコエンジニアブログ, "人工知能(AI)が生成した画像にWatson騙される!?", https://www.cresco.co.jp/blog/entry/7502/, Accessed on 05/03/2020

[4] Isola, Phillip, et al. "Image-to-image translation with conditional adversarial networks." Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.

ブラウザのタブを管理して作業効率を2倍にする

4月からIT企業に入社しましたが、新型コロナウイルスの影響で一度も出社できていない石田です。

さてみなさんはChromeなどのブラウザのタブをどう管理していますか? タブをたくさん開いていると、さっき見ていたサイトどこいったっけ...となったりPCが重くなったりして結構ストレスですよね。

そこで僕は一定時間経つと自動的にタブを閉じてくれる「Tab Wrangler」という拡張機能を使っています。

Tab Wrangler

f:id:handaijk:20200422161042p:plain

Chrome Web Store: https://chrome.google.com/webstore/detail/tab-wrangler/egnjhciaieeiiohknchakcodbpgjnchh

GitHub: https://github.com/tabwrangler/tabwrangler

この拡張機能をインストールするだけで、設定した時間一度も表示されなかったタブが自動的に閉じられます。古いタブがどんどん閉じられていくので、PCが重くならず勝手にタブが整理されます。僕は1時間経ったら閉じるように設定して使っています。閉じてほしくないタブはタブを固定(ピン留め)しておけばOKです。

しかし、Tab Wranglerを使っているとやはり「え、勝手に閉じないでよ...」という事故が起こります。そこで、僕はTab Wranglerに加えてeeselという拡張機能を併用しています。

eesel

f:id:handaijk:20200427131851p:plain

Chrome Web Store: https://chrome.google.com/webstore/detail/eesel/jffaiidojfhflballoapgofphkadiono

Official Site: https://eesel.app/

eeselは開いていたGitHubGoogleドキュメントなどのタブを検索して復元できる拡張機能です。Ctrl + Eで起動します。

ブラウザの履歴を検索するのとは違い、Google検索など関係のないものが混じらず特定のアプリのアイテムのみが表示されるので、開きたいものがひと目で見つけられられます。

エンジニアの仕事をしていると本当にたくさんのWebアプリを使うので、ブラウザのタブ管理を見直すだけでストレスフリーで作業に集中できますよ☺️

理系男子が世界一輝くアニメ映画(RSA暗号)

こんにちは。赤沢です。よろしくお願いします。 本日はあの超人気アニメ映画に出てくる「暗号」がどんなものなのか解読していきたいと思います。 暗号理論は大学で勉強しますが、話は完全に整数論の単元なので3月まで受験生だった大学1年生にはぜひとも読んでもらいたい内容です(いずれ大学入試で必ず出題されると私は考えています)。 ではいってみましょう。

健二 (サマーウォーズ)

f:id:handaijk:20200415020252p:plain

健二「先輩の誕生日いつですか?」

夏希先輩「7月19日。平成4年の。」

健二「日曜日です。1992年の7月19日は、日曜日でした。」

夏希先輩「・・・(何やこいつ)」

f:id:handaijk:20200415020318p:plain

2009年8月1日に公開された細田守監督のアニメ映画「サマーウォーズ」。 東京のとある高校に通う冴えない理系男子、小磯健二は先輩である篠原夏希から夏休みにバイトを頼まれ、夏希のおばあちゃん家に一緒に泊まりに行くことになります。 泊まった日の夜、健二の元に数字が羅列された謎の暗号メールが送られてきます。 数学に関しては健二は数学オリンピックの補欠に選ばれるくらいの実力がある健二は、一晩でその暗号を解いてしまい解答を送り返します。

f:id:handaijk:20200415020356p:plain

翌日、健二が目覚めると世界が大パニックになっています。 世界中の人々が利用している登録者10億人以上のインターネット上の仮想世界「OZ」のセキュリティ暗号を解いた人がいるらしく、それによって人工知能「ラブマシーン」に世界が乗っ取られてしまいます。 それによってOZと密接に連携していた現実世界の各種インフラがストップし、挙げ句の果てにはおばあちゃん家に小惑星探査機が降ってくることになります。 大混乱の最中でラブマシーンを止めるために、健二は立ち上がります。

健二とRSA暗号

健二はOZのセキュリティ暗号を最初のメールで送られてきた時に1回、小惑星探査機の軌道をズラす時に3回、計4回解いています。 ここで用いられている暗号はRSA暗号と呼ばれ、ネットワークセキュリティで実際に現在も広く使われている暗号方式です。 RSA暗号はどのような暗号方式でどのように使用されているかは様々なサイトで紹介されているので、ここでは健二がいかにして解いたか、すなわち解読方法のみに焦点を絞って話していきたいと思います。

RSA暗号の解読

健二に送られてきた暗号はとってもとっても長い数字の羅列だったのですが、説明を簡単にするために次のようなものだったとします。

020144130115e51n11

健二はこの暗号を見た瞬間に(RSA暗号だ!)とピーンと来たみたいですね。変人ですね。

このような暗号文が与えられた時、RSA暗号を解読する手順は次の通りです。

  • 暗号文を暗号部、e、nに区切る。
  • eを素因数分解した後、それらとnを用いて秘密鍵dを求める。
  • dを用いて暗号部を解読する。

次のセクションからそれぞれ詳しく見ていきます。

暗号文を区切る

暗号文を一目見るだけでは分かりにくいので、意味のある単位で区切っていきます。 まずeとnというアルファベットが入っていますが、これはe51、n11と区切って読むことができ、e=51、n=11としてRSA暗号で使用される2つの数字eとnの値を表しています。 また、この暗号はA=01、B=02、...Z=26、のようにアルファベットを二桁ごとの数字に割り当ててあります。 つまり暗号文を区切ってみるとこのようになります。

(暗号部)02 01 44 13 01 15, e=51, n=11

※これは暗号化されているのでこのままアルファベットに当てはめてもダメですよ(BA?MAOとかいうワケの分からない文字列になります)。 この見やすくなった暗号をこれから解読していきます。

秘密鍵dを求める

暗号文からeとnを取り出せたらいよいよ暗号を解くための鍵を求めていきます。 RSA暗号におけるeの値は、必ず2つの素数の積となっています。(ここめちゃめちゃ大事。) それらの数字をp, q(すなわちe = pq)とすると、RSA暗号では解読に必要な秘密鍵dは次の式で求められます。

d = {(p-1)(q-1) + 1} / n

今回はe=51なのでこれを素因数分解し、p=3、q=17とします。 n=11なので秘密鍵d = {(p-1)(q-1) + 1} / n = 3と求めることができました。

秘密鍵dを使って暗号を解読する

秘密鍵dを求めることができたら暗号部の復号作業に入ります。 暗号部で区切られたそれぞれの数字をd乗し、それをeで割った余りが元の数字となります。 最初の区切られた数字は02で、d=3、e=51なので2の3乗を51で割った余りを計算します。

23 / 51 = 0 余り 8

(合同式で書くと23 ≡ 8 (mod 51))

この8が復号された値となります。 「02」と書かれていたのは実際は「08」が暗号化されたものだったんですね。 01、44、13、01、15に対しても同様の操作を行うと、復号された数字はこのようになります。

08 01 14 04 01 09

これを先述したA=01、B=02、...Z=26として割り当てるとこのようになります。

HANDAI

見事暗号文を解読することができました。

健二が解いたRSA暗号

今までのセクションでは、RSA暗号を比較的簡単な例を用いて解読してきました。 それでは実際に健二の元へ送られてきた暗号を見てみましょう。

f:id:handaijk:20200415021243p:plain

長すぎて見切れてますが、よく見ると数字の羅列の中に一文字だけちゃんとeが入っているのが確認できます。 nの記載は無いようですが、nは昨今では65537を使うのが一般的みたいなのでn=65537として解読していきましょう。

どんなに暗号が長くなっても皆さんはもう解読方法を知っているので解読できるわけですが、上記の手順の中で一番の肝となる作業はどこかお分かりでしょうか。 それは「秘密鍵dを求める」セクションでさらっと書いた次の一文です。

今回はe=51なのでこれを素因数分解し、p=3、q=17とします。

私がさらっと書いたので皆さんもさらっと読み流したと思うのですが、健二の元へ送られてきた暗号文のeは次の値です。

e = 765434576345637173823138479813768765238613741311236937264827654778277325473898928152422542515522536131313315113131436465191945461216494600604573790464767487277872182954748299792393745245635321521251762851642417215462185215216524128156631535133635135624373234146484945914624245144655937545243151552364728646254632586421653765268752146364216452966051582166316165298691556167867525411656512513466425667026216616514563466741256352312000214153442514256547456176523156416857441156514555136515571345216351461342355314575145551352534665275245434123524164512514854135513552515115617195661675681735681361373613725382416248275264278352381658327184562416554631567452166375415676516659156451553145235234613252553232516852127126451621572321315221367251321433642212341623226546564323221637261423214278263167424542351254254143654215461524423554259418149422453565065652624639606225635206461462565251661258214063232062267640333141325426372633225334823727365243212325634253834253324362370285630743325310023223052360452321456631647857143521514557163023223522423243624702260270285607962516432235723674724715613526215523165518237142314221623715637261634153471

eの値は、必ず2つの素数の積となっているので、秘密鍵dを求めるにはこの長ったらしいeを2つの素数p,qに因数分解しなければなりません。

さてみなさん、どうでしょうか。 これを解くことができないから、このRSA暗号は暗号として今現在も機能しています。 素因数分解は意外と今の技術では解くのが難しく、これほど大きな数値だとスーパーコンピュータを使っても100億年以上かかってします(冗談抜きで本当にかかります)。 なのでこの暗号は「今のところは」安全とされており、世界中でこれを使用したシステムが使われています。 逆に言えば、どんな値でも瞬時に素因数分解できるようなコンピュータが開発されたら、この暗号は全く意味のないものになるってことですね。

よくよく数えてみると暗号文全体は2056桁あり、eは1138桁ありました。 健二は、このeの素因数分解をやっていたのです。 上記の手順に則って、eを素因数分解し、出た素数(これもめちゃめちゃ大きな値)とn(=65537)から導かれる秘密鍵dで暗号部の値をべき乗をした後、その値を再びeで割った余りを求める、という作業を鼻血を出しながら必死にやっていたんですね。 本編の最後ではこの規模のRSA暗号を隕石が落ちてくるまでの10分間で3回、うち最後の1回は何と暗算で解いてしまうわけです。 そりゃあ「よろしくお願いしまぁぁぁぁぁぁす!!!!」ってなるやん。笑

f:id:handaijk:20200415021211p:plain

終わりに

本編では全く触れられていませんが、健二がどれほどスゴいことをやっていたか分かって頂けたと思います。 「サマーウォーズ」の見所はおばあちゃんが電話をかけるシーンでもなければ、夏希が「コイコイ!」するシーンでもありません。 鉛筆と頭脳を使って莫大な量の計算をこなし、最初から最後まで一貫して暗号を解き続けたことで世界を救った健二。冴えない理系男子がこれほど頼もしく、大暴れする作品はどこを探しても無いのではないでしょうか。

また夏になると金曜ロードショーでこの映画が放映される日が来るでしょう。 その時に、友達にドヤ顔で「サマーウォーズ」の見所を教えてあげましょう。 そして健二が解いたのがどんなにスゴい暗号か説明する時に、このブログの記事を「どうぞ使って下さい。」 今回はそんなお話でした。 読んで頂いてありがとうございました。

f:id:handaijk:20200415021113p:plain

夏希先輩「がんばれ!」

健二「はい!」

顔画像認識で女装は見抜けるのか!?

こんにちは、HANDAI JKの杉森です! 画像を整理していると、少し前に顔画像認識させた画像が出てきました! いろんな画像を試していたので、その時の話をしようと思います!

きっかけ

とあるきっかけでMicrosoft AzureのFace APIを使って顔画像認識をすることになったとき、1年ほど前にお会いしたナジャ・グランディーバ | 太田プロダクションさんとの写真を見つけたので、認識させてみるとこんな結果になりました!

f:id:handaijk:20200411091328j:plain
左がナジャ・グランディーバさん、真ん中は僕の友人なので隠してます

一見なんらおかしな点はないはずです... 彼女が女装家でなければ!

要は、年齢も性別も大外れの結果ということです! というわけで、どこまで見抜けるのかを色んな画像を使って試したりしてました。

Face APIの簡単な説明

Microsoft Azure Face APIとは、Microsoft Azureというクラウドコンピューティングサービスが提供するAIや機械学習を用いたサービスの内の1つで、顔画像認識に特化したものです!

azure.microsoft.com

顔画像認識を行うために一から作成となると、大量の顔画像が必要となりますが、このサービスを用いることで、すでに学習済みで、高精度の顔画像認識を行えるということです!

実際に顔画像認識させた画像の一例とその結果

ここでは、実際に顔画像認識させた画像を紹介しながら、その結果を発表していきますが、著作権等の関係上、画像を引用する形となるので、見づらくなっているのはご了承ください! また、結果は2019年7月ごろのものになるので、現在と異なる可能性があります!

ナジャ・グランディーバ

女性・32歳 matsukoholic.com

女性・35歳 www.nikkan-gendai.com

女性・39歳 www.abc1008.com

他女装タレント編

女性・29歳

urbanlife.tokyo 女性・28歳 www.townnews.co.jp

男性芸能人たちの女装編

城田優 女性・22歳

千葉雄大 女性・21歳

藤ヶ谷太輔 女性・23歳

小池徹平 女性・21歳

全部以下のサイトからの引用

rank1-media.com

流石に見抜くだろうと思ってもう一枚

ブリリアン・ダイキ 女性・26歳 post.tv-asahi.co.jp

あれこれ試したりしてましたが、結果としてほとんど見抜けませんでした笑

なぜ見抜けなかったのか

見抜けなかった理由として、考えられるのは大きく2つです。

  • 女装している男性の顔画像の学習データ数が足りていない
  • 女装のレベルが高い

特に大きいのは、学習データ数だと思いますね! サンプル自体も少数な上に、このようなケースが生じることも少数なので、汎用性を考えてあまり学習させていないのかもしれません。あとは、本人やメイク・スタイリストなどの女装に関わる人たちの努力によるレベルの高さですね! 僕がナジャ・グランディーバさんにお会いした際の振る舞いから、男性であるということを感じるようなことはなかったですね! それが反映されていたのかもしれません!

最後に

終始、遊びでやっていたことを書いていましたが、中々興味深い結果が出たと思います! 自分もやってみたいだったり、何かしらの興味を持つきっかけになると嬉しいです! Face APIの使い方を詳しく知りたい方は、ツイッターのDMやコメントなどでお知らせください!

おまけ(男装編)

数枚ですが、男装している女性もFace APIの顔画像認識をしてみました。 こちらは驚くべき結果が出ました!

山本美月 女性・21歳

中川翔子 女性・18歳

天海祐希 女性・26歳

認識画像はいずれも以下のサイトから引用

rank1-media.com

なんと体感9割以上見抜いています!!!!

男装グループ・ユニットの全員、あるいはほとんどを見抜いたりしています! (営業妨害になりそうなので、画像は絶対に出しませんが) ぜひ色々試してみてください! また、他にも顔画像認識ができるクラウドサービスはあるので、比較してみるのも面白いですよ!