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を使った動作認識」を参照します。

PSoC 62S2 Wi-Fi BTパイオニアキットを使ったエッジAIの作成

  1. SensiML Analytics StudioによるPSoC 6機械学習」でダウンロードした動作認識モデルのフォルダ「kp_5015d539-298e-4531-bffb-205b2dfb2bc3_Infineon-CY8CKIT-062S2-43012-with-CYC8KIT-028-SENSE_lib_9.3.1_p」を解凍すると、動作認識モデルのための次のファイルが取得できます。
  2. ボリューム シリアル番号は 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
    
  3. 動作認識モデルの「senisml/lib」フォルダと「sensiml/inc」フォルダを、PSoC 62S2 Wi-Fi BTパイオニアキットのSensiML Template Firmwareの「source/lib」フォルダに コピーします。
  4. 動作認識モデルの「app_config.h」ファイルを 、PSoC 62S2 Wi-Fi BTパイオニアキットでSensiML Template Firmwareの「source/app_config.h」ファイルに置き換えます。置き換えた「source/app_config.h」ファイルの13行目と22行目が次のようになっていることを確認します。
  5. 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
     
        ・・・
    
  6. Quick Panelから「Clean SensiML Template Firmware」をクリックしてから、「Build SensiML Template Firmware」をクリックしてBuild します。
  7. Quick Panelから「SensiML Template Firmware(KitProg3_MiniProg4)」をクリックして実行します。

エッジAIの動作確認

始めにData Capture Labと接続して、ログを用いてエッジAIの動作を確認します。なお、Data Capture Labではエラーとなるので、エラーログでの確認になります。

  1. Data Capture Labと接続して、logが次のように取得できました。このログの「Classification」の値を調べることで次のように動作が判断できます。
    • Stationary: 2
    • [1] 9:41: Info - Firmware configuration data received: '{"ModelNumber":0,"Classification":2,"SegmentStart":41800,"SegmentLength":200,"FeatureVectorLength":3, "FeatureVector":[6,255,5]}'
    • Vertical: 3
    • [1] 9:39: Info - Firmware configuration data received: '{"ModelNumber":0,"Classification":3,"SegmentStart":24200,"SegmentLength":200,"FeatureVectorLength":3, "FeatureVector":[61,54,255]}'
    • Horizontal: 1
    • [1] 9:41: Info - Firmware configuration data received: '{"ModelNumber":0,"Classification":1,"SegmentStart":50000,"SegmentLength":200,"FeatureVectorLength":3, "FeatureVector":[163,9,50]}'
  2. この出力は次のように「sml_recognition_run.c」ファイルの「sml_output_results」関数で行われます。実際には8行目のprint文で行われます。
  3. 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);
    
       ・・・
    
  4. str_bufferの内容を確認すると次のようになっています。
  5. 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
    
  6. シリアル端末で取得した結果を次に示します。