6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RealSenseAdvent Calendar 2023

Day 3

RealSense D435の深度画像でZoom会議に参加する

Posted at

概要

RealSenseの深度画像でZoomのWeb会議に参加したかった。

手順

  • v4l2loopbackで仮想ビデオデバイスを作成
  • pyrealsenseでdepth 画像を読んで仮想ビデオデバイスに書き込む
  • Zoomの設定画面で仮想ビデオデバイスを選択

環境

OS : ubuntu22.04LTS
RealSense : D435
Python : Python 3.10.12

v4l2loopback のインストールと仮想ビデオデバイスの作成

v4l2loopback のインストール

sudo apt update
sudo apt install v4l2loopback-dkms

仮想ビデオデバイスの作成 (適当にデバイスIDを10とする)

sudo modprobe v4l2loopback video_nr=10

/dev/video10が作成されているか確認

$ v4l2-ctl --list-devices
Dummy video device (0x0000) (platform:v4l2loopback-000):
	/dev/video10

ソースコード

realsense_to_v4l2.py
import cv2
import pyrealsense2 as rs
import numpy as np

# RealSenseカメラの設定
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)

# パイプラインの開始
pipeline.start(config)

# GStreamerパイプラインの定義
video_device = "/dev/video10"
gstreamer_pipeline = (
    "appsrc ! videoconvert ! videoscale ! video/x-raw,format=I420 ! "
    "v4l2sink device=" + video_device
)

# 仮想デバイスへのビデオライターを設定
out = cv2.VideoWriter(gstreamer_pipeline, cv2.CAP_GSTREAMER, 0, 10, (640, 480))

try:
    while True:
        # フレームの取得
        frames = pipeline.wait_for_frames()
        depth_frame = frames.get_depth_frame()
        if not depth_frame:
            continue

        # デプスフレームの変換
        depth_image = np.asanyarray(depth_frame.get_data())
        depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)

        # 仮想デバイスにデータを書き込む
        out.write(depth_colormap)

        # ウィンドウに画像を表示
        cv2.imshow('Depth Image', depth_colormap)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
finally:
    pipeline.stop()
    out.release()
    cv2.destroyAllWindows()

※注意 ソースコードはすべてGPT4で書きました。

RealSenseをPCにつないで実行

python3 realsense_to_v4l2.py

Zoom会議を起動してZoomの設定画面のCameraからDummy video device (0x0000)
を選択する。

image.png

これでビデオONにすると仮想ビデオデバイスの画像が表示される。

Screenshot from 2023-12-03 17-21-31.png

おわりに

RealSenseの深度画像でWeb会議に参加できるようになった。
これでWeb会議でビデオONにしても恥ずかしくないですね。

参考

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?