目次

はじめに
第1章 FlutterとOpenCVをつなぐもの
第2章 Flutterの画像処理
2.1 Flutter アプリケーションの構造
2.2 Widget
2.3 プラグイン
第3章 OpenCVの画像処理
3.1 Flutterから呼び出す関数の基本型
3.2 Mat
第4章 FlutterからOpenCVを呼び出す方法
4.1 共有ライブラリのオープン
4.2 Cの関数を呼び出すためのdart関数の作成
4.3 Flutterからの呼び出し方法
第5章 共有ライブラリとアプリケーションの作成
5.1 プラットフォーム共通Flutter部
5.2 Androidでの共有ライブラリの作成
5.3 Windowsでの共有ライブラリの作成
5.4 Linuxでの共有ライブラリの作成
第6章 FlutterとOpenCVを使ったアプリ
6.1 並行バッチ処理
6.2 OpenCVカメラ
6.3 ビデオ解析
6.4 赤文字強調
6.5 テキスト検出
付録A 参考資料
あとがき

はじめに

 FlutterはGoogleが開発したクロスプラットフォームのモバイルアプリケーション開発フレームワークです。Dartと呼ばれるオブジェクト指向プログラミング言語を使用しておりプログラムが開発しやすく、NULL安全な仕組みによってバグがでにくい構造となっています。また、豊富なウィジェットとUI機能を提供し、高速で美しいユーザーインターフェイスを構築できることが特徴です。

 OpenCVは歴史のあるコンピュータビジョンライブラリで、画像処理やコンピュータビジョンのための様々なアルゴリズムを提供しています。画像や動画の処理、物体検出、顔認識、機械学習など、多岐にわたる機能を持っています。OpenCVは、C++で実装されており、Flutter同様、多くのプラットフォームで使用できるようになっています。

 FlutterとOpenCVを組み合わせることで、Flutterで開発されたアプリケーションに画像処理やコンピュータビジョンの機能を追加することができます。あるいは調査・研究で使っているOpenCVを使ったライブラリに、使いやすいUIを付け加えることができます。

この本の対象読者

 FlutterとOpenCVのどちらかを知っているが組み合わせて使ったことのない人、業務や研究で蓄積したC++のライブラリ資産をスマホのアプリに活かしたい人、Flutterを使っていて細かな画像処理をしたい人などが対象です。

 本書全体で、Android、Windows、Linux環境で、FlutterとOpenCVを組み合わせたアプリの作成について流れが分かるように書いたつもりです。面倒なら5章だけ読んでいただいて、共有ライブラリの開発環境が整えられれば、この本の役目は果たせたんだなと思います。

 開発環境のインストールなど、まったくの初心者向けの説明を大幅に省略したところがあるので、詳しくはそれぞれの解説書に当たってもらえればと思います。そのかわり、なるべく他の本に書いてないことを盛り込んでいます。

第1章 FlutterとOpenCVをつなぐもの

 FlutterとOpenCVは違う言語で書かれたプログラムなので、FlutterからOpenCVを呼び出すには両方の橋渡しになるようなものが必要です。橋渡しの方法には次にあげるものがあります。

プラグイン

 FlutterにOpenCVの特定の機能を追加するプラグインがあります。画像を反転、拡大縮小、白黒化するような定番の処理がしたいだけなら、Flutterの知識だけで簡単に使えます。しかしプラグインがサポートしていない独自の処理を行うことはできません。

MethodChannel

 FlutterからプラットフォームOSを呼び出す手段としてMethodChannelを使う方法もあります。データの転送にバイナリメッセージという形式を使うので、Cライブラリを直接呼び出すことはできません。関数の呼び出しはチャネルを開いてバイナリメッセージを送信する手続きとなります。呼び出しが並行処理となるので、インターフェースがやや複雑になります。

dart:ffi

 dartからCで書かれた外部関数を呼び出す関数を生成する方法です。関数が生成された後は通常の関数と同様に使えます。OpenCVを使う場合はプラットフォーム依存となる部分が少なくてすみます。

 この本ではdart:ffiを使った方法について取り上げます。

 dart:ffiはforeign function interface、すなわち外部関数インターフェースの略で、dartから外部のネイティブCライブラリをコールする仕組みを提供するライブラリです。DLLを文字通り動的に呼び出すことができます。DLLはCインターフェースであれば、どこで作ったものでもかまいません。WindowsやLinuxの環境では、別のプロジェクトで作成したDLLを指定して呼び出すことも可能です。

図1.1: dart:ffi

 使用時のイメージは、左側dart部分がUI部分を担当し、dart:ffiを経由してDLLを呼び出しOpenCVで画像を処理するという流れです。OpenCVに限らずdart:ffiでC/C++のDLLを使うときは、表のUIはFlutter dartが担当して、裏の処理をdart:ffiで行うという使い方になると思います。

試し読みはここまでです。
この続きは、製品版でお楽しみください。