お仕事まとめ 2022

2022年にやったお仕事のまとめです。

Lyric Speaker : Cotodama & Whatever Co.

かれこれ2014から開発に関わっているので、かれこれ9年目!!

今年はLyric Speaker Boxという新モデルを発売しました。見た目は初代のモデルと似ていますが、コストを削減するため多大な努力がありました。私はハードウェア開発には関わっていませんが、中国の工場チームとのやり取りを見れるのも勉強になっています。コロナ下での開発は本当に大変そうでした。
これだけ長い時間やっていると歌詞のモーションをプログラミングするという、超ニッチな分野のプログラミングが少しずつ見えてきた気がします。使い所がLyric Speakerでしかないのが惜しいですが。

lyric-speaker.com

またFranck Muller, 蜷川実花さんと言った世界一流の方たちとのコラボモデルを開発していることもあり、そのコンテンツを作るのはかなり緊張します。

ARアプリ : Litho

2021年後半から2022年前半まで、LithoというARと連動する6dof ポインターバイスを開発しているスタートアップを手伝っていました。

www.litho.cc

www.youtube.com

ファウンダーのNatはとても熱い起業家でコードも書く。仕事必要になったらいつでも言ってと言ってくれてます。心強い。 ハードウェアやるのは超大変なんだよ気持ちを分かち合ってる気がします。

ARアプリ のプロトタイプ

日本の企業さんからの依頼で、ARとハードウェアが連動するプロトタイプを作っていました。非常にいいプロトタイプが出来たと思うので公開したい

ARアプリ MoAR : Whatever Co.

Coクリエイターとして所属している、Whatever の本社ビルに巨大なQRコードを設置。AppleApp ClipsQRコードにかざすだけでロケーションベースのARを体験できるアプリです。

www.youtube.com

開発記録は主にCTO Saqooshaがアドベントカレンダーに書いてくれました。

qiita.com

ARアプリ Gorillaz presents… Skinny Ape : Google x Nexus Studios

www.youtube.com

こちらもロケーションベースのAR。ニューヨークタイムズスクエアとロンドンピカデリーサーカスで体験できるライブイベント。本体アプリの開発ではなく、技術調査みたいなところを少しだけお手伝いしました。

TensorFlow Liteまわり : NEX Team Inc.

www.nex.inc

こちらはプロジェクト本体ではなく、私の公開しているOSS, TensorFlow Lite Unity Samplesへ公開で機能追加を行いました。ありがたい。
NEXが作ってるボディトラッキングを使ったゲームも非常にクオリティが高いので遊んでみてください。

www.youtube.com


総括

びっくりするくらいARばかりですね。そしてここ5年ほどなぜかハードウェアと連動するもののソフト側を担当する案件も多い気がします。今やっているプロジェクトもAR。

そしてすべてリモートワーク。地域はロンドンが6割、東京が3割、その他サンフランシスコ、ダブリンなど。ロンドンはベルリンとの時差は1時間なので非常に仕事はしやすいです。朝イチに日本とミーティング、その後はロンドン。みたいな流れが多かったです。フリーランスは縁(コネともいう)なので、一度つながると、その繋がりが多くなりがち。その流れでロンドンの案件ばかり頂いています。2021年の目標であった、海外案件を増やすのは達成している気がします。(あれ2021年のまとめを書いてないですね…。2021年も頑張っていました。)

今年の目標としては

  • せっかくベルリンにいるので、ベルリンの縁を見つける
  • リモートワークでARがベースにしつつも、少しAR以外のプロジェクトにも手を出す

の二本立てでいきます。

オープンソース活動記録 2022

TensorFlow Lite Unity Sample

開発当初はTensorFlow Liteの公式モデルをUnityで動かすサンプル。で開発をはじめましたが、今では、Unity向けに最適化されたTensorFlow Liteのライブラリと C#バインディング、各種DelegateGPUなどを使った高速化オプション)を取り揃えたリポジトリになってきました。UPM(Unity Package Manaer)対応したのも大きいです。

2019年12月から始めて安定期。今年は大きな機能追加はなかったものの、地道な機能追加をしてました。

github.com

MITライセンスなので使ってくれている会社さんを、私に連絡頂いた方のみですが紹介します。

DeNA 配信アプリ IRIAM

10月に開催された Unityイベント内の講演でも使っていることを発表していただきました。TensorFlowの全ライブラリをCircle CIでビルドするという PRもいただきました。ありがたい。 events.unity3d.jp

