Amazon Web Services ブログ
AWS での 3Dflow による Photogrammetry の再構築
この記事は、“Photogrammetry reconstruction with 3Dflow on AWS” を翻訳したものです。
イントロダクション
この投稿では、Photogrammetry という手法を使用して、静止画からデジタル 3 次元(3D)アセットを作成する方法をご紹介します。そのために、3Dflow によって作成された Photogrammetry の再構築専用の 2 つの製品を取り上げます。グラフィカルユーザーインターフェイスアプリケーションである 3DF Zephyr と、Amazon Web Services(AWS)マーケットプレイスで入手できる FlowEngine コンテナです。次に、AWS オンデマンドコンピュートリソースを使用して、複数の Photogrammetry 再構築タスクのバッチ処理を自動化する方法を示します。
Photogrammetry は、関心がある強調したい領域の写真をキャプチャし、それをデジタル 3D アセットとして再作成することを伴う 3D スキャンの形式です。これは、写真のキャプチャと、モーションデータから構造を生成するために必要な処理アルゴリズム、深度マップ、ジオメトリメッシュ、テクスチャデータを含みます。その結果、一般的なデジタルコンテンツ作成(DCC)ツールと 3D レンダリングエンジンで読み取り可能な共通の形式でシリアル化された 3D メッシュとテクスチャマップが作成されます。Photogrammetry アプリケーションの例には、映画の視覚効果、アニメーション、ビデオゲーム、拡張現実(AR)または仮想現実(VR)アプリケーション、および地理空間土地測量が含まれます。Photogrammetry の再構築プロセスと使用例についてより詳しく知りたい場合はこちらをご覧ください。
再構築タスクは、結果の望ましい複雑さに応じてリソース要件を色々変えることができます。画像データセットと結果のアセットは、1 桁メガバイトから数十ギガバイトのディスク容量に及ぶ可能性があります。処理時間は、アセットごとに数分から数時間まで測定できます。少数の単純な 3D アセットの処理を超えて、AWS オンデマンドコンピューティングリソースとクラウドストレージサービスを使用してタスクを実行すると便利です。これにより、タスク専用のリソースの数をきめ細かく制御でき、使用した分だけ料金を支払うことができます。業界をリードするスケーラビリティ、データの可用性、セキュリティ、パフォーマンスを提供するオブジェクトストレージサービスである Amazon Simple Storage Service(Amazon S3)を使用すると、データにアクセスする必要がある頻度に応じて、コスト階層間でデータを移動できます。これにより、ストレージコストを最適化しながら必要なだけのデータを柔軟に保持できます。3Dflow の AWSMarketplace オファリングでは、消費ベースの課金が可能であるため、コンピューティングリソースの場合と同様に使用した分だけ料金を支払います。
この投稿は AWS Cloudformation テンプレートを提供しているため、インフラストラクチャをコードとして扱うことで、AWS とサードパーティのリソースを数分でモデル化、プロビジョニング、管理できます。この投稿で示されている手順を完了すると、デジタル写真をアップロードするだけで、 Photogrammetry の再構築タスクの処理を自動化できます。次に、再構築タスクの設定を調整する際の考慮事項と、3DFZephyr を使用してこれらの要件に対処する方法について説明します。再構築タスクを完了すると、結果の 3D アセットをダウンロードできるようになります。最後に、このウォークスルー中に作成された AWS リソースをクリーンアップするために必要な手順と、ほんの一握りの 3D アセットを超えてワークロードをスケーリングする際の考慮事項について説明します。
Photogrammetry のキャプチャプロセス
まずは、3Dflow が提供する無料の画像データセットをお試しいただくことをお勧めします。Photogrammetry パイプラインを開発する際に、これらのデータセットは品質レベルや処理要件のベースラインを提供します。最終的には、自分で写真をキャプチャしたいと思うようになるでしょう。
ここではキャプチャプロセスで気をつけるべき点をいくつか紹介します。
- 画像はシャープで均一な光であることが望まれます。
- 高解像度の画像はより詳細な情報を提供しますが、処理時間に影響を与える可能性があります。
- カメラのセンサーが大きいほど、結果は高画質になります。
- 例えば、フルサイズカメラ、アドバンストフォトシステム(APS)-C または APS-H センサーが望ましいです。
- 3D 空間における画像の方向付けを行う際に、画像間のオーバーラップが多いほど(理想的には 70~80%)ソフトウェアの精度が高まります。
- 照明の条件もまた仕上がりに大きく影響します。
- 曇り空の光やスタジオ照明でも良い結果が得られます。反射する透明な面は再現が難しい場合があります。
- 偏光フィルターを使用し、照明の影響を軽減する必要があるかもしれません。
ベストプラクティスを含むキャプチャープロセスの情報については、3Dflow が発行するチュートリアルをご覧ください。
ソリューションの概要
読み終わるまでにかかる時間:10 分
完成までの時間:20 分
完成までにかかる費用 :5 ドル未満
学習レベル:200-300
使われるサービス:Amazon S3, AWS Lambda, AWS Batch, Amazon CloudWatch, AWS Marketplace
3DFlow の Flowengine on AWS のリファレンスアーキテクチャ
アーキテクチャ
このソリューションは、Amazon S3 を使用して画像データセットの取り込みを容易にします。Amazon S3 にアップロードされたデータセットは、Docker コンテナをスケジュールおよび調整するためのフルマネージドサービスである AWS Batch を介して Docker コンテナプロセスを呼び出すイベントを開始します。AWS Lambdaはサーバーレスのイベント駆動型コンピューティングサービスであり、サーバーのプロビジョニングや管理を行わなくても、事実上すべてのタイプのアプリケーションまたはバックエンドサービスのコードを実行でき、Amazon S3 アップロードイベントに応答して AWS バッチコンテナジョブを開始するために使用されます。呼び出されるコンテナは、3Dflow によって開発された AWS Marketplace コンテナです。コンテナは、NVIDIA GPU インスタンスを備えた Amazon Elastic Compute Cloud(Amazon EC2)起動タイプで実行されます。 Amazon EC2 は、クラウドでセキュアでサイズ変更可能なコンピューティング容量を提供する Web サービスです。このコンテナは、Amazon S3 からアップロードされたデータセットをコピーします。次に、3Dflow の Flow Engine ソフトウェア開発キット(SDK)を使用して Photogrammetry 再構築パイプラインを実行します。最後に、結果を Amazon S3 に書き戻します。コンテナからの出力ログは、デバッグの目的で、モニタリングおよび可観測性サービスである Amazon Cloud Watch に書き込まれます。
前提条件
- AWS アカウント
- 3Dflow の FlowEngine AWS Marketplace container のサブスクリプション
- 3Dflow の 3DF Zephyr の無料版
- Amazon EC2 G4dn インスタンスのサービスクオータ。NVIDIA T4 GPU を搭載した Amazon EC2 G4dn インスタンスは、機械学習の推論や小規模なトレーニングに適した、クラウド上で最も低価格な GPU ベースのインスタンスです。 3Dflow は、より良い性能を発揮するために CUDA グラフィックライブラリを搭載した GPU を使用します。お客様のアカウントに、このソリューションに十分な G4dn の上限があることをご確認ください。最低でも 8 つの仮想 CPU(vCPU)が必要です。詳細はこのガイドをご覧ください。
デプロイメント
- 提供されたテンプレートでスタックを起動します。
AWS CloudFormation のコンソールにサインインし、提供されたテンプレートでスタックを作成します。FlowenginePipeline などの適当な名前をつけます。
FlowEngineImage パラメータをメモしておきます。これは、3Dflow が AWS Marketplace に公開したイメージです。本ブログ執筆時点(*1)では、最新版がデフォルトとして設定されています。AWS Marketplace のリストで最新版を確認してください。
スタックの詳細
(*1)2022年2月時点
残りのオプションはデフォルトのままで構いませんが、AWS CloudFormation は、特定の条件下で特定のユーザーのみがアクセスできる AWS Identity and Access Management (AWS IAM) リソースを作成する可能性があることに注意してください。次に、”Create stack “をクリックします。
CloudFormation が IAM リソースを作成する可能性があることを認識する。
スタックをデプロイしたら、スタックの出力を確認し、IngestionBucketName の Amazon S3 バケット名の値をメモしてください。これは、画像データセットをアップロードし、エクスポートされた結果を取得するために使用するストレージバケットです。
FlowenginePipeline スタックの出力
使用方法
ステップ1 – 画像データセットのアップロード
アカウントにリソースがデプロイされたので、画像データセットをアップロードして、3D アセットを作成することができるようになりました。画像は zip ファイルにアーカイブされ、設定コンフィギュレーション(Default.xml)を含む必要があります。
- zip アーカイブに画像と Default.xml を追加します。
以下に示す Default.xml のサンプルを、デフォルト設定で 3Dflow タスクを処理するために使用することができます。または、3Dflow の 3DF Zephyr を使用して設定ファイルを構成し、エクスポートすることができます。設定は、名前付きプリセットとして、または微調整された値で設定することができます。詳しくは、以下のチュートリアルをご覧ください。
FlowEngine Default.xml 設定ファイルの例
<?xml version="1.0" encoding="utf-8"?>
<Settings>
<Category name="Samantha">
<Entry key="Preset" value="General;Default"/>
</Category>
<Category name="Stereo">
<Entry key="Preset" value="General;Default"/>
</Category>
<Category name="Surface">
<Entry key="Preset" value="General;Default"/>
</Category>
<Category name="Texture">
<Entry key="Preset" value="General;Default Single Texture"/>
</Category>
</Settings>
- Default.xml ファイルと画像を zip アーカイブに追加します。この例では、”Cherub Statue “フリーデータセットを使用します。
- この例では、アーカイブを PhotogrammetryDemo.zip と名付けます。
注:FlowEngine コンテナは、zip ファイルの内容がサブフォルダを含まないルートレベルであることを想定しています。これは、一般的なターミナルアプリケーションで利用可能な “zip “コマンドを使用することで実現できます。
zip -r -j PhotogrammetryDemo.zip folderWithImagesAndSettingsFile/*
その後、zipinfo でアーカイブの中身を再確認することができます。
zipinfo PhotogrammetryDemo.zip
Archive: PhotogrammetryDemo.zip
Zip file size: 557299283 bytes, number of entries: 66
-rw-rw-r-- 3.0 unx 470 tx defN 20-Jul-27 08:46 Default.xml
-rw-rw-r-- 3.0 unx 8258583 bx defN 14-Apr-01 18:05 IMG_0001.JPG
-rw-rw-r-- 3.0 unx 8746490 bx defN 14-Apr-01 18:05 IMG_0002.JPG
-rw-rw-r-- 3.0 unx 8769712 bx defN 14-Apr-01 18:06 IMG_0003.JPG
-rw-rw-r-- 3.0 unx 8557037 bx defN 14-Apr-01 18:06 IMG_0004.JPG
...
-
2. Amazon S3 に zip ファイルをアップロードします。
ここでは、AWS コンソールを使用して Amazon S3 に zip ファイルをアップロードするデモを行いますが、AWS コマンドラインインターフェイス(CLI)、AWS SDK、HTTP リクエストを使用しても行うことが可能です。
- Amazon S3 コンソールをブラウズします。
- AWS CloudFormation テンプレートから ingestion バケットを探し、開きます。
- 拡張子 .zip を除いた zip ファイルと同じ名前のフォルダ、”PhotogrammetryDemo “を作成します。
- Upload を選択し、ブラウザウィンドウにファイルをドラッグ&ドロップするか、ディスク上のファイルを参照します。
Photogrammetry タスクの入出力用の新しい Amazon S3 バケット
FlowEngine コンテナは、zip ファイルのパスが以下のようになることを想定しています。
PhotogrammetryDemo/PhotogrammetryDemo.zip
コンテナは、完了すると同じ PhotogrammetryDemo サブフォルダに生成された結果を配置します。
ステップ2 – 再構築タスクの状況を確認する
画像データセットをアップロードすると、AWS Batch ジョブを起動するためのイベントが発生します。これらのジョブは AWS Batch コンソールから確認することができます。ジョブが実行されると、Amazon CloudWatch でログ出力を見ることができます。
- AWS Batch コンソールをブラウズします。
- 左メニューから Jobs を選択します。
- 3DFlowQueue のジョブキューが選択されていることを確認し、前のステップでアップロードした画像データセットに対応するジョブ(例:”photog-3dflow-PhotogrammetryDemo”)をクリックします。
ここでは、Amazon CloudWatch のログストリームへのリンクを含む、再構築タスクのステータスが表示されます
AWS Batch ジョブのステータス
ログストリームは、3Dflow のコンテナタスクが生成する標準出力です。
AWS Batch ジョブのログステータス
注:アップロードに関連する新しいジョブが表示されない場合、AWS Batch ジョブの送信を担当した Lambda関数 のログストリームを確認してください。Lambda 関数の名前は、STACKNAME-UploadDatasetEventUNIQUEID になります。Lambda 関数を「UploadDatasetEvent」でフィルタリングすると、利用可能な関数の一覧の中から正しい関数を簡単に見つけることができるはずです。Lambda 関数のログを表示する方法については、こちらのガイドをご覧ください。
Cherub のサンプルデータセットでは、この作業は 10-12 分程度で完了します。
ステップ3 – エクスポートした結果を確認する
ジョブが完了すると、Amazon S3 にエクスポートされた結果が表示されます。このセットアップでは、OBJ と MTL ファイル、3DK ファイル、Sparse と Dense の PLY ファイルをエクスポートするように FlowEngine を設定します。エクスポートされるファイルの種類については、FlowEngine コンテナに関する 3Dflow のガイドを参照してください。
- 結果をダウンロードします。
ファイルをアップロードするのと同様に、Web コンソールや AWSコマンドラインインターフェイス(AWS CLI)、AWS SDK、HTTP リクエストを使って Amazon S3 からファイルをダウンロードすることができます。
Amazon S3 コンソールで、前のステップで作成した PhotogrammetryDemo サブフォルダをブラウズします。ここで、エクスポートされたファイルを見ることができます。必要なファイルを選択し、ダウンロードします。
-
2. 生成されたアセットを任意のツールにインポートします。
OBJ ファイルは、一般的な 3D DCC ツールで幅広くサポートされています。無料のオープンソース 3D モデリングツールである Blender などのツールで OBJ ファイルをインポートすることで、3D アセットの表示や修正を行うことができます。
Blender での再構築タスクの結果
また、3DK ファイルを 3DF Zephyr に読み込んで、再構成プロセスで使用する設定を確認したり、微調整したりすることもできます。3DF Zephyr をより深く理解するために、3Dflow のチュートリアルをご覧ください。その後、必要であれば、将来のバッチ再構成タスクのために、新しい設定を含む XML ファイルをエクスポートすることができます。
3DZephyr の再構築タスクの結果
クリーンアップ
このスタックに配置されたリソースを削除するには、次の手順に従います。
- バッチ 3Dflow のキューに実行中のジョブがないことを確認します。
- ingestion バケットと logs バケットの中身を空にします(正しいバケット名を得るには、スタックの出力を参照してください)。
- AWS CloudFormation コンソールを参照し、このガイドでデプロイしたスタックを選択し、Delete をクリックします。
スタックの削除が完了すると、このガイドでデプロイされたすべてのリソースが削除されます。
次のステップ
次のステップを検討するためのトピックはたくさんありますが、それらはユースケースとビジネス要件によって異なります。
例えば、遠隔地からのキャプチャや、その場で写真のアップロードが必要なユースケースはありますか? MASV のような企業は、顧客が時間的制約のある大容量ファイルの転送を支援するサービスオファリングを構築しています。クライアントと Amazon S3 バケット間の長距離を高速、シンプル、かつ安全にファイル転送するバケットレベルの機能である Amazon S3 Transfer Acceleration や、超低遅延アプリケーションの開発、展開、スケーリングのためのモバイルエッジコンピューティングインフラを提供する AWS Wavelengthによる 5G 接続はいずれもエッジロケーション付近での作業において有益となる可能性があります。
再構成作業の実行に伴い、様々な段階で品質管理のチェックが必要になることがあります。例えば、Photogrammetry プロセスの最初のステップであるスパースポイントクラウドの生成は、比較的短時間で完了し、ディスク容量もほとんど必要としません。Amazon EventBridge はサーバーレスのイベントバスで、イベント駆動型のアプリケーションを簡単に大規模に構築できます。Amazon Simple Notification Service はフルマネージのメッセージングサービスで、Amazon DynamoDB はフルマネージのサーバーレス NoSQL データベースで、あらゆる規模のハイパフォーマンスアプリケーションを実行できるように設計されています。その結果、不良データを持つアセットの計算とストレージにお金を払う必要がなくなります。
生成されたアセットに対して、再構成処理後に追加でクリーンアップやテクスチャ操作、リファインメントを行うのが一般的です。AWS サービスのオーケストレーションに使用されるローコードビジュアルワークフローサービスである Amazon Step Functions を使って、他のツールやライブラリを完全なパイプラインに取り込むことができます。
ディープラーニングを利用した画像認識サービスである Amazon Rekognition を Photogrammetry パイプラインに組み込んで、画像の特徴に基づいて自動的にアセットにタグ付けすることができます。
Photogrammetry パイプラインでは、高解像度、つまり「ヒーロー」アセットに対して手作業によるクリーンアップが必要な場合が少なくありません。あらゆるクラウドやデータセンターからあらゆるデバイスにリモートデスクトップやアプリケーションストリーミングを安全に配信する方法を顧客に提供する高性能リモートディスプレイプロトコル、NICE DCV による仮想ワークステーションは、分散したユーザーに対してその場でコンテンツを編集する環境を提供することができます。この記事では、AWS アカウントに Windows ベースの仮想ワークステーションをセットアップする手順について説明します。Amazon Nimble Studio は、クリエイティブスタジオが視覚効果、アニメーション、インタラクティブコンテンツを完全にクラウド上で制作できるようにするサービスを構築しています。
まとめ
この記事では、Photogrammetry による再構成プロセスの概要を説明しました。Photogrammetry タスクを、使用した処理時間に対してのみ料金を支払うことができるようにオンデマンドの計算リソースで自動化する方法を示しました。3Dflow の AWS Marketplace コンテナの従量課金と、Amazon S3、AWS Lambda、AWS Batch、Amazon CloudWatch などの AWS サービスをハイライトすることで、それを実現しました。
参考文献
3Dflow tutorials
Photogrammetry on Wikipedia
Docker containers
参考リンク
AWS Media Services
AWS Media & Entertainment Blog (日本語)
AWS Media & Entertainment Blog (英語)
AWS のメディアチームの問い合わせ先: awsmedia@amazon.co.jp
※ 毎月のメルマガをはじめました。最新のニュースやイベント情報を発信していきます。購読希望は上記宛先にご連絡ください。
翻訳はSA 門田とSA 斎藤が担当しました。原文はこちらです。