Core ML モデル MNIST を使って手書き数字を画像認識する

Core MLモデル とは

画像認識などのディープラーニングでは、たくさんの画像を事前に準備し、
その画像を読み込ませることで、モデルを作成します。
モデルは未知の画像に対しても判定ができるような判定式のようなものです。
ざっくりいうと「画像認識する」とは「画像をモデルに判定させる」と言えます。

Apple Core ML や Google Auto MLなど、
各社がモデルの作成、調整、実行環境を提供しています。

Core ML は 、Apple のハードウェア上で実行できるようにを活用し、
メモリ占有量と電力消費量を最小限にしながらも、
幅広い種類のモデルがオンデバイスでパフォーマンスを発揮できるように最適化されています。

上記は Apple ホームページ上の抜粋なのですが、
Core ML の特徴的なのは「オンデバイスで」という点。
つまり画像を外部のAPIにアプロードする必要なく、
iPhone や iPad がオフラインでも機械学習モデルを使用して画像認識などをアプリで実行できるのが特徴です。

Claris FileMaker 19 からは Core ML のモデルファイル(.mlmodel)が使用可能

2020年5月に発売された新バージョン Claris FileMaker 19 では機械学習モデルを使用できるようになりました。
これについては、公式 Webセミナーでもお話させていただきました。

FileMaker 19で機械学習モデル( CoreML )の利用が新たにサポートされました。 犬の写真を例にして、Xcode のCreate ML.appを使ってCoreMLのモデルを作成、 Mac OS上の FileMaker でモデルファイル(.mlmodel)を利用して、 犬種を自動判別するスクリプトを記述する方法をご紹介します。

「MNIST」モデルを組み込む

本来であれば、たくさんの画像を準備するところから機械学習の準備を始めなければならないのですが、
Apple のホームページ上に、「研究コミュニティから提供されている、Core MLに変換済みのモデル」がダウンロードできます。
今回は「MNIST」という1桁の手書きの数字(0〜9の数字に対応)を分類するモデルをそのまま使用したいと思います。

サンプルファイルの解説

Clari FileMaker 部分の解説は画像を見ながらか、
下記よりサンプルファイルをダウンロードしてください。

サンプルファイルはこちらからダウンロードできます

アカウント:admin
パスワード:(なし)

テーブル

  • 結果を格納する「テーブル」という名のテーブルと、
    ホームページからダウンロードした「MNISTClassifier.mlmodel」ファイルをオブジェクトフィールドに格納するための「mlmodel」という名のテーブルを用意します。
  • 「mlmodel」テーブルは1レコードだけ作成して、MNISTClassifier.mlmodelファイルを格納し、
    結果を格納する「テーブル」テーブルとデカルト積でリレーションすることで、
    「テーブル」テーブルのどのレコードからも「mlmodel」テーブルにアクセスできるようにします。
レイアウト
  • 画面中央に Web ビューア を配置します。
    Web ビューアには HTML,CSS,JavaScript を設定しています。
    JavaScriptでは主に手書きするための Canvas 作成、手書き動作、
    手書きを終えたら自動的に FileMaker.PerformScript を使用して
    FileMaker の「returnJPEG」スクリプトを実行しています。
スクリプト
  • 「returnJPEG」スクリプトは、Web ビューアで手書きの指を離した0.5秒後に FileMaker.PerformScriptによって呼ばれます。
    このとき引数には、枠の数だけのJSON配列が入っています。
    手書き内容に変化があった枠の番号の配列に、jpegのBase64データが入っています。
    変化がなかった枠の番号の配列は空欄が入っています。
  • 3行目では、JSON配列を改行区切りにして変数に格納しました。
    これにより、配列数を4行目のように簡単に計算できますし、
    配列のままJSON***関数を使用するよりも、処理速度が高速になります。
  • 4行目では配列の数、つまりWeb ビューア上に表示されている枠の数を変数に格納しました。
  • 9行目でいよいよ ComputeModel 関数を使用して、画像を MNISTモデル を使用した結果を受け取っています。
  • 11行目では、9行目の時点で エラーだった場合に、
    12行目で 「model読み込み」スクリプトを実行してから、
    13行目でもう一度 ComputeModel 関数を使用して、画像を MNISTモデル を使用した結果を受け取っています。
  • 17行目で結果を FileMaker に書き込みます。
  • 18行目では、結果を Web ビューア 上に青色で表示させるように事前に設定しておいた
    「setNum」JavaScript関数を実行しています。
カスタマイズ

当サイトでダウンロードできるサンプルファイルでは、4桁の数字を入力できるようにしています。

Claris の カスタム App サンプル サイト fmgo.jp にもサンプルファイルを掲載しています。
https://fmgo.jp/detail.php?recid=715
上記からダウンロードできるサンプルファイルは、3桁の数字を入力できるようにしています。

この2つのファイルを比較していただくと、桁数を変更するカスタマイズをどのように行えばよいか、
理解が深まると思います。
実際はレイアウトの若干の修正と、JavaScript の1箇所の数字を変更するだけになっています。

【 開発者募集中 】
弊社では FileMaker を使った高度な技術力で、モバイルデバイスのビジネス利用を楽しく発展させていく仲間を随時募集しています。詳しくは採用ページをご覧ください。