Learningを応用したアプリケーションを作れるようになるのが目的です。MNIST数字識別する簡単なアプリケーションを、色々な方法で作ってみます。AI)を意識しています。モデルそのものには言及しません。数学的な話も出てきません。Learningモデルをどうやって使うか(エッジ推論)、ということに重点を置いています。ライブラリをクロスビルドします。作成したTensorFlowLiteライブラリを使用するアプリケーションを作成します。ビルドは、クロスビルドとネイティブビルドの両方を試してみます。書かれている通りにやればOKです。Bazelのインストールをしておく必要があるかもしれません。Linux(Ubuntu)上で、以下コマンドを実行します。2点注意があるので先に↓の注意事項を確認してください。※上記コマンドでは念のため、僕の方で動作確認できたバージョンを指定しています。本当はタグが打たれているv1.13.1あたりを指定すべきなのだと思いますが、後述のMakefileの問題を直すのが少し面倒になるため、中途半端ですがこのバージョンを指定することにしました。注意事項1VirtualBox上の共有フォルダで作業は行わないようにしてください。download_dependencies.sh実行中にシンボリックリンク作成エラーが出てしまいます。困ったことに、ライブラリ自体は作成されてしまいます。これを使用したアプリケーションをビルドしようとすると、以下のようなエラーが出てリンクに失敗します。先のコマンドではホームディレクトリにcdしてから作業しています。`rdft'注意事項2これは、TensorFlow側の問題だと思うのですが、現時点(2019年3月10日)では、Android用のNNAPIを使用する設定になってしまっています。そのため、これもライブラリ自体の作成はできるのですが、アプリケーションをビルドしようとすると、以下のようなエラーが出てリンクに失敗します。以下のように編集します。これは、単純にMakefileの条件設定のif文の問題だと思うので、そのうち修正されると思います。cloneした、tensorflowディレクトリで作業します。先ほど作成したlibtensorflow-lite.aを作業ディレクトリにコピーしておきます。Linux用のコードと全く同じものが使用できます。以下のようなコマンドでコンパイルが出来ます。pthreadが必要みたいでした。結果は次のネイティブビルド版と同様なので省略します。(コマンドライン)OpenCV等を使用したプロジェクトの場合、クロスビルドだと色々と設定が面倒なので、ラズパイ上でネイティブビルドしてみます。いえ、使用するコンパイラが変わっただけです。ラズパイ上でも、tensorflowリポジトリをcloneして、依存ファイルをダウンロードしておきます。これはビルド時にヘッダファイルが必要なためです。先ほど作成したlibtensorflow-lite.aをコピーしておきます。0.033入力がオール0の値なので、結果に意味はありません。クロスプラットフォーム対応なプロジェクトにする今回作成したアプリケーション用プログラムでは、ソースコードは、PC用とラズパイ用で全く同じものが使えました。これらを簡単に切り替えられるようなcmakeプロジェクトを作ってみました。Linux(Ubuntu)、ラズパイ用ネイティブビルド、ラズパイ用クロスビルドに対応しています。https://github.com/take-iwiw/CNN_NumberDetector/tree/master/05_TensorflowLite_CPPトップのCMakeLists.txtはこんな感じです。