ようじょのおえかきちょう

ふぇぇ お医者さんにペン持ったらダメっていわれた〜〜

Ruby でグラフ描く GR.rb をつかってみた(がんばって日本語を表示する手順)

今まで Ruby で PyCall を呼んで matplotlib でグラフ描いてたんですが、GR.rb っていうのができたらしいので使ってみました。

qiita.com

github.com

インストール

$ brew install libgr
$ export GRDIR=$(brew --prefix libgr)

または、https://github.com/sciapp/gr/releases からも落とせる。環境変数 GRDIR の設定を忘れずやる。

サンプルを描画してみる

Wiki にいくつかサンプルが載っている。ためしに棒グラフを描画してみる。

require "gr/plot"

continents = ["Africa", "America", "Asia", "Europe", "Oceania"]
population_2010 = [1044, 944, 4170, 735, 36]

GR.barplot(continents, population_2010, title: "Population 2010")
gets

f:id:yamasy1549:20200514174325p:plain

良さそう!

日本語のテキストを表示する

グラフに日本語を出したいことが多い、というかほとんどの場合日本語で出したいので、これもやってみます。

require "gr/plot"

continents = ["アフリカ", "アメリカ", "アジア", "ヨーロッパ", "オセアニア"]
population_2010 = [1044, 944, 4170, 735, 36]

GR.barplot(continents, population_2010, title: "2010年の人口")
gets

f:id:yamasy1549:20200514174624p:plain

なんてすてきな豆腐!

手順① GR をいじる

GR.rb には任意のフォントを指定する機能がなさそうだったので、GR をいじりました。

github.com

# ソースを手元に用意する
$ git clone git@github.com:sciapp/gr.git


# まず、普通にビルドできるかどうか確認する
$ make GRDIR=/tekitouna/tokoro/
$ make install

次に、lib/gks/fonts に好きなフォントを置きます。pfg と ttf が使えるみたいです。今回は Ricty-Regular.ttf を置いてみます。

js/Makefile にファイル名を追加します。

# 73行目付近
 fonts:
     mkdir fonts
-    cp -p $(GKSDIR)/fonts/CMUSerif-Math.ttf $(GKSDIR)/fonts/DejaVuSans.ttf $(GKSDIR)/fonts/gksfont.dat fonts/
+    cp -p $(GKSDIR)/fonts/CMUSerif-Math.ttf $(GKSDIR)/fonts/DejaVuSans.ttf $(GKSDIR)/fonts/Ricty-Regular.ttf $(GKSDIR)/fonts/gksfont.dat fonts/

...

# 97行目付近
  libGR.js: $(OBJS) $(LIBS) library.js fonts
      $(CC) $(OPTS) $(DEFINES) \
-    --embed-file fonts/gksfont.dat --embed-file fonts/CMUSerif-Math.ttf --embed-file fonts/DejaVuSans.ttf \
+    --embed-file fonts/gksfont.dat --embed-file fonts/CMUSerif-Math.ttf --embed-file fonts/DejaVuSans.ttf --embed-file fonts/Ricty-Regular.ttf \

lib/gks/ft.c にも追加します。

# 67行目付近
  const static FT_String *gks_font_list_ttf[] = {
      NULL,        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
      NULL,        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "CMUSerif-Math",
-     "DejaVuSans"};
+     "DejaVuSans", "Ricty-Regular"};

...

