irisuinwl’s diary

サークル不思議(略)入巣次元の、数学や技術的なことを書きます。

VRChat OSCを試してみた

最近巷で話題のVRChat OSCで遊んでみたときのメモです。

もろもろの前提知識

OSC(Open Sound Controll)とは?

  • 通信プロトコル。元々音楽を送信するための規格らしい
  • Message(URLのPathように/で区切る形式)とArgument(送る値)で通信する

OpenSound Control - Wikipedia

yoppa org – openFramewoks – OSC (Open Sound Control) を利用したネットワーク連携

VRChat OSCとは?

  • VRC上でOSCを使ってAvatarと通信する機能がオープンベータで追加されたよ
  • 外部サービスとVRCのAvatarを通信することができるよ(eyetrackingしたりアバターの表情を外部アプリから操作したり…etc)
  • 詳しくはdocumentとgithubのもろもろを見てね!
  • clientは各言語のOSC Clientを使えばOK

VRCのリリースブログ: VRChat OSC for Avatars — VRChat

公式ドキュメント: OSC Overview

遊んでみた

python-oscとstreamlitを使ってVRChat上のアバターを操作するようなアプリを作りました

VRChatのOSC Serverは127.0.0.1:9000で立っているっぽいのでdocker containerからhostの127.0.0.1:9000にアクセスするようにするようにアプリケーションとdocker-composeを作りました。

streamlitは良い感じに公式ドキュメントみてparamの設定とsendを行うアプリケーションを作ります。

repos: GitHub - irisu-inwl/vrc_osc_python

demo:

他にも口パクとか操作しようと思ったけど、VRChat Avatarのパラメーターをちゃんと定義しないといけなさそう(VRMを単純にエクスポートする以上にVRChatのAvatar仕様を理解する必要がありそう)だったので、一旦今回はこれで満足しました。

今後、VRChatでライブするイベントがあるときにOSCを使って複雑な操作と、バーチャルとリアルのフィードバックがされると思うとめちゃめちゃ楽しみに感じられる技術でした。

じゃあねー

参考

VRChatでOSCやーる(Python3.9、Windows10) - Qiita

FirestoreのCRUD APIを作って、負荷試験をする

⛄⛄ この記事は Classi developers Advent Calendar 2021 12/21の記事です ⛄⛄

こんにちは、いりすです。

最近、バーチャルの肉体を得てYoutubeで配信したりVTuberっぽいことをしてます。 腰と足をトラッキングする用にkat loco sというデバイスを買ったりして、VRの感動を覚えてます。

f:id:irisuinwl:20211220045221p:plain
1か月前にやったVR筋トレ

さて、今回は、以前作成したGoogle CloudのFirestoreのCRUD APIに負荷テストをするアプリケーションについて解説し、負荷テスト結果をみていきます(VR関係ない笑)

source:

github.com

続きを読む

CPython Internalsが良い

こんにちは、いりすです。最近youtubeバ美肉配信にハマってます

 

今回は最近読んでいるCPython Internalsについて紹介します。

 

CPython InternalsはReal Pythonというコミュニティから出た本で、CPython 3.9の実装を概念、コードリーディング、コードの改変を通して解説していく本となっております。

realpython.com

 

自分でまとめたnotionは以下となります

ついでですが、自分が読書配信した再生リストです:

www.youtube.com

 

本記事ではCPython Internalsを読んでみた感想を紹介します。

 

続きを読む

バ美肉配信者になりました

こんにちは。

最近、バ美肉してyoutubeで配信を始めました。

www.youtube.com

 

image.png

 

やってる内容はコーディングしたり、本読んでまとめたり、ゲームをしたりです。

具体的な手順は別に解説しようと思いますが、今回はモチベーションや、やってみた感触について書きたいと思います。

 

モチベーション:

  • 単純に美少女になりたかった
  • 最近アウトプットの機会が減っていて学習モチベーションが低かった
  • 発話する機会が減っていて、発話によるコミュニケーション能力が落ちていると感じた
  • 記事やテキストだとインプットをアウトプットにする時間がかかるので、ライブコーディングすることでインプットを即アウトプットとすることで、その処理時間を削減したかった。

 

雑なまとめをすると新しいことをしたかったのでしたって感じです

続いてやってみた感想です。

  • 日ごろから声を出さないので、声を出す練習になる
  • 音響が聞き取りやすく調整するのがむずい
  • そもそも聞き取りやすさって声質の問題がでかいなって結論に到達する
  • 3Dモデルを知人に作ってもらったが、VRMモデルに合うようにhumanoidを作る調整がむずい(Unityが使える3Dモデラーじゃないときつそうに思った)
  • 学習の過程を配信することで、モチベーションにつながる
  • インプットをそのままアウトプットにできる(アウトプットとしての質は低いと思う)
  • 学習計画を配信につなげようという思考ができる(この分野を勉強する配信したら面白そうだよなぁなど)
  • 世の中のVTuberの人たちほんとすごいと感じる

以下は配信の際に工夫したメモ:

  • バ美肉ソフトウェア: luppetを使ってカメラによるフェイストラッキングと、leapによるハンドトラッキングをしてます
  • 3Dモデル作成 : blender -> unityからVRMに変換
  • 配信ソフト: みんな大好きOBS
  • ヘッドセットの音質が悪いので指向性カージオイドのマイクを買った
  • 音声エフェクト: OBSについてるノイキャンが優秀すぎる。あと声が小さいのでゲインとかコンプレッサーとか閾値を入れていい感じにした
  • 配信素材: OKUMONOが良き
  • 背景: 

    sozaino.site

  • 吹き出し素材

    sozaino.site

  • フォント: フロップデザインフォントがライセンス的にもデザイン的にも好きだったので導入

    www.flopdesign.com

 

