kinakonoko が 2022年09月15日01時48分25秒 に編集
コメント無し
本文の変更
# 概要 SPRESENSEを用いて駐車料金管理システムに応用できるであろうものの原型を作ってみました。カメラでナンバープレートの情報を読み取り、GPSからの時間の情報と車のナンバーを記録するシステムです。Excelを用いてデータをcsv形式で記録していきます。 ## 使用した技術 このシステムを作るにあたって、まずソニーセミコンダクタソリューションズのYouTubeチャンネルを見てSPRESENSEについて勉強しました。無料でいいのか!?と疑ってしまうほど内容がしっかりしているのでおすすめです。 ### NNC NNCとは、ソニーセミコンダクタソリューションズが開発しているGUIベースでAIのアルゴリズムを作成できるソフトの事です。SPRESENSEはここで作成したアルゴリズム(モデル)を利用して画像認識をすることができます。これを利用してナンバープレートを認識させたいと思い、下記動画を参考にNNCのモデルを作りました。 @[youtube](https://www.youtube.com/watch?v=T7j3AvF-u6A) ### GNSS 次に、駐車料金を管理するためには正確な時間が必要であると考えたとき、これはSPRESENSEの特徴であるGPSを利用できるのではないかと考え、下記動画を参考にGPSを使ってみることにしました。 @[youtube](https://www.youtube.com/watch?v=6Z3dwxap3p4) ## 使用したもの ![キャプションを入力できます](https://camo.elchika.com/f6972be0d7504a747b33a6fc4a365891a3c76072/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f35313663353765342d373730662d343465342d613037372d393533303332376134323465/) - SPRESENSEメインボード - SPRESENSE拡張ボード - SPRESENSEカメラボード - LCDディスプレイ - SDカード - ワイヤー ### SPRESENSEメインボード・拡張ボード ![キャプションを入力できます](https://camo.elchika.com/8a330c3e51d99450fe00c91318436dbab014c2dc/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f38663437366162382d393736342d346561302d616164612d633530303938323530386262/) 今回使用するマイコンです。このマイコンはSONYが開発しており、この小ささでGPSやハイレゾを搭載する超すぐれもの。マルチコアなんだって…(すごい)。 ### SPRESENSEカメラボード ![キャプションを入力できます](https://camo.elchika.com/29662c87f8778c015cf36bcf7dbbc4d92926ad53/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f30363261393033632d623165622d343438342d616339612d323761653835613864616334/) SPRESENSE用のカメラです。最近HDRのカメラも発売されたみたいです。そちらも使ってみたいですね。 ### LCDディスプレイ ![キャプションを入力できます](https://camo.elchika.com/ab7f46b985c16584f6136ff022f851b3bce30003/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f66636132633465302d393630392d346662392d386235622d366531336664646634383339/) カメラの画像を表示したり、文字を表示したりすることができるディスプレイです。今回はこちらから購入したものを使用しました。 [2.2インチ TFT 液晶ディスプレイ 240x320 ILI9341](https://www.amazon.co.jp/gp/product/B09XQ7BS91/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1) ### SDカード SDカードはNNCで作成したモデルを入れるために使用します。スロットの形状がmicro SDになっているので、microSDを準備します。 ### ワイヤー 一般的なジャンパワイヤを使用します。LCDに接続する際、ケーブルの本数が多いのでまとまったものを使用しています。 # コーディング 今回は主にArduino IDEでコーディングしました。SPRESENSEのサンプルプログラムや、下記Gitに公開されているプログラムを利用しています。 [GitHub - Spresense-Tech-Seminar-Basic](https://github.com/TE-YoshinoriOota/Spresense-Tech-Seminar-Basic) ## NNCを用いたナンバーの取得 ### NNCで作成したモデルを利用した画像認識 SPRESENSEはNNCで作成したモデルを利用して画像認識を行う事ができます。OpenCVなどを用いることで画像認識する事は可能ですが、SPRESENSEのような非常に小さなマイコン、また、非常に少ない消費電力で画像認識が利用できることには感動です。 上記で示した動画を参考にモデルのファイルを作成します。 ![作成したモデル](https://camo.elchika.com/2b4ef01eb91fb92c9a1aa5d0ac6442f9529451ac/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f65376437386137312d353563302d346364632d383937392d623238666565353535366639/) このファイルをSDカードにコピーして、サンプルコードを実行してみます。 ![認識中の画面](https://camo.elchika.com/01365da76ba34de9f4234205128e7737847c323d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f35613861336538312d626532662d343061612d386566312d356666613537303130383633/) 十分の精度で認識してくれています!これを応用してナンバープレートを認識させます。 ## 正確な現在時刻の取得 SPRESENSEには、GNSSアンテナを搭載しており、高い精度で位置を測位できます(こんな小さいマイコンの中なのにすごい…!)。まず、利用方法を把握するため、下記のサイトを参考にサンプルコードを理解しました。 [Spresense Documents - Spresense Arduino チュートリアル](https://developer.sony.com/develop/spresense/docs/arduino_tutorials_ja.html#_tutorial_gps) サンプルコードは、SPRESENSEをArduino IDEで利用できるように環境設定などをすると追加されるスケッチ例のgnss.inoを参考にしました。環境設定については下記サイトを参照 [Spresense Arduino スタートガイド](https://developer.sony.com/develop/spresense/docs/arduino_set_up_ja.html) ## LCDに情報を表示 LCDを利用するのが今回初めてだったため、サンプルプログラムを読み漁り、理解していきました。まずは映像を表示させるところから理解し、文字を表示させたり、枠を表示させたりのやり方について試行錯誤を重ねていきました。下記に公開されているGitにあるSpresense_number_recognition.inoやSpresense_camera_preview.inoなどのサンプルプログラムを読みました。 [GitHub - Spresense-Tech-Seminar-Basic](https://github.com/TE-YoshinoriOota/Spresense-Tech-Seminar-Basic) 私はこのLCD画面に謎にこだわりたかったため、画面内に現在時刻を取得した瞬間をわかるように表示させたいと思い、取得状況が分かる文字と現在時刻をLCDに表示させました。動画では、00:32辺りで取得しています。 @[youtube](https://youtu.be/JtmT9jyhSFc) ## Excelにデータを送信 今回は駐車料金を管理したいという事で、データ化できたら面白いと考えたため、シリアル通信で時間と取得したナンバーの情報を出力して、それをExcelで記録できるようにしてみました。これが意外と簡単でした。 まず、Excelのホーム画面からオプションを開きます。 ![キャプションを入力できます](https://camo.elchika.com/73e1fe66459e549a6d741b6d6d54de5c9c1ac16a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f39346562366561362d393665352d346539322d393161662d366135306532653033626235/) 次にアドインのタブから管理でCOMアドインを選択し、設定を押します。 ![キャプションを入力できます](https://camo.elchika.com/a36d5bf0e0445cc71f63ec506faf0e3c1f7c4a98/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f34393031376239652d616235352d343433622d393338612d353933336331343736623630/) そして、Microsoft Data Streamer for Excelにチェックを入れてOKを押します。 ![キャプションを入力できます](https://camo.elchika.com/c7d3ca82dcf352b51ab7cd37cacde1e8a42ce339/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f32356230373863612d393766302d346537652d613863652d323336646134333738393539/) すると、ホーム画面のタブにData Streamerが追加されているので、ここからデバイスの接続を押し、Spresenseが接続されているポートを選択します。 ![キャプションを入力できます](https://camo.elchika.com/2cd3ce6a0c72a6d5891bffd5006612291ca5ce31/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f33613632653236342d383863612d346339632d386438662d353930633639396133653765/) すると、自動的にデータが入ってきます!!(感動) ![キャプションを入力できます](https://camo.elchika.com/aaea83289d8e6a51d2c963732b1f5fa6fb3260d1/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f33316666386161652d363034362d343531342d383362612d363163613230356166326165/) これを応用すると駐車場に合ったシステムを簡単に作れそうです。
# システムっぽいもの、完成
# ソフト完成
これらを組み合わせて画面上ではそれっぽいシステムが完成しました!数字を読み取りながら時間も取得できています(今回のものはかなり精度が低くなってしまいましたが、NNCのアルゴリズムを工夫するとより精度の高いもの作れそうです)。 @[youtube](https://www.youtube.com/watch?v=VIi4fChX0ZM) # それっぽいケースの制作 マイコンといえば組み込みだ!ということでケースというか外枠をかっこよく作りたいと思ったので制作してみる事にしました。設計はFusion360を使っています ![Fusion 360](https://camo.elchika.com/27049db34b02098ef9c6b164e85f65f0f801dae6/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64633336343063382d396361372d343761662d616461312d3533633731356431366530622f38396336316537372d636665622d343034652d386233312d353034323962643736303539/) アクリルを使ってみたかったので、レーザー加工機で印刷! # ソースコード