Open3

カスタムしてdepthai uvcカメラを作るにはどうすれば良いのか?

A.しおまねきA.しおまねき

https://docs.luxonis.com/en/latest/pages/oak_webcam/
公式のサンプルコードの抜粋にコメントをつけてみる。

#↓これはdepthaiとは別のもの。pythonでバーチャルカメラを実現するモジュールか。
import pyvirtualcam
#↓depthaiのモジュール
import depthai as dai
# Create pipeline
#↓ここでいうパイプラインは何処の部分の処理だろう?デバイス内の処理?それともデバイスからホストまでの通信経路?
pipeline = dai.Pipeline()
#↓パイプラインにカメラのインスタンスを作らせる。ここでてくるnodeはなに?
cam = pipeline.create(dai.node.ColorCamera)
cam.setColorOrder(dai.ColorCameraProperties.ColorOrder.RGB)
cam.setPreviewSize(1280,720)
#↓XLinkはIntel Movidius VPU とホスト間の通信経路のことだったか?
xout = pipeline.create(dai.node.XLinkOut)
xout.setStreamName("rgb")
cam.preview.link(xout.input)
# Connect to device and start pipeline
with dai.Device(pipeline) as device, pyvirtualcam.Camera(width=1280, height=720, fps=20) as uvc:
    qRgb = device.getOutputQueue(name="rgb", maxSize=4, blocking=False)
    print("UVC running")
    while True:
        frame = qRgb.get().getFrame()
        uvc.send(frame)

カスタムしたカメラを作るにはdai.node下にカスタムしたカメラクラスを作る必要があるといことか?
https://docs.luxonis.com/projects/api/en/latest/components/nodes/

XLinkはデバイス・ホスト間のインターフェースAPIのこと。ここにある図からPipelineとはデバイス内のプロセスを管理するAPIということも分かる。
https://docs.luxonis.com/projects/api/en/latest/

デバイスにおける機能の単位がNodeNodeにはColorCameraMonoCameraなどのカメラ、EdgeDetectorObjectTrackerStereoDepthScriptなどの処理・検出機能、XLinkInXLinkOutなどの通信機能がある。カスタムカメラのNodeを作るよりはカメラノードと処理系のNodeを作った用が良いかもしれない。Script`ノードはパイプライン内のノードをホストのpythonスクリプトから制御するためのもので重たい計算処理には用いることができない。
https://docs.luxonis.com/projects/api/en/latest/components/nodes/

ImageManipは画像の加工を行うノード。恐らく本牧的にはこのノードを用いた方がよいのだろう。
https://docs.luxonis.com/projects/api/en/latest/components/nodes/image_manip/

加工した後、XLinkOutにつなぐ前に動画としてエンコードする必要がるだろう。
https://docs.luxonis.com/projects/api/en/latest/components/nodes/video_encoder/

A.しおまねきA.しおまねき

デバイス上の処理を作るには3つの方法がある。

  1. Script Nodeを作る
  2. カスタムNeuralNetworkノードを作る
  3. カスタムOpenCLカーネルを作る
  1. Scripting - Using Python3.9 with Script node
  2. Creating your own NN model to run more computationally heavy features
  3. Creating custom OpenCL kernels

https://docs.luxonis.com/en/latest/pages/tutorials/on-device-programming/

画像処理を行うのなら2番のカスタムNeuralNetworkノードを作るのが適しているか。

3つのカメラ画像を連結するだけのサンプルがある。
https://docs.luxonis.com/projects/api/en/latest/samples/NeuralNetwork/concat_multi_input/

NN modelを使うとそれの処理で律速する可能性がある。
https://docs.luxonis.com/projects/api/en/latest/tutorials/low-latency/