まあ、そんな感じです。

じゃあねー

terraformでミスったGCSのバケットを消す

こんにちは。

terraformでGCSのbucketを作って遊んでたら、サービスアカウントのみにしか編集権限をつけなくて自分自身(admin role)がbucketを編集出来なくなる事態になったので解決法をメモろうと思います。

現象

こんな感じのポリシーを作ったらアクセスできないバケットが出来てしまい、terraform apply時のbucket参照できなくて、applyできなくなりました。

resource "google_storage_bucket" "mlops_bucket" {
  name          = var.gcs.bucket_name
  location      = "ASIA-NORTHEAST1"

  uniform_bucket_level_access = true
}

data "google_iam_policy" "admin" {
  binding {
    role = "roles/storage.admin"
    members = [
      "serviceAccount:my-service-account@appspot.gserviceaccount.com",
      // "projectOwner:${var.project_id}", // 本当はこれが必要
      // "projectEditor:${var.project_id}"  // 本当はこれが必要
    ]
  }
}

resource "google_storage_bucket_iam_policy" "policy" {
  bucket = google_storage_bucket.mlops_bucket.name
  policy_data = data.google_iam_policy.admin.policy_data
}

こんな表示がでるよ

$ terraform apply
Error: Error when reading or editing Resource "storage bucket \"b/mlops-storage-example\"" with IAM Policy: Error retrieving IAM policy for storage bucket "b/mlops-storage-example": googleapi: Error 403: **** does not have storage.buckets.getIamPolicy access to the Google Cloud Storage bucket., forbidden

  on gcs.tf line 17, in resource "google_storage_bucket_iam_policy" "policy":
  17: resource "google_storage_bucket_iam_policy" "policy" {

対処

  1. console上でbucketを消す

  2. terraform state上からリソースを消す(なんかこれ消さないと毎回作るっぽい)

irisu@DESKTOP-JTK8J9L:~/mlops-experience/mlflow/terraform$ terraform state rm google_storage_bucket.mlops_bucket
Removed google_storage_bucket.mlops_bucket
Successfully removed 1 resource instance(s).
irisu@DESKTOP-JTK8J9L:~/mlops-experience/mlflow/terraform$ terraform state rm google_storage_bucket_iam_policy.policy
Removed google_storage_bucket_iam_policy.policy
Successfully removed 1 resource instance(s).

これでapplyできた。

おしまい

冬休みの宿題

年末年始時間があるので、やりたいことをまとめる。

 

  • MLOps環境をつくる
  • kedroやhydra入門
  • cloud run or GAEでstreamlitアプリ爆速デプロイ
  • googleのハンズオンでやった内容をまとめる
  • GCP資格試験の勉強(courseraを終わらせる)
  • people AI guidebookにあるツールを使う。例えばfecet, what-if tools
  • 数学: 数学原論でそろそろ幾何の入門する
  • 数学: 統計的学習理論積んでるのでそろそろVC次元はマスターしたい
  • cyberpunk 2077終わらせたい

 

なんか転職して目まぐるしい感じだったけど、せっかくの休みだし、色々と挑戦していきたいねー

WSL2でterraform

最近terraformをキャッチアップしているので、WSLだと、どのようにセットアップするかなどをまとめる。

準備: VS Codeをwslにアクセスする

Remote Developmentを利用する。

MSのドキュメントまんまでできる

docs.microsoft.com

Ctrl+Shift+PしてからRemote-WSLと検索してWSLに接続できる。

準備: gcp sdkをインストール

この記事だと関係ないけど一応

curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-308.0.0-linux-x86_64.tar.gz
tar -zxvf google-cloud-sdk-308.0.0-linux-x86_64.tar.gz
cd google-cloud-sdk
./install.sh
./bin/gcloud init --console-only

terraformのインストール (optional)

公式でバイナリのzipを落としてきて解凍してbinに置けば良い

curl https://releases.hashicorp.com/terraform/0.13.5/terraform_0.13.5_linux_amd64.zip -O terraform_0.13.5_linux_amd64.zip
unzip terraform_0.13.5_linux_amd64.zip
cp terraform /usr/local/bin/

tfenvのインストール

terraformはバージョン依存で前つくったtfファイルが動かないことがあり、バージョン依存回避のためtfenvをインストールすると良いと聞いたので、tfenvを入れる。

公式repoのインストール方法を通りでOK

github.com

git clone https://github.com/tfutils/tfenv.git ~/.tfenv
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile
source ~/.bashrc

GKEをtfする

こちらの記事にあるtfファイルを使ってClusterをデプロイします。

qiita.com

terraform init
export TF_VAR_project=$GCP_PROJECT
terraform plan
terraform apply

f:id:irisuinwl:20201101155956p:plain

できた!

sampleアプリをデプロイする

gcloud container clusters get-credentials primary-cluster
kubectl create deployment     hello-app     --image=gcr.io/${GCP_PROJECT}/hello-app:v1
kubectl expose deployment     hello-app     --type="LoadBalancer" --port     8080

これでhttp通信できているか確認する

terraform destroy

f:id:irisuinwl:20201101161514p:plain

消えてる!

おしまい