Slide 1

Slide 1 text

AWSで雰囲気でつくる! VRChatの写真変換 ピタゴラスイッチ 八雲アナグラ(@AnaTofuZ) 2025/04/04 JAWS-UG山梨 【第5回】勉強会

Slide 2

Slide 2 text

● 八雲アナグラ(@AnaTofuZ) ● Webアプリケーションエンジニア ○ 株式会社コードタクトで教育系のアプリケーションやってます ● 1月から甲府でフルリモート ○ 山梨出身ですがそれまでは沖縄とか京都にいました ○ 5/31になんでもあり技術イベントHoutou.pmを甲府で開催予定 ● 今日は趣味100%の話です 自己紹介

Slide 3

Slide 3 text

● 無料で遊べるVR SNS ○ 別にVR機器なくても遊べる ● Meta Questやスマホからも起動可能 ○ 機能制限がちょっとあるのでゲーミングPCから接続が推奨 ○ つまり基本windows端末から起動する ● テレワーク限界成人男性が会話機会を獲得できる貴重なサービス VRChat

Slide 4

Slide 4 text

● VRChatにはカメラ機能がある ● 外カメ/内カメがあるので 自撮りも比較的簡単にできる カメラ https://metacul-frontier.com/?p=14064

Slide 5

Slide 5 text

● 撮影したデータは c://Users//Pictures/VR Chat  以下にyyyy-mmのディレクトリ が切られて保存される ● VRChat_yyyy-mm-dd_hh:mm: dd_解像度.pngの命名規則で保存 撮影データ

Slide 6

Slide 6 text

● オフ会の時にVRChat上での写真をスマホ で表示したものをTwitterにあげる文化 ● バックアップ用途としてもローカル以外 の場所で写真を管理したい ○ Amazon Photosとかで管理したい 写真を外でみたい

Slide 7

Slide 7 text

● VRChatで撮影した写真のディレクトリをAmazon Photosでアップロード 対象に選択 ● あとはAmazon Photosのwindowsアプリがいい感じにアップロードして くれる というわけで

Slide 8

Slide 8 text

● VRChatで撮影した写真のディレクトリをAmazon Photosでアップロード 対象に選択 ● あとはAmazon Photosのwindowsアプリがいい感じにアップロードして くれる というわけで 勝ったッ!第1部完!

Slide 9

Slide 9 text

● VRChatで撮影した写真のディレクトリをAmazon Photosでアップロード 対象に選択 ● あとはAmazon Photosのwindowsアプリがいい感じにアップロードして くれる というわけで 勝ったッ!第1部完!

Slide 10

Slide 10 text

● Amazon Photosにアップロードすると撮影日が設定されず順不同で表 示されてしまいアルバムとしては微妙な状態に ● VRChat上ではカメラで撮影するものの、現実ただの画像出力で日付デー タがpngに書き込まれない仕様になっている ○ 写真系のサービスにアップロードすると撮影日が不定いなる ○ 撮影日のメタデータを書き込んだ上でクラウド等に保存したい 撮影日順に並ばない ...

Slide 11

Slide 11 text

● 画像のメタデータの規格 ● 一種のKVSと考えると早い ● 撮影日はDateTimeOriginalというキーでYYYY:MM:DD HH:MM:SS形 式のvalueを設定すると認識される Exif ❯ exiftool PXL_20250127_001602781.jpg ExifTool Version Number : 13.00 File Name : PXL_20250127_001602781.jpg Directory : . File Size : 842 kB File Modification Date/Time : 2025:01:27 09:17:30+09:00 File Access Date/Time : 2025:02:16 21:11:33+09:00

Slide 12

Slide 12 text

● WindowsからVRChatの画像にExifの撮影日を書き込みたい ● 個人的な理由であまりwindowsのプログラミングしたくない ○ windows側の作業はローコストにしたい ● 写真は大事なデータなのでクラウドでも保存したい ● JAWS-UGがあるのでなんかAWSでやっときたい やりたいこと

Slide 13

Slide 13 text

● WindowsからVRChatの画像にExifの撮影日を書き込みたい ● 個人的な理由であまりwindowsのプログラミングしたくない ○ windows側の作業はローコストにしたい ● 写真は大事なデータなのでクラウドでも保存したい ● JAWS-UGがあるのでなんかAWSでやっときたい やりたいこと よっしゃじゃあ AWSでやるぞ!!

Slide 14

Slide 14 text

● WindowsからS3に画像アップロードが実は可能 ○ aws cliを使う ○ win scpを使う ■ win scpだといい感じの送信処理がすでに組み込まれてるので 楽 ● 開発に関してはとりあえず手動でブラウザからアップロードして検証する windows から S3

Slide 15

Slide 15 text

● 最近の規格でPNGでもExifを書き込めるようになったがExif処理ライブラ リ側が未対応のものが現時点で多い ○ コントリビュートチャンスとも言える ● PNGではなくTIFFまたJPGEGに一度変換するとすんなりとExifを書き込 める ● golangだと標準ライブラリPNGからJPEGに変換できる ○ golangでlambdaをつくる PNGのつらみ

Slide 16

Slide 16 text

winscpで画像送信 lambdaでjpg変換しつつ EXIFを付与 winscpで画像取得

Slide 17

Slide 17 text

● lambdaのOS専用ランタイムをさっとつくる ● golangのバイナリをbootstrapという名前でビルドする ○ CGO_ENABLED=0 GOOS=linux go build -tags lambda.norpc -o bootstrap  ■ CGO_ENABLED=0にしないとホストのglibcに依存して上手く起 動できない ● zipで固めてアップロード!! lambdaアップロード

Slide 18

Slide 18 text

● 固めてアップロードする工程が面倒なのでlambrollを使う ○ https://github.com/fujiwara/lambroll ● lambroll init --function-name=anatofuz-XXX ○ これですでに作成したlambdaリソースを引っ張る ● あとは生成されたfunction.jsonに設定を書き込む ○ タイムアウト秒数の指定とか ● バイナリを生成したらlambroll deployで全自動でアップロード lambroll

Slide 19

Slide 19 text

{ "Architectures": [ "x86_64" ], "EphemeralStorage": { "Size": 512 }, "FunctionName": "anatofuz-XXX", "Handler": "bootstrap", "LoggingConfig": { "LogFormat": "Text", "LogGroup": "/aws/lambda/anatofuz-XXX" }, "MemorySize": 128, "Role": "arn:aws:iam::.......", "Runtime": "provided.al2023", "SnapStart": { "ApplyOn": "None" }, "Timeout": 10, "TracingConfig": { "Mode": "PassThrough" } }

Slide 20

Slide 20 text

lambdaのトリガーで s3を指定

Slide 21

Slide 21 text

アップロードして ...

Slide 22

Slide 22 text

変換されてるつぽい

Slide 23

Slide 23 text

変換後の方に書き込まれてる !!

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

無事に日付順に!!! その結果

Slide 27

Slide 27 text

● windows起因で画像をaws ピタゴラスイッチでいい感じにした ● lambrollでのデプロイ便利だった ● 趣味でもAWSは便利!!! ● あれこれローカルにNASしてミニPCのLinuxサーバーで処理すればよ かったのでは!? まとめ