RaspberryPi openFrameworksでBoost Libraryを使う

[cpp]
#include <boost/algorithm/string.hpp>
using namespace boost;

int main() {

string str("192.168.0.1 192.168.0.2");
list<string> list_string;

split(list_string,str,is_space());

for(auto list : list_string){
ofLog() << list;
}

}
[/cpp]

#includeでヘッダ読み込むだけで使えました。functionなど一部std名前空間と名前がかぶっているようなので注意する。

ofPath::getOutline() and ofPolyline::getBoundingBox() でofRectが返って来ない問題 #openFrameworks

capture

ofPath::getBoundingBox();

ofxSvgの各パスをgetBoundingBox()でゲットしようとしたのが、値が返って来ない問題がありました。この問題の解決策としては、アウトラインを取るのに線の太さが設定し、またofPathのWindingModeも適したものを選択しておく必要があります。

サンプルコード

[cpp]

ofPath path; //パスを追加してください。
path.setStrokeWidth(1.0); //太さがないとアウトラインは取れない
path.setPolyWindingMode(OF_POLY_WINDING_ODD); //適した
auto polyLine = path.getOutline()[0]; //とりあえず0番目のアウトライン
auto rect = polyLine.getBoudingBox();

[/cpp]

参考

Get ofPath bounding box

ofImage画像をofPath描画でマスクする #openFrameworks

ofImageへのマスク処理

alpha

0.9.0~ できるようになったというofImageへのマスク処理 setAlphaMask (参考:画像を形を指定してマスクする)を試してみました。

サンプルコード

[cpp]

ofPath path;
ofImage img;
ofFbo fbo;

void ofApp::setup(){

ofHideCursor();

//set path
for(auto i = 0 ; i < 100 ; i++){
ofSetColor(255);
const auto pos = ofPoint(ofRandom(float(ofGetWidth())),float(ofRandom(ofGetHeight())));
path.lineTo(pos);
}

//set fbo
fbo.allocate(ofGetWidth(),ofGetHeight(),GL_RGBA /*GL_LUMINANCE*/);
fbo.begin();
path.draw();
fbo.end();

//set img
//dataフォルダに好きな画像を入れてください。
if(!img.load("mirrorboy.jpg")){
ofLog() << "image is not loaded." ;
};

img.setAnchorPercent(0.5,0.5);
img.getTexture().setAlphaMask(fbo.getTexture());
}

void ofApp::draw(){

ofBackgroundGradient(ofColor::yellow,ofColor::gray);

ofSetColor(255);
img.draw(ofGetWidth()/2,ofGetHeight()/2);

}
[/cpp]

ofxCvHaarFinderとofBeginShape()を一緒に使ったら顔認識されなくなった #openFrameworks

cvgraphics

ofxCvHaarFinder × ofBeginShape()

Raspberry PI の openFrameworks で ofxCvHaarFinderのfindHaarObjects()とofBeginShape() / ofEndShape()を使ったコードを書いていたら、何故か顔認識動かない。ofBeginShape() ~ ofEndShape()をコメントアウトすると認識される。

とりあえず解決案 – ofPushStyle() ~ ofPopStyle();

[code]

ofPushStyle(); //追加

ofBeginShape();

ofVertexes(); //描画

ofEndShape();

ofPopStyle(); //追加

[/code]

ofBeginShape() ~ ofEndShape()するときに内部で描画設定を変えられてるからかな〜と推測して、前後にofPopStyle()とofPushStyle()で囲んだら顔認識動いた。

openFrameworks & Raspberry PI 2 & ArchLinux (Rasbianでも使える) 設定メモ

Raspi

対応OSがいつの間にか変わった(Armv7で使いたい場合)

Raspberry Pi版 openFrameworksの推奨OS(?)が、0.9.2以降はArchLinuxになっていた openFrameworks http://openframeworks.cc/ja/setup/raspberrypi/raspberry-pi-getting-started-archlinux/ ラズパイ版のoFは毎度の事ですが、すんなりインストールできない。設定で困った所をメモっておきます。

※armv7 → ArchLinux , armv6 → Rasbian という事みたいです。なのでRaspi2でもarmv6で動かすならRasbianのままでOK。

ArchLinuxをMacで用意

oFサイトの方法はLinuxで用意する方法ですね。oFを使ってる方は、MacやWin使いが多いのかなと思うのでちょっと不親切。

oF公式のGetting Startに補足

  • ファイルの解凍のステップを飛ばしてる → tar zxvf filename
  • 日本語キーボードの選択 → loadkeys jp106
  • piユーザーを作ったけどログインしなおすステップが抜けてる → Preliminary work以降は、piユーザー
  • コンパイル中に言語設定で怒られる → .bash_profileに”export LANG=C”記入

パーティションの容量を増やす

openFramworks本体をコンパイルしてると”virtual memory exhausted”なんてエラーが出て止まります。原因は、パーティションが2GBになっていたから。こちらを参考に32GBまで増やしました。

スワップファイルを作成

“virtual memory exhausted: Cannot allocate memory”

OpenCVのサンプルプロジェクトをコンパイルしてるとメモリ足りない的な事を言われるので、Wikiを参考にSwapファイルつくりました。で、コンパイルできたと思ったら実行できなかった。

.profile に追記

MAKEFLAGS=-j4 PLATFORM_VARIANT=rpi2

ラズパイカメラ

RaspiCamera

初期設定

https://wiki.archlinuxjp.org/index.php/Raspberry_Pi

ofxRPiCameraVideoGrabber

https://github.com/jvcleave/ofxRPiCameraVideoGrabber

PlayStation Eyetoy

opencvExampleで使おうとすると、カメラから映像が取得できないので vidGrabber.setDesiredFrameRate(60); を指定すると使えるようになる。

コンパイルめっちゃ遅い

コンソールに出てくる文字列すら遅すぎて謎だなと思ったら、rasps-config で出来るGPUのメモリ指定を間違えて0MBに間違えてしてた。