taishoh のすべての投稿

UnityでAzureKinectのカラー画像表示する

ネット上にUnityで動くAzureKinectのサンプルがあんまりないんですよね・・・・
ほとんどDepthを使ってPointCloud表示したりとか

シンプルすぎるやつはまあ、誰でもできるよねって感じかもしれないけどC#なれてない自分は時間がかかったのでここに置いておきます。

UnityでAzureKinectを動かすためプロジェクトづくりはMicrosoftの公式のサンプルの中にUnityで使えるBodyTrackingのやつに書いてあるのでそれ見て環境を作ってください。
https://github.com/microsoft/Azure-Kinect-Samples

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.Azure.Kinect.Sensor;

public class ColorImageKinect : MonoBehaviour
{
    Device device;
    Calibration calibration;
    Texture2D kinectColor;
    DeviceConfiguration config;

    [SerializeField]
    Material mat;

    // Start is called before the first frame update
    void Start()
    {
        InitKinect();
    }


    void InitKinect()
    {
        device = Device.Open(0);

        config = new DeviceConfiguration();
        config.ColorFormat = ImageFormat.ColorBGRA32;
        config.ColorResolution = ColorResolution.R720p;
        config.DepthMode = DepthMode.NFOV_2x2Binned;
        config.CameraFPS = FPS.FPS30;
        config.SynchronizedImagesOnly = true;

        device.StartCameras(config);

        calibration = device.GetCalibration();

        int width = calibration.ColorCameraCalibration.ResolutionWidth;
        int height = calibration.ColorCameraCalibration.ResolutionHeight;

        kinectColor = new Texture2D(width, height);
    }

    // Update is called once per frame
    void Update()
    {

        Capture capture = device.GetCapture();
        
        Image colorImg = capture.Color;
        Image depthImg = capture.Depth;
    
        Color32[] pixels = colorImg.GetPixels<Color32>().ToArray();

        kinectColor.SetPixels32(pixels);
        kinectColor.Apply();

        mat.mainTexture = kinectColor;

    }

    private void OnDestroy()
    {
        device.StopCameras();
    }
}

上記スクリプトを適当なゲームオブジェクトにつけて、適当なマテリアルを用意すれば動くはず。
なぜか青と赤の色が入れ替わってるけど気にする人はシェーダーで直したってくださいませ。

【メモ】RasberryPi Zeroにnode.jsを入れる

全然更新してないね、このブログ…

というわけでRasberryPi Zeroにnode入れてみました。
調べるとよく出てくるnvmを使う方法はRasberryPi Zeroでビルドするっぽい

スペックが低いRasberryPi Zeroでは正直このビルド1日かけても終わらない

なのでnodebrewを使ってnodejsをビルドなしにバイナリで入れるのが正解っぽい。(nvmでもバイナリインストールできるかもですが正直調べてもない。)

※参考:Raspberry Pi Zero WでNode.js+SQLite3を動かしてみた
https://qiita.com/s-suefusa/items/6f4b1df1781c82999816

nvmで一日かけても終わらなかったインストール作業が5分かからずに終わった。(学びが深い)

ofxCvのdrawMatの挙動

openFrameworksでよくofxCvさんにお世話になってます。

Matを直でoFの画面に描画したい時にofxCv::drawMat()を使うんですが地味に引っかかったのでメモ

普通にカラーやグレイスケールのイメージの情報をもたせたMatをdrawMatで描画するのは大丈夫。

ただし、ROIを設定したMatをdrawMatで描画しようとするとおかしな描画になるという問題が…

 

Mat src;//何か画像を入れておく

cv::Mat roi = src(cv::Rect(10,10,100,100));
//cv::drawMat(roi, 0,0); //うまく表示されない…

cv::Mat roitmp;
roi.copyTo(roitmp);

cv::drawMat(roitmp, 0,0);

とりあえずMatをcopyTo()したり、clone()してたりするとうまくいくみたいでした。