NEX Team Inc.

www.nex.inc TGSでも話題になったStarriを開発している会社です。最初はGitHubのIssue経由でしたが、直接フリーランスとしての依頼を頂き、私のリポジトリへ優先的に機能追加をしたりしています。ソースコード非公開のプロジェクトでTensorFlow Liteを導入する案件もちらほらあるのですが、Unityのバージョンアップで動かなくなって、私が抜けたあとメンテできなくなったりするので、公開のリポジトリへの依頼はありがたいです。

Augmented Robotics

現実のラジコンをスマートフォンで認識してAR上のものとインタラクションが起こる。という面白いアプリを開発しています。Berlinがオフィスとのことで一度オフィスにもお邪魔しました。 https://augmented-robotics.com/ www.youtube.com

MoveAhead

Dublin City Univからの大学内スタートアップ。子供のためのモーション解析xゲームを作っているチームです。直接連絡をもらい、サポートもしていました。たまにオンラインで質問を聞いたりしています。 moveahead-project.com

他にも個人、企業含めいくつかの方から連絡をもらっています。誰も使わないだろ、と思うようなニッチなやつでも全世界に公開すると、使ってくれる人がいるんだなぁという。

MetaAvfi

keijiroさんがiOS, macOSで動画のレコーディングができるリポジトリを公開していたので、フォークして機能追加。任意のバイナリデータを動画に同期して記録、再生が可能です。普段の案件でUnityで動画レコーディングするのはNatCorderにお世話になっていて、非常のクオリティの高いライブラリではあるのですが、有料サブスクリプションモデルなので、ライブラリとして公開したい場合に気軽に使える動画レコーディング機能がほしいと思っていました。

github.com

これ、Unity 2021 LTS, 2022.1 までは動くのですが、2022.2からUnityのビデオプレーヤーに更新があり、可変fpsの動画が再生できなくなりました。Unity側にバグレポを送り、2023アルファ版では修正されましたが、2022版へもバックポートしてくれと連絡してます。果たして対応してくれるのか。

unity-texture-curve

andydbcさんのリポジトリをフォークして機能追加。 https://github.com/andydbc/unity-texture-curve/raw/master/Screenshots/screen0.gif

Animation CurveをRGBAの最大4チャンネル 、テクスチャにエンコードすることができるライブラリ。シェーダーでアニメーションをさせたいということが多いので、自分で欲しかった機能を足しました。

一つは、UPM対応。もう一つは、ScriptedImporterをつかって、エディタ読み込み時にテクスチャにしてくれる機能です。ランタイム時はただのテクスチャとして扱われます。ScriptedImporterは独自拡張子をUnityに読み込むときに便利な機能なので、積極的に使ってます。

github.com

TextureSource

UnityのWebCamTexture、使うの大変ですよね…。スマートフォンで使うと回転したテクスチャが帰ってくるし、macOSでは最初の数フレーム10 x 10の小さいTextureが来たあと、正しい解像度のTextureになる…。初学者には罠しかありません。普段は上述のNatDeviceを使うのが最適解だと思いますが、いかんせん有料サブスクリプションモデルなので、オープンソースで使いたいときに気軽に使えるやつを作りました。WebCamだけでなく、VirtualTextureというコンポーネント経由で、動画とWebCamをコード変更無しに切り替えられます。主に私がComputer Vision案件をやるために作りました。WebCamTextureは遅延が大きいので、いつかネイティブプラグイン用意したいなーと思ってます。

github.com

ml-slack-bots

Slack上で色々OpenAIや、 OpenAI, Hugging Face, Replicateのモデルを試せるSlackボットです。DALL·E 2や、Imagenが出てきて、まだStable Diffusionが公開される前に、自分でも色々モデル試さなきゃ!!と思って、作りましたが、Stable Diffusionモデルが公開されて、M1 macでもローカルで動くって状況なので、しばらくは使わなそうです。Slackのボットを初めて作りましたが、Slack APIGraceful Retriesという、3000ms以内に一旦レスポンスを返さないと、3回同じリクエストをリトライして送信してくる機能が、画像生成で時間がかかるモデルをAWS LamdaとSlackでやるのが相性悪すぎました。Graceful Retries切るオプション欲しいのは私だけではないはず。

github.com

URP Post Effect

URPでカスタムポストエフェクトを書く際に、RendererFeatureを追加して、ほにゃらら。って面倒くさいですよね。なので気軽にShaderGraphやら、ComputeShaderやらを組み込める機能を作りました。

