Imaginary Code

from kougaku-navi.net

カメラ映像(または動画ファイル)から光点を検出し、座標値をOSCで送信するアプリ「LuminousOSC」を作りました

物体の位置計測を行う技法のひとつに、対象物に光るマーカーを取り付けて、それをカメラで撮影し、その画像から光点の位置を検出するという方法があります。いわゆる光学式モーションキャプチャで使われている技法です。画像中の光点の2次元座標の計算自体は…

ProcessingのCaptureがうまく動かないときの他の選択肢

Processingのビデオキャプチャ(Capture)がうまく動かない事案はしばしば発生します。対処用にビデオキャプチャのライブラリを2種類作りましたので、ダメだったときに試してみてください。(2023/6/14追記)3番目の方法として OpenCV for Processing を使う…

Processingでキー入力によるカメラ操作をする

3Dのプログラムを作っていると視点操作が欲しくなります。すぐにパッと使えて改造もしやすいカメラ操作用のクラスを作りました。キー操作で上下左右の首振りと、前後上下左右の移動ができます。 www.youtube.com 以下をProcessingにそのままコピペすれば動き…

ネットワークカメラの映像をp5.jsで受信し表示する

iOS端末をネットワークカメラ化するアプリとしてipCamがあります。370円と有料ですが、リモートカメラをインスタントに作る手段として重宝します。ipCamが送信するカメラ画像をp5.jsで受信して表示するコードを書きました。ipCam - Mobile IP CameraSKJM, LL…

Arduinoのシリアル通信でコンマ区切りのデータを受信・分解する

シリアルで送られてきた「100, 200, 300, 400, 500」みたいなコンマ区切りの数値列をint型の配列データに分解するコード例です。Processingでいうところのsplit()関数があると便利なんですが、ないみたいなので、みんな各々作ってるみたいですね。 void setu…

ProcessingでArduinoから送られてくるコンマ区切りのデータを受信する

