「SensiML Analytics StudioによるPSoC 6機械学習」で機械学習した動作認識モデルをPSoC 62S2 Wi-Fi BTパイオニアキットに組み込み、PSoC 62S2 Wi-Fi BTパイオニアキット上にマウントされたIoTセンス拡張キットの慣性センサー「BMX160 」を平行移動・上下移動をさせて、動作の認識ができることを確認します。
SensiML Analytics Studioによる学習データの取得・学習については次のブログ記事を参照します。SensiML Analytics Studioで作成したAIモデルの導入については「QuickLogic Featherを使った動作認識」を参照します。
- SensiML Data Capture LabによるPSoC 62S2 Wi-Fi BTパイオニアキットから学習データのラベリング
- SensiML Data Capture LabによるPSoC 62S2 Wi-Fi BTパイオニアキットから学習データの取得
- PSoC 62S2 Wi-Fi BTパイオニアキットでSensiML Template Firmware
PSoC 62S2 Wi-Fi BTパイオニアキットを使ったエッジAIの作成
- 「SensiML Analytics StudioによるPSoC 6機械学習」でダウンロードした動作認識モデルのフォルダ「kp_5015d539-298e-4531-bffb-205b2dfb2bc3_Infineon-CY8CKIT-062S2-43012-with-CYC8KIT-028-SENSE_lib_9.3.1_p」を解凍すると、動作認識モデルのための次のファイルが取得できます。
- 動作認識モデルの「senisml/lib」フォルダと「sensiml/inc」フォルダを、PSoC 62S2 Wi-Fi BTパイオニアキットのSensiML Template Firmwareの「source/lib」フォルダに コピーします。
- 動作認識モデルの「app_config.h」ファイルを 、PSoC 62S2 Wi-Fi BTパイオニアキットでSensiML Template Firmwareの「source/app_config.h」ファイルに置き換えます。置き換えた「source/app_config.h」ファイルの13行目と22行目が次のようになっていることを確認します。
- Quick Panelから「Clean SensiML Template Firmware」をクリックしてから、「Build SensiML Template Firmware」をクリックしてBuild します。
- Quick Panelから「SensiML Template Firmware(KitProg3_MiniProg4)」をクリックして実行します。
ボリューム シリアル番号は 5CBB-37EB です C:. │ model.json │ ├─knowledgepack_project │ app_config.h │ └─sensiml ├─inc │ kb.h │ kb_debug.h │ kb_defines.h │ kb_typedefs.h │ model_json.h │ testdata.h │ ├─lib │ libsensiml.a │ └─src
source/app_config.h
・・・ /****************************************************************************** * Constants *****************************************************************************/ // Running Modes // 1 = DATA CAPTURE => Use this mode for collecting data and use the Data Capture Lab // 2 = RECOGNITION => Use this mode for running a Knowledge pack from the sensor #define DATA_CAPTURE_RUNNING_MODE 1 #define RECOGNITION_RUNNING_MODE 2 // Change the below to either DATA_CAPTURE_RUNNING_MODE (or) RECOGNITION_RUNNING_MODE #define APPLICATION_RUNNING_MODE RECOGNITION_RUNNING_MOD // Type of Datacapture - // 1 = SENSOR_MOTION // 2 = SENSOR_AUDIO #define SENSOR_MOTION 1 #define SENSOR_AUDIO 2 // Change the below to either SENSOR_MOTION (or) SENSOR_AUDIO #define SENSOR_SELECT_MODE SENSOR_MOTION // Motion sensor valid sample rates #define MOTION_SAMPLE_RATE_400HZ 400 ・・・
エッジAIの動作確認
始めにData Capture Labと接続して、ログを用いてエッジAIの動作を確認します。なお、Data Capture Labではエラーとなるので、エラーログでの確認になります。
- Data Capture Labと接続して、logが次のように取得できました。このログの「Classification」の値を調べることで次のように動作が判断できます。
- Stationary: 2
- Vertical: 3
- Horizontal: 1
- この出力は次のように「sml_recognition_run.c」ファイルの「sml_output_results」関数で行われます。実際には8行目のprint文で行われます。
- str_bufferの内容を確認すると次のようになっています。
- シリアル端末で取得した結果を次に示します。
[1] 9:41: Info - Firmware configuration data received: '{"ModelNumber":0,"Classification":2,"SegmentStart":41800,"SegmentLength":200,"FeatureVectorLength":3, "FeatureVector":[6,255,5]}'
[1] 9:39: Info - Firmware configuration data received: '{"ModelNumber":0,"Classification":3,"SegmentStart":24200,"SegmentLength":200,"FeatureVectorLength":3, "FeatureVector":[61,54,255]}'
[1] 9:41: Info - Firmware configuration data received: '{"ModelNumber":0,"Classification":1,"SegmentStart":50000,"SegmentLength":200,"FeatureVectorLength":3, "FeatureVector":[163,9,50]}'
source/lib/sml_recognition_run.c
・・・ void sml_output_results(int model_index, int model_result) { //bool feature_vectors = true; //int size = 0; kb_print_model_result(model_index, model_result, str_buffer, 1, fv_arr); printf("%s\r\n", str_buffer); #if SML_PROFILER memset(str_buffer, 0, 2048); kb_print_model_cycles(model_index, model_result, str_buffer, recent_fv_cycles); ・・・
Name : str_buffer Details:"{\"ModelNumber\":0,\"Classification\":3,\"SegmentStart\":800,\"SegmentLength\":200,\"FeatureVectorLength\":3, \"FeatureVector\":[46,9,247]}\n", '\0'Default:0x800336c Decimal:134230892 Hex:0x800336c Binary:1000000000000011001101101100 Octal:01000031554