Asus4 onD 2023-12-28T18:46:34+09:00 asus4 Hatena::Blog hatenablog://blog/12704346814673989686 Onnx RuntimeをUnityで動かす hatenablog://entry/6801883189070453667 2023-12-28T18:46:34+09:00 2024-02-21T21:47:06+09:00 Onnx Runtimeをネイティブプラグインとして、Unity上で動かす実験とサンプルを公開しています。 github.com 開発の動機 4年前に、TensorFlow LiteをUnityで動かす実験を初めて、 はじめは全くの趣味で始めたものが、今では海外からいただく相談の半分以上が機械学習関連になっています。 四年前に始めた実験↓ asus4.hatenablog.com ところが、実際にシェアを見ると、研究関連ではPytorchのシェアが圧倒的。Unityの公式推論ライブラリBarracudaやTensorFlow Liteで動かすために一旦Onnxに変換するなどの事例なども増え始め… <p>Onnx Runtimeをネイティブ<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>として、Unity上で動かす実験とサンプルを公開しています。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Fonnxruntime-unity-examples" title="GitHub - asus4/onnxruntime-unity-examples: Examples for ONNX Runtime Unity Plugin" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/onnxruntime-unity-examples">github.com</a></cite></p> <h2 id="開発の動機">開発の動機</h2> <p>4年前に、TensorFlow LiteをUnityで動かす実験を初めて、 はじめは全くの趣味で始めたものが、今では海外からいただく相談の半分以上が<a class="keyword" href="https://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC">機械学習</a>関連になっています。</p> <p>四年前に始めた実験↓ <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fasus4.hatenablog.com%2Fentry%2F2019%2F11%2F18%2FTensorflow_Lite%25E3%2582%2592Unity%25E3%2581%25A7%25E5%258B%2595%25E3%2581%258B%25E3%2581%2599" title="Tensorflow LiteをUnityで動かす - Asus4 onD" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://asus4.hatenablog.com/entry/2019/11/18/Tensorflow_Lite%E3%82%92Unity%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99">asus4.hatenablog.com</a></cite></p> <p>ところが、実際にシェアを見ると、研究関連ではPytorchのシェアが圧倒的。Unityの公式推論ライブラリ<a class="keyword" href="https://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>やTensorFlow Liteで動かすために一旦Onnxに変換するなどの事例なども増え始め、速度的にはTFLiteは非常に満足していますが、サクッとモデルを試してみたいという時に、変換するのが億劫になってきていました。公式ツールで変換しようにもOnnxやPytorchのNCHWからTFLiteのNHWCに変換するときに大量のTransposeが挟まり速度が逆に遅くなることがあるのが不満でもありました。(この辺の高速化は PINTOさんの<a href="https://github.com/PINTO0309/onnx2tf">onnx2tf</a>などのツールでも対応されています)</p> <h3 id="Unity-SentisのOnnx対応">Unity SentisのOnnx対応</h3> <p>Unityの公式ML推論ライブラリ<a class="keyword" href="https://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>もOnnxフォーマットを読み込みます。今年リニューアルしてSentisという名前になりました。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Funity.com%2Fproducts%2Fsentis" title="Unity Sentis" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://unity.com/products/sentis">unity.com</a></cite></p> <p>実際試したことがある方はわかるかも知れませんが、SentisではOnnxフォーマットを読み込みますが、実際の実行エンジンはUnityが独自開発しているため、対応オペレーターに結構差があります。Onnx Runtimeで動いてもSentisで動かないことがままあります。(体感的には読み込み成功の打率は半分以下な気がします。)</p> <p>Sentisの前身、<a class="keyword" href="https://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>での説明ではありますが、Keijiroさんによる<a class="keyword" href="https://d.hatena.ne.jp/keyword/CEDEC">CEDEC</a>公演でも、後半、結構トリッキーなことをして、Onnxモデルの非対応オペラーターをBrracuda上で対応する構造に書き換えるということをしています。</p> <p><iframe width="560" height="315" src="https://www.youtube.com/embed/dMgm4ZYfaUI?start=874&feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Unity Barracudaを使用したONNXニューラルネットワークモデルのマルチプラットフォーム運用 - CEDEC2021"></iframe><cite class="hatena-citation"><a href="https://youtu.be/dMgm4ZYfaUI?si=Yc4XrWshVDapEc2R&t=874">youtu.be</a></cite></p> <p>Sentis自体は<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%C1%A5%D7%A5%E9%A5%C3%A5%C8%A5%D5%A5%A9%A1%BC%A5%E0">マルチプラットフォーム</a>対応を謳い、今後対応オペレーターの互換性も増えていくと思いますが、Onnx自体の進化も早く、今後完全なOnnx互換となることは難しいように思います。</p> <p>もちろん<a class="keyword" href="https://d.hatena.ne.jp/keyword/Nintendo%20Switch">Nintendo Switch</a>, <a class="keyword" href="https://d.hatena.ne.jp/keyword/Playstation">Playstation</a>からWeb Playerまでを対応しなくては行けないUnityが、独自推論エンジンSentis開発を進めることは正しく思いますが、私のように<a class="keyword" href="https://d.hatena.ne.jp/keyword/iOS">iOS</a>,<a class="keyword" href="https://d.hatena.ne.jp/keyword/Android">Android</a>,PC,<a class="keyword" href="https://d.hatena.ne.jp/keyword/macOS">macOS</a>くらいで動けば良いユーザーからすると、Onnxの互換性が高くなると嬉しいなと思っていました。</p> <h3 id="Onnx-Runtimeの対応プラットフォーム">Onnx Runtimeの対応プラットフォーム</h3> <p>一方、Onnx Runtimeの方の進化も早く、<a href="https://onnxruntime.ai/docs/execution-providers/#summary-of-supported-execution-providers">最新のHardware Acceleration対応</a>を見ると、</p> <ul> <li>CPU上ではXNNPack対応</li> <li><a class="keyword" href="https://d.hatena.ne.jp/keyword/iOS">iOS</a>, <a class="keyword" href="https://d.hatena.ne.jp/keyword/macOS">macOS</a>ではCoreML</li> <li><a class="keyword" href="https://d.hatena.ne.jp/keyword/Android">Android</a>ではNNApi</li> <li><a class="keyword" href="https://d.hatena.ne.jp/keyword/Windows">Windows</a>/<a class="keyword" href="https://d.hatena.ne.jp/keyword/Linux">Linux</a>ではDirectML,CUDA,TensorRT</li> </ul> <p>と、はじめからPC, Mobile, さらに<a class="keyword" href="https://d.hatena.ne.jp/keyword/Raspberry%20Pi">Raspberry Pi</a>のようなEdge Deviceまでを考慮に入れたプラットフォーム対応に見えます。<br/> <a class="keyword" href="https://d.hatena.ne.jp/keyword/Google">Google</a>の開発するTensorFlow Liteが、PC上でのHardware Accelerationが未だに公式にサポートされてないことを考えると、Onnx Runtimeの<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%C1%A5%D7%A5%E9%A5%C3%A5%C8%A5%D5%A5%A9%A1%BC%A5%E0">マルチプラットフォーム</a>対応は、もしUnityでそのまま動けば大きな強みになりそうです。</p> <p>また<a class="keyword" href="https://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a>が開発していることもあり<a class="keyword" href="https://d.hatena.ne.jp/keyword/C%23">C#</a>によるC <a class="keyword" href="https://d.hatena.ne.jp/keyword/FFI">FFI</a>ライブラリのWrapperが、はじめからほぼ全て整備されていることも魅力でした。<br/> TensorFlow Liteのときは半分以上自分で<a class="keyword" href="https://d.hatena.ne.jp/keyword/C%23">C#</a>を<a class="keyword" href="https://d.hatena.ne.jp/keyword/FFI">FFI</a> Wrapperを作っていたので、関心しました。</p> <h2 id="実際のサンプル">実際のサンプル</h2> <p>という経緯から、OnnxがUnity上で動くか試し始めたのですが、<br/> Onnx Runtimeの<a class="keyword" href="https://d.hatena.ne.jp/keyword/C%23">C#</a>設計が良いのかTFLiteでの経験が生きているのか、Unityで動かすのは、すんなりいきました。<br/> 現在、<a class="keyword" href="https://d.hatena.ne.jp/keyword/macOS">macOS</a>, <a class="keyword" href="https://d.hatena.ne.jp/keyword/iOS">iOS</a>, <a class="keyword" href="https://d.hatena.ne.jp/keyword/Android">Android</a>での動作を確認しています。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/Apple">Apple</a>の<a href="https://github.com/apple/ml-mobileone">Mobile One</a>というImage Classificationが100fpsで動く例↓ <blockquote data-conversation="none" class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Hi ML with Unity friends, Have you ever struggled to make the ONNX model compatible with Sentis (formerly <a class="keyword" href="https://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>)? I tested native ONNX runtime on Unity. It will be compatible with <a class="keyword" href="https://d.hatena.ne.jp/keyword/most">most</a> models, at least on CPU. It&#39;s just PoC, but will it be an <a class="keyword" href="https://d.hatena.ne.jp/keyword/alternative">alternative</a> ML solution? <a href="https://t.co/wjIG0l5gtg">pic.twitter.com/wjIG0l5gtg</a></p>&mdash; <a class="keyword" href="https://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1737439635821711855?ref_src=twsrc%5Etfw">December 20, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p><a href="https://github.com/Megvii-BaseDetection/YOLOX">Yolox</a>が60fps以上で動く例↓ <blockquote data-conversation="none" class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Testing multiplatform Onnx runtime with Unity. Yolox-nano Object Detection runs at over 60FPS. <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://t.co/ph6XFJVrK5">pic.twitter.com/ph6XFJVrK5</a></p>&mdash; <a class="keyword" href="https://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1739195403570950385?ref_src=twsrc%5Etfw">December 25, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p>またライブラリに含めるサンプルも4年前からアップデートして、新し目のモデルを選んだので、4年間でのモデルの精度、高速化技術の向上に驚きました。</p> <h2 id="Onnx-Runtime-for-Unityの使い方">Onnx Runtime for Unityの使い方</h2> <p>シンプルな事例、Image ClassificationモデルMobile Oneで説明します。 <figure class="figure-image figure-image-fotolife" title="MobileOne Network"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20231228/20231228192316.png" width="890" height="673" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><figcaption>MobileOne Network</figcaption></figure></p> <p><a href="https://netron.app/">Netron</a>でモデルの入出力をみてみるとMobileOneは224x224のRGB画像を受取り、<a href="https://www.image-net.org/download.php">ImageNet</a>の1000種類の画像分類それぞれの確率を返すシンプルなモデルです。</p> <p>画像を入力として受け取るクラスでやることは大体同じなので、<a href="https://github.com/asus4/onnxruntime-unity-examples/blob/main/Packages/com.github.asus4.onnxruntime.unity/Runtime/ImageInference.cs">ImageInference.cs</a>というPreprocessingをやってくれる抽象クラスを用意しました。</p> <h3 id="Preprocess">Preprocess</h3> <p>通常はImageInference内でやってくれるので、気にする必要はありませんが、概要だけ書きます。</p> <ul> <li>Unityの<a class="keyword" href="https://d.hatena.ne.jp/keyword/Web%A5%AB%A5%E1%A5%E9">Webカメラ</a>はPC上では問題ないが、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A1%BC%A5%C8%A5%D5%A5%A9%A5%F3">スマートフォン</a>では回転したままなので、デ<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>の向きに応じて回転を補正する。<a href="https://github.com/asus4/TextureSource">TextureSource</a>内で自動でやってくれます。</li> <li>モデルの入力に合わせて、画像をリサイズする。3種類のリサイズ方法を用意しているので、用途に合わせて使い分けてください。 <figure class="figure-image figure-image-fotolife" title="Aspect Mode"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20231228/20231228201154.png" width="850" height="417" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20231228/20231228201158.png" width="916" height="373" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><figcaption><a class="keyword" href="https://d.hatena.ne.jp/keyword/Aspect">Aspect</a> Mode</figcaption></figure></li> <li>Onnxモデルの入力に合わせた<a class="keyword" href="https://d.hatena.ne.jp/keyword/Tensor">Tensor</a>を作る。 <ul> <li><code>mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]</code>の正規化をする。</li> <li>カメラ画像のテクスチャはNHWC(N=1)のメモリ配列なので、Onnxのメモリ配列NCHWに並べ替える。</li> </ul> </li> </ul> <h3 id="Onnx実行">Onnx実行</h3> <p>SessionOptions.Run()を実行するだけです。 いくつかInput/Output <a class="keyword" href="https://d.hatena.ne.jp/keyword/Tensor">Tensor</a>の取得方法があるのですが、生のbyte配列を受け渡すより、<a href="https://onnxruntime.ai/docs/api/c/struct_ort_1_1_value.html">OrtValue</a>を使う方法がおすすめされているようです。 こちらも通常はImageInference内でやってくれます。</p> <pre class="code csharp" data-lang="csharp" data-unlink> // 事前にモデルから読み込んでOrtValueを作っておく string[] inputNames; OrtValue[] inputs; string[] outputNames; OrtValue[] outputs; public void Run() { // inputsで画像をTensorへいれる。 PreProcess(); // 実行 session.Run(null, inputNames, inputs, outputNames, outputs); // outputsから値を取り出す。 PostProcess(); } </pre> <h3 id="Postprocess">Postprocess</h3> <p>MobieOne.cs内でPostProcessメソッドをoverrideしています。</p> <pre class="code csharp" data-lang="csharp" data-unlink> protected override void PostProcess() { // Output Tensorから値を読み込み var output = outputs[0].GetTensorDataAsSpan&lt;float&gt;(); for (int i = 0; i &lt; output.Length; i++) { labels[i].score = output[i]; } // スコア順に並べる TopKLabels = labels.OrderByDescending(x =&gt; x.score).Take(topK); }</pre> <p>以上です。<a class="keyword" href="https://d.hatena.ne.jp/keyword/C%23">C#</a>の<a class="keyword" href="https://d.hatena.ne.jp/keyword/API">API</a>がよく出来ているので、カスタマイズも色々出来そうですが、ひとまずは一番シンプルな方法を使いました。</p> <h2 id="まとめ">まとめ</h2> <p>Onnx Runtimeをネイティブ<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>としてUnityで動かしているプロジェクトをこちらで公開しています。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Fonnxruntime-unity-examples" title="GitHub - asus4/onnxruntime-unity-examples: Examples for ONNX Runtime Unity Plugin" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/onnxruntime-unity-examples">github.com</a></cite></p> <p>細かい開発記録はZenn Scrapへ残しています。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fzenn.dev%2Fasus4%2Fscraps%2F2c17b71ffd5552" title="ONNXRuntime Unity Plugin" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://zenn.dev/asus4/scraps/2c17b71ffd5552">zenn.dev</a></cite></p> <p>もし需要がありそうなら時間を見つけて、<a class="keyword" href="https://d.hatena.ne.jp/keyword/Windows">Windows</a>, <a class="keyword" href="https://d.hatena.ne.jp/keyword/Linux">Linux</a>対応も追加したいと思います。<br/> また少し難易度は高そうですが、Web Player対応も出来るといいなと考えています。</p> asus4 Unity ARFoundaitonを録画してUnity Editorで再生する方法 hatenablog://entry/6801883189069253882 2023-12-27T07:43:55+09:00 2023-12-27T07:51:05+09:00 ARFoundationReplayというARを録画してUnity Editor上で再生するライブラリを開発中です。 GitHubリポジトリはこちら↓ github.com ARFoundaitonReplayで出来ること Unity Editor内で動作するAR Foundationです。ARを録画した専用動画をEditorで再生することが出来ます。私が普段参加するARプロジェクトでは、Unity Editor上でAR Foundaitonが動かないため、 #if UNITY_EDITORなどを用いて処理をまるっと分けることが思いです。しかしこの分岐が原因で実機でテストすると思わぬバグに出く… <p>ARFoundationReplayというARを録画してUnity Editor上で再生するライブラリを開発中です。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/GitHub">GitHub</a><a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>はこちら↓ <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2FARFoundationReplay" title="GitHub - asus4/ARFoundationReplay: AR Record and Playback System on Unity ARFoundation" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/ARFoundationReplay">github.com</a></cite></p> <h2 id="ARFoundaitonReplayで出来ること">ARFoundaitonReplayで出来ること</h2> <p>Unity Editor内で動作するAR Foundationです。ARを録画した専用動画をEditorで再生することが出来ます。私が普段参加するARプロジェクトでは、Unity Editor上でAR Foundaitonが動かないため、 <code>#if UNITY_EDITOR</code>などを用いて処理をまるっと分けることが思いです。しかしこの分岐が原因で実機でテストすると思わぬバグに出くわすことも多々あります。</p> <p><strong>このライブラリではUnity Editor上で録画したARをAR Foundationの上で動かすことで、そのような分岐をまるっとなくすことを目的としています。</strong></p> <p>仕組みはARを独自の映像フォーマットとして保存します。mp4は動画や音声を保存するフォーマットですが、字幕データを保存したり出来るように、実はバイナリデータも同時に保存できます。<br/> UnityのKeijiroさん作<a href="https://github.com/keijiro/Bibcam">Bibcam</a>をベースに、タイムラインと同期する任意のバイナリを保存出来るようにしました。これは、ARCoreやARKitで行われているAR録画と似たような仕組みです。</p> <p><figure class="figure-image figure-image-fotolife" title="Video Format for ARFoundaitonReplay "><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20231225/20231225194535.jpg" width="1200" height="994" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><figcaption>Video Format for ARFoundaitonReplay </figcaption></figure></p> <p>この動画フォーマットには6DOFのカメラ座標、認識した床や壁などの平面メッシュなどのARの再生に必要な<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%E1%A5%BF%A5%C7%A1%BC%A5%BF">メタデータ</a>が含まれているので、以下の動画のように、Unity Editor上で再生して、シミュレーションすることが出来ます。</p> <div style="float: right;margin-left: 1em;"><video src="https://github.com/asus4/ARFoundationReplay/assets/357497/8e77ee45-6f2c-442e-a47a-f35f044b8181" controls width="640"></video></div> <h2 id="どうして作った">どうして作った?</h2> <p>開発にあたりいくつかのライブラリを調査しました。</p> <h3 id="--AR-Foundation-Simuraiton">- AR Foundation Simuraiton</h3> <p>実はARFoundation5からは、ARFoundation内にARシュミレーション環境がつきました。 Unityで、3Dモデルで部屋を作って、その部屋の中でARを動かしているシュミレーションが出来ます。</p> <p><img src="https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@6.0/manual/images/simulation-simple-ar.png" alt="Fig for ARFoundation Simulation" /></p> <p>以前のUnity公式xRシミュレーション<a href="https://unity.com/products/unity-mars">Unity Mase</a>は一年600ドルという、中々手を出しづらい金額でしたが、こちらは無料です。AR Foundation公式という安心感もあります。</p> <p>しかし<a class="keyword" href="https://d.hatena.ne.jp/keyword/VPS">VPS</a>(ビジュアルポジショニングシステム)という屋外の自分のいる位置を<a class="keyword" href="https://d.hatena.ne.jp/keyword/GPS">GPS</a>とカメラ画像などのセンサから推定するARが流行り始めて、私の実際の案件でもARFoundation Simulationでは対応できないケースが増え始めました。</p> <h3 id="--AR-Foundation-Remote-20">- AR Foundation Remote 2.0</h3> <p>多くのAR開発者に実際に使われているソリューションとしては、<a href="https://assetstore.unity.com/packages/tools/utilities/ar-foundation-remote-2-0-201106">AR Foundation Remote 2.0</a>でしょうか。ほとんどの機能をサポートしていて、<a class="keyword" href="https://d.hatena.ne.jp/keyword/VPS">VPS</a>も使えます。実際私も使っています。</p> <p>かなり理想形なのですが、Unity Editorとつなげて録画が必要なので、開発者以外の人がARを録画するのが難しいという難点がありました。TestFlightで配布したアプリだけで録画できるとベストです。</p> <h3 id="--ARCore-ARKit-ReplayData">- ARCore, ARKit ReplayData</h3> <p>ARFoundationは、<a class="keyword" href="https://d.hatena.ne.jp/keyword/Android">Android</a> ARCore, <a class="keyword" href="https://d.hatena.ne.jp/keyword/iOS">iOS</a> ARKitのラッパーでもあります。そして、<br/> <a class="keyword" href="https://d.hatena.ne.jp/keyword/iOS">iOS</a> ARKitではReality Composerというアプリから<a href="https://developer.apple.com/documentation/arkit/arsession/recording_and_replaying_ar_session_data">Replay Data</a>という動画ファイルを録画して、実機で再生できます。<br/> <a class="keyword" href="https://d.hatena.ne.jp/keyword/Android">Android</a> ARCoreにも<a href="https://developers.google.com/ar/develop/recording-and-playback">録画再生の仕組み</a>があります。更にAnrdoidでは独自の追加トラックもいれることが出来ます。</p> <p>もちろんUnity製アプリでもビルドした状態で、これらの機能を使うことは出来ます。しかしこれらの機能はEditorからは使えません。Unityの良さのEditor上でアプリを動かしながら、いろんなパラメーターをいじって、開発の<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%A4%A5%C6%A5%EC%A1%BC%A5%B7%A5%E7%A5%F3">イテレーション</a>を回すということができませんでした。</p> <hr /> <p>このような理由から、自分の理想に近かったUnity JapanのKeijiroさんの開発していた<a href="https://github.com/keijiro/Bibcam">Bibcam</a>をベースに開発を始めました。</p> <h2 id="開発大変">開発大変</h2> <p>去年の12月くらいにふと思いたち、手を動かし初めてみたものの、一歩でもUnityの内部挙動に踏み込んだ機能を作ろうとするとUnityのバグに突き当たり、開発が中断したりと大変でした…。私のライセンスではUnity内部の<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>にアクセス出来なかったので、ただ修正を待つしかないのが辛かったです。<a class="keyword" href="https://d.hatena.ne.jp/keyword/Unreal%20Engine">Unreal Engine</a>なら自分で直す余地もあるのですが。</p> <p>いくつか起こった出来事を抜粋します。</p> <ul> <li>M1 <a class="keyword" href="https://d.hatena.ne.jp/keyword/Mac">Mac</a>でフリーズする (修正済)</li> </ul> <p>当初はM1 <a class="keyword" href="https://d.hatena.ne.jp/keyword/Mac">Mac</a>上でを使うとフリーズする状態でした。<a href="https://github.com/KyryloKuzyk/AR-Foundation-Remote-support/issues/13">AR Foundation Remote</a>の作者&コミュニティと私くらいしか困っていなかったけど、1年以上も進展がなかった後(AR Foundation Simulation機能を開発して気づいたのかもしれません)、修正されました。</p> <ul> <li>UnityのVideoPlayerクラスが<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%C7%A5%B0%A5%EC">デグレ</a>ーション (修正済)</li> </ul> <p><a href="https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.0/manual/version-history/migration-guide-5-x.html?q=incompatibility#urp-version-1402-incompatibility">URP14.0.2のバグ対応</a>のためにUnityのバージョンを上げなくてはいけないけれども、アップデートしたUnityバージョンではVideo Playerがリニューアルされ、今まで動いていた動画ファイルが再生できない…という進むにも戻るにもできない状態になりました。 <a href="https://github.com/asus4/2022-video-player-issue">再現可能なミニマムプロジェクトを添付したバグレポ</a>を提出して2ヶ月修正を待ちました。(自分のターゲットにしている2022LTSにバックポートされるまでには半年待ちました。) - <a href="https://issuetracker.unity3d.com/issues/video-created-with-avfoundation-framework-is-not-played-when-entering-the-play-mode">Unity Issue Tracker上のバグ詳細</a></p> <ul> <li>XR <a class="keyword" href="https://d.hatena.ne.jp/keyword/SDK">SDK</a>のドキュメントにない仕様</li> </ul> <p>AR Foundationは<a href="https://docs.unity3d.com/Manual/xr-sdk.html">Unity XR SDK</a>というXR用のネイティブライブラリの元で動いているのですが、サンプルプログラムは動作するのに、自分のプロジェクトにサンプルプログラムをコピペすると全く動かない…という問題がありました。数日あーだこーだ悩んだ後、EditorでXR <a class="keyword" href="https://d.hatena.ne.jp/keyword/SDK">SDK</a>を動かす場合は、package.<a class="keyword" href="https://d.hatena.ne.jp/keyword/json">json</a>の<code>keywords</code>に<code>xreditorsubsystem</code>という文字が入っていないと認識しないという仕様でした…。XR <a class="keyword" href="https://d.hatena.ne.jp/keyword/SDK">SDK</a>のドキュメントを見渡しても一切書いてなく、そのキーワードに言及しているのは<a href="https://forum.unity.com/threads/xr-sdk-missing-documentation-native-xrinputsystem-xrmeshsubsystem-xrdisplaysubsystem.974202/">AR Foundation Remoteの作者とNeedle Toolesの作者だけ</a>でした。package.<a class="keyword" href="https://d.hatena.ne.jp/keyword/json">json</a>の設定項目じゃなくて検索用のkeywordsにこんな重要な設定項目をいれるなんて思いませんでした。</p> <p>キーワード知ってないとこのリンクにもたどり着かないし、キーワードを知ってるということは解決済みという悲しいやつです。せめてこの記事を見つけた方に届きますように。</p> <p>もし開発記録に興味があれば、Zennのスクラップに残しているのでご覧ください。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fzenn.dev%2Fasus4%2Fscraps%2F792afc390733ad" title="Unity ARFoundationをレコーディングできるようにしたい" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://zenn.dev/asus4/scraps/792afc390733ad">zenn.dev</a></cite></p> <h2 id="まとめ">まとめ</h2> <p>現在開発中のARFoundationReplayを紹介しました。</p> <p>前回の記事で作ったARアプリでは、このライブラリを実際に使っています。別のAR案件では、Editor上では動くのに実機では動かないということが頻発することがよくありましたが、このプロジェクトではほぼその問題が起こりませんでした。実機のみで起こったの現象としては<a class="keyword" href="https://d.hatena.ne.jp/keyword/Android">Android</a>でメモリが足りなくて落ちるくらいでした。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fasus4.hatenablog.com%2Fentry%2F2023%2F12%2F19%2FGoogle%25E3%2581%25AEAR%25E3%2583%258F%25E3%2583%2583%25E3%2582%25AB%25E3%2582%25BD%25E3%2583%25B3%25E3%2581%25A7Best%25E8%25B3%259E%25E3%2582%2592%25E3%2582%2582%25E3%2582%2589%25E3%2581%2584%25E3%2581%25BE%25E3%2581%2597%25E3%2581%259F" title="GoogleのARハッカソンでBest賞をもらいました - Asus4 onD" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://asus4.hatenablog.com/entry/2023/12/19/Google%E3%81%AEAR%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3%E3%81%A7Best%E8%B3%9E%E3%82%92%E3%82%82%E3%82%89%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F">asus4.hatenablog.com</a></cite></p> <p>まだ自分が使うSubsystem部分しか作ってはいませんが、Unity Editor上で実機ARと同じデータがみれることで、ARアプリであるあるの実機で現場にテストした時に動かない…。現場でラップトップを開いてビルドし直す…。みたいなケースがほんの少しだけ減る気がします。 今後も、AR案件をやるたびにちまちま自分で使う機能を追加しようと思います。</p> asus4 GoogleのARハッカソンでBest賞をもらいました hatenablog://entry/6801883189066927455 2023-12-19T18:24:17+09:00 2023-12-20T02:36:10+09:00 GoogleのGeospatial APIを使ったARハッカソン。Google’s Immersive Geospatial Challengeで、友人の音楽家 Twothと一緒に制作したARアプリが、AR | Best of Entertainment & Events というARのエンタメ部門で1位の賞をもらいました。 GoogleのDeveloperブログに取り上げてもらいました。一番目のコンテンツ、World Ensembleが私達のプロジェクトです。 developers.googleblog.com 説明動画も作りました。(Adobe全部アンイストールしてたので、初めてDaVinc… <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/Google">Google</a>のGeospatial <a class="keyword" href="https://d.hatena.ne.jp/keyword/API">API</a>を使ったAR<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>。<a class="keyword" href="https://d.hatena.ne.jp/keyword/Google">Google</a>’s Immersive Geospatial Challengeで、友人の音<a class="keyword" href="https://d.hatena.ne.jp/keyword/%B3%DA%B2%C8">楽家</a> <a href="https://twoth.bandcamp.com/album/playback-the-compact-live-at-blkswn-welfare-centre">Twoth</a>と一緒に制作したARアプリが、<strong>AR | Best of Entertainment &amp; Events</strong> というARのエンタメ部門で1位の賞をもらいました。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/Google">Google</a>のDeveloperブログに取り上げてもらいました。一番目のコンテンツ、<a href="https://devpost.com/software/augmented-instrument">World Ensemble</a>が私達のプロジェクトです。<br/> <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdevelopers.googleblog.com%2F2023%2F12%2Fgoogles-immersive-geospatial-challenge-winners.html" title="Congratulations to the winners of Google’s Immersive Geospatial Challenge" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://developers.googleblog.com/2023/12/googles-immersive-geospatial-challenge-winners.html">developers.googleblog.com</a></cite></p> <p>説明動画も作りました。(<a class="keyword" href="https://d.hatena.ne.jp/keyword/Adobe">Adobe</a>全部アンイストールしてたので、初めてDaVinci Resolveで編集しました。)<br/> <iframe width="560" height="315" src="https://www.youtube.com/embed/adra9QppRO0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="World Ensemble Demo"></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=adra9QppRO0">www.youtube.com</a></cite></p> <p>他の受賞プロジェクトも面白いアイディアが沢山ありました↓<br/> <a href="https://googlesimmersive.devpost.com/project-gallery">Google&rsquo;s Immersive Geospatial Challenge: Go beyond the map in Google&rsquo;s Immersive Geospatial Challenge - Devpost</a></p> <h2 id="Behind-the-Scenes">Behind the Scenes</h2> <p>普段の<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>としての受託プロジェクトでは中々制作過程を見せることは出来ないのですが、このプロジェクトでは<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>を公開することが参加ルールの一つでした。<br/> 折角なので少し制作の裏側を残します。</p> <p>また<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%AF%A5%EA%A5%A8%A5%A4%A5%C6%A5%A3%A5%D6%A1%A6%A5%B3%A5%E2%A5%F3%A5%BA">クリエイティブ・コモンズ</a> ライセンスで<a class="keyword" href="https://d.hatena.ne.jp/keyword/GitHub">GitHub</a>にプロジェクト一式を公開しています。(音も一緒にCCライセンス公開に同意してくれてありがとうございました。)</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2FWorldEnsemble" title="GitHub - asus4/WorldEnsemble: Play music in the AR World!" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/WorldEnsemble">github.com</a></cite></p> <h3 id="Visual-Effects">Visual Effects</h3> <p>AnroidでARアプリを作るとき、最新ARCore NativeではついにVulkan対応が入りましたが、Unityから使う際のARFoundaitonは未だにOpenGLESでの実行になります。そのためにUnityの新しい<a class="keyword" href="https://d.hatena.ne.jp/keyword/VFX">VFX</a>機能である<a class="keyword" href="https://d.hatena.ne.jp/keyword/VFX">VFX</a> Graphを使えませんでした。<a class="keyword" href="https://d.hatena.ne.jp/keyword/VFX">VFX</a> GraphはOpenGLESに対応していないのです。ARアプリでリッチな<a class="keyword" href="https://d.hatena.ne.jp/keyword/VFX">VFX</a>を作りたいときの一つの障壁とも言えます。<br/> そのため、今回はシンプルなShiriken Partilceを基本に構成しています。その代わり、パーティクル一粒一粒のシェーダーをすべてカスタムすることにしました。 <br/> シンプルな<a class="keyword" href="https://d.hatena.ne.jp/keyword/Shuriken">Shuriken</a> Particleを使っても、一つ一つのパーティクルの見た目にこだわれば結構行ける感触がありました↓</p> <p><blockquote data-conversation="none" class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Two triangles look good enough. <a href="https://t.co/c6UA4iOoMm">pic.twitter.com/c6UA4iOoMm</a></p>&mdash; <a class="keyword" href="https://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1725171303320027317?ref_src=twsrc%5Etfw">November 16, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p>シェーダーは基本的にはShaderGraphで作りました。</p> <p>今回はAR空間で映える見た目と言うことで、<a href="https://docs.unity3d.com/Packages/com.unity.shadergraph@17.0/manual/Scene-Color-Node.html">Scene Color Node</a>という、現在カメラに<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%EC%A5%F3%A5%C0%A5%EA%A5%F3%A5%B0">レンダリング</a>されているテクスチャにアクセスするノードを多用し、ガラスっぽかったり(光学的な計算はまったく間違っています)現実空間の建物をグリッジ風にしたりしてみました。</p> <p><figure class="figure-image figure-image-fotolife" title="Bubble shader graph"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20231219/20231219083342.png" width="1200" height="983" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><figcaption>Bubble shader graph</figcaption></figure></p> <p>モバイル向けに重いShaderは、以下のように、ShaderGarphの中でHLSLのコードを叩くという方法を使ってます。 <br/> URPが主流になってからというもの、いろいろな種類のPassや<a href="https://docs.unity3d.com/Manual/SinglePassInstancing.html">Single-pass instanced rendering</a>の対応などが面倒くさくなって、生のShaderを書かずに、こんな感じのハイブリッドな構成が多くなりました。複雑なロジックはHLSLで書きつつ、複数の実行環境への対応をShaderGraphがよしなに追記してくれるので結構気に入っています。</p> <p><figure class="figure-image figure-image-fotolife" title="Cecium TileSet Shader optimization"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20231219/20231219083448.png" width="1010" height="1003" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><figcaption>Cecium TileSet Shader optimization</figcaption></figure></p> <h3 id="3Dサウンド">3D<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9">サウンド</a></h3> <p>音はTowthに作ってもらった音をARの3D空間上に配置しています。内部的に16 step<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%B7%A1%BC%A5%B1%A5%F3%A5%B5%A1%BC">シーケンサー</a>を動かして、3D上でタイミングが来ると音がなるようになっています。<br/> 実験的な機能として、屋外のでかいARコンテンツなので音速が考慮に入れて、聴取者までの距離によって音速の遅延をいれるなど、色々遊びました。<br/> この時に使いにくかった、<a href="https://zenn.dev/asus4/articles/7d247860f76e83">SFX Reverbの使い方をZenn</a>に記事を残しています。</p> <h3 id="仮想空撮--現実空間ARへのトランジション">仮想空撮 → 現実空間ARへの<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%C8%A5%E9%A5%F3%A5%B8%A5%B7%A5%E7%A5%F3">トランジション</a></h3> <p><figure class="figure-image figure-image-fotolife" title="Aerial to AR"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20231219/20231219180443.gif" width="640" height="480" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><figcaption>Aerial to AR</figcaption></figure></p> <p>今回、実験したものの一つに、Cesiumで読み込んだ3D tilesから AR画面への<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%C8%A5%E9%A5%F3%A5%B8%A5%B7%A5%E7%A5%F3">トランジション</a>でした。空をタップすると、上空100mへジャンプして、自分のAR画面へ戻って来ます。これは試しに、GeoSpatialPoseの<a class="keyword" href="https://d.hatena.ne.jp/keyword/GPS">GPS</a>座標とEast-Up-North rotation 、 を元に、Cesium上の3Dモデルに重ね合わせてみると思ったより精度が高く、面白い演出になりそうだったので、急遽取り入れた機能でした。<br/> コア部分は以下のような3行で実現可能です。</p> <pre class="code csharp" data-lang="csharp" data-unlink>var geoPose = _earthManager.CameraGeospatialPose; _globeAnchor.longitudeLatitudeHeight = new(geoPose.Longitude, geoPose.Latitude, geoPose.Altitude); _globeAnchor.rotationEastUpNorth = geoPose.EunRotation * _rotationOffset;</pre> <h3 id="AR-シミュレーション-in-UnityEditor">AR シミュレーション in UnityEditor</h3> <p>今回、11月<a class="keyword" href="https://d.hatena.ne.jp/keyword/20%C6%FC">20日</a>の締切に対して、空のUnityプロジェクト作って手を付け始めたのがは11月7日、2週間前でした。仕事なら炎上どころではないスケジュールです。…し、<a href="https://twitter.com/whtevr_co/status/1732373863261258218">別のAR仕事</a>が忙しかったので…。</p> <p>いくつかの<a class="keyword" href="https://d.hatena.ne.jp/keyword/VPS">VPS</a> (Visual Positioning System) ARアプリを開発をして来ましたが、必ず出くわす問題が、Unity Editorでは動くのに実機で街に出て動かすと全然動かない…。というやつです。</p> <p>もちろん普通のアプリでも起きますが、<a class="keyword" href="https://d.hatena.ne.jp/keyword/VPS">VPS</a>は、<a class="keyword" href="https://d.hatena.ne.jp/keyword/GPS">GPS</a>の精度、ネットワーク速度、遠くのメッシュは読み込まれてない…。などなど現実の空間でしか起こらない環境要因が盛り沢山です。</p> <p>そんななか、今回の高速開発を支えたのが、去年から空き時間にちまちまR&amp;Dしていた、ARFoundation Replayです。これは4年前に開発していた<a href="https://github.com/asus4/ARKitStreamer">ARKitStreamer</a>の後継ライブラリです。</p> <div style="float: right;margin-left: 1em;"><video src="https://github.com/asus4/ARFoundationReplay/assets/357497/8e77ee45-6f2c-442e-a47a-f35f044b8181" controls width="640"></video></div> <p>以前のものと同じく、Unity Editor上でAR FoundationのSubsystemを動かしますが、以前はPCと<a class="keyword" href="https://d.hatena.ne.jp/keyword/Wi-Fi">Wi-Fi</a>もしくはUSBで接続した<a class="keyword" href="https://d.hatena.ne.jp/keyword/iPhone">iPhone</a>から送られてくるリアルタイムのデータしか対応していなかったものが、今回は、<a class="keyword" href="https://d.hatena.ne.jp/keyword/VPS">VPS</a>対応のために、出先で<a class="keyword" href="https://d.hatena.ne.jp/keyword/iPhone%A5%A2%A5%D7%A5%EA">iPhoneアプリ</a>上でARを録画、Photoに保存して、家に戻って、PCで動画ファイルをUnityで読み込むとAR環境が再現されるようになりました。<br/> ARCore Geospatial <a class="keyword" href="https://d.hatena.ne.jp/keyword/API">API</a>から取得できるの地球上の<a class="keyword" href="https://d.hatena.ne.jp/keyword/GPS">GPS</a>座標、近隣のStreetscape Meshを録画し、Unity Editor上で再生することで、家に引きこもりながらARアプリの開発が出来るようになりました。詳しい仕組みについては別記事で解説する機会を作ろうと思います。</p> <p>この機能により、ほぼ実機で起きる<a class="keyword" href="https://d.hatena.ne.jp/keyword/GPS">GPS</a>精度起因の問題などをEditorでパラメーターを調整しながら事前に修正することができました。このライブラリの目標の一つであった、 <strong>Editorで動くものは実機でも動く</strong>。 <strong>Editorで動かないないものは実機でも動かない。</strong> を達成できたと思います。唯一実機で起きたエラーは、メモリが少なくて落ちるくらいでした。</p> <p>ちなみにARFoundation 5.0以降では、<a href="https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@6.0/manual/xr-simulation/simulation-overview.html">XR Simulation</a>という機能があります。<br/> <img src="https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@6.0/manual/images/simulation-simple-ar.png" alt="Simulation Simple AR" /><br/> 任意の3DモデルをUnity Editor上でAR空間としてシミュレーション出来るものです。通常の屋内ARコンテンツを作るときは非常におすすめです。</p> <h2 id="最後に">最後に</h2> <p>普段の仕事で2週間(仕事しながらなのでもっと少ない) でARアプリを作るようなことはないですが、<br/> 体験のコア部分だけに集中して作ることで大幅に時間を節約。<br/> 実験して良かったものは仕様になくても取り入れる。<br/> バグは夜更け過ぎに仕様に変わる。</p> <p>という<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>特有の制作スタイルでしたが、なにか形にのこり良かったです。<br/> 受賞特典の一つである<a class="keyword" href="https://d.hatena.ne.jp/keyword/Google">Google</a> AR開発チームとの<a class="keyword" href="https://d.hatena.ne.jp/keyword/MTG">MTG</a>緊張するな。</p> asus4 Gorillaz presents… Skinny Ape hatenablog://entry/820878482947513105 2023-07-06T05:40:06+09:00 2023-07-10T18:24:09+09:00 お仕事報告。Nexus Studiosのかたに声をかけてもらい、NYタイムズスクエアとLondonピカデリーサーカスでみれる、GorillazのARコンサートアプリの技術調査を少しだけお手伝いされていただきました。 www.youtube.com フルクレジットはYoutubeのDescriptionに。 <p>お仕事報告。<a class="keyword" href="https://d.hatena.ne.jp/keyword/Nexus">Nexus</a> Studiosのかたに声をかけてもらい、<a class="keyword" href="https://d.hatena.ne.jp/keyword/NY%A5%BF%A5%A4%A5%E0%A5%BA">NYタイムズ</a>スクエアとLondonピカデリーサーカスでみれる、<a class="keyword" href="https://d.hatena.ne.jp/keyword/Gorillaz">Gorillaz</a>のARコンサートアプリの技術調査を少しだけお手伝いされていただきました。</p> <p><iframe width="560" height="315" src="https://www.youtube.com/embed/iFaKhtlBU7A?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Gorillaz presents… Skinny Ape (Immersive Live Performance in Times Square)"></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=iFaKhtlBU7A">www.youtube.com</a></cite></p> <p>フルクレジットは<a class="keyword" href="https://d.hatena.ne.jp/keyword/Youtube">Youtube</a>のDescriptionに。</p> asus4 KAGAMI hatenablog://entry/820878482945586652 2023-07-06T05:24:39+09:00 2023-07-06T05:26:59+09:00 坂本龍一とTin DrumのxRコンサートKAGAMIのVFXを担当させていただきました。 https://theshed.org/program/299-kagami-by-ryuichi-sakamoto-and-tin-drum factoryinternational.org コンサートはアメリカ、ニューヨークとイギリス、マンチェスターで開かれます。また2024にはオーストラリア、シドニーでも公演がある予定です。 去年から制作に携わってきましたが、コンサート発表前に亡くなり、意味合いも全然違うものになりました。ご冥福をお祈りします。 レビュー記事 英語ではありますが、いくつかレビュー記… <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/%BA%E4%CB%DC%CE%B6%B0%EC">坂本龍一</a>とTin DrumのxRコンサートKAGAMIの<a class="keyword" href="https://d.hatena.ne.jp/keyword/VFX">VFX</a>を担当させていただきました。</p> <p><a href="https://theshed.org/program/299-kagami-by-ryuichi-sakamoto-and-tin-drum">https://theshed.org/program/299-kagami-by-ryuichi-sakamoto-and-tin-drum</a></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Ffactoryinternational.org%2Fwhats-on%2Fkagami-ryuichi-sakamoto-tin-drum%2F" title="KAGAMI" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://factoryinternational.org/whats-on/kagami-ryuichi-sakamoto-tin-drum/">factoryinternational.org</a></cite></p> <p>コンサートは<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%A2%A5%E1%A5%EA">アメリ</a>カ、ニューヨークとイギリス、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%DE%A5%F3%A5%C1%A5%A7%A5%B9%A5%BF%A1%BC">マンチェスター</a>で開かれます。また2024にはオーストラリア、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%B7%A5%C9%A5%CB%A1%BC">シドニー</a>でも公演がある予定です。</p> <p>去年から制作に携わってきましたが、コンサート発表前に亡くなり、意味合いも全然違うものになりました。ご冥福をお祈りします。</p> <h2 id="レビュー記事">レビュー記事</h2> <p>英語ではありますが、いくつかレビュー記事を見かけたのでリンクを張ります。</p> <p><iframe src="https://www.nytimes.com/svc/oembed/html/?url=https%3A%2F%2Fwww.nytimes.com%2F2023%2F06%2F25%2Farts%2Fdesign%2Fart-virtual-reality-shed-sakamoto.html" scrolling="no" frameborder="0" allowtransparency="true" title="A Séance With Ryuichi Sakamoto at the Shed" style="border:none;max-width:500px;min-width:300px;min-height:550px;display:block;width:100%;"></iframe><cite class="hatena-citation"><a href="https://www.nytimes.com/2023/06/25/arts/design/art-virtual-reality-shed-sakamoto.html">www.nytimes.com</a></cite></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.forbes.com%2Fsites%2Fcharliefink%2F2023%2F06%2F10%2Fkagami-live-mixed-realty-show-begins-limited-run%2F" title="KAGAMI Live Mixed Reality Show Begins Limited Theatrical Run" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://www.forbes.com/sites/charliefink/2023/06/10/kagami-live-mixed-realty-show-begins-limited-run/">www.forbes.com</a></cite></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.wired.co.uk%2Farticle%2Fryuichi-sakamoto-kagami-magic-leap-performance" title="Ryuichi Sakamoto’s Final Performance Is a Virtual-Only Engagement" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://www.wired.co.uk/article/ryuichi-sakamoto-kagami-magic-leap-performance">www.wired.co.uk</a></cite></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmedium.com%2F%40cloud_canvas%2Freview-kagami-ryuichi-sakamoto-tin-drum-f02ff7220c5" title="Review: “KAGAMI”, Ryuichi Sakamoto &amp; Tin Drum" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://medium.com/@cloud_canvas/review-kagami-ryuichi-sakamoto-tin-drum-f02ff7220c5">medium.com</a></cite></p> <p>日本語記事は有料でした。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fbijutsutecho.com%2Fmagazine%2Fnews%2Freport%2F27459" title="ミクスト・リアリティで向き合う坂本龍一の姿。The Shedの「KAGAMI」が提示したもの" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://bijutsutecho.com/magazine/news/report/27459">bijutsutecho.com</a></cite></p> asus4 Unityでデバイスのスペック詳細を簡単に調べるユーティリティ hatenablog://entry/4207112889963309714 2023-02-15T06:45:49+09:00 2023-02-15T08:59:57+09:00 完全なリモートワーク歴も4年超。遠隔でテストしてくれている人の端末、特にAndroid、でだけ動かないという経験をした人も多いともいます。 オフィスにある端末なら直接出向いて調べる、相手がエンジニアならスペック詳細送ってくれ、とできますが、エンジニア以外の人に細かいスペックを送ってくれといっても絶対抜け漏れがあるもの。 そんな個人的なユースケースを満たすシンプルなユーティリティを作りました。ー 実は3年前に仮のものを作ってましたが、細かいバグを直してUPM対応することで他の人にも使ってもらえるように整備しました。 Might be helpful to investigate platform… <p>完全なリモートワーク歴も4年超。遠隔でテストしてくれている人の端末、特に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>、でだけ動かないという経験をした人も多いともいます。</p> <p>オフィスにある端末なら直接出向いて調べる、相手がエンジニアならスペック詳細送ってくれ、とできますが、エンジニア以外の人に細かいスペックを送ってくれといっても絶対抜け漏れがあるもの。</p> <p>そんな個人的な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E6%A1%BC%A5%B9%A5%B1%A1%BC%A5%B9">ユースケース</a>を満たすシンプルなユーティリティを作りました。ー 実は3年前に仮のものを作ってましたが、細かいバグを直してUPM対応することで他の人にも使ってもらえるように整備しました。</p> <p><blockquote data-conversation="none" class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Might be helpful to investigate platform-specific issues with Unity.<a href="https://t.co/uB0e0KzVjZ">https://t.co/uB0e0KzVjZ</a> <a href="https://t.co/8rQovCpmEp">pic.twitter.com/8rQovCpmEp</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1625645532029878272?ref_src=twsrc%5Etfw">February 14, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2FUnitySystemInfoViewer" title="GitHub - asus4/UnitySystemInfoViewer" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/UnitySystemInfoViewer">github.com</a></cite></p> <p>使い方は簡単で、 SystemInfoView<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>を貼り付けると、Unityの<a href="https://docs.unity3d.com/ScriptReference/SystemInfo.html">SystemInfo</a>クラスのプロパティ一覧がズラッと出てくるので、見たい情報をマウスでクリックしていくだけです。検索窓で絞り込み機能もつけてみました。 文字列のUnityEventを発行するので、Text Viewのテキストに反映して画面共有してもらったり、文字列を Slackに貼ってもらったりというフローを想定してます。</p> asus4 読書ログ 2022 hatenablog://entry/4207112889951104069 2023-01-05T00:00:00+09:00 2023-01-05T02:52:28+09:00 2021年に三体を読み終えたあと、宇宙熱が高ぶっていたためかなり偏った読書履歴になりました。 宇宙、素粒子物理学、とか 宇宙はどこまでわかっているのか 宇宙はどこまでわかっているのか (幻冬舎新書)作者:小谷太郎幻冬舎Amazon 重力波望遠鏡の状況など、宇宙の知識をアップデートするために読みました 重力波とは何か アインシュタインが奏でる宇宙からのメロディー 重力波とは何か アインシュタインが奏でる宇宙からのメロディー (幻冬舎新書)作者:川村静児幻冬舎Amazon 重力波望遠鏡の仕組みを知りたくて買いました。 宇宙は何でできているのか 素粒子物理学で解く宇宙の謎 宇宙は何でできているのか … <p>2021年に三体を読み終えたあと、宇宙熱が高ぶっていたためかなり偏った読書履歴になりました。</p> <h2 id="宇宙素粒子物理学とか">宇宙、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%C7%CE%B3%BB%D2%CA%AA%CD%FD%B3%D8">素粒子物理学</a>、とか</h2> <h3 id="宇宙はどこまでわかっているのか">宇宙はどこまでわかっているのか</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B07MV2RNQ3?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/51aCiFuWj-L._SL500_.jpg" class="hatena-asin-detail-image" alt="宇宙はどこまでわかっているのか (幻冬舎新書)" title="宇宙はどこまでわかっているのか (幻冬舎新書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B07MV2RNQ3?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">宇宙はどこまでわかっているのか (幻冬舎新書)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%BE%AE%C3%AB%C2%C0%CF%BA" class="keyword">小谷太郎</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%B8%C5%DF%BC%CB">幻冬舎</a></li></ul><a href="https://www.amazon.co.jp/dp/B07MV2RNQ3?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%C5%CE%CF%C7%C8">重力波</a>望遠鏡の状況など、宇宙の知識をアップデートするために読みました</p> <h3 id="重力波とは何かアインシュタインが奏でる宇宙からのメロディー"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%C5%CE%CF%C7%C8">重力波</a>とは何か <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%F3%A5%B7%A5%E5%A5%BF%A5%A4%A5%F3">アインシュタイン</a>が奏でる宇宙からのメロディー</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B01M03ISCF?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/414QUigsb6L._SL500_.jpg" class="hatena-asin-detail-image" alt="重力波とは何か アインシュタインが奏でる宇宙からのメロディー (幻冬舎新書)" title="重力波とは何か アインシュタインが奏でる宇宙からのメロディー (幻冬舎新書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B01M03ISCF?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">重力波とは何か アインシュタインが奏でる宇宙からのメロディー (幻冬舎新書)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%C0%EE%C2%BC%C0%C5%BB%F9" class="keyword">川村静児</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%B8%C5%DF%BC%CB">幻冬舎</a></li></ul><a href="https://www.amazon.co.jp/dp/B01M03ISCF?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%C5%CE%CF%C7%C8">重力波</a>望遠鏡の仕組みを知りたくて買いました。</p> <h3 id="宇宙は何でできているのか素粒子物理学で解く宇宙の謎">宇宙は何でできているのか <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%C7%CE%B3%BB%D2%CA%AA%CD%FD%B3%D8">素粒子物理学</a>で解く宇宙の謎</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B00CZCWBPS?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/41MbiEvLYxL._SL500_.jpg" class="hatena-asin-detail-image" alt="宇宙は何でできているのか 素粒子物理学で解く宇宙の謎" title="宇宙は何でできているのか 素粒子物理学で解く宇宙の謎"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B00CZCWBPS?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">宇宙は何でできているのか 素粒子物理学で解く宇宙の謎</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%C2%BC%BB%B3%C0%C6" class="keyword">村山斉</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%B8%C5%DF%BC%CB">幻冬舎</a></li></ul><a href="https://www.amazon.co.jp/dp/B00CZCWBPS?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%C7%CE%B3%BB%D2">素粒子</a>の知識をアップデートしました。数式とかは出てこないのでついていけました。</p> <h3 id="宇宙人の探し方-地球外知的生命探査の科学とロマン">宇宙人の探し方 地球外知的生命探査の科学とロマン</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B00I99VFD0?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/41aZHsaPLuL._SL500_.jpg" class="hatena-asin-detail-image" alt="宇宙人の探し方 地球外知的生命探査の科学とロマン" title="宇宙人の探し方 地球外知的生命探査の科学とロマン"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B00I99VFD0?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">宇宙人の探し方 地球外知的生命探査の科学とロマン</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%CC%C4%C2%F4%BF%BF%CC%E9" class="keyword">鳴沢真也</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%B8%C5%DF%BC%CB">幻冬舎</a></li></ul><a href="https://www.amazon.co.jp/dp/B00I99VFD0?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div><br/> 宇宙人を見つけるための活動は多々ありますが、著者の専門分野の手法「地球外知的生命探査」”<a class="keyword" href="http://d.hatena.ne.jp/keyword/SETI">SETI</a> Search for Extra-Terrestrial Intelligence”に多く記事が多く割かれていて、もっと他の手法も深堀りしてほしかったです(いや本の概要にも書いてあったのでちゃんと読まなかった私の責任ですが)</p> <h3 id="重力とは何かアインシュタインから超弦理論へ宇宙の謎に迫る">重力とは何か <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%A4%A5%F3%A5%B7%A5%E5%A5%BF%A5%A4%A5%F3">アインシュタイン</a>から<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C4%B6%B8%B9%CD%FD%CF%C0">超弦理論</a>へ、宇宙の謎に迫る</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B009CTXQT2?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/4188orl6jhL._SL500_.jpg" class="hatena-asin-detail-image" alt="重力とは何か アインシュタインから超弦理論へ、宇宙の謎に迫る (幻冬舎新書)" title="重力とは何か アインシュタインから超弦理論へ、宇宙の謎に迫る (幻冬舎新書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B009CTXQT2?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">重力とは何か アインシュタインから超弦理論へ、宇宙の謎に迫る (幻冬舎新書)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%C2%E7%B7%AA%20%C7%EE%BB%CA" class="keyword">大栗 博司</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%B8%C5%DF%BC%CB">幻冬舎</a></li></ul><a href="https://www.amazon.co.jp/dp/B009CTXQT2?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div><br/> このように何冊か読んで来ましたが、大栗博司さんの本が飛び抜けてわかりやすかったです。科学、数学の予備知識がない人でもわかるような平易な文章なのに、深いところまで手抜きせずに教えてくれている感があります。<code>E=mc^2</code> の意味とか面白い!三体でもこの辺の話をしていたので、これ読んでから三体に戻っても良さそうです。</p> <h3 id="強い力と弱い力ヒッグス粒子が宇宙にかけた魔法を解く">強い力と弱い力 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D2%A5%C3%A5%B0%A5%B9%CE%B3%BB%D2">ヒッグス粒子</a>が宇宙にかけた魔法を解く</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/4344982932?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/41ebZLy2EsL._SL500_.jpg" class="hatena-asin-detail-image" alt="強い力と弱い力 ヒッグス粒子が宇宙にかけた魔法を解く (幻冬舎新書)" title="強い力と弱い力 ヒッグス粒子が宇宙にかけた魔法を解く (幻冬舎新書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/4344982932?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">強い力と弱い力 ヒッグス粒子が宇宙にかけた魔法を解く (幻冬舎新書)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%C2%E7%B7%AA%20%C7%EE%BB%CA" class="keyword">大栗 博司</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%B8%C5%DF%BC%CB">幻冬舎</a></li></ul><a href="https://www.amazon.co.jp/dp/4344982932?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div><br/> 調子に乗って大栗博司さんの本2冊め。難解な内容をなるべく解りやすいように教えてくれています。全部わかったとは到底言えませんが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%C7%CE%B3%BB%D2%CA%AA%CD%FD%B3%D8">素粒子物理学</a>のニュースを読むのが楽しくなります。</p> <h3 id="休み時間の分子生物学">休み時間の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%AC%BB%D2%C0%B8%CA%AA%B3%D8">分子生物学</a></h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B08DNT65V7?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/51gcFVQOh1L._SL500_.jpg" class="hatena-asin-detail-image" alt="休み時間の分子生物学 (休み時間シリーズ)" title="休み時間の分子生物学 (休み時間シリーズ)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B08DNT65V7?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">休み時間の分子生物学 (休み時間シリーズ)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%B9%F5%C5%C4%CD%B5%BC%F9" class="keyword">黒田裕樹</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%D6%C3%CC%BC%D2">講談社</a></li></ul><a href="https://www.amazon.co.jp/dp/B08DNT65V7?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div><br/> 大栗博司先生がこれからは物理ではなく<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%AC%BB%D2%C0%B8%CA%AA%B3%D8">分子生物学</a>だと言っていたので、読んでみましたが、やや難解でした。大<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B7%AA%C0%E8%C0%B8">栗先生</a>に書いたものが読んでみたい。</p> <h2 id="SF">SF</h2> <h3 id="折りたたみ北京">折りたたみ北京</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B079YRCKWM?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/51jlZX+MFIL._SL500_.jpg" class="hatena-asin-detail-image" alt="折りたたみ北京 現代中国SFアンソロジー (新☆ハヤカワ・SF・シリーズ)" title="折りたたみ北京 現代中国SFアンソロジー (新☆ハヤカワ・SF・シリーズ)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B079YRCKWM?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">折りたたみ北京 現代中国SFアンソロジー (新☆ハヤカワ・SF・シリーズ)</a></p><ul class="hatena-asin-detail-meta"><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%E1%C0%EE%BD%F1%CB%BC">早川書房</a></li></ul><a href="https://www.amazon.co.jp/dp/B079YRCKWM?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> 中国SFへの興味も湧いたため、アンソロ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>を読みました。</p> <ul> <li>夏笳: <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C9%B4%B5%B4%CC%EB%B9%D4">百鬼夜行</a>街</li> <li>郝景芳: 見えない惑星, 折りたたみ北京</li> </ul> <p>が良かったです。 三体作者、劉慈欣の「円」「神様の介護係」は他でも書籍化されているためかぶって読んでいる人もいるかもです。</p> <h3 id="プロジェクトヘイルメアリー上下巻">プロジェクト・ヘイル・メアリー 上下巻</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B09NBZLC7J?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/41l0NwfJDDL._SL500_.jpg" class="hatena-asin-detail-image" alt="プロジェクト・ヘイル・メアリー 上" title="プロジェクト・ヘイル・メアリー 上"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B09NBZLC7J?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">プロジェクト・ヘイル・メアリー 上</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%F3%A5%C7%A5%A3%20%A5%A6%A5%A3%A5%A2%A1%BC" class="keyword">アンディ ウィアー</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%E1%C0%EE%BD%F1%CB%BC">早川書房</a></li></ul><a href="https://www.amazon.co.jp/dp/B09NBZLC7J?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> <div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B09NBZ4Z3S?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/412N17w45GL._SL500_.jpg" class="hatena-asin-detail-image" alt="プロジェクト・ヘイル・メアリー 下" title="プロジェクト・ヘイル・メアリー 下"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B09NBZ4Z3S?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">プロジェクト・ヘイル・メアリー 下</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%F3%A5%C7%A5%A3%20%A5%A6%A5%A3%A5%A2%A1%BC" class="keyword">アンディ ウィアー</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%E1%C0%EE%BD%F1%CB%BC">早川書房</a></li></ul><a href="https://www.amazon.co.jp/dp/B09NBZ4Z3S?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div></p> <p>映画「オデッセイ」の原作、火星の人の作者アンディウィアーの最新作。面白いよ!最初、主人公一人で淡々と、これ上下巻あるみたいだけど大丈夫かなと読み始めましたが、 すごかったです。<br/> 映画化も楽しみ。</p> <h3 id="アルテミス-上下巻">アルテミス 上下巻</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B0798Q64SJ?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/51XO1hYRYKL._SL500_.jpg" class="hatena-asin-detail-image" alt="アルテミス 上 (ハヤカワ文庫SF)" title="アルテミス 上 (ハヤカワ文庫SF)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B0798Q64SJ?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">アルテミス 上 (ハヤカワ文庫SF)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%F3%A5%C7%A5%A3%20%A5%A6%A5%A3%A5%A2%A1%BC" class="keyword">アンディ ウィアー</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%E1%C0%EE%BD%F1%CB%BC">早川書房</a></li></ul><a href="https://www.amazon.co.jp/dp/B0798Q64SJ?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> <div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B0798QLBVC?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/51MzKX0tDJL._SL500_.jpg" class="hatena-asin-detail-image" alt="アルテミス 下 (ハヤカワ文庫SF)" title="アルテミス 下 (ハヤカワ文庫SF)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B0798QLBVC?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">アルテミス 下 (ハヤカワ文庫SF)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%F3%A5%C7%A5%A3%20%A5%A6%A5%A3%A5%A2%A1%BC" class="keyword">アンディ ウィアー</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%E1%C0%EE%BD%F1%CB%BC">早川書房</a></li></ul><a href="https://www.amazon.co.jp/dp/B0798QLBVC?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div></p> <p>アンディウィアーのプロジェクト・ヘイル・メアリーが面白かったのでこちらも読んでみました。ですがこちらはそれほどワクワクはしなかったです。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B7%EE%CC%CC%B4%F0%C3%CF">月面基地</a>が舞台ではありますが、それほどスケール感が大きくならなかったです。</p> <h3 id="一九八四年">一九八四年</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B009DEMC8W?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/41dWu6kIsCL._SL500_.jpg" class="hatena-asin-detail-image" alt="一九八四年 (ハヤカワepi文庫)" title="一九八四年 (ハヤカワepi文庫)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B009DEMC8W?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">一九八四年 (ハヤカワepi文庫)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%A5%B8%A5%E7%A1%BC%A5%B8%A1%A6%A5%AA%A1%BC%A5%A6%A5%A7%A5%EB" class="keyword">ジョージ・オーウェル</a>,<a href="http://d.hatena.ne.jp/keyword/%B9%E2%B6%B6%20%CF%C2%B5%D7" class="keyword">高橋 和久</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%E1%C0%EE%BD%F1%CB%BC">早川書房</a></li></ul><a href="https://www.amazon.co.jp/dp/B009DEMC8W?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> 実は一度も読んだことはありませんでした。が、ストーリー的にはそんなにハマりませんでした。</p> <h3 id="あなたの人生の物語"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%A2%A4%CA%A4%BF%A4%CE%BF%CD%C0%B8%A4%CE%CA%AA%B8%EC">あなたの人生の物語</a></h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B00O2O7JEA?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/51CqKbKl7xL._SL500_.jpg" class="hatena-asin-detail-image" alt="あなたの人生の物語" title="あなたの人生の物語"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B00O2O7JEA?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">あなたの人生の物語</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%A5%C6%A5%C3%A5%C9%20%A5%C1%A5%E3%A5%F3" class="keyword">テッド チャン</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%E1%C0%EE%BD%F1%CB%BC">早川書房</a></li></ul><a href="https://www.amazon.co.jp/dp/B00O2O7JEA?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> 映画「メッセージ」の原作「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%A2%A4%CA%A4%BF%A4%CE%BF%CD%C0%B8%A4%CE%CA%AA%B8%EC">あなたの人生の物語</a>」を含む短編集。<br/> 良かったもの</p> <ul> <li>「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%A2%A4%CA%A4%BF%A4%CE%BF%CD%C0%B8%A4%CE%CA%AA%B8%EC">あなたの人生の物語</a>」:地球外生命体との<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%C0%B8%EC%B3%D8">言語学</a>的やりとりからの展開が面白いです</li> <li>「理解」:あー映像化できなさ具合がよかったです。</li> <li>「七十二文字」:呪文。これはStable Diffusionなどが出た今年読んだので、発売当初に読んだ人とは違った味わいが出た気がします。</li> </ul> <h2 id="ノンフィクション">ノンフィクション</h2> <h3 id="銃病原菌鉄-上下巻">銃・病原菌・鉄 上下巻</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B00DNMG8Q2?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/51U6f63ccKL._SL500_.jpg" class="hatena-asin-detail-image" alt="銃・病原菌・鉄 上巻" title="銃・病原菌・鉄 上巻"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B00DNMG8Q2?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">銃・病原菌・鉄 上巻</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%A5%B8%A5%E3%A5%EC%A5%C9%20%A5%C0%A5%A4%A5%A2%A5%E2%A5%F3%A5%C9" class="keyword">ジャレド ダイアモンド</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%F0%BB%D7%BC%D2">草思社</a></li></ul><a href="https://www.amazon.co.jp/dp/B00DNMG8Q2?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> <div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B00DNMG8QC?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/516yONOvSML._SL500_.jpg" class="hatena-asin-detail-image" alt="銃・病原菌・鉄 下巻" title="銃・病原菌・鉄 下巻"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B00DNMG8QC?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">銃・病原菌・鉄 下巻</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%A5%B8%A5%E3%A5%EC%A5%C9%20%A5%C0%A5%A4%A5%A2%A5%E2%A5%F3%A5%C9" class="keyword">ジャレド ダイアモンド</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C1%F0%BB%D7%BC%D2">草思社</a></li></ul><a href="https://www.amazon.co.jp/dp/B00DNMG8QC?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div></p> <p>色んな所でおすすめされているので読んでみました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%F2%CA%AA">穀物</a>、家畜の世界的な方よりによる社会の発展の差など、興味深く読みました。が、個人的には、人間よりも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%C5%CE%CF%C7%C8">重力波</a>とか<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D2%A5%C3%A5%B0%A5%B9%CE%B3%BB%D2">ヒッグス粒子</a>とかのほうが好きだと言うことに気づきました。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%A4%A5%B3%A5%D1%A5%B9">サイコパス</a>の思想)</p> <h3 id="ルワンダ中央銀行総裁日記"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EB%A5%EF%A5%F3%A5%C0">ルワンダ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C3%E6%B1%FB%B6%E4%B9%D4">中央銀行</a>総裁日記</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B00LMB2OLE?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/31NwGfF9RNL._SL500_.jpg" class="hatena-asin-detail-image" alt="ルワンダ中央銀行総裁日記 [増補版] (中公新書)" title="ルワンダ中央銀行総裁日記 [増補版] (中公新書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B00LMB2OLE?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">ルワンダ中央銀行総裁日記 [増補版] (中公新書)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%C9%FE%C9%F4%C0%B5%CC%E9" class="keyword">服部正也</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C3%E6%B1%FB%B8%F8%CF%C0%BF%B7%BC%D2">中央公論新社</a></li></ul><a href="https://www.amazon.co.jp/dp/B00LMB2OLE?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EB%A5%EF%A5%F3%A5%C0">ルワンダ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C3%E6%B1%FB%B6%E4%B9%D4">中央銀行</a>の総裁になってしまって無双するという現実版<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B0%DB%C0%A4%B3%A6">異世界</a>転生と聞いて読んでみました。1965年の話なのでちょっと古いのは注意が必要。当時はコーヒーと鉱物が主な輸出。最近のQiitaで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EB%A5%EF%A5%F3%A5%C0">ルワンダ</a>でオフショア開発している記事などをみて、英語が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%F8%CD%D1%B8%EC">公用語</a>にもなっている国はITは強いだろうな〜と時代の変化を感じました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Fhidetana%2Fitems%2Fd8b3069f27209df36e34" title="ルワンダでのオフショア開発を足掛かりに成長市場のアフリカでソフト企業を立上げ成長させてく話1 - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://qiita.com/hidetana/items/d8b3069f27209df36e34">qiita.com</a></cite></p> <h3 id="料理の四面体">料理の四面体</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B073DYQNC9?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/51bbzMFPrXL._SL500_.jpg" class="hatena-asin-detail-image" alt="料理の四面体 (中公文庫)" title="料理の四面体 (中公文庫)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B073DYQNC9?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">料理の四面体 (中公文庫)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%B6%CC%C2%BC%CB%AD%C3%CB" class="keyword">玉村豊男</a></li><li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C3%E6%B1%FB%B8%F8%CF%C0%BF%B7%BC%D2">中央公論新社</a></li></ul><a href="https://www.amazon.co.jp/dp/B073DYQNC9?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> 海外生活に何かと必須な料理スキル。外食は高いし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FC%CB%DC%BF%A9">日本食</a>が食べたくなるので必然的に料理をする機会は増えます。料理のアレンジの幅を増やしたくて読んでみました。著者の幅広い知識に驚きつつ、じゃあ自分でスキルを得たかというと、けっきょく<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%C3%A5%AF%A5%D1%A5%C3%A5%C9">クックパッド</a>にお世話になる日々です。</p> <h3 id="バッタを倒しにアフリカへ">バッタを倒しにアフリカへ</h3> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B072FGTM65?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/51ScdPFm7LL._SL500_.jpg" class="hatena-asin-detail-image" alt="バッタを倒しにアフリカへ (光文社新書)" title="バッタを倒しにアフリカへ (光文社新書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B072FGTM65?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">バッタを倒しにアフリカへ (光文社新書)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%C1%B0%CC%EE%20%A5%A6%A5%EB%A5%C9%20%B9%C0%C2%C0%CF%BA" class="keyword">前野 ウルド 浩太郎</a></li><li>光文社</li></ul><a href="https://www.amazon.co.jp/dp/B072FGTM65?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E2%A1%BC%A5%EA%A5%BF%A5%CB%A5%A2">モーリタニア</a>でバッタの研究をしている博士の手記。なれないアフリカで生活、お金のない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DD%A5%B9%A5%C9%A5%AF">ポスドク</a>の苦労等が書かれている。個人的にはバッタの相変異など、バッタの害 蝗害を止める方法はあるのかなど、バッタの生態の研究の方に興味があったので、物足りなかったです。</p> <p><div class="hatena-asin-detail"><a href="https://www.amazon.co.jp/dp/B09ZTM2GX5?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="hatena-asin-detail-image-link" target="_blank" rel="noopener"><img src="https://m.media-amazon.com/images/I/419+WRlB4qL._SL500_.jpg" class="hatena-asin-detail-image" alt="孤独なバッタが群れるとき~『バッタを倒しにアフリカへ』エピソード1~ (光文社新書)" title="孤独なバッタが群れるとき~『バッタを倒しにアフリカへ』エピソード1~ (光文社新書)"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="https://www.amazon.co.jp/dp/B09ZTM2GX5?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" target="_blank" rel="noopener">孤独なバッタが群れるとき~『バッタを倒しにアフリカへ』エピソード1~ (光文社新書)</a></p><ul class="hatena-asin-detail-meta"><li><span class="hatena-asin-detail-label">作者:</span><a href="http://d.hatena.ne.jp/keyword/%C1%B0%CC%EE%20%A5%A6%A5%EB%A5%C9%20%B9%C0%C2%C0%CF%BA" class="keyword">前野 ウルド 浩太郎</a></li><li>光文社</li></ul><a href="https://www.amazon.co.jp/dp/B09ZTM2GX5?tag=meso55-22&amp;linkCode=osi&amp;th=1&amp;psc=1" class="asin-detail-buy" target="_blank" rel="noopener">Amazon</a></div></div> こちらを買ったほうが良かったかも知れません。</p> <h2 id="まとめ">まとめ</h2> <p>かなり偏ってますね。<br/> 大栗博司さんの本は数式も出てこないので、SFが好きな人はおすすめっです。4次元から3次元を見る、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%E9%A5%C3%A5%AF%A5%DB%A1%BC%A5%EB">ブラックホール</a>へ落ちる、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%C5%CE%CF%C7%C8">重力波</a>望遠鏡など三体の話もより楽しめる気がします。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon%A5%A2%A5%BD%A5%B7%A5%A8%A5%A4%A5%C8">Amazonアソシエイト</a>はすべて、<a href="https://www.imagawa.tokyo/">いまがわ</a>さんへ送られます。</p> asus4 ドイツ カッセル 旅行 (ドクメンタ)2022.9 hatenablog://entry/4207112889950928497 2023-01-04T18:00:00+09:00 2023-01-04T18:00:00+09:00 ドクメンタという5年に一度だけドイツのカッセルという都市で開かれる世界でも有数の現代美術の展覧会に行ってきました。 旅行記なので、ドクメンタについての積極的な批評はありません。 wired.jp ドクメンタの展示については友人である日比野さんの記事が良かったです。 その他ドクメンタ記事で読んだやつ boundbaw.com artnewsjapan.com 5歳と行って大丈夫かなーと不安もありましたが、ドクメンタは美術館の触れない展示よりは、参加者と一緒につくる作品も多く、一日展示をまわることができました。 地面に参加者みんなで絵をほったり インプロビゼーションなライブに飛び入り参加したり 子… <p><a href="https://ja.wikipedia.org/wiki/%E3%83%89%E3%82%AF%E3%83%A1%E3%83%B3%E3%82%BF">ドクメンタ</a>という5年に一度だけドイツのカッセルという都市で開かれる世界でも有数の現代美術の展覧会に行ってきました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%CE%B9%B9%D4%B5%AD">旅行記</a>なので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%AF%A5%E1%A5%F3%A5%BF">ドクメンタ</a>についての積極的な批評はありません。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwired.jp%2Farticle%2Fdocumenta15-ruangrupa%2F" title="複数のリアリティへの接続と共同体の幸福:「ドクメンタ15」で見た実験的なキュレーション" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://wired.jp/article/documenta15-ruangrupa/">wired.jp</a></cite> <br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%AF%A5%E1%A5%F3%A5%BF">ドクメンタ</a>の展示については友人である日比野さんの記事が良かったです。</p> <p>その他<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%AF%A5%E1%A5%F3%A5%BF">ドクメンタ</a>記事で読んだやつ<br/> <iframe src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fboundbaw.com%2Fworld-topics%2Farticles%2F148" title="時代の転換点に立ち、大きく歴史をゆるがすドクメンタ15。西洋型アートからの脱却と反ユダヤ主義問題をめぐる現状とは。 | bound baw" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="http://boundbaw.com/world-topics/articles/148">boundbaw.com</a></cite></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fartnewsjapan.com%2Fnews_criticism%2Farticle%2F378" title="ドクメンタ15のテーマ「アートより友だち」は実現したか。非ヨーロッパ的価値観との軋轢を生むドイツの事情|ARTnews JAPAN" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://artnewsjapan.com/news_criticism/article/378">artnewsjapan.com</a></cite></p> <p>5歳と行って大丈夫かなーと不安もありましたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%AF%A5%E1%A5%F3%A5%BF">ドクメンタ</a>は美術館の触れない展示よりは、参加者と一緒につくる作品も多く、一<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FC%C5%B8">日展</a>示をまわることができました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104090539.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 地面に参加者みんなで絵をほったり</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104090742.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%D7%A5%ED%A5%D3%A5%BC%A1%BC%A5%B7%A5%E7%A5%F3">インプロビゼーション</a>なライブに飛び入り参加したり</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104091209.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 子供エリアもあり</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104091256.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 触れる展示も多かったです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104091446.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 戦車に落書きもしました。</p> <h2 id="好きだった展示">好きだった展示</h2> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Ffafswagvogue.com%2F" title="FAFSWAG" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://fafswagvogue.com/">fafswagvogue.com</a></cite><br/> 映像なのに格ゲーみたい</p> <p><iframe width="560" height="315" src="https://www.youtube.com/embed/kDr3_PjcyWI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Atis Rezistans | Ghetto Biennale: Veve Kunigundis and Jann Pase’l Pase &amp; Mache Nap Mache"></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=kDr3_PjcyWI">www.youtube.com</a></cite> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104093121.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104093130.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104093139.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104093149.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104093157.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> ハイチのアートコレクティクティブ、Atis Rezistansによる作品群。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104092259.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104092307.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104092324.jpg" width="450" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104092316.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> これは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%AF%A5%E1%A5%F3%A5%BF">ドクメンタ</a>メインイベントではなく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%AF%A5%E1%A5%F3%A5%BF">ドクメンタ</a>の時期に、カッセル<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B7%DD%BD%D1%C2%E7%B3%D8">芸術大学</a>の人が作ったサテライト展示。<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%AA%A5%CF%A5%B6%A1%BC%A5%C9">バイオハザード</a>みたいな地下の空間を探検、なぞの瓶に入った謎の食品と食べる、という展示。</p> <p>もっとサテライト展示を狙って見ればよかったです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104093820.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> こんなのも。</p> <h2 id="食事">食事</h2> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgoo.gl%2Fmaps%2FFFs9oiuCkCh6csqr5" title="EISLUST · Friedrichspl. 6, 34117 Kassel, ドイツ" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://goo.gl/maps/FFs9oiuCkCh6csqr5">goo.gl</a></cite> カッセル在住の人におすすめしてもらったアイス屋。展示会場中心地すぐ近くにあり、2回行きました。美味し。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104091042.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <br/> <a href="https://goo.gl/maps/VKZe2BsEkkPxSUcSA">モロッコ料理レストラン</a>…美味しかった。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104091713.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a href="https://goo.gl/maps/WNuwKAvbyxR1XgCw7">エチオピア料理</a></p> <p>完全に食事の趣味が偏ってますね。</p> <h2 id="まとめ">まとめ</h2> <p>カッセルという街はかなりコンパクトでメイン通りを歩けばだいたい揃ってる。いい街でした。ドイツ語チョットワカル、なので、レストランなどの注文もストレスなくできるのも良かったです。</p> <p>子供にとっては現代美術のアート展示のほうが美術館よりかなり楽しめたみたいです。</p> <p>初の東アジアからの芸術監督<a href="https://ruangrupa.id/en/">ルアンルパ</a>。作品も西洋的資本主義じゃないところ(今回<a href="https://ideasforgood.jp/glossary/global-south/#:~:text=%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%82%B5%E3%82%A6%E3%82%B9%E3%81%A8%E3%81%AF%E3%80%81%E3%80%8C%E9%80%94%E4%B8%8A,%E3%81%AB%E5%88%86%E9%A1%9E%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82">グローバルサウス</a>という言葉をしりました)からのものが多かったが。個人的には、今回が初の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%AF%A5%E1%A5%F3%A5%BF">ドクメンタ</a>ということもあり、以前を知らず逆に偏り過ぎてるなと思ってしまいました。5年後もドイツにいるかはわかりませんが、次回の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%AF%A5%E1%A5%F3%A5%BF">ドクメンタ</a>も体験してみたいです。</p> asus4 スペイン サン・セバスティアン 旅行 2022.8月 hatenablog://entry/4207112889950899059 2023-01-04T08:40:59+09:00 2023-01-04T10:05:16+09:00 夏休みは以前から興味のあったスペイン サン・セバスティアンに行ってきました。 ベルリンからサン・セバスティアンへの直行便はないので、ベルリン→バルセロナ→サン・セバスティアン→マドリード→ベルリンというルートで行きました。 バルセロナ コロナはどこ吹く風で、市場も人でぎゅうぎゅう バルセロナは海の近くで、高台に遺跡に登ると、海が一望できました。 バルセロナに立ち寄った目的のサグラダファミリア。ノートルダム大聖堂が火災になったのをみて、いつか行くかと思ってもなくなってしまうことに気づき。チャンスなので寄ろうと思いました。 ベルリンより、下町の道幅が狭くて、東京の下町感があって落ち着きますね。 ピ… <p>夏休みは以前から興味のあったスペイン <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A1%A6%A5%BB%A5%D0%A5%B9%A5%C6%A5%A3%A5%A2%A5%F3">サン・セバスティアン</a>に行ってきました。</p> <p>ベルリンから<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A1%A6%A5%BB%A5%D0%A5%B9%A5%C6%A5%A3%A5%A2%A5%F3">サン・セバスティアン</a>への直行便はないので、ベルリン→<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%EB%A5%BB%A5%ED%A5%CA">バルセロナ</a>→<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A1%A6%A5%BB%A5%D0%A5%B9%A5%C6%A5%A3%A5%A2%A5%F3">サン・セバスティアン</a>→<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C9%A5%EA%A1%BC%A5%C9">マドリード</a>→ベルリンというルートで行きました。</p> <h2 id="バルセロナ"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%EB%A5%BB%A5%ED%A5%CA">バルセロナ</a></h2> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104055944.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> コロナはどこ吹く風で、市場も人でぎゅうぎゅう</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104070302.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%EB%A5%BB%A5%ED%A5%CA">バルセロナ</a>は海の近くで、高台に遺跡に登ると、海が一望できました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104070517.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104070525.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%EB%A5%BB%A5%ED%A5%CA">バルセロナ</a>に立ち寄った目的の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%B0%A5%E9%A5%C0%A5%D5%A5%A1%A5%DF%A5%EA%A5%A2">サグラダファミリア</a>。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A1%BC%A5%C8%A5%EB%A5%C0%A5%E0%C2%E7%C0%BB%C6%B2">ノートルダム大聖堂</a>が火災になったのをみて、いつか行くかと思ってもなくなってしまうことに気づき。チャンスなので寄ろうと思いました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104070954.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104071003.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> ベルリンより、下町の道幅が狭くて、東京の下町感があって落ち着きますね。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104071111.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104071118.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AB%A5%BD">ピカソ</a>美術館の隣にあった<a href="https://mocomuseum.com/">Moco Museum</a>。<a class="keyword" href="http://d.hatena.ne.jp/keyword/KAWS">KAWS</a>, Banksyに並んでTeamLabの展示もありました。この文脈で語られるのすごいですね。最近あらゆるとこで、Immersive Experienceな展示ばかりや。私は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AB%A5%BD">ピカソ</a>美術館の方へ行きました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104072118.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104072213.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%B5%A1%A6%A5%DF%A5%E9">カサ・ミラ</a>邸にあった、ガウディ建築のコンセプトがとてもわかり易かったので、サクラダファミリアの前に来ればよかったです。</p> <h2 id="サンセバスティアン"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A1%A6%A5%BB%A5%D0%A5%B9%A5%C6%A5%A3%A5%A2%A5%F3">サン・セバスティアン</a></h2> <p>ということで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%EB%A5%BB%A5%ED%A5%CA">バルセロナ</a>を離れ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A1%A6%A5%BB%A5%D0%A5%B9%A5%C6%A5%A3%A5%A2%A5%F3">サン・セバスティアン</a>へ。</p> <p>スペインといっても<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A1%A6%A5%BB%A5%D0%A5%B9%A5%C6%A5%A3%A5%A2%A5%F3">サン・セバスティアン</a>のある<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%B9%A5%AF%C3%CF%CA%FD">バスク地方</a>は話しされる言語は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%B9%A5%AF%B8%EC">バスク語</a>。現地での呼び名はドノスティア。看板などは”Donostia-San Sebastián”と表記されていましたが、ここでは日本での浸透度が高そうな<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A1%A6%A5%BB%A5%D0%A5%B9%A5%C6%A5%A3%A5%A2%A5%F3">サン・セバスティアン</a>と言います。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104074453.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>ここはなんと行っても美食の街。狭い街に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DF%A5%B7%A5%E5%A5%E9%A5%F3">ミシュラン</a>星つきが密集。世界中から食いしん坊が集まります。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DF%A5%B7%A5%E5%A5%E9%A5%F3">ミシュラン</a>星付きのような高級レストランに行かなくても、旧市街にはこんな感じでスペインバルが密集していて、気軽にうまいものを食べ歩けるのです。1軒で何皿か食べて、次の店!と毎食3〜4軒を食べ歩きました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104073018.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104073027.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> バル店内ではこんな感じでタパスが並んでいて、これくれださいの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DA%A5%A4%A5%F3%B8%EC">スペイン語</a>「Esto, por favor.」だけでなんとかなりました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104073035.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> フォアグラタパス!とろける…。そして安い。4ユーロくらい。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104073744.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 焼き鳥に近いなにか。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104073948.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 腹がいっぱいになったので海を見て休憩</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104074141.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104074148.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104074212.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104074253.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104074301.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 貝も魚も肉も全部美味しい。語彙力…。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104074832.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 食べすぎたので海でひと泳ぎ</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104075038.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104075046.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 完全に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%B9%A5%AF">バスク</a>版焼き鳥である</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104075054.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104075102.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> ウニ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%EF%A5%B7">イワシ</a>と、日本人のために作られたレシピとしか思えないほど<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%B9%A5%AF">バスク</a>料理は口に合います。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104080039.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <br/> フォラグラおかわり</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104080113.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%EF%A5%B7">イワシ</a>専門店で、ビールの横に並んでいるのはカヴァというスパークリングワインです。気軽でうまい。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104080310.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <br/> きのこ専門店で食休み</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104080358.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 海をみて休憩</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104080701.jpg" width="675" height="1200" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104080651.jpg" width="675" height="1200" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104080646.jpg" width="675" height="1200" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%B9%A5%AF">バスク</a>風チーズケーキは三軒別々のところを食べ比べました。</p> <p>…ずっと食べてますね…さいこうでした。</p> <p>ちなみに宿は、とった時期がギリギリだったこともあり、ホテルではなく、旧市街ど真ん中の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Airbnb">Airbnb</a>でした。宿で少し休憩してこれは一歩出ればレストラン。これはこれで良かったです。</p> <h2 id="マドリード"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C9%A5%EA%A1%BC%A5%C9">マドリード</a></h2> <p>ベルリン帰国前に、直通便はないので<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C9%A5%EA%A1%BC%A5%C9">マドリード</a>へ立ち寄り。</p> <p>行った時期が悪かった…。8月の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C9%A5%EA%A1%BC%A5%C9">マドリード</a>は内陸だからか連日気温は38℃超えでした。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104081318.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> もう<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DA%A5%A4%A5%F3%CE%C1%CD%FD">スペイン料理</a>は満足したので、行った<a href="https://goo.gl/maps/A71rEDmDnbBYEvQa9">タコス屋</a>。今までで一番うまいタコスで、2回いきました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104081502.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 一応フラメンコも見ました。観光客向けっぽいので本場と言って良いかはあやしいですが。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104082346.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104082354.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104082401.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a href="https://www.businessinsider.jp/post-34152">ギネス認定世界最古のレストラン Restaurant Botín</a>へも行きました。怪しい階段を降りて、明らかに古い感じだけどちゃんと設備は整っていました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.museodelprado.es%2F" title="Museo Nacional del Prado" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://www.museodelprado.es/">www.museodelprado.es</a></cite><br/> 美術館は1軒だけ。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%C9%C8%FE%BD%D1%B4%DB">プラド美術館</a>へ行きました。子供がすぐ飽きたりするので半日しかいませんでしたが、半分も見れず。圧倒的に広さとクオリティの高い作品ばかりなので、もし好きなら、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%C9%C8%FE%BD%D1%B4%DB">プラド美術館</a>で一日空けておくのも良さそうです。(涼しいし)</p> <h2 id="トレド">トレド</h2> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104083323.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C9%A5%EA%A1%BC%A5%C9">マドリード</a>からバスツアーが出ていたので、トレドにも立ち寄ってみました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230104/20230104083400.jpg" width="800" height="450" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 知らないおじさんと剣で戦いました。</p> <p>ツアーのお兄さんがトレドがUNESCO<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%A4%B3%A6%B0%E4%BB%BA">世界遺産</a>になったことで観光客が来てくれたことで、俺はこうしてトレドで仕事できているんだぜ、とトレド愛に溢れているのが印象的でした。</p> <h2 id="まとめ">まとめ</h2> <p>ずっと食べてますね。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A1%A6%A5%BB%A5%D0%A5%B9%A5%C6%A5%A3%A5%A2%A5%F3">サン・セバスティアン</a>最高でした。また行きたいです。</p> asus4 フランス リヨン 旅行 2022年5月 hatenablog://entry/4207112889950631285 2023-01-03T19:32:02+09:00 2023-01-07T06:58:45+09:00 2022年5月に行ったフランス南西部リヨンの記録です。 <p>2022年にいった旅行先についての記録を残します。</p> <p>5月に保育園が休みで連休があることに気づき、突如フランスのリヨンへ行きました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103095650.jpg" width="450" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>旅行先へはいつもキックボードを持っていき、5歳の機動力をあげます。</p> <p>旧市街にいい感じにレストランが集まっていたので旧市街を中心に回り回りました。 <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103095727.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>三ツ星レストラン、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DD%A1%BC%A5%EB%A1%A6%A5%DC%A5%AD%A5%E5%A1%BC%A5%BA">ポール・ボキューズ</a>も興味はありましたが、5歳の子といくのは大変そうだなということで断念。いつか大きくなったら挑戦。カジュアル目のレストランに行きました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103095616.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 鮭のタルタル</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103100627.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> リヨンの伝統料理ブションのレストランで食べたうまい肉、名前は忘れた。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103100635.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> 本場の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%EC%A1%BC%A5%E0%A5%D6%A5%EA%A5%E5%A5%EC">クレームブリュレ</a></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103095634.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> リヨン名物、チョコケーキ、プレ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A5%C0%A5%F3">ジダン</a></p> <p>…と食べ歩きました。<br/> フレンチのレストランではカジュアルといえども、前菜、メイン、デザートを頼むのが普通なようで、子供用メニューも、コースになっていたのが印象に残っています。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103095626.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103101659.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 広場は噴水や教会を囲むのがルール。正直いうともう少し西洋建築を勉強して町ごと時代ごとの建築の違いとかを勉強して旅行をしたほうがいいと思いつつ。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103101315.jpg" width="600" height="800" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span> 旧市街の歴史ある景色がいい感じなのはもちろんですが、小高い丘の脇道に入っていくときのワクワク感が印象的でした。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103100946.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><br/> 美術館は絵画よりもゲーム。最近やっと美術館も行けるようになってきましたが、やはり触れない展示はまだ厳しい…。</p> <p>ミニチュアと映画博物館、映画のセットは観光地だからかハリウッドばかりでしたが、ミニチュアの方は最高でした。<a href="https://www.facebook.com/people/Dan-Ohlmann/100044801746579/">Dan Ohlmann</a>という職人がずっと作っているらしです。 <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103102829.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103102837.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103102846.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103102855.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103102903.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103102914.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103102923.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103102118.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20230103/20230103102126.jpg" width="800" height="600" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span></p> asus4 お仕事まとめ 2022 hatenablog://entry/4207112889950590205 2023-01-03T09:20:17+09:00 2023-01-03T09:20:17+09:00 2022年にやったお仕事のまとめです。 Lyric Speaker : Cotodama & Whatever Co. かれこれ2014から開発に関わっているので、かれこれ9年目!! 今年はLyric Speaker Boxという新モデルを発売しました。見た目は初代のモデルと似ていますが、コストを削減するため多大な努力がありました。私はハードウェア開発には関わっていませんが、中国の工場チームとのやり取りを見れるのも勉強になっています。コロナ下での開発は本当に大変そうでした。 これだけ長い時間やっていると歌詞のモーションをプログラミングするという、超ニッチな分野のプログラミングが少しずつ見えてき… <p>2022年にやったお仕事のまとめです。</p> <h2 id="Lyric-Speaker--Cotodama--Whatever-Co">Lyric Speaker : Cotodama &amp; Whatever Co.</h2> <p>かれこれ2014から開発に関わっているので、かれこれ9年目!!</p> <p>今年はLyric Speaker Boxという新モデルを発売しました。見た目は初代のモデルと似ていますが、コストを削減するため多大な努力がありました。私はハードウェア開発には関わっていませんが、中国の工場チームとのやり取りを見れるのも勉強になっています。コロナ下での開発は本当に大変そうでした。<br/> これだけ長い時間やっていると歌詞のモーションをプログラミングするという、超ニッチな分野のプログラミングが少しずつ見えてきた気がします。使い所がLyric Speakerでしかないのが惜しいですが。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Flyric-speaker.com%2Fen_us%2Fbox" title="Lyric Speaker" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://lyric-speaker.com/en_us/box">lyric-speaker.com</a></cite></p> <p>またFranck Muller, <a class="keyword" href="http://d.hatena.ne.jp/keyword/%E9%F0%C0%EE%BC%C2%B2%D6">蜷川実花</a>さんと言った世界一流の方たちとのコラボモデルを開発していることもあり、そのコンテンツを作るのはかなり緊張します。</p> <h2 id="ARアプリ--Litho">ARアプリ : Litho</h2> <p>2021年後半から2022年前半まで、LithoというARと連動する6dof <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DD%A5%A4%A5%F3%A5%BF%A1%BC">ポインター</a>デ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>を開発しているスタートアップを手伝っていました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.litho.cc%2F" title="LITHO" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://www.litho.cc/">www.litho.cc</a></cite></p> <p><iframe width="560" height="315" src="https://www.youtube.com/embed/HFUXBONuKPU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen title="Introducing Diorama - The future of filmmaking"></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=HFUXBONuKPU">www.youtube.com</a></cite></p> <p>ファウンダーのNatはとても熱い起業家でコードも書く。仕事必要になったらいつでも言ってと言ってくれてます。心強い。 ハードウェアやるのは超大変なんだよ気持ちを分かち合ってる気がします。</p> <h2 id="ARアプリ-のプロトタイプ">ARアプリ のプロトタイプ</h2> <p>日本の企業さんからの依頼で、ARとハードウェアが連動するプロトタイプを作っていました。非常にいいプロトタイプが出来たと思うので公開したい</p> <h2 id="ARアプリ-MoAR--Whatever-Co">ARアプリ MoAR : Whatever Co.</h2> <p>Coクリエイターとして所属している、Whatever の本社ビルに巨大な<a class="keyword" href="http://d.hatena.ne.jp/keyword/QR%A5%B3%A1%BC%A5%C9">QRコード</a>を設置。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apple">Apple</a>の<a href="https://developer.apple.com/app-clips/">App Clips</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/QR%A5%B3%A1%BC%A5%C9">QRコード</a>にかざすだけでロケーションベースのARを体験できるアプリです。</p> <p><iframe width="560" height="315" src="https://www.youtube.com/embed/5eRc6ZfmZwA?start=1&feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen title="MoAR - Museum of AR"></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=5eRc6ZfmZwA&t=1s">www.youtube.com</a></cite></p> <p>開発記録は主にCTO Saqooshaが<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%C9%A5%D9%A5%F3%A5%C8%A5%AB%A5%EC%A5%F3%A5%C0%A1%BC">アドベントカレンダー</a>に書いてくれました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Fadvent-calendar%2F2022%2Fmoar" title="MoAR - Museum of ARのカレンダー | Advent Calendar 2022 - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://qiita.com/advent-calendar/2022/moar">qiita.com</a></cite></p> <h2 id="ARアプリ-Gorillaz-presents-Skinny-Ape--Google-x-Nexus-Studios">ARアプリ <a class="keyword" href="http://d.hatena.ne.jp/keyword/Gorillaz">Gorillaz</a> presents… Skinny Ape : <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> x <a class="keyword" href="http://d.hatena.ne.jp/keyword/Nexus">Nexus</a> Studios</h2> <p><iframe width="560" height="315" src="https://www.youtube.com/embed/iFaKhtlBU7A?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen title="Gorillaz presents… Skinny Ape (Immersive Live Performance in Times Square)"></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=iFaKhtlBU7A">www.youtube.com</a></cite></p> <p>こちらもロケーションベースのAR。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CB%A5%E5%A1%BC%A5%E8%A1%BC%A5%AF%A5%BF%A5%A4%A5%E0%A5%BA">ニューヨークタイムズ</a>スクエアとロンドンピカデリーサーカスで体験できるライブイベント。本体アプリの開発ではなく、技術調査みたいなところを少しだけお手伝いしました。</p> <h2 id="TensorFlow-Liteまわり--NEX-Team-Inc">TensorFlow Liteまわり : NEX Team Inc.</h2> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.nex.inc%2F" title="Nex - Discover a new world of play." class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://www.nex.inc/">www.nex.inc</a></cite></p> <p>こちらはプロジェクト本体ではなく、私の公開している<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>, TensorFlow Lite Unity Samplesへ公開で機能追加を行いました。ありがたい。<br/> NEXが作ってるボディト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>を使ったゲームも非常にクオリティが高いので遊んでみてください。</p> <p><iframe width="560" height="315" src="https://www.youtube.com/embed/jM4SfsSWVJI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen title="Starri - Find your rhythm - Official Trailer"></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=jM4SfsSWVJI">www.youtube.com</a></cite></p> <hr /> <h2 id="総括">総括</h2> <p>びっくりするくらいARばかりですね。そしてここ5年ほどなぜかハードウェアと連動するもののソフト側を担当する案件も多い気がします。今やっているプロジェクトもAR。</p> <p>そしてすべてリモートワーク。地域はロンドンが6割、東京が3割、その他サンフランシスコ、ダブリンなど。ロンドンはベルリンとの時差は1時間なので非常に仕事はしやすいです。朝イチに日本とミーティング、その後はロンドン。みたいな流れが多かったです。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>は縁(コネともいう)なので、一度つながると、その繋がりが多くなりがち。その流れでロンドンの案件ばかり頂いています。<a href="https://asus4.hatenablog.com/entry/2021/01/25/2021%E5%B9%B4%E3%81%AE%E7%9B%AE%E6%A8%99">2021年の目標</a>であった、海外案件を増やすのは達成している気がします。(あれ2021年のまとめを書いてないですね…。2021年も頑張っていました。)</p> <p>今年の目標としては</p> <ul> <li>せっかくベルリンにいるので、ベルリンの縁を見つける</li> <li>リモートワークでARがベースにしつつも、少しAR以外のプロジェクトにも手を出す</li> </ul> <p>の二本立てでいきます。</p> asus4 オープンソース活動記録 2022 hatenablog://entry/4207112889949405232 2023-01-03T00:39:15+09:00 2023-01-03T00:57:14+09:00 TensorFlow Lite Unity Sample 開発当初はTensorFlow Liteの公式モデルをUnityで動かすサンプル。で開発をはじめましたが、今では、Unity向けに最適化されたTensorFlow Liteのライブラリと C#バインディング、各種Delegate(GPUなどを使った高速化オプション)を取り揃えたリポジトリになってきました。UPM(Unity Package Manaer)対応したのも大きいです。 2019年12月から始めて安定期。今年は大きな機能追加はなかったものの、地道な機能追加をしてました。 github.com MITライセンスなので使ってくれてい… <h2 id="TensorFlow-Lite-Unity-Sample">TensorFlow Lite Unity Sample</h2> <p>開発当初はTensorFlow Liteの公式モデルをUnityで動かすサンプル。で開発をはじめましたが、今では、Unity向けに最適化されたTensorFlow Liteのライブラリと <a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%F3%A5%C7%A5%A3%A5%F3%A5%B0">バインディング</a>、各種<a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>などを使った高速化オプション)を取り揃えた<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>になってきました。UPM(Unity Package Manaer)対応したのも大きいです。</p> <p>2019年12月から始めて安定期。今年は大きな機能追加はなかったものの、地道な機能追加をしてました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Ftf-lite-unity-sample" title="GitHub - asus4/tf-lite-unity-sample: TensorFlow Lite Samples on Unity" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/tf-lite-unity-sample">github.com</a></cite></p> <p>MITライセンスなので使ってくれている会社さんを、私に連絡頂いた方のみですが紹介します。</p> <h3 id="DeNA-配信アプリ-IRIAM"><a class="keyword" href="http://d.hatena.ne.jp/keyword/DeNA">DeNA</a> 配信アプリ IRIAM</h3> <p>10月に開催された Unityイベント内の講演でも使っていることを発表していただきました。TensorFlowの全ライブラリをCircle CIでビルドするという PRもいただきました。ありがたい。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fevents.unity3d.jp%2Fsync%2Fsession%2F26%2F" title="データサイエンスの知見をUnityでも活かそう!ライブ配信アプリIRIAMの顔認識改善の取り組み | SYNC 2022" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://events.unity3d.jp/sync/session/26/">events.unity3d.jp</a></cite></p> <h3 id="NEX-Team-Inc">NEX Team Inc.</h3> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.nex.inc%2F" title="Nex - Discover a new world of play." class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://www.nex.inc/">www.nex.inc</a></cite> <a class="keyword" href="http://d.hatena.ne.jp/keyword/TGS">TGS</a>でも<a href="https://twitter.com/search?q=%23TGS2022%20Starri&amp;src=typed_query&amp;f=top">話題になった</a>、<a href="https://www.starrigame.com/">Starri</a>を開発している会社です。最初は<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>のIssue経由でしたが、直接<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>としての依頼を頂き、私の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>へ優先的に機能追加をしたりしています。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>非公開のプロジェクトでTensorFlow Liteを導入する案件もちらほらあるのですが、Unityのバージョンアップで動かなくなって、私が抜けたあとメンテできなくなったりするので、公開の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>への依頼はありがたいです。</p> <h3 id="Augmented-Robotics">Augmented Robotics</h3> <p>現実のラジコンを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A1%BC%A5%C8%A5%D5%A5%A9%A5%F3">スマートフォン</a>で認識してAR上のものとインタ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ションが起こる。という面白いアプリを開発しています。Berlinがオフィスとのことで一度オフィスにもお邪魔しました。 <a href="https://augmented-robotics.com/">https://augmented-robotics.com/</a> <iframe width="560" height="315" src="https://www.youtube.com/embed/rzd1hj6KTWM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen title="RoboHeart: The World&#39;s First Augmented Reality Racer"></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=rzd1hj6KTWM">www.youtube.com</a></cite></p> <h3 id="MoveAhead">MoveAhead</h3> <p>Dublin City Univからの大学内スタートアップ。子供のためのモーション解析xゲームを作っているチームです。直接連絡をもらい、サポートもしていました。たまにオンラインで質問を聞いたりしています。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmoveahead-project.com%2F" title="MoveAhead" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://moveahead-project.com/">moveahead-project.com</a></cite></p> <p>他にも個人、企業含めいくつかの方から連絡をもらっています。誰も使わないだろ、と思うようなニッチなやつでも全世界に公開すると、使ってくれる人がいるんだなぁという。</p> <h2 id="MetaAvfi">MetaAvfi</h2> <p>keijiroさんが<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>で動画のレコーディングができる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>を公開していたので、フォークして機能追加。任意のバイナリデータを動画に同期して記録、再生が可能です。普段の案件でUnityで動画レコーディングするのは<a href="https://github.com/natmlx/NatCorder">NatCorder</a>にお世話になっていて、非常のクオリティの高いライブラリではあるのですが、有料<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%D6%A5%B9%A5%AF%A5%EA%A5%D7%A5%B7%A5%E7%A5%F3">サブスクリプション</a>モデルなので、ライブラリとして公開したい場合に気軽に使える動画レコーディング機能がほしいと思っていました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2FMetaAvfi" title="GitHub - asus4/MetaAvfi: Simple video recorder with AVFoundation" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/MetaAvfi">github.com</a></cite></p> <p>これ、Unity 2021 LTS, 2022.1 までは動くのですが、2022.2からUnityのビデオプレーヤーに更新があり、可変<a class="keyword" href="http://d.hatena.ne.jp/keyword/fps">fps</a>の動画が再生できなくなりました。Unity側に<a href="https://github.com/asus4/2022-video-player-issue">バグレポ</a>を送り、2023アルファ版では修正されましたが、2022版へもバックポートしてくれと連絡してます。果たして対応してくれるのか。</p> <h2 id="unity-texture-curve">unity-texture-curve</h2> <p><a href="https://github.com/andydbc/unity-texture-curve">andydbc</a>さんの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>をフォークして機能追加。 <a href="https://github.com/andydbc/unity-texture-curve/raw/master/Screenshots/screen0.gif" class="http-image"><img src="https://github.com/andydbc/unity-texture-curve/raw/master/Screenshots/screen0.gif" class="http-image" alt="https://github.com/andydbc/unity-texture-curve/raw/master/Screenshots/screen0.gif"></a></p> <p>Animation CurveをRGBAの最大4チャンネル 、テクスチャに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>することができるライブラリ。シェーダーでアニメーションをさせたいということが多いので、自分で欲しかった機能を足しました。</p> <p>一つは、UPM対応。もう一つは、<a href="https://docs.unity3d.com/Manual/ScriptedImporters.html">ScriptedImporter</a>をつかって、エディタ読み込み時にテクスチャにしてくれる機能です。ランタイム時はただのテクスチャとして扱われます。ScriptedImporterは独自拡張子をUnityに読み込むときに便利な機能なので、積極的に使ってます。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Funity-texture-curve" title="GitHub - asus4/unity-texture-curve: :pencil2: Example showing how to bake an AnimatedCurve into a Texture and use it in a shader." class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/unity-texture-curve">github.com</a></cite></p> <h2 id="TextureSource">TextureSource</h2> <p>UnityのWebCamTexture、使うの大変ですよね…。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A1%BC%A5%C8%A5%D5%A5%A9%A5%F3">スマートフォン</a>で使うと回転したテクスチャが帰ってくるし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>では最初の数フレーム10 x 10の小さいTextureが来たあと、正しい解像度のTextureになる…。初学者には罠しかありません。普段は上述のNatDeviceを使うのが最適解だと思いますが、いかんせん有料<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%D6%A5%B9%A5%AF%A5%EA%A5%D7%A5%B7%A5%E7%A5%F3">サブスクリプション</a>モデルなので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9">オープンソース</a>で使いたいときに気軽に使えるやつを作りました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/WebCam">WebCam</a>だけでなく、VirtualTextureという<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>経由で、動画と<a class="keyword" href="http://d.hatena.ne.jp/keyword/WebCam">WebCam</a>をコード変更無しに切り替えられます。主に私が<a class="keyword" href="http://d.hatena.ne.jp/keyword/Computer%20Vision">Computer Vision</a>案件をやるために作りました。WebCamTextureは遅延が大きいので、いつかネイティブ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>用意したいなーと思ってます。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2FTextureSource" title="GitHub - asus4/TextureSource: Virtual Texture Source for Unity" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/TextureSource">github.com</a></cite></p> <h2 id="ml-slack-bots">ml-slack-bots</h2> <p>Slack上で色々OpenAIや、 OpenAI, Hugging Face, Replicateのモデルを試せるSlackボットです。DALL·E 2や、Imagenが出てきて、まだStable Diffusionが公開される前に、自分でも色々モデル試さなきゃ!!と思って、作りましたが、Stable Diffusionモデルが公開されて、M1 <a class="keyword" href="http://d.hatena.ne.jp/keyword/mac">mac</a>でもローカルで動くって状況なので、しばらくは使わなそうです。Slackのボットを初めて作りましたが、Slack <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>の<a href="https://api.slack.com/apis/connections/events-api#the-events-api__field-guide__error-handling__graceful-retries">Graceful Retries</a>という、3000ms以内に一旦レスポンスを返さないと、3回同じリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トをリトライして送信してくる機能が、画像生成で時間がかかるモデルを<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a> LamdaとSlackでやるのが相性悪すぎました。Graceful Retries切るオプション欲しいのは私だけではないはず。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Fml-slack-bots" title="GitHub - asus4/ml-slack-bots" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/ml-slack-bots">github.com</a></cite></p> <h2 id="URP-Post-Effect">URP Post Effect</h2> <p>URPでカスタムポストエフェクトを書く際に、RendererFeatureを追加して、ほにゃらら。って面倒くさいですよね。なので気軽にShaderGraphやら、ComputeShaderやらを組み込める機能を作りました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2FURPPostEffect" title="GitHub - asus4/URPPostEffect" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/URPPostEffect">github.com</a></cite></p> <p>Unity 2022 (URP 14以降)では、<a href="https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/renderer-features/renderer-feature-full-screen-pass.html">Full Screen Render Pass</a>が追加されて、気軽にできる!と思いきや、これ、Render Settingにマテリアルを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%B5%A5%A4">アサイ</a>ンするので、一つのエフェクト追加するたびにパスが追加されるし、enable/disableを切り替えるのがめんどくさい。</p> <p>ので、URP Post Effect的にな手法なほうが手軽で良いなーと個人的には思っています。</p> <h2 id="GitHub-Sponsor"><a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> Sponsor</h2> <p><a href="https://github.com/sponsors/asus4">Sponsor @asus4 on GitHub Sponsors &middot; GitHub</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> Sponsor、嬉しいことに毎月$100以上を支援して頂いてます。このおかげで<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/LFS">LFS</a>などの有料機能も帯域が足りなくなったときにも遠慮なく追加出来ています。ありがとうございました。</p> <h2 id="Zenn-Scraps">Zenn Scraps</h2> <p>2022年は公開しても良いときは開発記録をZennのScrapsにだら〜と書きなぐっていました。ブログにまとめなきゃと思いつつ出来てなかったので、ハードル低く、文字に残せるScrapsは個人的にはありがたい機能です。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fzenn.dev%2Fdashboard%2Fscraps" title="Zenn" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://zenn.dev/dashboard/scraps">zenn.dev</a></cite></p> <hr /> <p>以上です。<br/> 今年も作ったもので公開して良いのがあれば、積極的に公開していきます。</p> asus4 ビザ更新してきました。 hatenablog://entry/13574176438025638782 2021-10-24T05:39:04+09:00 2021-10-24T05:39:04+09:00 2018年にベルリンに引っ越して3年が経ったので、ビザを更新してきました。 …3年あっという間でした。3年経ってやっとドイツの生活も(コロナも)落ち着いてきたという感触があり、まだベルリンに住んでいたいぞと思い更新です。 ビザの更新にも審査があり、全然だめだとビザが降りなかったりするらしいのですが、無事最長期間の3年のビザが折りました。 やったー! 短いですが近況報告でした。 <p>2018年にベルリンに引っ越して3年が経ったので、ビザを更新してきました。</p> <p>…3年あっという間でした。3年経ってやっとドイツの生活も(コロナも)落ち着いてきたという感触があり、まだベルリンに住んでいたいぞと思い更新です。 ビザの更新にも審査があり、全然だめだとビザが降りなかったりするらしいのですが、無事最長期間の3年のビザが折りました。</p> <p>やったー!</p> <p>短いですが近況報告でした。</p> asus4 TensorFlow LiteのGPU delegateを高速化する hatenablog://entry/26006613767075221 2021-05-23T06:42:12+09:00 2021-05-23T06:42:12+09:00 今月は仕事の空き時間はずっとTensorFlow Lite C-API上でのGPU delegateの高速化に取り組んでいました。高速化といっても、GPU delegate内部に手を付けるのではなく、CPU → GPU間をデータ転送するときの転送待ち時間をなくす作業をしていました。 GPUでの計算はCPUとは比較にならないほど早いですが、結局なにかロジックを変更するのはCPU。GPUですべてのプログラムを動かすことはできません。 そして、CPUからGPUへのデータのアップロード、ダウンロードは、CG周りをやる方はよく悩んでいると思いますが、かなり…遅いのです。 私はUnity上でTensorF… <p>今月は仕事の空き時間はずっとTensorFlow Lite C-<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>上での<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/delegate">delegate</a>の高速化に取り組んでいました。高速化といっても、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/delegate">delegate</a>内部に手を付けるのではなく、CPU → <a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>間をデータ転送するときの転送待ち時間をなくす作業をしていました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>での計算はCPUとは比較にならないほど早いですが、結局なにかロジックを変更するのはCPU。<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>ですべてのプログラムを動かすことはできません。<br /> そして、CPUから<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>へのデータのアップロード、ダウンロードは、CG周りをやる方はよく悩んでいると思いますが、かなり…遅いのです。</p> <p>私はUnity上でTensorFlow Liteを使っていて、Unity上ではほとんどの画像を<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>上で扱っています。しかし、TensorFlow Liteの<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>にはCPUメモリ上でデータをやり取りするするものしか用意されていませんでした。</p> <p>その問題はこちらのissueでやり取りしています。↓ <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Ftf-lite-unity-sample%2Fissues%2F23" title="Support passing GPU buffer directly to GLDelegate · Issue #23 · asus4/tf-lite-unity-sample" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/tf-lite-unity-sample/issues/23">github.com</a></cite></p> <p>例えば、セマンティックセグメンテーションのタスクをUnityのTextureで実行して、Unity上で結果を表示しようとすると以下のような経路を辿らなくてはいけません。</p> <p><code>Unity GPU → Unity CPU → TFL CPU → TFL GPU Delegate → TFL CPU → Unity CPU → Unity GPU</code></p> <p>Unityで扱っている<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>上のデータをTensorFlowのCPU側の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を抜かして、TensorFlowの<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a>へ直接送ることができればかなり高速化できるはずです。<br /> 実際に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>の公開しているMediaPipeというライブラリではそのような方法で高速化をしているようです。(逆に<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>上でコードを探した限り、MediaPipeでしかやられてないんじゃないかとも思ってます。)</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmediapipe.dev%2F" title="MediaPipe" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://mediapipe.dev/">mediapipe.dev</a></cite></p> <p>色々とやっていた試行錯誤は↓こちら。Zennのスクラップへまとめています。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fzenn.dev%2Fasus4%2Fscraps%2F7da80e05623d2b" title="TensorFlow LiteのGPU Buffer BindingをUnityで対応したい" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://zenn.dev/asus4/scraps/7da80e05623d2b">zenn.dev</a></cite></p> <p>そして、最終的には以下のように、Unityの<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>とTensorFlowを直接つなげることができました。</p> <p><code>Unity GPU → TFL GPU Delegate → Unity GPU</code></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>で使われているMetal <a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a> ではUnityのComputeBufferはMTLBufferへ繋がります。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>の環境はちょっと複雑で、<br /> GL <a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a> v2という2種類が用意されています。</p> <p>GL <a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a>はOpenGLES上で計算するもの。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a>は、内部的には、<a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenCL">OpenCL</a>, OpenGLESの2パターンが<a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenCL">OpenCL</a>に対応してない<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>の場合に自動的にOpenGLES側へフォールバックするようです。この辺ちゃんとドキュメントにかかれてなくて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>読んでやっと理解しました。また<a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenCL">OpenCL</a>で動いている場合でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenGL">OpenGL</a>の Shader Storage Buffer Object (SSBO)へとつなげることができるようです。</p> <p>世界中でどれだけ需要があるかわかりませんが、8割方の案件がARで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC">機械学習</a>をつかってる私が使うためにTensorFlow本体の方へも反映すべく、PRやり取り中です。マージされるといいな〜。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Ftensorflow%2Ftensorflow%2Fpull%2F49313" title="[TFLite] Support GPU buffer binding with C API by asus4 · Pull Request #49313 · tensorflow/tensorflow" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/tensorflow/tensorflow/pull/49313">github.com</a></cite></p> asus4 ステイホーム中に使ってみたサービス in ベルリン hatenablog://entry/26006613719354720 2021-05-23T06:05:42+09:00 2021-05-23T06:05:42+09:00 2020年4月に初めてのロックダウンを開始したベルリン。そして2020年12月から続いていた長いロックダウン。今週、半年ぶりにようやくレストランで食事ができるようになりました。一年もすると様々なサービスの流行りが変わってきていて、面白いことになってきているので記録に残しときます。 Flink: 宅配専用スーパー 唯一自由に買い物できる場所のスーパーも今ではFFP2マスクというごついマスク必須。 その中で宅配専用スーパーFlinkが躍進しています。Uber Eats形式で自転車で届けてくれる。 www.goflink.com 試しに注文したところほんとに10分で届きました。DHL(ドイツの日本郵… <p>2020年4月に初めてのロックダウンを開始したベルリン。そして2020年12月から続いていた長いロックダウン。今週、半年ぶりにようやくレストランで食事ができるようになりました。一年もすると様々なサービスの流行りが変わってきていて、面白いことになってきているので記録に残しときます。</p> <h3>Flink: 宅配専用スーパー</h3> <p>唯一自由に買い物できる場所のスーパーも今ではFFP2マスクというごついマスク必須。 その中で宅配専用スーパーFlinkが躍進しています。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Uber">Uber</a> Eats形式で自転車で届けてくれる。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.goflink.com%2F" title="Flink | Groceries delivered in 10 minutes" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://www.goflink.com/">www.goflink.com</a></cite></p> <p>試しに注文したところほんとに10分で届きました。DHL(ドイツの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FC%CB%DC%CD%B9%C0%AF">日本郵政</a>的存在)へ荷物の集荷時間を指定しても、当日来ないどころか翌日に「今から行くで〜」と電話が来るようなドイツでは、10分で商品が届くって、奇跡的な凄さです。近所の潰れた店舗をFlinkに変える。客を入れないため、レジも通路もいらない。敷地面積が少なくて良い。冷蔵庫と自転車のみ。という開業コストのやすさも強みなのでは無いかと想像しています。</p> <p>流行ったサービスはライバルもすぐ登場するようで、Gorillasという同じサービスもあります。どっちもほぼ同じ感じです。プッシュ通知で、「ゴリラが今向かってるよ〜(英語)」って行ってくるので少しほっこりしました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgorillas.io%2Fen" title="Home" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://gorillas.io/en">gorillas.io</a></cite></p> <hr /> <h3>Flaschenpost: 飲み物専用宅配サービス</h3> <p>飲料専用の宅配サービス。ドイツではペットボトルやビンはPfandという<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%DD%A5%B8%A5%C3%A5%C8">デポジット</a>料金が追加されていて、一個あたり10~30円くらい追加されています。それをスーパーに専用の回収機があるので入れると、スーパーの会計で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%DD%A5%B8%A5%C3%A5%C8">デポジット</a>分引かれるという仕組み。</p> <p>スーパーで炭酸を買って大量に飲み終わったペットボトルをスーパーで返却していたのですが、ステイホームで一日中家で仕事をするようになり、消費量が増えて、重いペットボトルを買うのも大量に溜まったペットボトルをスーパーの回収ボックスにいれるのも億劫になってきました。</p> <p>いっそのこと飲み物宅配サービスも始めてみようと思います。空の容器を回収して<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%DD%A5%B8%A5%C3%A5%C8">デポジット</a>の手間がなくなるのがでかい…。</p> <p><a href="https://www.flaschenpost.de/">https://www.flaschenpost.de/</a></p> <p>飲料宅配サービスは他にもいくつかあるが軒並みダサそうでう、もう少し良いのでないかなーと探し中です。</p> <p><a href="https://www.durstexpress.de/">https://www.durstexpress.de/</a> <a href="https://www.hoffmannbringts.de/">https://www.hoffmannbringts.de/</a> <a href="https://addilo.de/">https://addilo.de/</a> <a href="https://www.flaschengeister.berlin/">https://www.flaschengeister.berlin/</a></p> <hr /> <h3>Wolt: レストラン宅配サービス</h3> <p>レストランはもう5ヶ月間、宅配もしくはテイクアウトのみでした。<br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Uber">Uber</a> Eat はBerlinでは全然流行ってない気がしていて、別のレストラン宅配サービスを使っています。</p> <p>東京<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%D4%BF%B4%C9%F4">都心部</a>でも展開始まってるみたいですね。ベルリン中心部Mitteあたりだけでしたが最近私達のエリアも対応エリアに。アプリもロゴもベルリン最大手Lieferandよりおしゃれで流行るのもわかる。サイトをみてわかるように全部のメニューに美しい写真がついているのが強い。専用スタッフが撮影しているのか、撮影レギュレーションだけでこれだけ安定した写真が取れるのか気になります。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwolt.com%2Fen%2F" title="Wolt – Wolt" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://wolt.com/en/">wolt.com</a></cite></p> <ul> <li>Lieferand: 最大手。対応エリア広い。</li> <li>Deliverooはたまにみる。</li> </ul> <p>基本、チップ文化なので、対面でチップを上げてたりしたけど、オンラインでチップをあげれたり。<br /> No-contact deliveryというドアを開けないで配達するオプションも追加されてたり、とアプリの新機能が時代を表していますね。</p> <hr /> <h3>Hello Fresh: レシピ食材<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%D6%A5%B9%A5%AF%A5%EA%A5%D7%A5%B7%A5%E7%A5%F3">サブスクリプション</a></h3> <p>レストランのデリバリーも飽きて、スーパーで買える食材でつくると献立もマンネリ化しがち。<br /> レシピ&食材<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%D6%A5%B9%A5%AF%A5%EA%A5%D7%A5%B7%A5%E7%A5%F3">サブスクリプション</a>もしばらくやってみていました。</p> <p><a href="https://www.hellofresh.de/">https://www.hellofresh.de/</a></p> <p>毎回、食材セットとレシピ(ドイツ語)が届きます。</p> <p>日本人の私 or 妻が料理を作ると大体 醤油、みりん、砂糖、な味付けになってしまうけど。 <br /> 毎回届くレシピはドイツ人好みなアレンジ。自分では絶対作らないタイプのレシピ達で新鮮。これをやって、料理のアイディアが少し広がりました。</p> <p>ドイツの家にはほぼオーブンが設置されてる意味がわかりました。オーブン使うレシピが多いです。</p> <hr /> <p>結構色々試してきたのですが、今週からレストランが屋外席のみ、営業可能になりました。ビールを飲んでる人たちをみて、</p> <p>今は。やはりレストランで飲むビール最高だな、はよ行きたいという気持ちです。</p> asus4 2021年の目標 hatenablog://entry/26006613682706765 2021-01-25T08:56:11+09:00 2021-01-25T08:56:11+09:00 2021年も、もう12分の1が過ぎようとしているあたりで、あまりの早さに焦りつつ、一年の目標を公開して見ます。 「ブログで沢山アウトプットする!」「英語を頑張る!」的な曖昧なやつじゃなく、株式会社の決算レポートみたいに2020振り返り分析+目標設定の過程を載せます。 時間割2021 今の私の一番の問題は使える時間が少ないこと。 私の平日の使える時間割は以下のような感じ。 おそらく2021年も大きくは変えられない。独身のときは毎日12時間くらいずっと何か作って気がするけど、こんなに一日の時間がなくなるなんて思ってもなかった。まあ子供がかまってくれるのも今だけと思い、使える時間をいかに最適化するか… <p>2021年も、もう12分の1が過ぎようとしているあたりで、あまりの早さに焦りつつ、一年の目標を公開して見ます。</p> <p>「ブログで沢山アウトプットする!」「英語を頑張る!」的な曖昧なやつじゃなく、株式会社の決算レポートみたいに2020振り返り分析+目標設定の過程を載せます。</p> <h2>時間割2021</h2> <p>今の私の一番の問題は使える時間が少ないこと。 <br /> 私の平日の使える時間割は以下のような感じ。</p> <iframe width="534" height="387" seamless frameborder="0" scrolling="no" src="https://docs.google.com/spreadsheets/d/e/2PACX-1vSebDBx99KQT_5k_pdHzdkfUldiAN-egMbNlTKw10aOlTh6DCt2IdsnrtcClpiyTlYhBYE-Lurnk0o6/pubchart?oid=1093838605&amp;format=interactive"></iframe> <p>おそらく2021年も大きくは変えられない。独身のときは毎日12時間くらいずっと何か作って気がするけど、こんなに一日の時間がなくなるなんて思ってもなかった。まあ子供がかまってくれるのも今だけと思い、使える時間をいかに最適化するかが一番の課題。<br /> (ちなみに今は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%F3%A5%C7%A5%DF%A5%C3%A5%AF">パンデミック</a>によるロックダウンにより保育園が休園。妻と交代で昼間の時間にも子守が必要になるため、一日に働ける時間は半分以下かも…。)<br /> 土日はなるべく仕事はせずに、子供と遊んだり、溜まった洗濯物を回したり、平日のための作り置きを作ったり。普通に忙しい。</p> <p>そのため、2021年も時間を圧縮できるものには積極的に投資していく。</p> <h3>現在導入済みで効果の高い時間削減</h3> <ul> <li>会計周りを税理士に全部おねがいする(日本では自分でやってたがドイツ語の確定申告は無理をはじめから諦め。)英語でやってくれるし、全部オンラインになっている。</li> <li>ドイツ語の手続きをヘルプしてくれる人。ドイツはひどいお役所仕事が有名で。メールで済むことが手紙で送ってきたりする。移住当初は自分たちでやっていたが、一度お願いすると経験値が違うからか、圧倒的速さ。</li> <li>2週間に一度水回り掃除:最高。部屋がきれいだと精神が安定する。</li> <li>食洗機:最高。</li> </ul> <h3>今度考える時間削減</h3> <ul> <li>保育園までが自転車片道15分、しかしなんだかんだで45分くらいかかる…。どうして…。子供が大きくなったらさっさと済むようになるのか…。</li> <li>オフィスに行っている時間も微妙に無駄だけど、 圧倒的に集中できる。また隣の席の人と今度仕事しよう。ってなったりしてたので、悩みどころ。Home Officeが日常的になるようなら、もう少し都心から離れて広い部屋を借りるのもありかもしれない。</li> <li>夕食から寝かしつけまでは、家族の時間として確保するとして、朝はもっと短縮できる気がする。大したことしてないし。</li> </ul> <h2>お仕事</h2> <h3>収入比率</h3> <p>好きなことだけやってたいけど、一応お金を稼ぐのも大事。</p> <p>2020年は日本 65%:それ以外 35%<br /> 2021年は日本 35%:それ以外 65%</p> <p>くらいまで逆転させたい。今メインでやってるUKのクライアントはいつでも仕事あるから暇あったら言って!と言ってくれているのでひとまず安心。去年はリソース不足により2件くらいチャンスを蹴った、今年は追加で海外クライアント(重要:且つ面白い仕事)を2件くらい増やしたい。</p> <h3>内容</h3> <p>前回の記事ではもう少しハードウェア寄りの仕事を増やしたいと言っていたが、既にArs <a class="keyword" href="http://d.hatena.ne.jp/keyword/Electronica">Electronica</a>はオンライン開催が決まったり、あらゆるイベントがオンライン化していく中で無理に以降する必要は無いかもしれない。</p> <p>現在もリソースの20%はLyric speaker というスピーカーをやっていて、私の担当範囲はSoftware部分だけれども、一応スピーカーというハードウェアを売っているのでまあよしとするか。とはいえ、日本にからドイツに来るときに3D printerなど殆どの機材を人に譲ってきたので、少しずつハードウェア増やすかな…。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>には税金対策という<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C2%E7%B5%C1">大義</a>名分がある。</p> <p>やっていたプロジェクトの個数でみたジャンルは以下。いい感じにごっちゃになっている↓リサーチ、プロトタイプな仕事は個人的にも高いモチベーションを保てるので、引き続きやりたい。</p> <iframe width="545" height="337" seamless frameborder="0" scrolling="no" src="https://docs.google.com/spreadsheets/d/e/2PACX-1vSebDBx99KQT_5k_pdHzdkfUldiAN-egMbNlTKw10aOlTh6DCt2IdsnrtcClpiyTlYhBYE-Lurnk0o6/pubchart?oid=388188156&amp;format=interactive"></iframe> <p>しかし使ったツールはほとんどがUnity↓。</p> <iframe width="545" height="337" seamless frameborder="0" scrolling="no" src="https://docs.google.com/spreadsheets/d/e/2PACX-1vSebDBx99KQT_5k_pdHzdkfUldiAN-egMbNlTKw10aOlTh6DCt2IdsnrtcClpiyTlYhBYE-Lurnk0o6/pubchart?oid=1103195623&amp;format=interactive"></iframe> <p>これは個人的には依存し過ぎに思う。Unityが2021年になくなることは考えにくいが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Flash">Flash</a>は2020年に完全終了した。どんどん新しい技術が生まれてる今、Unityの割合を60%程度まで下げ、他の新しいスキルへ投資するのがバランスが良さそう。Webが無いのは意図的なので問題無し。Touch Designerや<a class="keyword" href="http://d.hatena.ne.jp/keyword/UE4">UE4</a>が候補だが、チャンスが巡ってきたらで、無理にスキルが低い仕事を積極的に取りに行くことはしない。空き時間に勉強も進めよう。</p> <p>時間ベースで見るとこんな感じ↓</p> <iframe width="600" height="371" seamless frameborder="0" scrolling="no" src="https://docs.google.com/spreadsheets/d/e/2PACX-1vSebDBx99KQT_5k_pdHzdkfUldiAN-egMbNlTKw10aOlTh6DCt2IdsnrtcClpiyTlYhBYE-Lurnk0o6/pubchart?oid=1978246581&amp;format=image"></iframe> <p>一年で1420時間働いた。<br /> 詳しくはかけないが、お仕事の中のバランスはML/CVが多めかも。<br /> 中々、満足の行くバランスだった。</p> <p>2021年も全体の1/4程度を自主作品や<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>などに時間を割けるようにしたい。もちろん仕事だけの月もあるが、一ヶ月自分のことだけなどの時間も作れるように調整する。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>の15%ルールより多いぜ!</p> <p>ちなみに時間の計測はToggl Trackでしている。会社新時代はきちんと働いた時間を打刻していたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>になっても結構ちゃんとやっている方。一人だとついつい偏ってしまうので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C4%EA%CE%CC">定量</a>的な視点を持てるのが気に入っている。(また、誰に怒られるわけでも無いが此のプロジェクト赤字だったなーとかもわかる。)</p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%C0%B8%EC%B3%D8">言語学</a>習</h2> <p>今、週4でUKの会社と仕事しているのは自分にとっては最高の英語学習。毎日オンライン英会話を自分の使うジャンルだけに絞ってやってるような感じなので、これは続けていきたい。</p> <p>反面、ドイツ語は保育園でしか使っていないで伸びにくい。文化に深く触れ、ベルリンの会社と仕事したりするにはやはりドイツ語は喋れるに越したことはない。Tandemで探したりしたけどもいまいちチャットで話すのは盛り上がらない。週2くらいで語学学校に行くのが最善な気がするがこれ以上一日の使える時間を割り当てられるかどうか、いや一人暮らしなら間違いなくやっていたんだけどなぁ。まじで時間が足りない。ロックダウンが終わって落ち着いたら再考してみる。</p> <h2>その他</h2> <p>3年のビザを取ったはずが、今年はもうドイツ来て3年!?ビザ更新の年。早すぎる…。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%F3%A5%C7%A5%DF%A5%C3%A5%AF">パンデミック</a>の厳しい状況は続きそうだが、一度目のビザの更新はする予定。状況が変わり今後日本に帰る可能性も全然あるけど。ビザ更新というシステムは、めんどくさいことも多々あれど、自分(と家族)にとって、学生時代には中学、高校、大学のような入学試験のような区切り感があり悪くはない。次回の更新では息子も小学校へ入っているはず。毎回のビザ更新で状況が変わってんだろな。</p> <p>営業・広報活動:前回のブログでも書いたように基本的には<a class="keyword" href="http://d.hatena.ne.jp/keyword/SNS">SNS</a>での英語での発信をメインに。引き続き<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Instagram">Instagram</a>に色々作ったプロトタイプなどを公開する。普通の戦略ではLinkedinを第一にするべきだが、あまりLinkedinから面白い仕事が来るイメージが無い。現状あまりにほっといているので実験的にLinkedinへもポストしてみようかな。</p> <h2>まとめ</h2> <p>目標は2020年はコロナのロックダウンですべての予定が狂うなど、結局外的要因によって達成できなかったりするので、4半期毎に見直すべし。</p> asus4 ベルリンに来て2年 雑記 hatenablog://entry/26006613645477126 2020-11-26T09:03:15+09:00 2020-11-27T20:28:13+09:00 ベルリンに引っ越して来たのが2018年9月末。ベルリンに来て1年の記事は書きそびれてしまったのですが、2年のメモを残しておきます。 ↓2年前ベルリンに来たときの記事です。 asus4.hatenablog.com ↓ベルリンの子育て事情や、生活のふと気づいたことなどは、妻の連載やブログに乗っているので、この記事では、それ以外のことについて雑多に書きます。 dual.nikkei.com 海外のスタートアップで働く人の記事はぼちぼちありますが、フリーランスの話はやや少ない気もするので、そういった話を書きます。 生活編 英語 未だ片言だけれども2年前よりはうまくなったと思います…。うまくなったとい… <p>ベルリンに引っ越して来たのが2018年9月末。ベルリンに来て1年の記事は書きそびれてしまったのですが、2年のメモを残しておきます。</p> <p>↓2年前ベルリンに来たときの記事です。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fasus4.hatenablog.com%2Fentry%2F2018%2F11%2F07%2F%25E3%2583%2599%25E3%2583%25AB%25E3%2583%25AA%25E3%2583%25B3%25E3%2581%25AB%25E5%25BC%2595%25E3%2581%25A3%25E8%25B6%258A%25E3%2581%2597%25E3%2581%25BE%25E3%2581%2597%25E3%2581%259F%25E3%2580%2582" title="ベルリンに引っ越しました。 - Asus4 onD" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://asus4.hatenablog.com/entry/2018/11/07/%E3%83%99%E3%83%AB%E3%83%AA%E3%83%B3%E3%81%AB%E5%BC%95%E3%81%A3%E8%B6%8A%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82">asus4.hatenablog.com</a></cite></p> <p>↓ベルリンの子育て事情や、生活のふと気づいたことなどは、妻の連載やブログに乗っているので、この記事では、それ以外のことについて雑多に書きます。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdual.nikkei.com%2Fatcl%2Fcolumn%2F17%2F102600133%2F" title="日本人家族、ドイツに住む" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://dual.nikkei.com/atcl/column/17/102600133/">dual.nikkei.com</a></cite></p> <p>海外のスタートアップで働く人の記事はぼちぼちありますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>の話はやや少ない気もするので、そういった話を書きます。</p> <h1>生活編</h1> <h2>英語</h2> <p>未だ片言だけれども2年前よりはうまくなったと思います…。うまくなったというよりも、数をこなして度胸や対応力が上がったという方が近いかもしれません。毎週月曜日の"How was your weekend?"に対する返しだったり、英語の<a class="keyword" href="http://d.hatena.ne.jp/keyword/NDA">NDA</a>契約書を全部DeepLにかけて翻訳頑張ったりだったり、お昼ごはんにいってそれぞれの出身国の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B2%BD%CC%E4%C2%EA">少子化問題</a>と年金制度の話をしたり、日々あー死にたいと、恥ずかしい思いをしながらゆっくり上達していってる感じです。</p> <h2>ドイツ語</h2> <p>スーパーや、レストランでの決まりきった注文などはできるようになってきたものの、日常会話は全然だめです。オフィスでは基本英語なのでそれで困ることは無いのですが、一番困るのは息子(3歳8ヶ月)の保育園。今ドイツ語の保育園に通ってるのでもちろん先生とのコミュニケーションは全てドイツ語。先生も簡単なドイツ語で話してくれるもののコミュニケーション不足なのは間違いありません。語学レベル的には「オムツナイ?、ワタシアシタオムツ、モッテクル Danke Tschüss (挨拶だけは流暢にできる)」みたいな感覚です。今後長く住むとするば、3年後には小学校も始まるので何だかんだドイツ語の上達は必須です。ビジネスで住むとの家族で移住することに違いを切に感じます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C2%E8%C6%F3%B3%B0%B9%F1%B8%EC">第二外国語</a>を学ぶこと自体は刺激が楽しくて良いのですが、子育て世代の少ない自由時間で中々ドイツ語より仕事、となったりしてしまっているのが現状です。</p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%F3%A5%C7%A5%DF%A5%C3%A5%AF">パンデミック</a></h2> <p>やはりこの話も忘れないように残しておかねばと思います。</p> <p>ヨーロッパは世界でも有数の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%F3%A5%C7%A5%DF%A5%C3%A5%AF">パンデミック</a>地になり、明るい雰囲気のベルリンの街も重々しい雰囲気になりました。最近は長期化して人々も慣れてきたのか笑顔が戻ってきていますが。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%F3%A5%C7%A5%DF%A5%C3%A5%AF">パンデミック</a>初期はアジア人差別も経験しました。子供とベビーカーで電車に乗っていたときに"bist du krank?"(あなた病気なの?)と言ってくるおばあさんがいたり、アジア人の私達をみるとわざとらしく咳き込むジェスチャをする小学生がいたり。普段はジェントルマンでも、一度マジョリティvsマイノリティの構図ができると容易に差別は生まれてしまうことを学びました。春過ぎ頃から中国の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%F3%A5%C7%A5%DF%A5%C3%A5%AF">パンデミック</a>が落ち着き、逆にヨーロッパが<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%F3%A5%C7%A5%DF%A5%C3%A5%AF">パンデミック</a>なると、マイノリティが居なくなったのかそのような行為はぱったりとなくなりました。</p> <p>春頃は保育園も休園になり、仕事も結構無くなったのであまり何もしていませんでした。</p> <h2>物価とクオリティ</h2> <p>2年前のブログでは物価は東京と同じくらいと行ったものの実際過ごしてみると少し違いました。確かに物価は同じくらい。最初の頃は、家賃も東京23区より少し安く、スーパーでの野菜(あとビール)の安さに驚いていましたが。色々な物を買ったり、色々なレストランに行ってみると、ベルリンで東京と同じクオリティのものが欲しければ、もう少し払わなくてはいけないことがわかってきました。統計 n=2(私と妻)によれば以下の様な感じです。</p> <p><figure class="figure-image figure-image-fotolife" title="雑な図"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20201121/20201121014934.png" alt="f:id:asus4:20201121014934p:plain" title="" class="hatena-fotolife" itemprop="image"></span><figcaption>雑な図</figcaption></figure></p> <p>同じくらいの価格帯の商品は手に入るものの、東京と同じ様な品質のものは結構高いということです。肉、魚も、かなり安いものはありつつ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%F9%A4%CE%A5%CF%A5%CA%A5%DE%A5%B5">肉のハナマサ</a>のように安くて美味い、なものは中々無く安いがちょっと臭みが強かったりしています。 むしろ最近では、東京の100円ショップで買えるもののクオリティや、500円ランチ。1000円出せば結構美味しい定食にありつける環境がおかしいくらい恵まれてるのだなと思うようになっています。</p> <h1>仕事編</h1> <h2>仕事を探す話</h2> <p>スタートアップが多く来ているベルリン。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE%A1%BC">プログラマー</a>としての職は結構あるようです。私は自分に制約を課して、ビザはアーティスト・デザイナー職として登録しました。 そのためHTMLコーディングや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%D7%A5%EA%C0%A9%BA%EE">アプリ制作</a>の仕事は受けれません。クリエイティブテク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a>ジスト・クリエイティブコーダーとしての<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>の仕事を探しました(まあそこの垣根は曖昧だと思っています)。</p> <p>ドイツ語は喋れない、英語も上手ではない日本人がヨーロッパで仕事を得るのはまあ厳しい。いくつか自分が一緒に仕事してみたいと思っていたベルリン拠点のクリエイティブ系のプロダクションに営業して、そのうち何社かいい反応があり話をする機会がありました。どの会社も反応はなかなか良い(英語特有のオーバーリアクションなのかもしれませんが)。ところが人日単価の話になると、ベルリンの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>だとちょっと高いね…という反応でした。東京にいたときとさほど変わらぬ単価だったのですが。ベルリンで働く先輩日本人クリエイティブコーダーと自分の人日単価の話になったときも、私の設定した値段はベルリンのプロダクションにとっては少し高めのようでした(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE%A1%BC">プログラマー</a>としてはベルリンでも全然安めだと思います)。ヨーロッパ主要都市にしては物価が安い街なので、給料も安いのです。そして実績の無い<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>にはそこまで払えないという印象でした。</p> <p>一人暮らしなら、ここで単価をやや下げて、仕事の実績を作ることを優先できますが、家族3人暮らしで妻も<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>なりたてということを考えると、単価交渉はあまり妥協せず行きたいです。日本円ですが東京<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>時代に頑張って貯めた貯金は合ったので、踏ん張ってもう少し探すことにしました。また単価の話は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%A6%A5%A7%A1%BC%A5%C7%A5%F3">スウェーデン</a>、サンフランシスコの人と話したときは、安すぎない??という話だったのので、結局は物価によって変わる相対的なもののようです。</p> <p>営業的な気持ちでベルリンのスタートアップが集まる情報交換イベントのようなものにも何度か顔を出しましたが、こぞって成果は皆無。…でも振り返れば、日本でもそういったスタートアップミートアップ!のようなキラキラしたイベントでなにか仕事に繋がったことはありませんでした。まああまり営業向きではない性格もあると思います。 日本でも基本的には<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>の知り合い経由でしか仕事をしたことはありませんでした。すこで少し作戦を切り替えました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>/Intagramを営業ツールに振り切って英語に切り替えて、(日本語でツイートしたい欲望を抑えて)マニアックだけど刺さる人には刺さりそうな投稿をしたりしてみました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SNS">SNS</a>に投稿する内容はすごいシェーダーがかける、ARアプリが作れるとかだと、世界で100人以上ライバルがいる気がするので、とことんライバルが居ない領域に絞って、2020年はUnityでのオンデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC">機械学習</a>くらいまで内容を絞って投稿していました。それがうまく行ったのか最近ではLinkdin, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>経由で週1くらいで何かしらの相談が舞い込むようになって来ました。</p> <p>今やっているプロジェクトは<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>スポンサーをしてくれた人に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>経由でお礼を言ってみたら、彼がロンドンの映像プロダクション所属で私の作ったライブラリを使ってくれているようで、「一緒にやる?」という話になったところからでした。 コロナ下でロンドンのスタジオも全員work from homeになり、ロンドン→ベルリン間の時差も1時間でほぼ不自由なく働けるのも大きそうです。</p> <h2>日本とのリモートワークの話</h2> <p>ベルリンでのんびりと仕事を探しつつも、完全に無収入になるのは怖いので、<a href="https://whatever.co/">Whatever(旧dot by dot)</a>, <a href="https://lyric-speaker.com/">COTODAMA</a>, <a href="https://si-ro.jp/">siro</a>, <a href="https://meson.tokyo/">MESON</a> など素敵な日本のいくつかの会社ともリモートワークをさせてもらっていました。どの企業もデジタルに強く、オンラインのみでの仕事でも柔軟に対応してもらえました。時差があるので移住当初は心配もありましたが、日本の夕方、ドイツの朝が時差がかぶる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%A2%A5%BF%A5%A4%A5%E0">コアタイム</a>。その間に連絡を取り、午後は集中して制作に取り掛かる、という流れができあがってからは割と柔軟に対応してもらえた気もします。</p> <h2>その他の細かい話</h2> <ul> <li>ドイツがホワイトというのは本当でした。今まで3つの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%EF%A1%BC%A5%AD%A5%F3%A5%B0%A5%B9%A5%DA%A1%BC%A5%B9">コワーキングスペース</a>にいましたが、18時台にはオフィスはまばら。ニューヨークと仕事していて、夕方から来る。みたいな人もいましたが。ただ全部がホワイトというわけではなく、広告プロダクションなどの職種は結構忙しいこともありそうです。私の観測範囲だと、来週クライアントチェックがあるから土日も作業する、22時にプルリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ト来たりなどありました。</li> </ul> <h2>2年 振り返り まとめ</h2> <p>👍 家族みんな健康で生きてる!<br /> 👍 仕事が海外メインで回り始めたかも<br /> 👎 英語はまだまだ<br /> 👎 ドイツ語がんばる<br /> 👎 リモートワーク&コロナもあってプロジェクトの内容がソフトウェア比率100%になっているので、もう少しハードウェアやりたい欲が</p> <p>という感じです。もっと色々あるのですが、細かい話は日本に帰ったときに飲みに行って話しましょう。</p> asus4 MediaPipeのpre/post-processメモ hatenablog://entry/26006613617086480 2020-09-04T22:55:00+09:00 2020-09-04T23:12:18+09:00 GoogleのMediaPipe良いですね。コア部分はTensorFlowLiteでできていて、Pre/Postプロセス部分をUnityで書き直すことで移植できました。まだ勉強中ですがメモ。 github.com ↓ こんな感じでUnity上で動作してます。 Face Tracking and Blaze Face FaceMesh from RGB webcam runs around 50fps on my Mac. #madewithunity #tensorflowlite pic.twitter.com/qZgEC29MmD— Koki Ibukuro (@asus4) Septem… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>のMediaPipe良いですね。コア部分はTensorFlowLiteでできていて、Pre/Postプロセス部分をUnityで書き直すことで移植できました。まだ勉強中ですがメモ。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fgoogle%2Fmediapipe" title="google/mediapipe" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/google/mediapipe">github.com</a></cite></p> <p>↓ こんな感じでUnity上で動作してます。</p> <p><strong>Face Tracking and Blaze Face</strong><br /> <blockquote data-conversation="none" class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">FaceMesh from RGB <a class="keyword" href="http://d.hatena.ne.jp/keyword/webcam">webcam</a> runs around 50fps on my <a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>. <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://twitter.com/hashtag/tensorflowlite?src=hash&amp;ref_src=twsrc%5Etfw">#tensorflowlite</a> <a href="https://t.co/qZgEC29MmD">pic.twitter.com/qZgEC29MmD</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1301409065919283200?ref_src=twsrc%5Etfw">September 3, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p><strong>Blaze Pose</strong><br /> <blockquote data-conversation="none" class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Fixed issues related with <a class="keyword" href="http://d.hatena.ne.jp/keyword/webcam">webcam</a> rotation. Applied a velocity filter from mediapipe. <a href="https://t.co/VQ03wrpQuI">pic.twitter.com/VQ03wrpQuI</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1298902532928962560?ref_src=twsrc%5Etfw">2020年8月27日</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p><strong>Hand Tracking</strong><br /> <blockquote data-conversation="none" class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Fixed bugs and improved accuracy. <a href="https://t.co/D513tLFVpA">pic.twitter.com/D513tLFVpA</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1298250014859251715?ref_src=twsrc%5Etfw">2020年8月25日</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <h2>全体</h2> <p>MediaPipeのBlaze Face, Balze Pose, Hand Trackingは細かい違いはあれど、かなり似ていて。大きく分けて2つTensorFlow Liteのモデルが動いています。</p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a> Detection: オブジェクトの矩形エリアを推定します。</li> <li>Landmark Detection: オブジェクトの画像からランドマーク(骨格など)を推定します。</li> </ol> <p>MediaPipeはWebで処理を見ることができます。以下はBlaze Faceの例です。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Max/MSP">Max/MSP</a>のノードのような感じで全体を俯瞰できるので、まずここから概要を掴みました。 <figure class="figure-image figure-image-fotolife" title="MediaPipe Web Capture"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20200904/20200904221738.png" alt="f:id:asus4:20200904221738p:plain" title="f:id:asus4:20200904221738p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption>MediaPipe Web Capture</figcaption></figure> <a href="https://viz.mediapipe.dev/demo/face_detection">https://viz.mediapipe.dev/demo/face_detection</a></p> <p>その他のモデルも<a href="https://google.github.io/mediapipe/#mediapipe-on-the-web">こちらから</a>見れます。</p> <p>それぞれのTFLiteについて見ていきます。</p> <h2>1. <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a> Detection</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a>(Single Shot Detetor)でオブジェクトの矩形エリアを返します。</p> <h3>Pre Process</h3> <p>とくに難しいことはなく、入力画像のサイズにトリムしてfloatの配列に変換するだけです。</p> <p>がPC上の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Web%A5%AB%A5%E1%A5%E9">Webカメラ</a>でやるときは簡単ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A1%BC%A5%C8%A5%D5%A5%A9%A5%F3">スマートフォン</a>では<a href="https://docs.unity3d.com/ScriptReference/WebCamTexture.html">WebcamTexture</a>は回転とフリップしてるんですよね…。とても面倒くさいです。私の場合は入力画像と<a class="keyword" href="http://d.hatena.ne.jp/keyword/Web%A5%AB%A5%E1%A5%E9">Webカメラ</a>の回転の正規化を一度にするシェーダーを用意しました。</p> <h3>Post Process</h3> <p>とりあえず重なる部分も含めて多めに返して、CPU側でNon Max Suppressionという<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>を使って精度を上げています。<a href="https://www.coursera.org/lecture/convolutional-neural-networks/non-max-suppression-dvrjH">Courseraの動画</a>で概要を理解しました。最近他のライブラリにも追加されてるの見ました。</p> <p>通常の<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a>モデルは推定された矩形エリアを返すだけですが。これはキーポイントと呼ばれる特徴点も返します。これは次のプロセスで使います。</p> <h2>2. Landmark Detection</h2> <h3>Pre Process</h3> <p>カメラ画像から対象のオブジェクト部分をトリムします。トリムするときに、キーポイントの情報をもとに回転を直します。これは頭良いなーと。回転を直してからLandmarkを検出するモデルに画像を入力することで精度が上がるとのこと。当初バグで、間違った回転をした画像をLandmark Detectionのモデルに入力したのですが、精度が全然違いました。</p> <p><iframe width="459" height="344" src="https://www.youtube.com/embed/XnPF-8V-q14?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><cite class="hatena-citation"><a href="https://youtu.be/XnPF-8V-q14">youtu.be</a></cite></p> <p>緑色が矩形エリアとキーポイント。赤が回転とクロップする範囲。右上のちっこい手が実際のLandmark Detectionへの入力画像です。手が横向きになっても入力画像は上向きなのがわかると思います。</p> <h3>Post Process</h3> <p>FaceMeshとHand Landmarkは出力されたランドマークをそのまま表示しています。BlazePoseはすこし値が暴れるのかRelative Velocity Filterというものを使っています。移動が少ないときは強めのローパスフィルタ。移動が多いときはフィルタを弱めるというもののようです。</p> <p>返されるランドマークは、入力画像に対しての値です。それを、2段階の画像入力で使ったMatrix4x4の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%D5%B9%D4%CE%F3">逆行列</a>をかけて、Unityの座標に戻しています。この変換も結構ややこしかったです。</p> <h2>まとめ</h2> <p>MediaPipeの処理はかなり似ていて、一度作るとHandTracking, BlazePose, BlazeFaceも大体同じプログラムが適用できました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC">機械学習</a>の勉強のために初めてTensorFlow LiteのUnity移植ですが、共通する処理が結構出てきて。自分のためになっている気がします。</p> <h2>参考</h2> <p>TensorFlow Lite界隈は日本人が多く活躍していますね。<a href="https://twitter.com/PINTO03091">@PINTO03091</a>さん、<a href="https://twitter.com/terryky1220">@terryky</a>さんの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>をよく参考にさせていただいております。</p> asus4 NeumorphismなUIをUnity uGUI上につくる hatenablog://entry/26006613610842266 2020-08-11T22:32:42+09:00 2020-08-11T22:32:42+09:00 DrribleやPinterestでよく見るデザイントレンドになっているNeumorphism。 とてもおしゃれに見えますが、みんなMaterial Designに飽きてきて、目新しさ目当てで流行ってるだけちゃうのという意見もちらほら目にします。私も懐疑派でした。 一方でこんな意見も。 Most people missed this, but @apple's design overhaul is all about preparing for Augmented Reality.1) Icons now look 3D & possess shadows2) Siri is an outri… <p>Drribleや<a class="keyword" href="http://d.hatena.ne.jp/keyword/Pinterest">Pinterest</a>でよく見るデザイントレンドになっているNeumorphism。 とてもおしゃれに見えますが、みんな<a class="keyword" href="http://d.hatena.ne.jp/keyword/Material%20Design">Material Design</a>に飽きてきて、目新しさ目当てで流行ってるだけちゃうのという意見もちらほら目にします。私も懐疑派でした。</p> <p> 一方でこんな意見も。 <blockquote data-conversation="none" class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Most">Most</a> people missed this, but <a href="https://twitter.com/Apple?ref_src=twsrc%5Etfw">@apple</a>&#39;s design overhaul is all about preparing for Augmented Reality.<br><br>1) Icons now look 3D &amp; possess shadows<br>2) Siri is an outright 3D object now<br>3) <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a> are now rounded given that <a class="keyword" href="http://d.hatena.ne.jp/keyword/sharp">sharp</a> objects look threatening in AR<br><br>The list goes on <a href="https://twitter.com/hashtag/WWDC20?src=hash&amp;ref_src=twsrc%5Etfw">#WWDC20</a> <a href="https://t.co/BtIMdViL81">pic.twitter.com/BtIMdViL81</a></p>&mdash; Lucas Rizzotto (@_LucasRizzotto) <a href="https://twitter.com/_LucasRizzotto/status/1275556068093919232?ref_src=twsrc%5Etfw">June 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fnote.com%2Fkajiken0630%2Fn%2Fna2f18f135710" title="AR時代を見据えたAppleとGoogleの動きに関する考察メモ|KAJJ @ MESON CEO|note" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://note.com/kajiken0630/n/na2f18f135710">note.com</a></cite></p> <p>なるほど。今後xRなアプリケーションも同時に開発するようになったときには、ライティングや立体感が重要も再び重要になってくるのかもと。 まだ答えは出ていませんが、、。</p> <p>静的に<a class="keyword" href="http://d.hatena.ne.jp/keyword/figma">figma</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/Photoshop">Photoshop</a>のエフェクトで作った立体感ではなく、動的にユーザーの動作に合わせて自然に変化すると面白いんじゃないかと…。個人的な実験の意味も込めて以下のようなデモを作って見ました。</p> <p><img src="https://camo.githubusercontent.com/5d10352be48351a7f83e19732f66495e2c709897/68747470733a2f2f696d6775722e636f6d2f45394763744a6c2e676966" alt="gif" /></p> <p> UnityのシェーダーでNeumorphismを再現して。リアルタイムに影や凹凸を変化させられるようにしています。更に画像をかなり拡大してもエッジはきれいなまま。</p> <h2>Neumorphismを解析する</h2> <p>Unityで実装を説明する前にまずNeumorphismがどうやって作られているか<a class="keyword" href="http://d.hatena.ne.jp/keyword/Figma">Figma</a>で公開してくれているサンプルを分析してみました。こちらを参考にしました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdribbble.com%2Fshots%2F10084381-Neomorphism-Guide-2-0-Original" title="Neomorphism Guide 2.0 | Original 🔥" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://dribbble.com/shots/10084381-Neomorphism-Guide-2-0-Original">dribbble.com</a></cite></p> <p>一番シンプルそうなパネルを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Figma">Figma</a>で見てみます。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/CSS">CSS</a>で描くのは簡単だ…。)</p> <p><figure class="figure-image figure-image-fotolife" title="figma-ui"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20200811/20200811220919.png" alt="f:id:asus4:20200811220919p:plain" title="f:id:asus4:20200811220919p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption><a class="keyword" href="http://d.hatena.ne.jp/keyword/figma">figma</a>-ui</figcaption></figure></p> <ul> <li>光の方向は左上から右下に。</li> <li>全体にうっすらとグラデーション</li> <li>右下に暗い色のドロップシャドウ</li> <li>左上に明るい色のドロップシャドウ</li> <li>縁を細いベベルでグラデーション</li> </ul> <p>ざっくりこんな感じでしょうか。これを参考にしながらUnity上でできる範囲で作っていきます。</p> <h2>SDFで拡大に強くきれいな線を描く</h2> <p>Unityで作る<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>ゲームでUIを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>パーフェクトで作ってるゲームってあるんでしょか?@1x @2x @3xなテクスチャを用意してるゲーム。実際 <a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%20SE">iPhone SE</a>(640x1136)から<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPad">iPad</a> Pro 12.9(2048x2732)までサポートするようなゲームで無理…ですよね。FullHDでデザインして拡縮している現場が多いように思います。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Vector">Vector</a> Graphicsモジュールもありますが、UI全部に使ってしまうと重いですね。</p> <p>今回はTextMesh Proでも使われているSDF(signed distance field)を使ってみました。SDFはパスからの距離をテクスチャに書き込むことでテクスチャ解像度が小さくてもきれいなエッジを再現できます。私が仕事で開発に参加してる<a href="https://lyric-speaker.com/">Lyric Speaker</a>でもSDFを使ってきれいなフォントを描画しています。</p> <p>さらに今回はSDFの改良版<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>のMSDFを使ってみました。詳しくは<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>と、<a href="https://github.com/Chlumsky/msdfgen/files/3050967/thesis.pdf">こちらの論文PDF</a>が詳しいです。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2FChlumsky%2Fmsdfgen" title="Chlumsky/msdfgen" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/Chlumsky/msdfgen">github.com</a></cite></p> <p><a href="https://user-images.githubusercontent.com/18639794/86908136-5fdd4780-c116-11ea-96c5-4f58a42043a4.png" class="http-image"><img src="https://user-images.githubusercontent.com/18639794/86908136-5fdd4780-c116-11ea-96c5-4f58a42043a4.png" class="http-image" alt="https://user-images.githubusercontent.com/18639794/86908136-5fdd4780-c116-11ea-96c5-4f58a42043a4.png"></a><a href="https://user-images.githubusercontent.com/18639794/86908146-6370ce80-c116-11ea-87ee-95bfb699665c.png" class="http-image"><img src="https://user-images.githubusercontent.com/18639794/86908146-6370ce80-c116-11ea-87ee-95bfb699665c.png" class="http-image" alt="https://user-images.githubusercontent.com/18639794/86908146-6370ce80-c116-11ea-87ee-95bfb699665c.png"></a><a href="https://user-images.githubusercontent.com/18639794/86908155-65d32880-c116-11ea-9583-1b45f806bbd9.png" class="http-image"><img src="https://user-images.githubusercontent.com/18639794/86908155-65d32880-c116-11ea-9583-1b45f806bbd9.png" class="http-image" alt="https://user-images.githubusercontent.com/18639794/86908155-65d32880-c116-11ea-9583-1b45f806bbd9.png"></a> msdfgenより引用</p> <p>簡単に言うとSDFではグレースケールでエッジとの距離を書き込んでいましたが、MSDFではRGBチャンネルそれぞれに角度ごとに分けた距離を書き込むことで、小さい解像度でも角がきれいに出るように改良したようです。</p> <p>反面、テクスチャ圧縮をかけてしまうとmsdfはきれいに表示されないので、無圧縮に設定する必要があります。容量削減の意味では、効果は少ないです。</p> <p>実際にshaderのコードを簡略化するとこんな感じになります。</p> <pre class="code glsl" data-lang="glsl" data-unlink> inline float msdf(sampler2D tex, float2 uv) { // MSDFのテクスチャ取得 half3 c = tex2D(tex, uv); // RGB平均値の取得 return max(min(c.r, c.g), min(max(c.r, c.g), c.b)) - 0.5; } fixed4 frag(v2f IN) : SV_Target { // パスからの距離をfloatで float sdf = msdf(_MainTex, IN.texcoord); // UIのTint colorを取得 half4 color = IN.color; // パスの境界線より外側のアルファを0に float2 sdfUnit = _PixelRange / _MainTex_TexelSize.zw; float clipSdf = sdf * max(dot(sdfUnit, 0.5 / fwidth(IN.texcoord)), 1); color.a *= saturate(clipSdf + 0.5); return color; } </pre> <p>肝の部分はRGB平均値を取得する部分と、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%EA%A5%C3%A5%D4%A5%F3%A5%B0">クリッピング</a>する部分だと思いますが、とてもシンプルで良いですね。</p> <h2>SDFでドロップシャドウを描く</h2> <p>Unity UI付属の公式Dropshadow エフェクトはただ同じ画像をコピーしてオフセットかけているだけですが、<br /> SDFはきれいな線を描くだけではなく、パス境界との距離と、勾配がわかるので、ドロップシャドウなどのエフェクトにも使えます。TextMeshProのエフェクト設定動画がわかりやすいです。</p> <p><iframe width="480" height="270" src="https://www.youtube.com/embed/xfo0NrLJe_k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><cite class="hatena-citation"><a href="https://www.youtube.com/watch?v=xfo0NrLJe_k">www.youtube.com</a></cite></p> <p>Normalを取得するコードは以下のようになります。</p> <pre class="code glsl" data-lang="glsl" data-unlink> // さっきと同じ平均値を返すだけ。 inline float msdf_median(float3 c) { return max(min(c.r, c.g), min(max(c.r, c.g), c.b)); } // ノーマル画像を返す inline float3 msdf_normal(sampler2D tex, float4 texel, float2 uv) { texel *= 2; float left = msdf_median(tex2D(tex, float2(uv.x - texel.x, uv.y))); float right = msdf_median(tex2D(tex, float2(uv.x + texel.x, uv.y))); float bottom = msdf_median(tex2D(tex, float2(uv.x, uv.y - texel.y))); float top = msdf_median(tex2D(tex, float2(uv.x, uv.y + texel.y))); return float3(left - right, bottom - top, 0); } 以上のように隣接ピクセルからの勾配情報をNormalテクスチャのような感じで取得します。これをもとにブラーやベベルを書き込んでいます。 </pre> <h2>Unity uGUI上に組み込む</h2> <p>実際にUnity uGUI上にNeumorphismデザインを実装してみます。</p> <p>ドロップシャドウをuGUIのエフェクトとして使う。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fmob-sakai%2FUIEffect" title="mob-sakai/UIEffect" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/mob-sakai/UIEffect">github.com</a></cite></p> <p>UIEffectで行われているUIMeshの拡張を参考にしています。</p> <p>同じ画像をコピーしても作れるのですが、一個の画像を作るのにレイヤー3枚…。などは避けたかったため。</p> <p>すべてのNeumorphism<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>の中ですべての頂点を一つにまとめ、uv2の中に、オフセット上をを埋め込み。Vertex shaderでDirectional Lightの方向にオフセットをかけています。</p> <p><figure class="figure-image figure-image-fotolife" title="fig uv2"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20200811/20200811222851.png" alt="f:id:asus4:20200811222851p:plain" title="f:id:asus4:20200811222851p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption>fig uv2</figcaption></figure></p> <p>こんな感じです。</p> <h2>改善点</h2> <p>SDFでは実際にはテクスチャサイズより小さな領域が描画されます。配置のときに手動で直してましたが、ライブラリ側でサイズの計算を吸収できるのがベストです。</p> <h2>まとめ</h2> <p>このNeumorphism UIは<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>上で公開しています。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Funity-neumorphism-ui" title="asus4/unity-neumorphism-ui" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/unity-neumorphism-ui">github.com</a></cite></p> <p>またNeumorphismにしなくてもMSDFを使ったUIは使い所がありそうです。</p> <p>ほっといても実践で使われることはなさそうなので、先日公開した自分のアプリでこのシェーダーを使っています。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fasus4.hatenablog.com%2Fentry%2F2020%2F08%2F06%2F_%255Btensorflowlite%255D%255Bunity%255D_TensorFlow_Lite%25E3%2581%25A8Unity%25E3%2581%25A7%25E3%2582%25AB%25E3%2583%25A1%25E3%2583%25A9%25E3%2582%25A2%25E3%2583%2597%25E3%2583%25AA%25E3%2582%2592%25E4%25BD%259C%25E3%2581%25A3%25E3%2581%25A6%25E5%2585%25AC%25E9%2596%258B%25E3%2581%2597%25E3%2581%25BE" title=" TensorFlow LiteとUnityでカメラアプリを作って公開しました。 - Asus4 onD" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://asus4.hatenablog.com/entry/2020/08/06/_%5Btensorflowlite%5D%5Bunity%5D_TensorFlow_Lite%E3%81%A8Unity%E3%81%A7%E3%82%AB%E3%83%A1%E3%83%A9%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E5%85%AC%E9%96%8B%E3%81%97%E3%81%BE">asus4.hatenablog.com</a></cite></p> <p>おまけで:実験的に加速度センサでライティングの向きが変わる機能を搭載してたりします。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmobile.twitter.com%2Fasus4%2Fstatus%2F1286584321755746304" title="Twitter" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://mobile.twitter.com/asus4/status/1286584321755746304">mobile.twitter.com</a></cite></p> asus4 TensorFlow LiteとUnityでカメラアプリを作って公開しました。 hatenablog://entry/26006613610726667 2020-08-06T18:24:58+09:00 2020-08-06T18:25:43+09:00 こちらからダウンロードできます! AnyFilterKoki IbukuroPhoto & VideoFreeapps.apple.com 去年の年末頃からUnity上でTensorFlow Liteを動かして遊んでいます。その中でできたプロトタイプをTwitterで公開したところ↓思いの外評判が良かったので、誰でも試せるようにiOSアプリとして公開してみました。 A prototype app that generates camera filters from what you see. #madewithunity #tensorflowlite #styletransfer pic.t… <p>こちらからダウンロードできます! <div class="itunes-embed freezed itunes-kind-software"><a href="https://apps.apple.com/us/app/anyfilter/id1522506966?uo=4&at=10l8JW&ct=hatenablog" rel="nofollow" target="_blank"><img src="https://cdn.image.st-hatena.com/image/scale/f4b7866777083970513ed81abec07c8f0060aef7/enlarge=0;height=200;version=1;width=200/https%3A%2F%2Fis2-ssl.mzstatic.com%2Fimage%2Fthumb%2FPurple124%2Fv4%2F3c%2F5e%2F59%2F3c5e59f4-110a-44c6-e73a-87fed31d63d1%2Fsource%2F100x100bb.jpg" alt="AnyFilter" title="AnyFilter" class="itunes-embed-image"/></a><div class="itunes-embed-info"><p class="itunes-embed-title"><a href="https://apps.apple.com/us/app/anyfilter/id1522506966?uo=4&at=10l8JW&ct=hatenablog" rel="nofollow" target="_blank">AnyFilter</a></p><ul><li class="itunes-embed-artist"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro</li><li class="itunes-embed-genre">Photo & Video</li><li class="itunes-embed-price">Free</li><li class="itunes-embed-badge"><a href="https://apps.apple.com/us/app/anyfilter/id1522506966?uo=4&at=10l8JW&ct=hatenablog" rel="nofollow" target="_blank"><img src="https://cdn.blog.st-hatena.com/images/theme/itunes/itunes-badge-appstore@2x.png" width="60px" height="15px" /></a></li></ul></div></div><cite class="hatena-citation"><a href="https://apps.apple.com/us/app/id1522506966">apps.apple.com</a></cite></p> <p>去年の年末頃からUnity上でTensorFlow Liteを動かして遊んでいます。その中でできたプロトタイプを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>で公開したところ↓思いの外評判が良かったので、誰でも試せるように<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>アプリとして公開してみました。 <blockquote data-conversation="none" class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">A prototype app that generates camera filters from what you see. <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://twitter.com/hashtag/tensorflowlite?src=hash&amp;ref_src=twsrc%5Etfw">#tensorflowlite</a> <a href="https://twitter.com/hashtag/styletransfer?src=hash&amp;ref_src=twsrc%5Etfw">#styletransfer</a> <a href="https://t.co/wqFKmWKmd6">pic.twitter.com/wqFKmWKmd6</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1262730002283495425?ref_src=twsrc%5Etfw">May 19, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p>コアの機能は<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>で公開してます。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Ftf-lite-unity-sample" title="asus4/tf-lite-unity-sample" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/tf-lite-unity-sample">github.com</a></cite></p> <p>普段の受託案件では自分でUIデザインすることはまれですが、一人プロジェクトだったためUIもつくりました。<br /> UnityでゲームぽくないUIをデザインするときに、Unityで複数の解像度に対応するためにpixel perfectをあきらめることが多かったため、UIを全部SDF(Signed Distance Field) Textureを使って作ってみました。更に実験でNeumorphismをuGUI上で再現しています。<br /> 加速度センサでドロップシャドウの向きが変わったりします。</p> <p><blockquote data-conversation="none" class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Trying to make Neumorphism design on Unity uGUI. Even though all textures are 128x128px, MSDF(Multi-channel Signed Distance Field) enabled us to draw them smooth like a path. <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://twitter.com/hashtag/shader?src=hash&amp;ref_src=twsrc%5Etfw">#shader</a> <a href="https://twitter.com/hashtag/neumorphism?src=hash&amp;ref_src=twsrc%5Etfw">#neumorphism</a> <a href="https://t.co/4Vc9N5TSOz">pic.twitter.com/4Vc9N5TSOz</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1273568470228230144?ref_src=twsrc%5Etfw">June 18, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p>といった感じで個人的な実験を公開してみました。良ければダウンロードしてみてください!</p> asus4 AR FoundationをEditorでも動かす その2 hatenablog://entry/26006613477345282 2019-12-07T01:16:05+09:00 2019-12-07T01:16:05+09:00 【unityプロ技】 Advent Calendar 2019 - Qiita 6日目の記事です。*1 はじめに - ARFoundationとは 何を作った? 使い方 1. NDIのインストール 2. iPhoneに送信用アプリをインストール 3. macとiPhoneをUSBでつなげる 4. 再生する ARFoundationを中身を見てみよう Subsystemの作り方 まとめ はじめに - ARFoundationとは スマートフォンでのAR楽しいですね。それぞれiOSはARKit、AndroidではARCoreというAR用開発キットが公開されています。Unity用SDKもそれぞれUn… <p><a href="https://qiita.com/advent-calendar/2019/unityforpro">&#x3010;unity&#x30D7;&#x30ED;&#x6280;&#x3011; Advent Calendar 2019 - Qiita</a> 6日目の記事です。<a href="#f-ba52c80e" name="fn-ba52c80e" title="ML-Agents付属のBarracudaのドキュメントが少ないので、詳細を書こうとしたのですが、玉砕したので内容を変更しています">*1</a></p> <p><img src="https://i.imgur.com/vZoYIs1.gif" alt="img" /></p> <p><img src="https://imgur.com/tQbJ1Sl.gif" alt="Imgur" /></p> <ul class="table-of-contents"> <li><a href="#はじめに---ARFoundationとは">はじめに - ARFoundationとは</a></li> <li><a href="#何を作った">何を作った?</a></li> <li><a href="#使い方">使い方</a><ul> <li><a href="#1-NDIのインストール">1. NDIのインストール</a></li> <li><a href="#2-iPhoneに送信用アプリをインストール">2. iPhoneに送信用アプリをインストール</a></li> <li><a href="#3-macとiPhoneをUSBでつなげる">3. macとiPhoneをUSBでつなげる</a></li> <li><a href="#4-再生する">4. 再生する</a></li> </ul> </li> <li><a href="#ARFoundationを中身を見てみよう">ARFoundationを中身を見てみよう</a><ul> <li><a href="#Subsystemの作り方">Subsystemの作り方</a></li> </ul> </li> <li><a href="#まとめ">まとめ</a></li> </ul> <h2 id="はじめに---ARFoundationとは">はじめに - ARFoundationとは</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A1%BC%A5%C8%A5%D5%A5%A9%A5%F3">スマートフォン</a>でのAR楽しいですね。それぞれ<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>はARKit、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>ではARCoreというAR用開発キットが公開されています。Unity用<a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a>もそれぞれ<a href="https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/src/default/">Unity-ARKit-Plugin</a>,<a href="https://github.com/google-ar/arcore-unity-sdk">Google ARCore SDK for Unity</a>と開発がされてきました。今まではそれぞれの<a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a>をインストールして頑張ってきたのですが、ARCore, ARKit, HoloLens, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Magic%20Leap">Magic Leap</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a>をラップして、同じ<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>でアクセスできるようにする、ARFoundationが発表されました。</p> <p>ARFoundationの導入は、安定のテラシュールブログさんを御覧ください。 <iframe src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Ftsubakit1.hateblo.jp%2Fentry%2F2018%2F11%2F21%2F211400" title="【Unity】AR Foundation(ARKitとARCoreのマルチプラットフォームAR環境)の超入門 - テラシュールブログ" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://tsubakit1.hateblo.jp/entry/2018/11/21/211400">tsubakit1.hateblo.jp</a></cite></p> <h2 id="何を作った">何を作った?</h2> <p>ARFoundationはUnity-ARKit-Pluginのときよりも<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>がシンプルでわかりやすいのですが。以前のこちらの日記でも簡単に書いたように、 <strong>Editorで動かない。毎回実機ビルドが必要</strong>という問題がありました。Unity-ARKit-Pluginのときはできていたんです…。つい昨日、<a href="https://forum.unity.com/threads/ar-remoting-simulation.720575/">公式からアナウンスがあり</a>、2020年はじめにリモートでつなげてEditorでも動作できる機能をリリース予定です。とはいえ、今すぐ仕事で使うために、自分で使う一部機能だけでもEditorで動かせると便利だと思ったので、ARKit3の新機能だけでもEditorで動作するものを作りました。<a href="#f-d9680d92" name="fn-d9680d92" title="また別の選択肢とて1→10さんが開発しているZIG SIM PROもいいかもしれません。NDIとOSCで、ARKit3のいくつかの機能を送信できます。有料ですが、時間節約できるので一瞬で元取れます。">*2</a></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fasus4.hatenablog.com%2Fentry%2F2019%2F10%2F18%2F_Unity_AR_Foundation%25E3%2582%2592Editor%25E4%25B8%258A%25E3%2581%25A7%25E3%2582%25B7%25E3%2583%259F%25E3%2583%25A5%25E3%2583%25AC%25E3%2583%25BC%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%25B3%25E3%2581%2599%25E3%2582%258B%25E6%2596%25B9%25E6%25B3%2595" title=" Unity AR FoundationをEditor上でシミュレーションする方法 - Asus4 onD" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://asus4.hatenablog.com/entry/2019/10/18/_Unity_AR_Foundation%E3%82%92Editor%E4%B8%8A%E3%81%A7%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95">asus4.hatenablog.com</a></cite></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2FARKitStreamer" title="asus4/ARKitStreamer" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/ARKitStreamer">github.com</a></cite></p> <p>今回エディタ側で対応した機能は、 - 人間の体部分を検出 - Face - 座標検出 - Mesh検出 - <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%EC%A5%F3%A5%C9">ブレンド</a>シェイプ推定 です。 以下は作例です。Editorで動作することで、デプスを送りながらVisual Effect Graphでノードのパラメータをいじるなどといったこともできるようになっています。</p> <p><blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">AR Foundation (ARKit3) + Simulate on Editor + Visual Effect Graph (<a href="https://twitter.com/_kzr?ref_src=twsrc%5Etfw">@_kzr</a> &#39;s Dkvfx) <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://t.co/QsLRMkp6Ji">https://t.co/QsLRMkp6Ji</a> <a href="https://t.co/8zOGxRwlb0">pic.twitter.com/8zOGxRwlb0</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1187736136812240897?ref_src=twsrc%5Etfw">2019年10月25日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p><blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Streaming facial mesh from iPhoneX to UnityEditor <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://twitter.com/hashtag/arkit?src=hash&amp;ref_src=twsrc%5Etfw">#arkit</a><a href="https://t.co/QsLRMkp6Ji">https://t.co/QsLRMkp6Ji</a> <a href="https://t.co/EGYO6Y0WQx">pic.twitter.com/EGYO6Y0WQx</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1189469264014708736?ref_src=twsrc%5Etfw">2019年10月30日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <h2 id="使い方">使い方</h2> <p>簡単に使い方を説明します。</p> <h3 id="1-NDIのインストール">1. NDIのインストール</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>のカメラで移している映像をUnityに送るためにNDIを使っています。<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>で使うためには、NDIを <a href="https://ndi.tv/sdk/">https://ndi.tv/sdk/</a> からインストールする必要があります。メールアドレスを登録してしばらくすると<a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a>のダウンロード先URLが送られてきます。</p> <h3 id="2-iPhoneに送信用アプリをインストール">2. <a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>に送信用アプリをインストール</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>からUnityプロジェクトをダウンロードして、 <a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>用にビルド。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>から対応端末 (iPhoneX以降〜)へインストールします。</p> <h3 id="3-macとiPhoneをUSBでつなげる">3. <a class="keyword" href="http://d.hatena.ne.jp/keyword/mac">mac</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>をUSBでつなげる</h3> <p>高速の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Wi-Fi">Wi-Fi</a>の場合は良いですが、私のオフィスのネットワーク環境では<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/mac">mac</a>を<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a> USBネットワークで接続したほうが遅延が少なく動作しました。</p> <p><img src="https://imgur.com/4YVbIUP.png" alt="Imgur" /></p> <h3 id="4-再生する">4. 再生する</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>の送信側と対応するシーンをUnityEditorでも開きます。<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>を再生すると、同じネットワークにNDIが飛んでいる場合、NDIの名前が表示させるので、NDI Receiver<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>のSource Nameにセットしてください。 <img src="https://imgur.com/u10iUBc.gif" alt="Imgur" /></p> <p>Unity Editorを再生開始すると<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>と同じ画面が表示されると思います。</p> <h2 id="ARFoundationを中身を見てみよう">ARFoundationを中身を見てみよう</h2> <p>この開発をするために、ARFoundationの中身を詳しく知る必要があったので、紹介します。</p> <iframe src="//www.slideshare.net/slideshow/embed_code/key/A6gMDZ8mpp2hmj?startSlide=6" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <p>最新のロードマップ、Unite Copenhagen 2019でのスライドにあるように、AR Foundationを抽象化された<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>の一個深いレイヤーにはSubsystemというものがあります。平面を検出する機能を例に取ると、</p> <p><figure class="figure-image figure-image-fotolife" title="fig1"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20191207/20191207001738.png" alt="f:id:asus4:20191207001738p:plain" title="f:id:asus4:20191207001738p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption>こんな感じ</figcaption></figure></p> <p>それぞれのプラットフォームフォームがSubsustemを持っています。対応していないplatformではSubsystemがnullを返します。Manager側が何も動作しないので、シーン中にManager<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>が配置されていても問題ありません。そして、UnityEditorで実行するときは、Subsystemは存在しないので、エラーは返さないものの、動作しません。</p> <p>そこでUnity Editor用のSubsystemを追加して、ARFoundationとは別の経路で<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>実機から同等のデータを送信。このEditor用SubsystemをAR Foundationのハイレベル<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>に同じデータを転送。 <figure class="figure-image figure-image-fotolife" title="エディタのSubsystemを追加"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20191207/20191207003135.png" alt="f:id:asus4:20191207003135p:plain" title="f:id:asus4:20191207003135p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption>エディタのSubsystemを追加</figcaption></figure></p> <p>一番上のレイヤーから見ると、動作は何も変わっていないので同じコードで動作する気がします。</p> <h3 id="Subsystemの作り方">Subsystemの作り方</h3> <p>ここまでがわかったいくつかのSubsystemを自分で作ってみました。<a href="https://github.com/asus4/ARKitStreamer/tree/master/Packages/com.koki-ibukuro.arkitstream/Runtime/Internal/Subsystems">GitHubのリンクはこちらです</a></p> <p>セッション管理をしているXRSesseionSubsystemをEditorで対応する例です。</p> <pre class="code lang-cs" data-lang="cs" data-unlink> <span class="synComment">// 仮想コード</span> <span class="synType">namespace</span> ARKitStream.Internal { <span class="synComment">// PreserveはCode strippingでコードが消されないようにしてるっぽい。</span> [Preserve] <span class="synType">public</span> <span class="synType">class</span> ARKitSessionRemoteSubsystem : XRSessionSubsystem { <span class="synType">protected</span> <span class="synType">override</span> Provider CreateProvider() =&gt; <span class="synStatement">new</span> ARKitRemoteProvider(); <span class="synComment">// サブシステムの初期化時にUnityEngineから実行される</span> [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] <span class="synType">static</span> <span class="synType">void</span> RegisterDescriptor() { <span class="synComment">// UnityEditorのときだけサブシステムを作る</span> <span class="synPreProc">#if UNITY_EDITOR</span> <span class="synType">const</span> <span class="synType">string</span> id = <span class="synConstant">&quot;ARKit-Remote-Session&quot;</span>; XRSessionSubsystemDescriptor.RegisterDescriptor(<span class="synStatement">new</span> XRSessionSubsystemDescriptor.Cinfo { id = id, subsystemImplementationType = <span class="synStatement">typeof</span>(ARKitSessionRemoteSubsystem), supportsInstall = <span class="synConstant">false</span>, supportsMatchFrameRate = <span class="synConstant">false</span> }); <span class="synPreProc">#endif </span><span class="synComment">// UNITY_EDITOR</span> } <span class="synComment">// サブシステム本体</span> <span class="synComment">// 各サブシステムにはProviderと呼ばれる本体のクラスがいる。</span> <span class="synType">class</span> ARKitRemoteProvider : Provider { <span class="synComment">//</span> } } } </pre> <p>かなりシンプルに書いていますが、このように<code>RuntimeInitializeOnLoadMethod</code><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%C8">アトリビュート</a>でSubsystemを管理しているようです。<code>RuntimeInitializeOnLoadMethod</code>は今回始めて使いましたが、UnityEngineネームスペースにあるので、ARFoundation以外にもSubsystemを使っているライブラリがあるのかもしれません。</p> <h2 id="まとめ">まとめ</h2> <ul> <li>AR Foundationを使うと簡単に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%C1%A5%D7%A5%E9%A5%C3%A5%C8%A5%D5%A5%A9%A1%BC%A5%E0">マルチプラットフォーム</a>なARアプリを作成できます。</li> <li>Editorでも一部の機能を動作させることができた。</li> <li>Unity開発チームが来年はじめに、Editorで動くやつを公開してくれる予定。</li> </ul> <p>以上です。</p> <div class="footnote"> <p class="footnote"><a href="#fn-ba52c80e" name="f-ba52c80e" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">ML-Agents付属の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>のドキュメントが少ないので、詳細を書こうとしたのですが、玉砕したので内容を変更しています</span></p> <p class="footnote"><a href="#fn-d9680d92" name="f-d9680d92" class="footnote-number">*2</a><span class="footnote-delimiter">:</span><span class="footnote-text">また別の選択肢とて1→10さんが開発している<a href="https://apps.apple.com/jp/app/zig-sim-pro/id1481556614">ZIG SIM PRO</a>もいいかもしれません。NDIとOSCで、ARKit3のいくつかの機能を送信できます。有料ですが、時間節約できるので一瞬で元取れます。</span></p> </div> asus4 TensorFlow LiteをUnityから動かす その2 hatenablog://entry/26006613472819161 2019-12-01T00:00:00+09:00 2019-12-01T08:33:35+09:00 TensorFlow LiteのUnity Pluginを使い MNIST, SSD, DeepLab, PoseNetなどの基本的なものを動作させるサンプルを作りました <p>この記事は <a href="https://qiita.com/advent-calendar/2019/unity2">Unity #2 Advent Calendar 2019 - Qiita</a> の1日目です。他の日程に面白そうなタイトルが沢山並んでいます。</p> <h2 id="目次">目次</h2> <ul class="table-of-contents"> <li><a href="#目次">目次</a></li> <li><a href="#TLDR">TL;DR;</a></li> <li><a href="#TensorFlow-Liteとは">TensorFlow Liteとは</a></li> <li><a href="#TensorFlow-Lite-Unity-Pluginの使い方">TensorFlow Lite Unity Pluginの使い方。</a></li> <li><a href="#MNIST">MNIST</a></li> <li><a href="#SSD---Single-Shot-MultiBox-Detector">SSD - Single Shot MultiBox Detector</a></li> <li><a href="#DeepLab">DeepLab</a></li> <li><a href="#PoseNet">PoseNet</a></li> <li><a href="#Unityでの実装で注意すること">Unityでの実装で注意すること。</a></li> <li><a href="#TODOs">TODOs</a></li> <li><a href="#まとめ">まとめ</a></li> </ul> <h2 id="TLDR">TL;DR;</h2> <p>TensorFlow LiteのUnity Pluginを使い MNIST, <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a>, DeepLab, PoseNetなどの基本的なものを動作させるサンプルを作りました。<br/> <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Ftf-lite-unity-sample" title="asus4/tf-lite-unity-sample" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/tf-lite-unity-sample">github.com</a></cite></p> <h2 id="TensorFlow-Liteとは">TensorFlow Liteとは</h2> <p>TensorFlowを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A1%BC%A5%C8%A5%D5%A5%A9%A5%F3">スマートフォン</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/Raspberry%20Pi">Raspberry Pi</a>などのデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>で動かすことを目的としています。学習はTensorFlow本体の<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>などでモデルを作り、それを*.tfliteというファイルに書き出すことで、色々なデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>で推論部分のみを小さなプログラムサイズで動かせるようになっています。コア部分は<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a>でUnity Pluginも非常に簡単に作ることができます。</p> <p>先日この記事を書きました。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fasus4.hatenablog.com%2Fentry%2F2019%2F11%2F18%2FTensorflow_Lite%25E3%2582%2592Unity%25E3%2581%25A7%25E5%258B%2595%25E3%2581%258B%25E3%2581%2599" title="Tensorflow LiteをUnityで動かす - Asus4 onD" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://asus4.hatenablog.com/entry/2019/11/18/Tensorflow_Lite%E3%82%92Unity%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99">asus4.hatenablog.com</a></cite></p> <p>その後、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>で動かすことによる高速化。複数プラットフォーム対応、入力と出力の型が見えないなどの足りない機能を追加して、使えそうな感じになってきました。TensorFlow の本家<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>へも PRを送ってやり取り頑張っています。<br/> <a href="https://github.com/tensorflow/tensorflow/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Aasus4">Pull Requests &middot; tensorflow/tensorflow &middot; GitHub</a></p> <h2 id="TensorFlow-Lite-Unity-Pluginの使い方">TensorFlow Lite Unity Pluginの使い方。</h2> <p>MNISTと呼ばれる0から9の手書き数字識別するプログラムの使い方をサンプルコードで説明します。簡略化しているので実際に動作するコードは<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>を見てください。</p> <pre class="code" data-lang="" data-unlink> // 入力の画像 28 x 28のグレースケール float[,] inputs = new float[28, 28]; // 出力の10個の数字の確率 float[] outputs = new float[10]; void Start() { // モデルのbyte配列を読み込んで`Interpreter`を作る interpreter = new Interpreter(File.ReadAllBytes(path)); // 入力のバッファを確保 interpreter.ResizeInputTensor(0, new int[] { 1, 28, 28, 1 }); interpreter.AllocateTensors(); } void Update() { // 入力データをセット interpreter.SetInputTensorData(0, inputs); // なんか計算してくれる! interpreter.Invoke(); // 出力のデータを取得 interpreter.GetOutputTensorData(0, outputs); } void OnDestroy() { // Interpreterを開放 interpreter?.Dispose(); }</pre> <p>とてもシンプルにできています。サンプルでもコードの多くは、画像をinputsに変換する部分だったりします。<br/> また次のコードの用に、コンスト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>タのオプションで、マルチスレッドや、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>を使った高速化などを設定できます。</p> <pre class="code" data-lang="" data-unlink> void Start() { // オプション var options = new Interpreter.Options() { // CPU時にマルチスレッドで動作 threads = 2, // iPhone, macでメタルGPU上で動かす gpuDelegate = new MetalDelegate(new MetalDelegate.Options() { allowPrecisionLoss = false, waitType = MetalDelegate.WaitType.Passive, }) }; // option付きのコンストラクタ interpreter = new Interpreter(File.ReadAllBytes(path), options); } </pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>で書かれた<a href="https://www.tensorflow.org/lite/examples">公式のExamples</a>のいくつかをUnityへ移植したので、それぞれのサンプルの説明をしていきます。</p> <h2 id="MNIST">MNIST</h2> <p><blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Tensorflow Lite CPU on Unity is 100x faster <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://t.co/CRw9f495a4">pic.twitter.com/CRw9f495a4</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1195257697077268480?ref_src=twsrc%5Etfw">November 15, 2019</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p>MLのHallo World的存在MNISTです。28 x 28 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>の数字を 0 - 9までのどれが書かれたの確率を教えてくれます。</p> <p><figure class="figure-image figure-image-fotolife" title="mnist"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20191128/20191128200929.png" alt="f:id:asus4:20191128200929p:plain" title="f:id:asus4:20191128200929p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption>MNIST ネットワーク図</figcaption></figure> ネットワーク図を見るとぎょっとしますが、レイヤーの機能は理解ぜずとも、inputs/outputsの部分に注目すれば大丈夫です。</p> <p><strong>入力</strong></p> <table> <thead> <tr> <th> index </th> <th> type </th> <th> dimensions </th> <th> 説明 </th> </tr> </thead> <tbody> <tr> <td> 0 </td> <td> float </td> <td> [28,28,1] </td> <td> 28x28のグレースケール画像です。0.0 ~ 1.0へ正規化します。 </td> </tr> </tbody> </table> <p><strong>出力</strong></p> <table> <thead> <tr> <th> index </th> <th> type </th> <th> dimensions </th> <th> 説明 </th> </tr> </thead> <tbody> <tr> <td> 0 </td> <td> float </td> <td> [10] </td> <td> 10個の0.0 ~ 1.0までの確率です </td> </tr> </tbody> </table> <h2 id="SSD---Single-Shot-MultiBox-Detector"><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a> - Single Shot MultiBox Detector</h2> <p>画像上の物体の名前と矩形範囲を推定する。サンプルに使ったモデルでは90種類の物体を認識します。</p> <p><blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr"><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a> runs fast enough on Unity iPhoneXS <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://t.co/xPWjuAgYF0">pic.twitter.com/xPWjuAgYF0</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1199978142510788608?ref_src=twsrc%5Etfw">November 28, 2019</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p><figure class="figure-image figure-image-fotolife" title="ssd"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20191128/20191128201008.png" alt="f:id:asus4:20191128201008p:plain" title="f:id:asus4:20191128201008p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a> ネットワーク図</figcaption></figure></p> <p><strong>入力</strong></p> <table> <thead> <tr> <th> index </th> <th> type </th> <th> dimensions </th> <th> 説明 </th> </tr> </thead> <tbody> <tr> <td> 0 </td> <td> sbyte </td> <td> [1,300,300,3] </td> <td> 300x300のRGB画像です。それぞれの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>は 0 - 255 </td> </tr> </tbody> </table> <p><strong>出力</strong></p> <p>認識されたオブジェクト上位10種の情報を返します。</p> <table> <thead> <tr> <th> index </th> <th> type </th> <th> dimensions </th> <th> 説明 </th> </tr> </thead> <tbody> <tr> <td> 0 </td> <td> float </td> <td> [10, 4] </td> <td> 10個の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A6%A5%F3%A5%C7%A5%A3">バウンディ</a>ングボックスがtop, left, bottom, rightの順で入っています </td> </tr> <tr> <td> 1 </td> <td> float </td> <td> [10] </td> <td> 認識した物体の IDが入っています。floatだけど、intにキャストして使えば大丈夫 </td> </tr> <tr> <td> 2 </td> <td> float </td> <td> [10] </td> <td> それぞれの確率が入っています。 </td> </tr> <tr> <td> 3 </td> <td> float </td> <td> [1] </td> <td> 全体で認識した物体の数 </td> </tr> </tbody> </table> <h2 id="DeepLab">DeepLab</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a>と似て、画像の中の物体を推定しますが、矩形ではなく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>単位で推定します。</p> <p><blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Added a DeepLab segmentation sample. <a href="https://twitter.com/hashtag/TensorFlowLite?src=hash&amp;ref_src=twsrc%5Etfw">#TensorFlowLite</a> <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://t.co/KzfXcQrFTH">https://t.co/KzfXcQrFTH</a> <a href="https://t.co/FSulqALIqm">pic.twitter.com/FSulqALIqm</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1199977447002976256?ref_src=twsrc%5Etfw">November 28, 2019</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p><figure class="figure-image figure-image-fotolife" title="deeplab"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20191128/20191128201042.png" alt="f:id:asus4:20191128201042p:plain" title="f:id:asus4:20191128201042p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption>DeepLab ネットワーク図</figcaption></figure></p> <p><strong>入力</strong></p> <table> <thead> <tr> <th> index </th> <th> type </th> <th> dimensions </th> <th> 説明 </th> </tr> </thead> <tbody> <tr> <td> 0 </td> <td> float </td> <td> [1,257,257,3] </td> <td> 257x257のRGB画像です。それぞれの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>は 0.0 ~ 1.0 に正規化しています </td> </tr> </tbody> </table> <p><strong>出力</strong></p> <p>すべての<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>を21種類のラベルに分類します。</p> <table> <thead> <tr> <th> index </th> <th> type </th> <th> dimensions </th> <th> 説明 </th> </tr> </thead> <tbody> <tr> <td> 0 </td> <td> float </td> <td> [1,257,257,21] </td> <td> 257x257の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>全てにどのラベルの可能性が高いかのスコアがはいっています </td> </tr> </tbody> </table> <h2 id="PoseNet">PoseNet</h2> <p>画面上の人間の骨格を、2D座標で取得するプログラムです。</p> <p><figure class="figure-image figure-image-fotolife" title="PoseNet ネットワーク図"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20191128/20191128201139.png" alt="f:id:asus4:20191128201139p:plain" title="f:id:asus4:20191128201139p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption>PoseNet ネットワーク図</figcaption></figure> 直列のとてもシンプルなネットワーク図に見えます。その分ポストプロセスでやることがあります。</p> <p><strong>入力</strong></p> <table> <thead> <tr> <th> index </th> <th> type </th> <th> dimensions </th> <th> 説明 </th> </tr> </thead> <tbody> <tr> <td> 0 </td> <td> float </td> <td> [1,257,257,3] </td> <td> 257x257のRGB画像です。それぞれの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>は 0.0 ~ 1.0 に正規化しています </td> </tr> </tbody> </table> <p><strong>出力</strong></p> <table> <thead> <tr> <th> index </th> <th> type </th> <th> dimensions </th> <th> 説明 </th> </tr> </thead> <tbody> <tr> <td> 0 </td> <td> float </td> <td> [9,9,17] </td> <td> 9x9のブロックに分割したエリアそれぞれに17個のパーツIDの可能性が入っています。 </td> </tr> <tr> <td> 1 </td> <td> float </td> <td> [9,9,34] </td> <td> 9x9のブロックのそれぞれのパーツIDの本当の場所へのオフセット x,y値 </td> </tr> <tr> <td> 2 </td> <td> float </td> <td> [9,9,32] </td> <td> 今回1人の認識では使わない </td> </tr> <tr> <td> 3 </td> <td> float </td> <td> [9,9,32] </td> <td> 同上 </td> </tr> </tbody> </table> <p>使うモデルによってブロックの分割数、精度が変わります。</p> <p>出力したデータの整形が一番面倒なモデルです。このブログが一番わかりやすかったです。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmedium.com%2Ftensorflow%2Freal-time-human-pose-estimation-in-the-browser-with-tensorflow-js-7dd0bc881cd5" title="Real-time Human Pose Estimation in the Browser with TensorFlow.js" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://medium.com/tensorflow/real-time-human-pose-estimation-in-the-browser-with-tensorflow-js-7dd0bc881cd5">medium.com</a></cite></p> <p>正確さを犠牲にシンプルに言えば、</p> <ul> <li>9 x 9に分割したブロックそれぞれに、体のパーツ17種の確率が入っている。</li> <li>一番確率が高いパーツにオフセット値を足して、正しいXY座標を得る</li> <li>17x17分割のモデルを使うことで精度を上げることが可能。遅くなる</li> </ul> <p>ようです。</p> <h2 id="Unityでの実装で注意すること">Unityでの実装で注意すること。</h2> <ul> <li>Height, Widthの順番: Unityでは すべての<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>が<code>width</code>, <code>height</code>で表されますが、TF Liteでは <code>height</code>, <code>width</code>です。</li> <li>モデルの種類によっては、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>オプションが使えないものもある <ul> <li><a href="https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/delegates/gpu">ドキュメント</a>にある<a class="keyword" href="http://d.hatena.ne.jp/keyword/ops">ops</a> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%E9%BB%BB%BB%D2">演算子</a>?)をサポートしてます</li> </ul> </li> </ul> <h2 id="TODOs">TODOs</h2> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>版は私の端末<code>Sony Xperia XZ2</code>で動作中にフリーズするので、原因を調査 <ul> <li>熱によるカメラのフリーズ問題のよう</li> </ul> </li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>を作る</li> </ul> <h2 id="まとめ">まとめ</h2> <ul> <li>TensorFlow LiteはUnityでも使えそう</li> <li>公式のモデルをUnityで動くサンプルを作った</li> </ul> <p>TensorFlow Liteの公式サンプルでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>ネイティブは全く別の実装をしています。Unity Pluginでは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>/Unity Editorを同じプログラムで作れるので便利です。今回使ったのは決して最新ではなく、ある程度こなれたモデルですが、Unityで使えるようになることで、ゲーム組み合わせたりするとまた可能性が広がりそうだと思いました。<br/> Texture2Dの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D4%A5%AF%A5%BB%A5%EB">ピクセル</a>を<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>上で直<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%DC%BF%A8">接触</a>っているところなどがあり、まだ高速化できる余地があるので、もう少し触っていきます。実案件へは未投入ですが、仕事で使いたいって相談もお待ちしています。</p> asus4 NativeArray<T>を高速にシリアライズ/デシリアライズ hatenablog://entry/26006613472218320 2019-11-27T18:15:25+09:00 2019-11-27T18:15:25+09:00 高速化TIPSです。以前、ARKitの顔の頂点のデータをUnityEditorに送るプログラムを書きました。 mobile.twitter.com この様なことができます。 UnityEditorには毎フレーム以下のデータを送っています。 public NativeArray<Vector3> vertices; public NativeArray<Vector3> normals; public NativeArray<int> indices; public NativeArray<Vector2> uvs; 頂点の数が多くシリアライズ、デシリアライズがパフォーマンスのネックになっていま… <p>高速化TIPSです。以前、ARKitの顔の頂点のデータをUnityEditorに送るプログラムを書きました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmobile.twitter.com%2Fasus4%2Fstatus%2F1189469264014708736" title="Twitter" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://mobile.twitter.com/asus4/status/1189469264014708736">mobile.twitter.com</a></cite> この様なことができます。</p> <p>UnityEditorには毎フレーム以下のデータを送っています。</p> <pre class="code c#" data-lang="c#" data-unlink>public NativeArray&lt;Vector3&gt; vertices; public NativeArray&lt;Vector3&gt; normals; public NativeArray&lt;int&gt; indices; public NativeArray&lt;Vector2&gt; uvs;</pre> <p>頂点の数が多く<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%EA%A5%A2%A5%E9%A5%A4%A5%BA">シリアライズ</a>、デ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%EA%A5%A2%A5%E9%A5%A4%A5%BA">シリアライズ</a>がパフォーマンスのネックになっていました。直接ポインタをゴニョゴニョすると行けるのではないかと調べているとNativeSliceにSliceConvertという型を変換できるメソッドがあることに気づきました。これを使うと以下の様なことができます。</p> <p><script src="https://gist.github.com/asus4/992ae563ca1263b1dd936b970e7fc206.js"> </script><cite class="hatena-citation"><a href="https://gist.github.com/asus4/992ae563ca1263b1dd936b970e7fc206">gist.github.com</a></cite></p> <p>使い方です。</p> <pre class="code c#" data-lang="c#" data-unlink>NativeArray&lt;Vector3&gt; vertices; // シリアライズ byte[] verticesBytes = vertices.ToRawBytes(); // デシリアライズ NativeArray&lt;Vector3&gt; vertices2 = NativeArrayExtension.FromRawBytes&lt;Vector3&gt;(verticesBytes, Allocator.Temp);</pre> asus4 Tensorflow LiteをUnityで動かす hatenablog://entry/26006613467775107 2019-11-18T18:40:35+09:00 2019-11-19T01:40:19+09:00 前回のBarracudaに続きTensorflow LiteをUnityで動かしてみました。 Unity上で学習するのはML-Agentで十分で。私の用途では、軽量、複数のプラットフォーム(iOS, Android, macOS, Windows)で動作可能なUnityのプラグインが必要でした。Tensorflow Liteはコア部分はシンプルなC言語のAPIで用途にあっていそうです。 Tensorflow Lite サイトより引用 Tensorflowリポジトリの奥深くに、Unity Pluginが隠されています。 tensorflow/tensorflow/lite/experimenta… <p>前回の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>に続きTensorflow LiteをUnityで動かしてみました。</p> <p>Unity上で学習するのはML-Agentで十分で。私の用途では、軽量、複数のプラットフォーム(<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>)で動作可能なUnityの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>が必要でした。Tensorflow Liteはコア部分はシンプルな<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%B8%C0%B8%EC">C言語</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>で用途にあっていそうです。</p> <p><img src="https://www.tensorflow.org/lite/images/convert/workflow.svg" alt="" /> <a href="https://www.tensorflow.org/lite/convert">Tensorflow Lite サイトより引用</a></p> <p>Tensorflow<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>の奥深くに、Unity Pluginが隠されています。 <a href="https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/experimental/examples/unity/TensorFlowLitePlugin">tensorflow/tensorflow/lite/experimental/examples/unity/TensorFlowLitePlugin at master &middot; tensorflow/tensorflow &middot; GitHub</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>で動作確認をしてみました。 以下、MNISTと<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a>の動作サンプルです。 <blockquote class="twitter-tweet" data-lang="HASH(0x56261fe28840)"><p lang="en" dir="ltr">Tensowflow Lite <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSD">SSD</a> CPU worked on Unity <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://t.co/sJ98lWvXV3">pic.twitter.com/sJ98lWvXV3</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1195320375544045569?ref_src=twsrc%5Etfw">November 15, 2019</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>とは別のMNISTモデルをつかったので、純粋な比較ではないのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>よりも高速でした。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>はこちら。 <a href="https://github.com/asus4/tf-lite-unity-sample">GitHub - asus4/tf-lite-unity-sample</a></p> <p>Tensorflow Lite のUnity <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>は非常にシンプルで。*.tfliteモデルのInputs/Outputsの型を確認する<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>がないのですが、NetronというElectron製アプリでいろいろなモデルを読み込み確認できて便利でした。</p> <p><figure class="figure-image figure-image-fotolife" title="netron"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20191118/20191118183116.png" alt="f:id:asus4:20191118183116p:plain" title="f:id:asus4:20191118183116p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption>netron</figcaption></figure></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Flutzroeder%2Fnetron" title="lutzroeder/netron" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/lutzroeder/netron">github.com</a></cite></p> <p>またTensorflow Liteには<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>デリゲートという機能があり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>はMetal, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>は<a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenGL">OpenGL</a> ES 3.1 で計算することができます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>でもMetalで行けるはずなのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>中にUIKitに依存する場所があり、ちょっと手直し中です。できたらお知らせします。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a>対応Unity Pluginはt-takasakaさんが作っていました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Ft-takasaka%2Ftensorflow" title="t-takasaka/tensorflow" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/t-takasaka/tensorflow">github.com</a></cite></p> <p><strong>追記</strong></p> <p>その後、<a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Delegate">Delegate</a>動かすことに成功しました。</p> <p><a href="https://github.com/asus4/tensorflow/commit/d0b45bd6def29315b3a2721cafaeca1fa36824ee">Add Build Setting TFLite Metal Delegate for macOS bundle &middot; asus4/tensorflow@d0b45bd &middot; GitHub</a></p> asus4 Unity製MLライブラリBarracuda hatenablog://entry/26006613466568090 2019-11-16T07:01:17+09:00 2019-11-16T07:01:17+09:00 Unity上でMachine Learningについてリサーチしています。Unity上でMLというとUnity社が開発しているML-Agentsが最初に出てくると思います。Tensorflowとの連携ができ強化学習などのサンプルが多く見れます。 GitHub - Unity-Technologies/ml-agents: Unity Machine Learning Agents Toolkit そのml-agentsの子プロジェクトとして最近Barracudaというものをハッケンしました。 ml-agents/Barracuda.md at master · Unity-Technologi… <p>Unity上でMachine Learningについてリサーチしています。Unity上でMLというとUnity社が開発しているML-Agentsが最初に出てくると思います。Tensorflowとの連携ができ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B6%AF%B2%BD%B3%D8%BD%AC">強化学習</a>などのサンプルが多く見れます。</p> <p><a href="https://github.com/Unity-Technologies/ml-agents">GitHub - Unity-Technologies/ml-agents: Unity Machine Learning Agents Toolkit</a></p> <p>そのml-agentsの子プロジェクトとして最近<a class="keyword" href="http://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>というものをハッケンしました。</p> <p><a href="https://github.com/Unity-Technologies/ml-agents/blob/master/UnitySDK/Assets/ML-Agents/Plugins/Barracuda.Core/Barracuda.md">ml-agents/Barracuda.md at master &middot; Unity-Technologies/ml-agents &middot; GitHub</a></p> <p>説明を読むに、TensorFlowの学習済ファイル (*.pb)やONNXのモデルを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>で読み込んで、Unityで動かしているようです。CPUもサポートしていますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>は全部ComputeShaderで頑張っている模様。実際にMNISTを動作させるサンプルを作ってみました。しかしいまいちパフォーマンスがでず…。ひとまず<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>乗っけます。</p> <p><blockquote class="twitter-tweet" data-lang="HASH(0x559dd8425530)"><p lang="en" dir="ltr">Tested MNIST in <a class="keyword" href="http://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>: ML library in pure Unity ComputeShader, it has been developed as a part of ml-agents. it worked on <a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>, but slightly slow🤔 <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://t.co/bbe5YrN7Ls">pic.twitter.com/bbe5YrN7Ls</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1194654663062282251?ref_src=twsrc%5Etfw">November 13, 2019</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>はこちら↓</p> <p><a href="https://github.com/asus4/barracuda-samples">GitHub - asus4/barracuda-samples</a></p> <p>MNIST.pbモデルを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Barracuda">Barracuda</a>のnnフォーマットに変換する<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Colab</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fcolab.research.google.com%2Fdrive%2F1D8LtUl759xb1P_BQmFEdEofffwDv4XaX" title="Google Colaboratory" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://colab.research.google.com/drive/1D8LtUl759xb1P_BQmFEdEofffwDv4XaX">colab.research.google.com</a></cite></p> asus4 Alexa-Voice-Service AVS対応スマートスピーカーを作ったときのこと hatenablog://entry/26006613454926394 2019-10-25T05:37:31+09:00 2022-06-24T07:56:10+09:00 去年になりますが、Alexa-Voice-Service (以下AVS)対応スマートスピーカーのプロトタイプを作ったのでメイキングです。Alexa-Skills-Kit(ASK)の記事は多く出ていますが、AVSの情報はASKにくらべて少ないので、なにか参考になる部分があれば幸いです。 ハードウェア選定 ある程度のノイズが想定される場所での展示だったため、マイクアレイでの音声方向検出は必須と考え、対応ボードを探しました。マイクアレイと指向性関係はロボスタの記事がまとまっています。(すごい人は自分でつくりますが、スキルも時間も足りないため、ボードを購入します) robotstart.info また… <p>去年になりますが、Alexa-Voice-Service (以下AVS)対応<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A1%BC%A5%C8%A5%B9%A5%D4%A1%BC%A5%AB%A1%BC">スマートスピーカー</a>のプロトタイプを作ったのでメイキングです。Alexa-Skills-Kit(ASK)の記事は多く出ていますが、AVSの情報はASKにくらべて少ないので、なにか参考になる部分があれば幸いです。</p> <h2>ハードウェア選定</h2> <p>ある程度のノイズが想定される場所での展示だったため、マイクアレイでの音声方向検出は必須と考え、対応ボードを探しました。マイクアレイと指向性関係はロボスタの記事がまとまっています。(すごい人は自分でつくりますが、スキルも時間も足りないため、ボードを購入します)</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Frobotstart.info%2F2017%2F10%2F20%2Fdevelopment-kits-for-avs.html" title="【Alexa搭載デバイス開発向け】Amazon voice service (AVS) 開発キットまとめ - ロボスタ" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://robotstart.info/2017/10/20/development-kits-for-avs.html">robotstart.info</a></cite></p> <p>またハードウェアの形に制限がない場合は、AVSのサイトで動作確認済のDevKitを購入するのが良さそうです。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdeveloper.amazon.com%2Fja-JP%2Falexa%2Falexa-voice-service%2Fdev-kits" title="Alexa Built-in Development Resources" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://developer.amazon.com/ja-JP/alexa/alexa-voice-service/dev-kits">developer.amazon.com</a></cite></p> <p>今回の要件では筐体の大きさの制限が厳しく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Raspberry%20Pi">Raspberry Pi</a>では大きすぎたので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Raspberry%20Pi">Raspberry Pi</a> Zero x <a href="https://www.seeedstudio.com/ReSpeaker-2-Mics-Pi-HAT.html">Seeed Studio社のReSpeaker 2 Mics Pi-HAT</a>を選定してみました。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/2ch">2ch</a>マイクではありますが、1chよりはましでしょう…。</p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125100.png" itemprop="image"></span></p> <h2>ソフトウェア選定</h2> <p>ソフトウェア選定にあたりこの記事を参考にしました。</p> <p><a href="https://qiita.com/Dimeiza/items/182c4847d7c1ead7df54">Raspberry Pi&#x306B;Alexa&#x3092;&#x53EC;&#x559A;&#x3059;&#x308B;3&#x3064;&#x306E;&#x65B9;&#x6CD5; - Qiita</a></p> <p>今やるならavs-device-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sdk">sdk</a>一本とのことで、こちらから取り組みはじめました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Falexa%2Favs-device-sdk" title="GitHub - alexa/avs-device-sdk: An SDK for commercial device makers to integrate Alexa directly into connected products." class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/alexa/avs-device-sdk">github.com</a></cite></p> <p>実際に手を付けてみると、avs-device-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sdk">sdk</a>は<a class="keyword" href="http://d.hatena.ne.jp/keyword/c%2B%2B">c++</a>制でソースの量も多く、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Raspberry%20Pi">Raspberry Pi</a> 3での<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>すると1時間くらい。また、<a href="https://github.com/alexa/avs-device-sdk/issues/1294">Raspberry Pi Zeroの動作は公式にはサポートされていないようでした</a>。サンプルも複雑で、製品組み込みには使えても、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Raspberry%20Pi">Raspberry Pi</a> Zero上での短い時間で細かく<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C6%A5%EC%A1%BC%A5%B7%A5%E7%A5%F3">イテレーション</a>を繰り返したい、というプロトタイプ用途としては向いていないと判断しました。</p> <p>いくつかの選択肢を試した中、Seeed Studioの公開しているAVSライブラリは<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>製で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>もシンプル。RaspberryPi Zeroでも動作したので、こちらを使用しました。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPL%A5%E9%A5%A4%A5%BB%A5%F3%A5%B9">GPLライセンス</a>なので注意)言語設定切り替えに対応していない、<a class="keyword" href="http://d.hatena.ne.jp/keyword/access">access</a>_token取得方法が古いなどいくつかの問題がありましたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>が綺麗だったため、修正は比較的簡単にできました。<a href="https://github.com/respeaker/avs/issues/29">→この辺のやり取り</a>。開発は止まっているようなので、今から始めるとしたら別途選択肢を探すほうがいいかもしれません。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Frespeaker%2Favs" title="GitHub - respeaker/avs: python implementation of alexa voice service app, 支持DuerOS" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/respeaker/avs">github.com</a></cite></p> <h3>Wake Word検出ライブラリ</h3> <p>Wake Wordは。Alexaなら「アレクサ」,<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Home">Google Home</a>なら「オーケー、グーグル」という、起動時の決り文句です。変更もできます。常時サーバーに音声を送るわけではなく,Wake Wordはローカルで検出します。</p> <ul> <li><a href="https://www.sensory.com">Sensory</a>: <a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a>-device-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sdk">sdk</a>デフォルト。精度いまいち</li> <li><a href="https://snowboy.kitt.ai">Snowboy</a>:精度いい感じ。商用の場合はお金かかるのでプロトタイプとして使うのにオーバースペックかも…。</li> <li><a href="https://github.com/Picovoice/Porcupine">Porcupine</a>:精度いい感じ。カスタムのWake Word登録は商用できないが、デフォルトのモデルは使えるらしい。</li> </ul> <p>以上の3ライブラリから検討し、ライセンスの関係から<a class="keyword" href="http://d.hatena.ne.jp/keyword/Porcupine">Porcupine</a>を使っています。</p> <h3>参考にした情報</h3> <p>上記以外に参考にした記事です。</p> <p><a href="http://kinokorori.hatenablog.com/entry/2018/03/05/000000">RaspberryPi&#x3067;GPIO(I2S)&#x3092;&#x4F7F;&#x3063;&#x3066;&#x30DE;&#x30A4;&#x30AF;&#x304B;&#x3089;&#x9332;&#x97F3;&#x3059;&#x308B; - &#x30AD;&#x30CE;&#x30B3;&#x306E;&#x81EA;&#x7701;&#x9332;</a> <a href="https://qiita.com/mayfair/items/d16d092328e60f0cac6b#%E7%8B%AC%E8%87%AA%E3%81%AEhotword%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B">Snowboy Hotword Detection&#x3092;Raspberry Pi&#x3067;&#x52D5;&#x304B;&#x3059; - Qiita</a> <a href="https://denor.jp/pi-zero-wはモバイルバッテリーでどのくらいの時間動作">Pi Zero W&#x306F;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x30D0;&#x30C3;&#x30C6;&#x30EA;&#x30FC;&#x3067;&#x3069;&#x306E;&#x304F;&#x3089;&#x3044;&#x306E;&#x6642;&#x9593;&#x52D5;&#x4F5C;&#x3059;&#x308B;&#x304B; | &#x65E5;&#x8A18;&#x3068;&#x3044;&#x3046;&#x307B;&#x3069;&#x3067;&#x3082;</a></p> <h2>スピーカーづくり</h2> <p>まずは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Fusion360">Fusion360</a>でスイッチサイエンスなど簡単に購入できるパーツを配置して、大きさを検討します。 <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20191024/20191024233005.png" width="1200" height="1083" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>あとで請求書つくるときと、自分で今回もこんなに買い物をしてしまった…と見返すためにBOMとまでは行きませんが、パーツリストもちゃんと残します。</p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125110.png" itemprop="image"></span></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Fusion360">Fusion360</a>で最終的なパーツをちまちま作ってレイアウト。パーツを作るのをさぼった部分はなぜか組立工程で問題がでるので…。</p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125120.png" itemprop="image"></span></p> <p>青色の部分は、DMM 3Dプリントでナイロン素材で発注しています。この図にはありませんが、外側に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%C0%A5%AF%A5%C8%A5%C7%A5%B6%A5%A4%A5%CA%A1%BC">プロダクトデザイナー</a>の方が作った筐体がかぶさります。</p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125130.png" itemprop="image"></span></p> <h3>LED基盤</h3> <p>光のアニメーションを凝りたいとのオーダーだったので、LEDを贅沢に配置しています。ReSpeakerには、GroveタイプのI2C端子がついていたので、それにつなげる想定の基盤のKiCadつくっていきます。回路設計は素人ですが…こんな感じです。</p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125140.png" itemprop="image"></span></p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125150.png" itemprop="image"></span></p> <p>Gerberは紙にレイヤー毎に印刷してチェックすると何故かミスが見つかります。アナログチェックは重要。</p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://lh3.googleusercontent.com/-2JFjMUjgZgk/XbGeOusIZ8I/AAAAAAABKzo/U3jQEx6iZAE1EhJcCpz6mrh2OOz6pNXgQCE0YBhgL/s1200/IMG_5070.HEIC" itemprop="image"></span></p> <p>基盤は<a href="https://www.pcbgogo.jp">PCBGoGo</a>で発注。一週間もかからずに届きました。私の用途ではクオリティも十分です。</p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125200.jpg" itemprop="image"></span></p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125210.jpg" itemprop="image"></span></p> <p> ちっちゃい…。中国で<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>修理する人とかすごすぎる…。</p> <p><img src="https://imgur.com/l4nsfkH.gif" alt="Imgur" /></p> <p>全部実装して、動作確認。うごいた!</p> <h2>シュミレーター</h2> <p>LEDのアニメーションは、普段よく使っているUnityでシュミレーターを作成してつくりました。</p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125220.png" itemprop="image"></span></p> <p><span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20010415/20010415125230.png" itemprop="image"></span></p> <h2>完成</h2> <p><img src="https://imgur.com/62e11Tp.gif" alt="Imgur" /></p> <p>組み立ててこんな感じ。最終的には外側に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%C0%A5%AF%A5%C8%A5%C7%A5%B6%A5%A4%A5%CA%A1%BC">プロダクトデザイナー</a>の方が作った筐体がハマります。</p> <p>以上こんなこともやってます。というメイキングでした。</p> asus4 Unity AR FoundationをEditor上でシミュレーションする方法 hatenablog://entry/26006613451241907 2019-10-18T17:10:59+09:00 2019-10-18T17:21:48+09:00 iOS13が公開されたことで、beta版をインストールしなくてもUnityでARKit3の新規のHuman Segmentaionなどが使えるようになりました。対応端末はiPhone X以降です。 実験としてこのようなアプリを作ってみました。 電子書籍のジャニーズになれるアプリを作りました。 #madewithunity pic.twitter.com/kSrx0eRk4D— Koki Ibukuro (@asus4) 2019年10月11日 が、開発中、実機で確認するのがとても面倒でした。ARKitはiPhone搭載のカメラのセンサを使うため、実機じゃないと動きません。毎回Unityからビル… <p>iOS13が公開されたことで、beta版をインストールしなくてもUnityでARKit3の新規のHuman Segmentaionなどが使えるようになりました。対応端末は<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%20X">iPhone X</a>以降です。</p> <p>実験としてこのようなアプリを作ってみました。 <blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C5%BB%D2%BD%F1%C0%D2">電子書籍</a>のジャニーズになれるアプリを作りました。 <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://t.co/kSrx0eRk4D">pic.twitter.com/kSrx0eRk4D</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1182655812919025664?ref_src=twsrc%5Etfw">2019年10月11日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p>が、開発中、実機で確認するのがとても面倒でした。ARKitは<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>搭載のカメラのセンサを使うため、実機じゃないと動きません。毎回Unityからビルド→<a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>プロジェクトに書き出し→実機で確認。のステップを踏まなくてはいけません。毎回実機確認に5分くらいかかります。ARKit2までは<a href="https://blogs.unity3d.com/2017/08/03/introducing-the-unity-arkit-remote/">ARKit Remote for Unity</a>で、Unity Editorとつなげてデバックができました。とところが、ARKit3の機能に対応しら新しいUnityライブラリである、AR Foundation (動作時点では<code>ver 3.0.0-preview.3</code>)ではリモートデバックができないようです。<a href="https://forum.unity.com/threads/ar-remoting-simulation.720575/">公式スレッド</a>によれば開発中だけど難航しているようです。</p> <p>なにかを作るときにはツールから作るのをモットーにしているので、Unity Editorにリモートで送信できるツールを作ってみました。現在はHuman Segmentation関係の機能しか用意していませんが、普通に動きそうです。</p> <p><blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Making an ARFoundation remote tool will <a class="keyword" href="http://d.hatena.ne.jp/keyword/improve">improve</a> development speed <a href="https://twitter.com/hashtag/madewithunity?src=hash&amp;ref_src=twsrc%5Etfw">#madewithunity</a> <a href="https://t.co/J8kBIzeagW">pic.twitter.com/J8kBIzeagW</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1184616712894849025?ref_src=twsrc%5Etfw">2019年10月16日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>はこちら。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2FARKitStreamer" title="asus4/ARKitStreamer" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/ARKitStreamer">github.com</a></cite></p> <p>仕組みはシンプルで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>からARに必要な情報を送ります。</p> <ul> <li>NDI <ul> <li>RGBカメラ(YCbCr色空間) 映像</li> <li>Depth 映像</li> <li>Human Segmentation 映像</li> </ul> </li> <li>WebSocket <ul> <li>カメラmatrixとかの情報</li> </ul> </li> </ul> <p>NDIは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Wi-Fi">Wi-Fi</a>経由だと遅いのですが、USB経由で接続すると0.3秒くらいの遅延で収まりました。</p> <h2>Hack <a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>でprivateプロパティだけなstructを作る</h2> <p>シミュレータを作るときに困った点を一つ。ARFoundationはコア部分はネイティブ<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>。そちらで生成したstructをやり取りしているので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>から見えるstructはプロパティが全部プライベートでした。</p> <pre class="code c#" data-lang="c#" data-unlink>[StructLayout(LayoutKind.Sequential)] public struct XRCameraFrame { public long timestampNs { get { return m_TimestampNs; } } long m_TimestampNs; public Matrix4x4 projectionMatrix { get { return m_ProjectionMatrix; } } Matrix4x4 m_ProjectionMatrix; ... }</pre> <p>↑このようなクラス構造。Unityでもunsafe{}を使えばこのようなstructでも作れますが、ライブラリ化を考えるとなるべくunsafe以外の方法でstructを作ったほうが良いため、以下の様な共用体をつくることで解決しました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/c%23">c#</a>で共用体って作れるんですね…。</p> <pre class="code c#" data-lang="c#" data-unlink> [StructLayout(LayoutKind.Sequential)] public struct MyCameraFrame { public long timestampNs; public Matrix4x4 projectionMatrix; ... } [StructLayout(LayoutKind.Explicit)] public struct CameraFrameUnion { [FieldOffset(0)] public MyCameraFrame a; [FieldOffset(0)] public XRCameraFrame b; } void main() { var union = new CameraFrameUnion() { a = new MyCameraFrame() { // これはいじれる! timestampeNS = 1000, } } // 共用体なので、aを作るとbもできる! XRCameraFrame b = union.b; }</pre> asus4 CoreMLの練習にDepth PredictionができるmacOSアプリをつくりました。 hatenablog://entry/26006613449483542 2019-10-14T21:35:07+09:00 2019-10-15T17:56:16+09:00 github.com 近頃macOSを開発に全く使ってなく、面白そうなアップデートに全く追従できていなかったので、サンプルが少ないCoreMLをmacOSから使うアプリを作りました。GitHubのReleasesからビルド済のアプリをダウンロードできます。PythonのMLライブラリ等と違い、ライブラリのインストール要らずで使えるのが一番の利点ですね。 Appleが既に用意してくれているFCRN-DepthPredictionモデルを使いました。 developer.apple.com *.mlmodelファイルをXcodeにドロップするだけで、クラスとして読み込まれます。パスからファイルを読… <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fasus4%2Fdepth-prediction-macOS" title="asus4/depth-prediction-macOS" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/asus4/depth-prediction-macOS">github.com</a></cite></p> <p>近頃<a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>を開発に全く使ってなく、面白そうなアップデートに全く追従できていなかったので、サンプルが少ないCoreMLを<a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a>から使うアプリを作りました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>のReleasesからビルド済のアプリをダウンロードできます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>のMLライブラリ等と違い、ライブラリのインストール要らずで使えるのが一番の利点ですね。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Apple">Apple</a>が既に用意してくれているFCRN-DepthPredictionモデルを使いました。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdeveloper.apple.com%2Fmachine-learning%2Fmodels%2F" title="Machine Learning - Models - Apple Developer" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://developer.apple.com/machine-learning/models/">developer.apple.com</a></cite></p> <p>*.mlmodelファイルを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>にドロップするだけで、クラスとして読み込まれます。パスからファイルを読み込むなどは必要なく、非常にシンプルです。</p> <p><figure class="figure-image figure-image-fotolife" title="CoreML model on Xcode"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/a/asus4/20191014/20191014212500.png" alt="f:id:asus4:20191014212500p:plain" title="f:id:asus4:20191014212500p:plain" class="hatena-fotolife" itemprop="image"></span><figcaption>CoreML model on <a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a></figcaption></figure></p> <p>inputs,outputsの情報も<a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>のインスペクタから見れるのも便利。今回のモデルは低解像度で160x128pxのグレイスケール深度画像(double)を出力するのが一発でわかります。</p> <p>出力される深度の値は、 0(手前)〜<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C9%D4%C4%EA">不定</a>値(奥)となっているので、白黒を反転、0-255までの範囲に正規化しています。</p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> 3D Photo</h2> <p>そもそもDepth Predictionを試してみた理由は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>の3D Photoが簡単に対応できるようになっていることに気づいたためです。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.oculus.com%2Fblog%2Fintroducing-new-features-for-3d-photos-on-facebook%2F%3Flocale%3Den_US" title="Introducing New Features for 3D Photos on Facebook" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://www.oculus.com/blog/introducing-new-features-for-3d-photos-on-facebook/?locale=en_US">www.oculus.com</a></cite> 画像と同じ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%B9%A5%DA%A5%AF%A5%C8%C8%E6">アスペクト比</a>のimage_depth.<a class="keyword" href="http://d.hatena.ne.jp/keyword/png">png</a>グレイスケール画像を用意するだけで、3D Photoのポストができます。</p> <p>このアプリでも<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> 3D Photoに対応する画像を書き出します。</p> <h2>実験結果</h2> <p>iPhoneXなどで気軽にDepthつき映像が手に入るようになっているものの、Depthを持っていない画像:昔の映画や、油絵などにDepthを推定するとどうなるかという実験をしてみました。精度や出力の解像度が荒いので、まだまだな印象があります。面白そうなのでもう少し掘って見ようと思います。</p> <p><blockquote class="twitter-tweet" data-lang="HASH(0x55d558d480e8)"><p lang="en" dir="ltr">To catch up with the latest CoreML development, I made a simple <a class="keyword" href="http://d.hatena.ne.jp/keyword/macOS">macOS</a> app using CoreML depth prediction model.<a href="https://t.co/aKHfpc0AD0">https://t.co/aKHfpc0AD0</a> <a href="https://t.co/QveXrapqth">pic.twitter.com/QveXrapqth</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1182270246687825920?ref_src=twsrc%5Etfw">October 10, 2019</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p><blockquote class="twitter-tweet" data-lang="HASH(0x55d558d480e8)"><p lang="en" dir="ltr">Painting depth prediction <a href="https://twitter.com/hashtag/CoreML?src=hash&amp;ref_src=twsrc%5Etfw">#CoreML</a> <a href="https://twitter.com/hashtag/macOS?src=hash&amp;ref_src=twsrc%5Etfw">#macOS</a> <a href="https://t.co/IZkGOGJ5do">pic.twitter.com/IZkGOGJ5do</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1182560462573047810?ref_src=twsrc%5Etfw">October 11, 2019</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> asus4 UnityからWebRTCで動画を送る選択肢 hatenablog://entry/26006613449461560 2019-10-14T20:43:26+09:00 2019-10-14T20:43:26+09:00 Google Stadiaが発表されて、いいGPUを積むよりもレンダリングは全部サーバー側で頑張って、クライアントでは早いネットワーク表示するだけな時代が来ていますね。2019年10月時点での選択肢を調べてみました。 github.com Unity Japanチームが開発している。 - Streaming Server(送り側)はWindowsのみ。Linuxも対応予定。 - ブラウザから入力をWebRTCで送るサンプルもある。 - NVIDIA製のグラフィックカードに最適化 github.com MicrosoftがHoloLens等で使うことを想定して作った。 - Windowsのみ -… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Stadiaが発表されて、いい<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>を積むよりも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EC%A5%F3%A5%C0%A5%EA%A5%F3%A5%B0">レンダリング</a>は全部サーバー側で頑張って、クライアントでは早いネットワーク表示するだけな時代が来ていますね。2019年10月時点での選択肢を調べてみました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2FUnity-Technologies%2FUnityRenderStreaming" title="Unity-Technologies/UnityRenderStreaming" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/Unity-Technologies/UnityRenderStreaming">github.com</a></cite> Unity Japanチームが開発している。 - Streaming Server(送り側)は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>のみ。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>も対応予定。 - ブラウザから入力をWebRTCで送るサンプルもある。 - <a class="keyword" href="http://d.hatena.ne.jp/keyword/NVIDIA">NVIDIA</a>製の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B0%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%A5%AB%A1%BC%A5%C9">グラフィックカード</a>に最適化</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fmicrosoft%2FMixedReality-WebRTC" title="microsoft/MixedReality-WebRTC" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/microsoft/MixedReality-WebRTC">github.com</a></cite> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a>がHoloLens等で使うことを想定して作った。 - <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>のみ - <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> / <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>対応したいとissueで言っているものの対応未定</p> <p><iframe src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Ftips.hecomi.com%2Fentry%2F2019%2F09%2F27%2F235955" title="uDesktopDuplication でキャプチャしたデスクトップ画像をリモートに転送してみた - 凹みTips" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://tips.hecomi.com/entry/2019/09/27/235955">tips.hecomi.com</a></cite> 凹みさんもNvEncを使用した<a class="keyword" href="http://d.hatena.ne.jp/keyword/NVIDIA">NVIDIA</a>製の高速なh264<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>を試していた。 - <a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>のみ</p> <p>…ご覧のように<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>からのストリーミング一択で。<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>サーバーは需要がないみたい。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fassetstore.unity.com%2Fpackages%2Ftools%2Fvideo%2Fgiga-video-streamer-125456" title="GIGA Video Streamer - Asset Store" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://assetstore.unity.com/packages/tools/video/giga-video-streamer-125456">assetstore.unity.com</a></cite> <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fassetstore.unity.com%2Fpackages%2Ftools%2Fnetwork%2Fwebrtc-video-chat-68030" title="WebRTC Video Chat - Asset Store" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://assetstore.unity.com/packages/tools/network/webrtc-video-chat-68030">assetstore.unity.com</a></cite> Asset Storeからはこちらの2つを調査。どちらもフレームごとに<a class="keyword" href="http://d.hatena.ne.jp/keyword/png">png</a>に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>して送っているので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>でも動いたものの遅かった。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fshiguredo" title="時雨堂 (shiguredo)" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://github.com/shiguredo">github.com</a></cite> 時雨堂さんが<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>ネイティブを開発しているので、UnityにWrapするのを検討中</p> <hr /> <p>最近はUnityから<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>へ動画飛ばしてエフェクトかける実験などをしています。</p> <p><iframe src="https://www.instagram.com/p/B0n9hn4oIzP/embed/" data-entry-image="https://www.instagram.com/p/B0n9hn4oIzP/media/?size=l" class="instagram-iframe" frameborder="0" scrolling="no" allowtransparency></iframe><cite class="hatena-citation"><a href="https://www.instagram.com/p/B0n9hn4oIzP/">www.instagram.com</a></cite></p> <p><iframe src="https://www.instagram.com/p/B0Vq-gcIl_Z/embed/" data-entry-image="https://www.instagram.com/p/B0Vq-gcIl_Z/media/?size=l" class="instagram-iframe" frameborder="0" scrolling="no" allowtransparency></iframe><cite class="hatena-citation"><a href="https://www.instagram.com/p/B0Vq-gcIl_Z/">www.instagram.com</a></cite></p> <p><iframe src="https://www.instagram.com/p/B0Vp6lNoIo5/embed/" data-entry-image="https://www.instagram.com/p/B0Vp6lNoIo5/media/?size=l" class="instagram-iframe" frameborder="0" scrolling="no" allowtransparency></iframe><cite class="hatena-citation"><a href="https://www.instagram.com/p/B0Vp6lNoIo5/">www.instagram.com</a></cite></p> asus4 2019年前半に公開したOSS hatenablog://entry/26006613387680416 2019-08-05T23:22:13+09:00 2019-08-05T23:22:13+09:00 GitHub - asus4/facial-landmark-annotation: Facial landmark annotation tool 動画の中の顔のランドマークを半自動で読み込み、ずれている部分は手作業で修正するツール。 初、Vuex - Typescript class base対応 Developing a facial landmark annotation tool #VueJS pic.twitter.com/eJDTscl1Er— Koki Ibukuro (@asus4) 2019年4月26日 [https://twitter.com/asus4/status/1… <h2><a href="https://github.com/asus4/facial-landmark-annotation">GitHub - asus4/facial-landmark-annotation: Facial landmark annotation tool</a></h2> <p>動画の中の顔のランドマークを半自動で読み込み、ずれている部分は手作業で修正するツール。 初、Vuex - Typescript class base対応</p> <p><blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Developing a facial landmark annotation tool <a href="https://twitter.com/hashtag/VueJS?src=hash&amp;ref_src=twsrc%5Etfw">#VueJS</a> <a href="https://t.co/eJDTscl1Er">pic.twitter.com/eJDTscl1Er</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1121750705092595713?ref_src=twsrc%5Etfw">2019年4月26日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p>[<a href="https://twitter.com/asus4/status/1122994785873289216:embed#Added">https://twitter.com/asus4/status/1122994785873289216:embed#Added</a> some features: copy &amp; paste, delete, etc... and published on <a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> Pages. <a href="https://t.co/GFXppefbrA">https://t.co/GFXppefbrA</a> #VueJS <a href="https://t.co/QUOmHBG8S8">https://t.co/QUOmHBG8S8</a>]</p> <h2><a href="https://github.com/asus4/vocabulary-book">GitHub - asus4/vocabulary-book</a></h2> <p>8月から息子が現地の保育園に行くので、レストランで使えるドイツ語とか要らないから、ピンポイントでこれだけ知っておけばなんとかドイツ語の保育園を生き抜ける単語帳が欲しくて作った。マスタデータは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Spread Sheetにおいて誰でも編集できるように。やっきーのママ友に手伝ってもらいました。URLを入れ替えれば、自分の独自のSperadSheetも読めますよ。</p> <p>vue-<a class="keyword" href="http://d.hatena.ne.jp/keyword/cli">cli</a>のテンプレート生成がいい感じなので、最近ちっさなプロトタイプ作るときも、</p> <ul> <li>Vue.js <ul> <li>class base TypeScript</li> <li>Sass</li> <li>Pug</li> </ul> </li> <li>Netlifyで公開</li> </ul> <p>の構成が固まってきた。</p> <h2><a href="https://github.com/asus4/real-emoji">GitHub - asus4/real-emoji</a></h2> <p><blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Face to Emoji<a href="https://t.co/kXwzVjgd5R">https://t.co/kXwzVjgd5R</a> <a href="https://t.co/R8SEtUVRuE">pic.twitter.com/R8SEtUVRuE</a></p>&mdash; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Koki">Koki</a> Ibukuro (@asus4) <a href="https://twitter.com/asus4/status/1126413558525374464?ref_src=twsrc%5Etfw">2019年5月9日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p> <p>これの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>。思いついてから30分で作った。最近顔認識をやりすぎている…。vue-<a class="keyword" href="http://d.hatena.ne.jp/keyword/cli">cli</a>でテンプレート作ってNetlifyでサクッと公開お手軽〜〜</p> <h2><a href="https://github.com/asus4/unity-poisson-blending">GitHub - asus4/unity-poisson-blending</a></h2> <p>Poisson Blending、<a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenCV">OpenCV</a>でいうSeamless CloneをUnityのCompute Shader上で実装したもの。 当初、もう少し高速な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>などもリサーチしていたが、これで0.5ms 以内で800<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C6%A5%EC%A1%BC%A5%B7%A5%E7%A5%F3">イテレーション</a>をマークしたので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GPU">GPU</a>の速さに感謝。同じ処理を<a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenCV">OpenCV</a> for UnityでCPU実装すると4msかかった。</p> <p><a href="https://camo.githubusercontent.com/35ab2d62a3f479ae69e4caa66b997f1c19605166/68747470733a2f2f692e696d6775722e636f6d2f474851517777722e6a7067" class="http-image" target="_blank"><img src="https://camo.githubusercontent.com/35ab2d62a3f479ae69e4caa66b997f1c19605166/68747470733a2f2f692e696d6775722e636f6d2f474851517777722e6a7067" class="http-image" alt="https://camo.githubusercontent.com/35ab2d62a3f479ae69e4caa66b997f1c19605166/68747470733a2f2f692e696d6775722e636f6d2f474851517777722e6a7067"></a></p> <h2><a href="https://github.com/asus4/mqtt-unity">GitHub - asus4/mqtt-unity</a></h2> <p><a href="https://github.com/chkr1011/MQTTnet">MQTTnet</a>をUnity上で動かすサンプル。案件用に作ったものの結局違う方法を使ったので、実戦投入はしてない。</p> <h2><a href="https://github.com/asus4/voice2midi">GitHub - asus4/voice2midi</a></h2> <p>声を<a class="keyword" href="http://d.hatena.ne.jp/keyword/FFT">FFT</a>にかけて、周波数帯ごとに<a class="keyword" href="http://d.hatena.ne.jp/keyword/MIDI">MIDI</a> Noteに変換してみる実験。ちょっと動作が微妙なので、ちゃんと計算し直す。</p> <h2><a href="https://github.com/asus4/faust-unity-playground">GitHub - asus4/faust-unity-playground</a></h2> <p><a href="https://faust.grame.fr/index.html">Faust</a>というオーディオ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%EC">プログラミング言語</a>をUnity上で動かすサンプル。Faust自体は超初心者だが、WebAudio, <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>, Andoid, PC Native, <a class="keyword" href="http://d.hatena.ne.jp/keyword/VST">VST</a>などへ書き出し機能があり、とても可能性がある。UnityのカスタムオーディオエフェクトをFaustで作れるということ。結構エラーがあって本家FaustにPR送ってやっと動いたりしたので、深堀りしたい人以外は、Unity連携はまだ様子見かもという感じ。</p> <h2><a href="https://github.com/asus4/unity-speech-recognizer">GitHub - asus4/unity-speech-recognizer: iOS Speech Recognizer for Unity</a></h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>のSpeechRecognizer機能をUnityから使える<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>。安定性は、有料Assetを買うほうが良い。私の場合はこの機能で足りた。</p> asus4