github.com

Unity 2022 (URP 14以降)では、Full Screen Render Passが追加されて、気軽にできる!と思いきや、これ、Render Settingにマテリアルをアサインするので、一つのエフェクト追加するたびにパスが追加されるし、enable/disableを切り替えるのがめんどくさい。

ので、URP Post Effect的にな手法なほうが手軽で良いなーと個人的には思っています。

GitHub Sponsor

Sponsor @asus4 on GitHub Sponsors · GitHub

GitHub Sponsor、嬉しいことに毎月$100以上を支援して頂いてます。このおかげでGitHub LFSなどの有料機能も帯域が足りなくなったときにも遠慮なく追加出来ています。ありがとうございました。

Zenn Scraps

2022年は公開しても良いときは開発記録をZennのScrapsにだら〜と書きなぐっていました。ブログにまとめなきゃと思いつつ出来てなかったので、ハードル低く、文字に残せるScrapsは個人的にはありがたい機能です。

zenn.dev


以上です。
今年も作ったもので公開して良いのがあれば、積極的に公開していきます。

ビザ更新してきました。

2018年にベルリンに引っ越して3年が経ったので、ビザを更新してきました。

…3年あっという間でした。3年経ってやっとドイツの生活も(コロナも)落ち着いてきたという感触があり、まだベルリンに住んでいたいぞと思い更新です。 ビザの更新にも審査があり、全然だめだとビザが降りなかったりするらしいのですが、無事最長期間の3年のビザが折りました。

やったー!

短いですが近況報告でした。

TensorFlow LiteのGPU delegateを高速化する

今月は仕事の空き時間はずっとTensorFlow Lite C-API上でのGPU delegateの高速化に取り組んでいました。高速化といっても、GPU delegate内部に手を付けるのではなく、CPU → GPU間をデータ転送するときの転送待ち時間をなくす作業をしていました。

GPUでの計算はCPUとは比較にならないほど早いですが、結局なにかロジックを変更するのはCPU。GPUですべてのプログラムを動かすことはできません。
そして、CPUからGPUへのデータのアップロード、ダウンロードは、CG周りをやる方はよく悩んでいると思いますが、かなり…遅いのです。

私はUnity上でTensorFlow Liteを使っていて、Unity上ではほとんどの画像をGPU上で扱っています。しかし、TensorFlow LiteのAPIにはCPUメモリ上でデータをやり取りするするものしか用意されていませんでした。

その問題はこちらのissueでやり取りしています。↓ github.com

例えば、セマンティックセグメンテーションのタスクをUnityのTextureで実行して、Unity上で結果を表示しようとすると以下のような経路を辿らなくてはいけません。

Unity GPU → Unity CPU → TFL CPU → TFL GPU Delegate → TFL CPU → Unity CPU → Unity GPU

Unityで扱っているGPU上のデータをTensorFlowのCPU側のAPIを抜かして、TensorFlowのGPU Delegateへ直接送ることができればかなり高速化できるはずです。
実際にGoogleの公開しているMediaPipeというライブラリではそのような方法で高速化をしているようです。(逆にGitHub上でコードを探した限り、MediaPipeでしかやられてないんじゃないかとも思ってます。)

mediapipe.dev

色々とやっていた試行錯誤は↓こちら。Zennのスクラップへまとめています。 zenn.dev

そして、最終的には以下のように、UnityのGPUとTensorFlowを直接つなげることができました。

Unity GPU → TFL GPU Delegate → Unity GPU

iOSmacOSで使われているMetal Delegate ではUnityのComputeBufferはMTLBufferへ繋がります。

Androidの環境はちょっと複雑で、
GL DelegateGPU Delegate v2という2種類が用意されています。

GL DelegateはOpenGLES上で計算するもの。 GPU Delegateは、内部的には、OpenCL, OpenGLESの2パターンがOpenCLに対応してないAndroidの場合に自動的にOpenGLES側へフォールバックするようです。この辺ちゃんとドキュメントにかかれてなくて、ソースコード読んでやっと理解しました。またOpenCLで動いている場合でもOpenGLの Shader Storage Buffer Object (SSBO)へとつなげることができるようです。

世界中でどれだけ需要があるかわかりませんが、8割方の案件がARで機械学習をつかってる私が使うためにTensorFlow本体の方へも反映すべく、PRやり取り中です。マージされるといいな〜。

