2018-12-24この記事はリンク情報システムの2018年アドベントカレンダーのリレー記事です。グループメンバによってリレーされます。(リンク情報システムのFacebookはこちらから)#はじめに最後の記事を担当します、mk-takahashiです。今日はクリスマスですが、残念ながらこの記事は一切クリスマスに関係のない内容となります。今回は表題の通り、SONYのマイコンボードSpresenseのDNNRTライブラリを用いて画像認識処理を行いたいと思います。今回作成するコードはサンプルスケッチ"number_recognition.ino"を元にして作成します。Consoleで学習したモデルを使用して、マイコン側0~9までの数字の認識処理を行うというものです。開発ガイドに書いてあるので、やり方にしたがって準備してください。※ちなみに学習モデルを作成するのにはちょっぴり時間がかかります。私は作成に12分程度かかりました。#処理の流れ全体的な処理の流れは以下の通りになります。dnnrt.end();}※SpresenseをPCにつなぐ際は、拡張ボード側のmicroUSB端子を使用してください。MSC機能が働かないので実行中に画像を変更することができません。※上記のプログラムを使う際は、画像ファイル名は「number.pgm」にしてください。#結果&感想SDカードに保存した画像の数値を認識して、7SegLEDに表示するプログラムを作成できました。下のGIFは処理の流れ2まで実施済みです。認識させているのは「4」の画像です。すごく簡単にできるので、皆さんにもとりあえずサクッとやってほしいですね。今はユーザーが用意した画像でしか認識処理ができませんが、カメラモジュールなどをつけて、マイコン側だけで処理が完結できるようにしたいです。数字以外の学習データを作成して、認識させるのもやりたいです。#問題点ここまでいいことばかり書き連ねてきましたが、現時点(2018年12月20日現在)で重大な問題があります。3回以上連続で認識処理を実施することができないです。}上記のコードで、outputに認識結果が入ります。outputは要素数10の配列で要素番号0に画像の数字が0である確率、要素番号1に画像の数字が1である確率、・・・といった形で値が納められています。indexにはoutputの中で一番大きな数字(一番確率の高いもの)の要素番号が入り、その値に応じたLEDを光らせます。2回目まではそれが正しく動いているみたいなのですが、3回目からはoutputの全要素が0.1になり正常に動作しなくなります。4回目以降は応答がなくなります。2018年12月17日にDNNRTライブラリの不具合修正がでていて、それを使っているはずなんですがうまくいかないです。自分のコードに問題があるのか、ライブラリの不具合修正が実は適応出来てないのか、はたまた別の原因があるのかは今後調べようと思います。