本帖最后由 北方西门吹雪 于 2020-12-24 11:15 编辑
#申请原创# (1)本人学习的垂直应用的名称和链接
垂直应用第六周+人工智能
https://www.stmcu.com.cn/ecosystem/app/ai
(2)本人的学习笔记/体会/分享
2.1 人工智能在物联网低功耗节点的应用遵循以下逻辑。
具体有两种方式,一种直接用tensorflow lite,另一种直接压成lib库,
(3)通过该应用的学习资料,我的创意设想
运用这个AI工具,开发关于读取电机振动的数据,进行状态检测的项目。
(4)下载至少一个相关的AN资料并分享到帖子中
使用AI-node进行低功耗节点的声音和运动感知
Getting started with the STM32Cube function pack for ultra-low power IoT nodes for AI applications based on audio and motion sensing
https://www.st.com/resource/en/user_manual/dm00568147-getting-started-with-the-stm32cube-function-pack-for-ultralow-power-iot-nodes-for-ai-applications-based-on-audio-and-motion-sensing-stmicroelectronics.pdf
下载链接如下
dm00568147-getting-started-with-the-stm32cube-function-pack-for-ultralow-power-i.pdf
(3.73 MB)
(5)其它与该垂直应用相关的想要分享的任何内容
这个人工智能的应用还只能支持tensorflow的框架,pytorch等都不支持,也限制了应用的方案。这个需要改一下,毕竟tensorflow不那么好学习,使用静态图搞就是比较麻烦的。
(6)分享一下具体做过的方案:振动传感器智能识别
通过Kemet振动传感器读取振动信息,根据振动信息分析数据,并得出数据的特征,提供预防性电机检测的功能。
6.1 根据这个工具,下载cube-sensor 的工具包,解压后,可以找到针对STM32L476RG的范例程序代码,
解压后的代码结构如下,
下载的代码目录结构如下,
注意到其中的ai-common.c就是专门提供人工智能加速的接口头文件
中间的主程序main.c是使用freertos实现线程控制的,这个代码的结构还是比较复杂的,重要的是起始地址安排给bootloader,然后才是修改入口地址的本程序。
其中bootload可以实现usb升级等众多功能,确实非常有必要的。
int main(void)
{
HardwareInit();
#if ( configUSE_TRACE_FACILITY == 1 )
vTraceEnable(TRC_START);
#endif
/* Create threads */
osThreadCreate(osThread(THREAD_1), NULL);
osThreadCreate(osThread(THREAD_2), NULL);
#if SENSING1_USE_CLI
osThreadCreate(osThread(THREAD_3), NULL);
#endif /* SENSING1_USE_CLI */
/* Register commands with the FreeRTOS+CLI command interpreter. */
RegisterCLICommands();
/* Create the semaphores */
semRun = osSemaphoreCreate(osSemaphore(SEM_Sm1), 1);
semRxChar = osSemaphoreCreate(osSemaphore(SEM_Sm2), 1);
semUart = osSemaphoreCreate(osSemaphore(SEM_Sm3), 1);
/* create mail queue */
mail = osMailCreate(osMailQ(mail), NULL);
/* set lowest reachable power mode */
#if (defined(STM32_SENSORTILE) && SENSING1_USE_PRINTF)
SetMinPowerMode(IDLE_WFI_TICK_SUPRESS);
#else
SetMinPowerMode(IDLE_SLEEP_STOP);
#endif
/* Start scheduler */
osKernelStart();
/* We should never get here as control is now taken by the scheduler */
for (;;);
}
其中一个进行NN神经网络分析的线程如下,其中采用的是ST的专用的深度学习模型,可以根据声音振动源分析所在环境是室外还是室内,实现分类模型classification
static void SyncMultiNN(msgType_t msgType, uint32_t code)
{
msgData_t msg;
msg.type = MULTI_NN;
if (ACTIVITY_IGN == msgType){
MultiNN_OutStored.harOut = (HAR_output_t)code;
}
else if (AUDIO_SC == msgType){
MultiNN_OutStored.ascOut = (ASC_OutputTypeDef)code;
}
SENSING1_PRINTF("<multi %d %d> \r\n",MultiNN_OutStored.harOut,MultiNN_OutStored.ascOut);
msg.multiNN = MultiNN_OutStored ;
SendMsgToHost(&msg);
}
这个模块比较复杂,但是可以学习的地方非常多。
|