2017年6月27日火曜日

C++ヘッダーだけで動くライブラリstbってなに?

前回tiny-dnnのライブラリはヘッダーだけで他のライブラリはインストールしないで動くと書きました。今回はその原理というか中身についてちょろっとみてみたので、説明しようと思います。

まず画像の読み書きから。

tiny-dnnのなかでも使われているのですが、世の中にはすごい人がいまして、C++のヘッダーだけで動くいろんなフォーマットの画像を読み込める画像ライブラリstbがあります。

https://github.com/nothings/stb


これを使えば簡単にC++言語で画像の読み書きができます。
すーげーなー。
ちょー簡単に画像ファイルの読み書きとリサイズ、さらにいろんな変換ができます。
あの重いOpenCV使わないでいいんです。

これ大学の実験とかにもつかえるじゃん。

PNGとかzlib使っているはずなのでzlibとかもどうしているのかと調べるとさらにびっくり。

世の中にはもっとすごい集団というのがありまして、C++のヘッダーだけで動くライブラリをたくさん作っている方々もいます。

https://github.com/nothings/single_file_libs

このグループの哲学がすばらしいですね。


一つ、ライブラリはCまたはC++で動かないといけない
一つ、ライブラリはデスクトップやモバイルなどの複数のあらゆるプラットフォームで動かないといけない
一つ、ライブラリは32ビット環境でもでも64ビット環境でも動かないといけない
一つ、ライブラリは最大で二つのファイルでないといけない。

きちんとした理由があるのならば例外も許す。


C++のヘッダーだけで動くmpegエンコーダーとかC++のヘッダーだけで動くオーディオミキサーとかもうなんでもあるのですね。


これらを使うと、簡単にC++で音声や画像を読み込んで結果を動画で出力できます。
機械学習の結果やテストの結果など数値の羅列になりがちなプログラムを簡単にビジュアル化。
ラズパイのような非力な組み込みの環境でも簡単に音声や画像の処理ができてすごいことができてしまいます。

というわけで、C++でライブラリを作るときはヘッダーだけで動くように作るといろんな人が使ってくれるらしいです。



0 件のコメント:

コメントを投稿