Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

RaspberryPi + processingでヘッドレスに画像を生成させる(ちょっと微妙)

More than 3 years have passed since last update.

processingヘッドレスをRaspberryPiで試してみる

processingで画像を生成させて保存したい場合
RaspberryPiだとGUIを使いたくない場合があるしそもそもprocessingが重くて使いづらい
そこで、ヘッドレス(GUI無し)で画像を保存する方法があったので備忘録がてら記述
(ただ、最後の画像保存のところが微妙なのでお詳しい方解決策をお願いしたい思いもあります)

1. Processingをインストールする

processingはLinux 32bit 2.2.1をインストールした

参考

PROCESSING 2.1 + ORACLE JAVA + RASPBERRY PI + SERIAL + ARDUINO = ☺

$ sudo apt-get update
$ sudo apt-get upgrade

oracle javaのインストール

$ sudo apt-get install oracle-java7-jdk

processingのインストール

$ wget http://download.processing.org/processing-2.2.1-linux32.tgz
$ tar xvzf processing-2.2.1-linux32.tgz

processingに入ってるjavaを削除する

$ rm -rf ~/processing-2.2.1/java

oracle javaを反映させる

$ ln -s /usr/lib/jvm/jdk-7-oracle-armhf ~/processing-2.2.1/java

jSSCのインストール

$ wget https://java-simple-serial-connector.googlecode.com/files/jSSC-2.6.0-Release.zip
$ unzip jSSC-2.6.0-Release.zip

processingにjSSCを反映

$ mv jSSC-2.6.0-Release/jssc.jar ~/processing-2.2.1/modes/java/libraries/serial/library/

使用するjavaを変更する

$ sudo update-alternatives --config java

おそらくRaspberryPiだと

There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                                 Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/bin/java   318       auto mode
  1            /usr/lib/jvm/jdk-7-oracle-armhf/jre/bin/java          317       manual mode
  2            /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/bin/java   318       manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/lib/jvm/jdk-7-oracle-armhf/jre/bin/java to provide /usr/bin/java (java) in manual mode

というのが出てくると思うので、1のjdk-7-oracle-armhfを用いる

1をタイプしてEnterする

これで、processingおよびprocessing-javaがRaspberryPi上で動くようになった

次に、仮想的にxserverでprocessingを使うためにxvfbを導入する

2. xvfbの導入

参考
Running Headless Selenium on a Raspberry Pi

Xvfbのインストール

$ sudo apt-get install xvfb

フォントも念のためインストールする

$ install xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic

Xvfbを起動する

$ Xvfb :1 -screen 0 1024x768x24 &

_XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6
_XSERVTransOpen: transport open failed for inet6/raspberrypi:1
_XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6
[dix] Could not init font path element /usr/share/fonts/X11/misc, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/cyrillic, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/100dpi/:unscaled, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/75dpi/:unscaled, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/100dpi, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/75dpi, removing from list!
[dix] Could not init font path element /var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType, removing from list!

みたいなのが出てくるけど無視して大丈夫(フォントをインストールしていた場合[dix]の行数が減るはずです)

仮想的にディスプレイに反映させる

$ export DISPLAY=:1

これで準備は整ったので、プロセシングファイルを作って実行する

3. processingファイルの作成

とりあえず画像を出すのが目的なので適当なプロセシングファイルを作る

$ mkdir sample
$ cd sample
$ vi sample.pde

単純な円を描くプログラム

sample.pde
void setup() {
  size(200, 200);
}

void draw() {
  background(0);
  ellipse(100,100,100,100);
  save("test.jpg");
}

うまく実行出来れば、test.jpgという名前のファイルが作成される
processing-javaを用いて実行してみる。実行はsample.pdeを実行するのではなくて、sampleフォルダを実行することに注意
プロセシングのフォルダやsampleフォルダはhomeディレクトリに保存しているが、これらは適宜移動させても大丈夫

$ ./processing-2.2.1/processing-java --sketch=/home/pi/sample --output=/home/pi/sample/output --force --run

ちょっと時間がかかるので待つ

画面に

Listening for transport dt_socket at address: 8752

と表示されたら成功

sampleディレクトリにtest.jpgというファイルが生成しているはず

これでヘッドレスでprocessingを用いて画像を生成することができます

ただし、プロセシングプログラムで画像を生成しても、上手く生成できたり出来なかったり
というのが現段階の状況

無限ループを使用しているのが悪いのかもしれないのでこのあたりなんとか解決しておきたい・・・

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away