github.com

ステイホーム中に使ってみたサービス in ベルリン

2020年4月に初めてのロックダウンを開始したベルリン。そして2020年12月から続いていた長いロックダウン。今週、半年ぶりにようやくレストランで食事ができるようになりました。一年もすると様々なサービスの流行りが変わってきていて、面白いことになってきているので記録に残しときます。

Flink: 宅配専用スーパー

唯一自由に買い物できる場所のスーパーも今ではFFP2マスクというごついマスク必須。 その中で宅配専用スーパーFlinkが躍進しています。Uber Eats形式で自転車で届けてくれる。

www.goflink.com

試しに注文したところほんとに10分で届きました。DHL(ドイツの日本郵政的存在)へ荷物の集荷時間を指定しても、当日来ないどころか翌日に「今から行くで〜」と電話が来るようなドイツでは、10分で商品が届くって、奇跡的な凄さです。近所の潰れた店舗をFlinkに変える。客を入れないため、レジも通路もいらない。敷地面積が少なくて良い。冷蔵庫と自転車のみ。という開業コストのやすさも強みなのでは無いかと想像しています。

流行ったサービスはライバルもすぐ登場するようで、Gorillasという同じサービスもあります。どっちもほぼ同じ感じです。プッシュ通知で、「ゴリラが今向かってるよ〜(英語)」って行ってくるので少しほっこりしました。

gorillas.io


Flaschenpost: 飲み物専用宅配サービス

飲料専用の宅配サービス。ドイツではペットボトルやビンはPfandというデポジット料金が追加されていて、一個あたり10~30円くらい追加されています。それをスーパーに専用の回収機があるので入れると、スーパーの会計でデポジット分引かれるという仕組み。

スーパーで炭酸を買って大量に飲み終わったペットボトルをスーパーで返却していたのですが、ステイホームで一日中家で仕事をするようになり、消費量が増えて、重いペットボトルを買うのも大量に溜まったペットボトルをスーパーの回収ボックスにいれるのも億劫になってきました。

いっそのこと飲み物宅配サービスも始めてみようと思います。空の容器を回収してデポジットの手間がなくなるのがでかい…。

https://www.flaschenpost.de/

飲料宅配サービスは他にもいくつかあるが軒並みダサそうでう、もう少し良いのでないかなーと探し中です。

https://www.durstexpress.de/ https://www.hoffmannbringts.de/ https://addilo.de/ https://www.flaschengeister.berlin/


Wolt: レストラン宅配サービス

レストランはもう5ヶ月間、宅配もしくはテイクアウトのみでした。
Uber Eat はBerlinでは全然流行ってない気がしていて、別のレストラン宅配サービスを使っています。

東京都心部でも展開始まってるみたいですね。ベルリン中心部Mitteあたりだけでしたが最近私達のエリアも対応エリアに。アプリもロゴもベルリン最大手Lieferandよりおしゃれで流行るのもわかる。サイトをみてわかるように全部のメニューに美しい写真がついているのが強い。専用スタッフが撮影しているのか、撮影レギュレーションだけでこれだけ安定した写真が取れるのか気になります。

wolt.com

  • Lieferand: 最大手。対応エリア広い。
  • Deliverooはたまにみる。

基本、チップ文化なので、対面でチップを上げてたりしたけど、オンラインでチップをあげれたり。
No-contact deliveryというドアを開けないで配達するオプションも追加されてたり、とアプリの新機能が時代を表していますね。


Hello Fresh: レシピ食材サブスクリプション

レストランのデリバリーも飽きて、スーパーで買える食材でつくると献立もマンネリ化しがち。
レシピ&食材サブスクリプションもしばらくやってみていました。

https://www.hellofresh.de/

毎回、食材セットとレシピ(ドイツ語)が届きます。

日本人の私 or 妻が料理を作ると大体 醤油、みりん、砂糖、な味付けになってしまうけど。
毎回届くレシピはドイツ人好みなアレンジ。自分では絶対作らないタイプのレシピ達で新鮮。これをやって、料理のアイディアが少し広がりました。

ドイツの家にはほぼオーブンが設置されてる意味がわかりました。オーブン使うレシピが多いです。


結構色々試してきたのですが、今週からレストランが屋外席のみ、営業可能になりました。ビールを飲んでる人たちをみて、

今は。やはりレストランで飲むビール最高だな、はよ行きたいという気持ちです。