よく書くコードの覚書です。 import processing.serial.*; void setup() { Serial serial = new Serial(this, Serial.list()[0] ); } void draw() { } void serialEvent(Serial port) { if ( port.available() > 0 ) { String s = port.readStringUntil('\n'…

Processingで日時指定&ミリ秒表示付きのタイマーを作る

とある目的でProcessingでタイマーを作ることになったのですが、そこでの要件が「日付込みで終了時刻を設定したい」と「ミリ秒の桁(正確には1/100秒の桁)の表示もしたい」の2つでした。これが地味に面倒だったので、どうやったのかの記録をここに残してお…

ProcessingでターミナルのUIを作る

Processingでカタカタカタッターン! をやりたいとき用にターミナルのUIを作りました。アピールポイントはコマンドの入力履歴機能とメッセージごとに色付けできる機能。www.youtube.com コードはgithubに置いておきます。 github.com ライブラリ化するほどで…

Processingで自作クラスの中にserialEvent()を作る

Processingにおいて外部デバイスとシリアル通信をやるとき、データ受信時の処理を行う関数としてserialEvent()という関数を作ります。serialEvent()の中に書かれるコードは大抵の場合、受信データをパースして欲しいデータを取り出すような処理になるのです…

Processingでシリアルポート選択のUIを作る(JComboBox版)

ProcessingでArduinoとかとシリアル通信するとき、ポートと通信速度をリストから選べるUIが欲しいですよね。はい、作りましょう。 import processing.awt.*; import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.…

Processingのシリアル通信で「Error, disabling serialEvent()」というエラーがでたら

ProcessingでArduinoとかとシリアル通信をやるとき、 Error, disabling serialEvent() for <ポート番号> というエラーにでくわすことがあります。 なぜこのエラーがでるのか、なにを疑えばいいのか このエラーメッセージを表示しているのは、Serialライブラ…

RealSense T265 の位置・姿勢情報をOSCで送信し、Processingで受信する

今年の春に発売されたSLAMカメラこと Intel RealSense Tracking Camera T265 ですが、安価で安定した3次元の位置・姿勢トラッキングができて大変良いです。UnityやC++向けには公式のライブラリがありますが、ライブラリのないProcessingとかでも使いたいの…

ProcessingからArduinoへint型のデータを送る

これの逆バージョンの話です。 ArduinoからProcessingへint型のデータを送る - Imaginary Code ヘッダに文字を使う方法 データを分割して送信する際に、先頭に「H」という文字を付けて送る方法です。 Processing int型のデータを上位バイトと下位バイトに分…

さよならダイアリー、こんにちはブログ

2019年春「はてなダイアリー」終了ということで、追い出されることになったので、やむなく「はてなブログ」に移行しました。それと、移行ついでにブログのタイトルを変えました。 リンク切れとか起きそうな気がするけど、人ん所のサービスを使う時のリスクだ…

スマホで作るNintendo Labo

Nintendo Laboが発売されましたね。Toy-Conガレージという自分で作品を作れるモードもあって、すでにTwitterにはいろいろな作品が投稿されています。ちょうどゴールデンウィークなので、工作を楽しんでいる人も多いでしょう。今回はそんなNintendo Laboを、…

PImageに対して図形を直接描画する

Processingで画像処理のプログラムを書いていると、画像(PImage)に対して四角形や円を直接描画したいことがあります。ウィンドウに対する描画命令であるrect()やellipse()をPImageに対して使えたらいいのにねーという話です。間接的にそれを実現する方法に…

Webカメラの映像をストリーミング配信してProcessingやp5.jsで受信する

カメラ映像をネットワーク越しに送受信したいことがたまにありますよね。Processingやp5.jsで作る場合にどうしたらいいかを紹介します。 ストリーミング配信するソフト PCに接続されたWebカメラを使って映像をストリーミング配信したい場合、「Gmax IP Camer…

これから研究をする君へ

●考えるということについて・普段から意識的に頭を使って考える、という練習をしてください。・考えるという行為は運動に似ています。普段からトレーニングをしていない人にはいきなりできません。・机に座っている時だけ考える、というのはだいぶ効率が悪い…

OpenCVで画像の上に別な画像を貼り付ける (位置・サイズ指定あり)

たぶん車輪の再発明だろうし、OpenCV3.0ともなればいい加減このへんをなんとかしたAPIがありそうな気がするけど、探すより作った方が早かったので作った。反省はしてない。 #include <opencv2/opencv.hpp> // 画像を画像に貼り付ける関数 void paste(cv::Mat dst, cv::Mat src, i</opencv2/opencv.hpp>…

Processingで3Dグラフィックスを扱う上での注意点

Processingのグラフィックスの描画系は内部でOpenGLを利用していますが、ProcessingのAPIは特有の癖があるのでOpenGLと同じ感覚でやっていると時々戸惑うことがあります。3DグラフィックスまわりのProcessing特有の仕様について気をつけておくべき点をここに…

Processingで画面座標に対応する空間座標を計算する

3Dのアプリケーションにおいて、画面をクリックして空間中のオブジェクトの表示位置を指定するときなど、画面の2次元座標に対応する3次元空間座標が欲しいときがあります。こんなとき、どんな計算を行えば良いかについて解説します。コードはProcessing 2.…

Processingで視点の位置・姿勢を取得する

3次元のCG空間において、空間に対する視点(カメラ)の位置・姿勢の情報が欲しいときがあります。例えば、監視カメラを表現したいときや、自分中心の移動を行いたいときなど。これに関するTipsを紹介します。Processingでは、getMatrix()という命令を使うと…

OpenGLで描画された画面をOpenCVのcv::Mat形式の画像として取得する

たぶんこんな感じ。描画フォーマットを自動判別するのはやってない。 cv::Mat getScreen() { int width = glutGet(GLUT_WINDOW_WIDTH); int height = glutGet(GLUT_WINDOW_HEIGHT); int bits = glutGet(GLUT_WINDOW_BUFFER_SIZE); int type = CV_8UC4; // ま…

RICOH THETAで撮影した写真やライブ映像をProcessingで全天球表示する

RICOH THETAは2013年の発売以来多くのユーザに親しまれ、バージョンアップを重ねて着実に進化を遂げてきました。2014年に発売されたRICOH THETA m15では動画撮影に対応し、そしてつい先日発売されたRICOH THETA Sでは念願のライブ映像出力(HDMI/USB)が搭載…

OpenCV虎の巻

講義用に作ったOpenCVのインストール&ファーストプログラミングガイドを公開しました。 kougaku/OpenCV-Toranomaki - GitHub Windows版 Mac版 HTMLやらMarkdownもいいけど、素のテキストファイルで書くのがいちばん楽でいいなぁ。この手のただのドキュメン…

OpenCV用のプロジェクトジェネレータを作りました

OpenCVを使ったプログラミングは最初のプロジェクトの設定がめんどいですよね。あの作業を授業でやろうとするとこれまた大変。経験上、どれだけドキュメントを丁寧に書いても「先生動きません!」→「手順通りやってねぇだろゴルァ!」みたいなことが必ず起こ…

Processing用のOculus Riftのライブラリを作りました

DK2向けにヘッドトラッキングとレンズ補正をやってくれるProcessing用のちゃんとしたライブラリが見当たらなかったので、先人たちの偉業を組み合わせて新しく作りました。先人たちに感謝。 ダウンロードページ(GitHub) kougaku/OculusRiftP5ページ右下の「…

SimpleOpenNIをMac OS X Yosemite (10.10.2)で動かす

OSや開発環境のバージョンが上がって過去のソフトウェアが動かなくなることは世の常ですが、最近ひさしぶりにProcessingでSimpleOpenNIを使おうと思ったら案の定つまったので、そのインストールメモです。 環境 Mac OS X Yosemite(バージョン 10.10.2) Pro…

Macでメタセコイアを動かそう

モデリングソフトとして根強い人気のあるメタセコイアですが、惜しいことにWindows版しかありません。でも大丈夫。MacでWindowsアプリを動かす方法があります。というわけで、Macでメタセコイアを動かす方法について説明します。 導入環境 これまで「Macでメ…

Processingでコード側の設定で強制的にPresent Modeにする

普通に公式にある情報なんですが、こうすると普通に実行しても強制的にPresent Mode(フルスクリーン)になります。 boolean sketchFullScreen() { return true; } void setup() { size(displayWidth, displayHeight); } void draw() { } Window Size and Fu…