在《VIZNAS实战开发(1)—背景知识和准备工作介绍》中,小编介绍了SLN-VIZNAS-IOT[1]的开发环境搭建过程,需要我们到NXP官网下载SLN-VIZNAS-IOT对应的SDK 软件包,SLN-VIZNAS-IOT板上的HyperFlash默认已烧录软件包中的sln_viznas_iot_elock_oobe工程,如果小伙伴手上有板子的话,请参考Get Started with the SLN-VIZNAS-IOT[2]实际体验一把基于i.MX RT的人脸识别方案的各个功能特性,在这小编就不做过多介绍了。 sln_viznas_iot_elock_oobe工程sln_viznas_iot_elock_oobe工程为SLN-VIZNAS-IOT上的Application(如下图所示,至于软件流程图中的Bootstrap和Bootloader,留在以后的文章中介绍)。 我们的实战开发工作就是在sln_viznas_iot_elock_oobe工程基础上做的,不过在此之前,我们需要了解此工程的软件流程。
图1 SLN-VIZNAS-IOT软件流程框图 软件流程由于sln_viznas_iot_elock_oobe工程代码甚是复杂,很难用文字或图形完整的描述出其完整的工作流程,所以小编先简略的描述其整体工作流程,细节部分在碰到时再详细介绍。 1)在Camera_Start()函数里,任务(Camera_Init_Task)完成RGB和IR摄像的头初始化工作后,随后创建任务(Camera_Task); 2)在Display_Start()函数里,任务(Display_Init_Task)完成显示媒介(USB或者LCD)初始化工作后,紧跟着创建任务(Display_Task),并发送消息队列s_DisplayReqMsg.id = QMSG_DISPLAY_FRAME_REQ给任务(Camera_Task),使得pDispData 指向s_BufferLcd[0]数组用于存储要显示的图像数据; 3)在Oasis_Start()函数里,首先,OASISLT_init()完成OAISIT库初始化工作,随后创建任务(Oasis_Task),发送消息队列gFaceDetReqMsg.id = QMSG_FACEREC_FRAME_REQ和列gFaceInfoMsg.id = QMSG_FACEREC_INFO_UPDATE到任务(Camera_Task),使得指针pDetIR和pDetRGB指向RGB和IR摄像头捕捉到的人脸框图图像,并将更新infoMsgIn指向的内容。 4)摄像头在初始化后,RGB摄像头首先工作,在图像数据采样完成后,触发中断并在回调函数Camera_Callback()发送消息队列DQMsg.id = QMSG_CAMERA_DQ给任务(Camera_Task),同时DQIndex++; 5)CAMERA_RECEIVER_GetFullBuffer()提取RGB摄像头采集的图像数据,发送消息队列DPxpMsg.id = QMSG_PXP_DISPLAY给APP_PXP_Start()函数里创建的任务(PXP_Task)并将EQIndex++,同时切换IR摄像头工作。 任务(PXP_Task)内的APP_PXPStartCamera2Display()函数处理完后,发送消息队列s_DResMsg.id = QMSG_PXP_DISPLAY给任务(Camera_Task),而任务(Camera_Task)在收到上述消息队列后,发送消息队列DResMsg.id = QMSG_DISPLAY_FRAME_RES给任务(Display_Task)进行显示,同时任务(Display_Task)发送消息队列s_DisplayReqMsg.id = QMSG_DISPLAY_FRAME_REQ使得pDispData指向s_BufferLcd[1]数组; 6)IR摄像头工作后,CAMERA_RECEIVER_GetFullBuffer()提取IR摄像头采集的图像数据,发送消息队列DPxpMsg.id = QMSG_PXP_DISPLAY给APP_PXP_Start()函数里创建的任务(PXP_Task)并将EQIndex++和切换RGB摄像头工作,随后重复步骤5,最后发送消息队列FPxpMsg.id = QMSG_PXP_FACEREC给任务(PXP_Task)和设置irReady = true,任务(PXP_Task)收到上述消息队列后,调用APP_PXPStartCamera2DetBuf()并在处理完成后,发送消息队列s_FResMsg.id = QMSG_PXP_FACEREC给任务(Camera_Task); 7)CAMERA_RECEIVER_GetFullBuffer()再次提取RGB摄像头采集的图像数据,重复步骤5外,(pDetRGB && irReady)条件满足,发送消息队列FPxpMsg.id = QMSG_PXP_FACEREC给任务(PXP_Task)和设置irReady = false,pDetRGB = NULL,pDetIR = NULL。任务(PXP_Task)收到上述消息队列后,调用APP_PXPStartCamera2DetBuf()并在处理完成后,发送消息队列s_FResMsg.id = QMSG_PXP_FACEREC给任务(Camera_Task),此时,(!pDetIR && !pDetRGB)条件满足,发送消息队列FResMsg.id = QMSG_FACEREC_FRAME_RES到任务(Oasis_Task),运行OASISLT_run_extend进行人脸识别运算,运算完成后发送消息队列gFaceDetReqMsg.id = QMSG_FACEREC_FRAME_REQ到任务(Camera_Task),使得指针pDetIR和pDetRGB重新指向RGB和IR摄像头捕捉人脸框图图像。 8)不断重复步骤6和7; 流程图太大了,无法直接上传,所以以附件的形式上传。
sln_viznas_iot_elock_oobe flow.zip
(979.8 KB, 下载次数: 5)
|