# 320行目付近
  static int gks_ft_convert_textfont(int textfont)
  {
    textfont = abs(textfont);
-   if (textfont >= 201 && textfont <= 233)
+   if (textfont >= 201 && textfont <= 234)

これで make して、GR.rb で使うために、環境変数も自分でビルドしたほうに設定しておきます。

$ make install
$ export GRDIR=/tekitouna/tokoro/

手順② GR.rb にモンキーパッチを当てる

https://github.com/red-data-tools/GR.rb/blob/3667b2226b7390c14bceee93d453bd9de94ebdcb/lib/gr/plot.rb#L567GR.settextfontprec(232, 3) を書き換えたいのでモンキーパッチを書きます。plot_data メソッドは長いですが変えたいのは 1 行だけです。

module GRExtention
  def plot_data(_figure = true)
    ...

    # ここの数字を、さっき追加したフォントの番号に変える
    GR.settextfontprec(234, 3)

    ...

  end
end

module GR
  class Plot
    prepend GRExtention
  end
end

パッチを呼んで実行すると……

require "gr/plot"
require "./gr_extension.rb"

continents = ["アフリカ", "アメリカ", "アジア", "ヨーロッパ", "オセアニア"]
population_2010 = [1044, 944, 4170, 735, 36]

GR.barplot(continents, population_2010, title: "2010年の人口")
gets

f:id:yamasy1549:20200514183447p:plain

やったー!

感想

前処理とか Ruby で書くほうが慣れてるので、データを用意してそのままグラフが書けるのはうれしい。あとはフォントサイズ変えるのとか軸ラベルを回転させるとか欲しいなぁと思っている。

簡易バ美肉をした記録

バ美肉って呼んでいいのかわからないんですが、とにかく、前々から気になっていた「かわいいアバターで通話する」をやってみました。そこそこ簡単にできてたのしかったです。

ツール

ぼくは普通に一般人です。誤家庭の床から機材がいっぱい生えてるタイプの逸般人じゃないので、特にそういう専用のカメラとかは持ってないです。あるのはAndroidスマホmacOSのPCだけ。ということで、

  1. REALITY というスマホアプリでアバターを動かし、
  2. その画面を ApowerMirror でPCに持ってきて、
  3. 配信ソフトの OBS で背景を合成したりして、
  4. Discord で通話します。

① REALITY - アバターを作って動かす

le.wrightflyer.net

VTuberのための配信アプリです。ちょっと前に聞いたことがあって、今回使えそうだなと思って採用しました。配信するつもりはないので、プレビュー機能(?)だけを使います。

まずはアバターを作ります。この時点でリアルタイムに頭・目・口を動かせるので楽しいです。目は片目ずつウインクできるし、口はにっこり・ア・イ・オくらいならできます。眼鏡をかけていても大丈夫。背景はGBとかBBにしておきます。素材感たまらないですね。

f:id:yamasy1549:20200301171601p:plain

アバターができたら、フッターの赤い配信ボタンを押します。押してもまだ配信はされないので大丈夫です。

f:id:yamasy1549:20200301171652p:plain

以降は、この配信プレビュー画面(?)みたいな画面をキャプチャしていきます。下に出てるボタン群は、画面の適当な場所をタップすると消えてくれます。この子かわいいですね。ぼくもこんなにかわいく生まれたかった。もう鏡を見れない

f:id:yamasy1549:20200301172022p:plain

② ApowerMirror - スマホ画面をPC画面にミラーリングする

www.apowersoft.jp

スマホとPCそれぞれにインストールします。スマホ-PC間の接続は、Wi-FiとUSBが選べます。

下の画像は、PC画面のようすです。スマホっぽい枠とロゴが入ってなんともダサい。最初はこのウィンドウごとDiscordで配信してたんですが、やっぱりダサいなぁと思っていたところ、次に紹介するOBSの存在を教えてもらいました。

f:id:yamasy1549:20200301173218p:plain

③ OBS - 背景をいい感じにする

obsproject.com

ApowerMirrorの枠を消して背景をつけます。

まず、配信画面にアバターを表示します。ソース > ウィンドウキャプチャ[ApowerMirror] ApowersoftMirror を選択します。この時点でなんでかロゴが消えてくれててうれしい。ロゴだけは別ウィンドウで、上から重ねてる扱いなのかな?

f:id:yamasy1549:20200301181211p:plain

次に枠を消します。いまのソースを右クリックして出てくるメニューの フィルタ から、エフェクトフィルタ > + > クロップ/パッド を追加し、枠をうまくクリッピングできる値に調整します。

f:id:yamasy1549:20200301181725p:plain

次はクロマキー処理です。先ほどと同様に エフェクトフィルタ > + > クロマキー を追加して、色キーの種類や類似性の値をいじります。類似性の値が適切でないと、髪の毛に緑の苔が生えたりします。

f:id:yamasy1549:20200301182151p:plain

枠を消してクロマキー処理を終えたところです。赤枠をいじって好みの配置・大きさにします。

f:id:yamasy1549:20200301182423p:plain

最後に背景を追加します。ソース > 画像 から好きな画像を選びます。後から追加されたソースが上に重なるようになっているので、適当に調整します。他には任意のテキストなんかも入れられます。んまっかわいい! 一連の画像をキャプチャするにあたって本人が柄にもなくウインクしたり頑張ってるのうわキツ……応援ください!

f:id:yamasy1549:20200301182743p:plain

④ Discord - 配信する

OBSの画面を右クリックすると出てくる ウィンドウプロジェクター のウィンドウをDiscordで配信します。

左が本人をうつしているスマホ、右がPC側のApowerMirror、中央がDiscordのLive画面です。本人-スマホ間はズレが1秒未満ですが、OBSを挟んでDiscordのLive画面を見ると2秒くらいズレてますね。しゃーない

f:id:yamasy1549:20200301210253g:plain

感想

  • アバター作成に10分ちょい、Discord上での配信までは数時間でできた。OBSの使い方を教えてくれた人ありがとう
  • 今度は手の動きもトラッキングしてみたい。そこまでやろうとすると機材が必要そう
  • 声がまだおっさんのままなので、可愛くなくてもいいからせめて聞きとりやすい声を出せるようになりたい
  • 鏡を見れなくなった
  • こういうアバター作って楽しいと感じる人には、プリパラやプリ☆チャンの筐体をおすすめしたい
  • あまり本人に寄せすぎたアバターを作らないほうがいい。現実ショックで鏡を見れなくなる

俺的おすすめ作業用BGMリスト

歌が入ってるとそっちに気を取られてしまうので、なるべく人が歌ってないやつを聴いています。知ってる曲のほうが安心するので、アニメのサントラとかを選ぶことが多いです。余談ですが、サウンドトラックのことをサウトラじゃなくてサントラと略すのは面白いですね。ウがンになる例は他にもあるんだろうか。

このリストは随時更新する予定です。

おとなしめ

ロード・エルメロイⅡ世の事件簿 -魔眼蒐集列車 Grace note- Original Soundtrack

音楽の素養がないのでシンプルだと感じるんですが、実際シンプルじゃないんだと思う。おとなしいだけじゃないところが大好きです。最近これしか聴いてない。

ご注文はうさぎですか? ORIGINAL SOUNDTRACK

おとなしめのBGMといえばカフェ、カフェといえばごちうさです。

ペルソナ3フェス オリジナル・サウンドトラック

あとで挙げるP4とかP5のサントラと比較したら、P3はおとなしいタイプのおしゃれ感があります。

けものフレンズぱびりおんのBGM

こんなツイートを発掘したのでたぶんそうなんだと思います。今はこのゲームやってないので、もしかしたら変わってるかもしれない。

kemofure.bushimo.jp

気分をアゲアゲにしたいとき

ダンガンロンパ オリジナルサウンドトラック

ダンガンロンパは履修してないけど曲がかっこいいので聴いています。考え事をするのには向いてないけど、やること決まっててやるだけ状態、スピード出していくぞってときに向いています。

ペルソナ2 罪×罰 サウンドコレクションvol.6

サトミタダシカダスマンダラ店 【罰】でびっくりして完全に集中力が切れてしまったが、ポモドーロテクニック(適当な時間を決めて、時間が来たら集中モードと休憩モードを交代するやつ)だと思えば良いかもしれない。

ペルソナ4 オリジナル・サウンドトラック

むかしこれを布教されてまんまとハマってしまった。カッコよさとダウナーな感じのバランスが良い。

ペルソナ5』 オリジナル・サウンドトラック

こんなん良いに決まってるやんな。アニメ見てたのでそのときのドキドキ感とか思い出しますね。

外界の音をシャットアウトしたいとき

Camellia曲全般

すべての曲を聞いたわけではないのに全般と言っていいのか? ハズレを引いたことがないので多分大丈夫。とりあえずAmazon Music にある一番新しいやつを貼ってますが、この中では Σtealth-Δash が好きです。

もういっこ貼っとこ。暴力的な曲も好きです。R U Still xxxx? とか。

ウォーキングのとき

ガールズ & パンツァー オリジナル・サウンド・トラック

Disk2の各校テーマ曲が良い。パンツァー・リートが好きです。

ガールズ & パンツァー劇場版 オリジナルサウンドトラック

人類みんな Säkkijärven polkka 大好きなの知ってるからな。