4D Scan のための複数台カメラを制御するアプリケーション「カメラ番長」の開発【2024年度インターン】
自己紹介
東京大学大学院 情報理工学系研究科 コンピュータ科学専攻 修士1年の加藤大地です。大学では自然言語処理を専攻しており、ニューラルネットワークで構成したエージェント同士に会話のシミュレーションをさせ、人工的に創発させた言語を解析する「言語創発」と呼ばれる分野の研究を行っています。研究の合間にWebエンジニアとして開発を行っており、現在PFNでは、パートタイムエンジニアとして、optuna-dashboardの開発に従事しています。
インターンで取り組んだこと
PFN 4D Scanの撮影現場では、現場の環境に合わせて数十台のカメラをセットアップする必要があります。全てのカメラを人手で制御するのは手間なので、現状ではカメラのベンダーから提供されるカメラ制御用のアプリを用いて撮影を行っています。しかし既存のアプリには、使えるカメラの種類が限られる、挙動が不安定などの問題があったり、4D Scanの撮影用に最適化されていないUIになっていたりと、作業効率を低下させる要因が多数残されていました。
そこで、私のインターンプロジェクトとして、これらの問題点を解決できるような、4D Scanに特化したアプリを作成することになりました。具体的には、以下のような特徴を持つアプリを開発しました:
・複数種類のカメラを同時に扱えるアプリケーションにしました。また、将来的に新しいカメラの実装も簡単に追加できるよう、実装上の工夫を施しました。
・不安定なハードウェアの挙動によって問題が生じてしまった場合でも、アプリケーション側でそれを検知し、ユーザに対して適切なエラーを表示するようにしました。
・4D Scanでよく使われるフローを機能として組み込み、撮影フローに最適化されたUIとなるように工夫しました。
アプリを動かすPCとカメラとは直接には繋がず、Ubuntuが載ったRaspberry Piを中継地点として使いました。複数種類のカメラのSDKを内部で叩き分けることのできる「カメラ用サーバ」と、カメラ用サーバを複数取りまとめてAPIを提供する「APIサーバ」を開発し、それぞれRaspberry PiとPCにのせました。また、APIサーバと通信しながらUIを提供するフロントエンドの実装も行いました。フロントエンドではReact + TypeScript + Viteを、バックエンドではFastAPI + Ryeを主に使用しました。
インターン参加のきっかけ
PFN代表の西川さん・岡野原さんと同じ学科出身ということもあり、PFNという会社自体の知名度は、自分のコミュニティの中で元から非常に高かったですが、機械学習の研究に長けたAIの会社というイメージがぼんやりとあっただけで、開発をメインにキャリアを進めていこうと思っていた自分は、当初あまり強く応募を考えているわけではありませんでした。しかし、インターンのプロジェクト一覧を閲覧したところ、開発プロジェクトが研究プロジェクトと同程度あり、機械学習をはじめとして技術力の高い方が揃うPFNの環境で実務経験が積めることを知って、一気に興味を持ちました。
インターンに参加して得たもの
技術的に多くのことを学んだのはもちろん、PFNで働く社員の方々の雰囲気や、会社のカルチャー、オフィスの空気を知ることができたのは非常に良い経験になりました。当初思っていた通り、機械学習関連の技術に非常に力を入れていることの再確認もできた上、開発にも非常に力を入れていて、リサーチャーとしてだけではなくエンジニアとしても優れた方が多いことに驚きました。リサーチャー、エンジニアの区分が明確に存在せず、両方のことに興味を持って高いレベルで取り組んでいる方が非常に多いと感じました。
こんな方にはPFNインターンをおすすめします!
PFNに対して、機械学習の研究のイメージを強く持たれている方も多いかとは思いますが、機械学習だけをやっている会社では決してなく、そのほかにもいろいろな事業がある会社です。そして、その各事業それぞれに、関連技術に長けた人、その技術に強い興味を持つ人が本当に多い環境です。また、自分が知らない技術に関しては、現在知らないこと自体は大きな問題とならず、これから学んでキャッチアップすれば良い、という風潮が強く根付いていると感じました。このような技術と学びを中心に回る環境で、インターンとして働けることは非常に刺激的で、2ヶ月弱という短い期間の中でも非常に大きく成長することができます。新しい技術を学んだり、それを使って何かを開発したりするのが好きな方は、ぜひインターンへの応募をご検討ください。
また、PFNの社員の方々は、リサーチャーとエンジニアの区分を明確に持たずに仕事を行なっているため、両方のスキルを持つ方は非常に重宝されると感じています。リサーチャーとエンジニアのどちらにも魅力を感じている方、機械学習とエンジニアリングの両方の知見を活かしたいと思っている方にも、非常におすすめです。
インターンプロジェクトのブログ記事: 4D Scan のための複数台カメラを制御するアプリケーション「カメラ番長」の開発

