你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【Wio Lite AI视觉开发套件】+cube.ai与食物识别

[复制链接]
奇迹 发布时间:2022-10-31 11:43
在经历完各种准备工作后,现在终于来到了正主。直接部署Tensorflow Lite Micro那一套玩意确实没啥问题,但是太麻烦,要添加一大堆文件,还得用它家训练生成模型,然后转换,麻烦的很,在ST平台,怎么能不提到用ST自家工具去部署模型,方便快捷,简单实用。. Q5 `: p! [+ v: Y, _
拿出之前准备的工程,选取ai开发需要支持的软件包cue-ai,在software packs点select components
9 f5 n4 `. |+ _ 微信截图_20221029165303.png $ m$ l& {( A5 }: M

' }& I' @  ?: O: n
/ m. k) r. d  u. T% _; H
+ d% V: l8 S7 j5 K9 C: {
在X-CUBE-AI行下core勾选,点OK完成
# @# V( V8 m5 f  v 微信截图_20221029165346.png
& v; c7 i$ H9 {) r7 E7 h1 s, G0 a; R; W0 O* ?

; _: v3 P1 Q- `( ~7 d回到引脚配置页面,最下方就是上面导入的CUBE-AI工具包/ q6 w6 X& i+ ?5 h; t$ ^
微信截图_20221029171555.png
; c! ^1 s& u9 w1 I, e( n- V  N; M+ {1 D' q$ C
; _; H1 p7 q1 A

% K( g0 h( c+ d3 S' ]点击+添加,这里要根据自己使用的模型,以及模型特点选择,如下图选择的是原始模型
7 \) B4 Z$ U7 t* ` 微信截图_20221029171744.png
) n  R6 g" C# n  q: J' t, Z9 M0 y& D& U& J- I/ B
这里选择的是量化后的模型(量化可以减少模型的要求,但是精度会下降),点击分析
( Y# o) F. Q: ?! J2 m6 N8 N 微信截图_20221029172202.png ' f2 y: U3 X$ M  G

# M( r2 {$ \( w7 A# T8 y( W. B分析中( W0 w/ N2 R# n8 K
微信截图_20221029171816.png   K( v$ ]: F8 x) \' D1 R
, n/ z9 w3 u- d* I' G. A
分析完成会显示是否可以部署到设备上,以及资源使用情况。
9 l6 U$ \, I& G 微信截图_20221029172246.png
8 [/ `0 L, v; P3 o% ^4 `4 T$ f
* Y% C" w* d6 r! s3 `3 |6 v回到工程,有个小bug(使用的STM32CubeMX版本为6.6.1,X-CUBE-AI版本为7.2.0),下图的几个文件路径老是生成错
1 X) F- I) J& i% L8 f( s
. Y- g! X6 p- w& `
  @' q! i' C8 L! G# E2 A, B
QQ截图20221031110850.png
& \2 w/ A: a$ Z' t; P) [; v0 p5 Q8 `; x
右键文件打开设置,修改一下路径就行
, Q1 ]3 ~, Z  j) l

. v) U6 c# }2 a4 z2 Z1 X QQ截图20221031110911.png
) f8 g" N% t: w% `# B3 U5 R5 f4 n& K$ M" J9 y! x9 j% p
头文件路径也有一样的问题
; L' c& a/ ]! x$ n4 ` QQ截图20221031111258.png
/ f2 @" V3 y% m- O1 Z" @- V8 B. Q
初始化模型
  1. ai_handle ai_init(void)
    2 b) I1 d# W, E# ]* \- x
  2. {! Q, o1 s; ~8 `6 u
  3.   network_handle = AI_HANDLE_NULL;4 {1 A1 H: }, b
  4. ' I$ \. D- D7 }; b. a- m6 w
  5.   /* Creating the network */
      I  u) r7 |+ a
  6.   ai_network_create(&network_handle, AI_NETWORK_DATA_CONFIG);( [7 [2 x, C3 d* K) y' ?* h+ W

  7. 6 y  Q& ~( P2 v! Y# {  @' w
  8.   /* Initialize param structure for the activation and weight buffers */
    6 Z, m$ |. Q, h
  9.   const ai_network_params params = AI_NETWORK_PARAMS_INIT($ L1 a8 P+ u' c, K3 U* K
  10.     AI_NETWORK_DATA_WEIGHTS(ai_network_data_weights_get()),$ {6 H; i" k  p, t( r8 G: j: A
  11.     AI_NETWORK_DATA_ACTIVATIONS(activations)7 D2 s1 u- ^/ Y9 F6 ?8 [
  12.   );/ r; a  A# ]4 j0 h1 T' M

  13. ) m. u4 a( e5 ?8 L% D
  14.   /* Initializing the network */; O7 Z0 |5 Y; V7 r- U
  15.   ai_network_init(network_handle, ¶ms);2 w6 P: n( r' A, l/ H, Y: {
  16.   9 P# }% `! i% A% V) J
  17.   /*Retrieve network descriptor*/$ K2 n! {4 f9 Z
  18.   ai_network_get_info(network_handle, &desc_report);: }) t  _7 B( a, Z! e% q" D
  19.   9 X! @* G9 U4 z6 [
  20.   /*Copy descriptor info*/1 Q8 m7 j$ P( e& \+ t  J* l2 e& r4 G4 |
  21.   ai_input[0]= desc_report.inputs[0];4 ^' `& D) W& h8 O% Y1 W; L8 n
  22.   ai_output[0]= desc_report.outputs[0];( Y  M6 n7 j6 F% V) `6 F
  23.   3 }% i* m7 E5 t. e# j$ Q  ^: b
  24.   return desc_report.inputs->data;
    . L- \: U( ?+ d
  25. }
复制代码

5 z3 Q& i- t! J3 `4 C! O运行模型3 e+ H( f- S' r0 g6 a
  1. void ai_run(void* input, void* output)
    # ^2 X: X& _! t. E6 \/ P) y: n
  2. {3 X0 O5 ^8 D$ Z" {) ?9 K7 O
  3.   ai_i32 nbatch;
    , a. U+ I8 _. i7 V" t1 U2 |$ b
  4.   
    , j% Q# G8 p# N9 S" d4 l
  5.   ai_input[0].data = AI_HANDLE_PTR(input);
    ; C/ Z3 ~) P* \* j" ?' l9 I
  6.   ai_output[0].data = AI_HANDLE_PTR(output);1 [  ?, @/ s4 f  I$ @' o* w
  7.   
    8 h7 q5 V6 d& B9 M
  8.   nbatch = ai_network_run(network_handle, &ai_input[0], &ai_output[0]);
    % U4 a0 [, A2 b& s2 {2 \8 W2 B! f
  9.   
    4 D* s) K5 X5 Y* `, k1 _& }
  10.   if (nbatch != 1) {* r5 l/ O5 e! k
  11.         while(1);: ^+ g3 R# y+ t" p% M
  12.   }) J( f9 B( {# O/ L$ q
  13. }
复制代码
4 _7 I$ N3 ~$ B4 A
图像接收处理,这个模型要求输入224*224的RGB888的图像,把数据转换一下。% |8 F. t3 @# A4 \( j
  1. void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)6 X8 K) `# M) V5 K+ e
  2. {$ r) C' [  ]% @! `$ K" W
  3.     uint8_t person_flag;2 ?' r* l5 w4 z4 I" I% Y
  4.     int i,j;
    9 q) x6 I! M" o; U* S/ S5 C
  5.     for(i=0; i<224; i++)
    + b4 m. I7 R  g4 x- p0 \, c
  6.         {; B6 u" G6 {1 B( t
  7.         for(j=0; j<224; j++)% L; B- [/ D8 l% H, _
  8.         {/ e0 A; ^4 U6 s  B0 l, }* @! l  {
  9.             uint16_t bg_color = ((uint16_t *)_OV2640->frame->buffer)[i*320 + j];- c+ u' ~/ _7 S& S" e0 E
  10.             network_input[3*i*224 + 3*j + 0] = ((bg_color>>11)&0xff)<<3;, W7 Q" }2 E1 v; R1 x" ]
  11.             network_input[3*i*224 + 3*j + 1] = ((bg_color>>5)&0x3f)<<2;
    # i8 u% p% [8 V$ Q
  12.             network_input[3*i*224 + 3*j + 2] = (bg_color&0x1f)<<2;
    , R1 x% p5 I2 f
  13.         }1 E$ W+ T) i6 E) T8 S
  14.         }" @  X; ^) ]  r6 I
  15.     ai_run(network_input, network_output);! j# a$ K9 ^2 g. J) V% }
  16. 2 V& ]% Y1 ]" a. u/ B2 H
  17.     LCD_Draw_Image(0, 0, 320, 240, (uint16_t *)_OV2640->frame->buffer);- E+ [: Z* v, A7 W: x, L  b
  18.     LCD_Draw_String(0, 0, 320, 240, 32, output_labels[network_max()]);/ p" v6 q: `" T6 d- O
  19.     ; [& |1 j$ N- J6 {7 M5 m/ v
  20.     OV2640_DMA_Config(_OV2640->frame->buffer, (_OV2640->frame->length)/4);% p" n7 `  s+ B6 v' F6 j
  21.     7 V% K( r4 e* k; ^! P! D7 {
  22. }
复制代码

, `9 t4 `+ w$ H$ k7 Z& G" l* d* u" ^7 Z* W( Y5 X% y
运行效果(一共能识别18种食物,这里选了几个看看)

" b( }4 o5 O! x( ^

5 g$ m( F* O! d$ d
3 A; O4 X4 Z" [% `+ r1 Y0 J1 c IMG_20221031_113022.jpg ; ]5 E6 y$ ~  u' e
可乐
1 q$ W9 a$ T3 \2 c# A IMG_20221031_102903.jpg
2 ~' ?% `4 K% E; C
& K, {5 K. \5 G9 \1 o甜甜圈
! g/ U- E! S; c$ k' C# ^" H IMG_20221031_103256.jpg 6 R7 J+ r8 C- n# W# a* }
8 f7 s" v$ x1 W
汉堡包3 `: K. z2 F8 P, G4 y, I! L
IMG_20221031_103432.jpg % N+ \) n6 I. d5 ^; u; X+ K: ~& M
! u) k" C6 I- e0 y
薯条+ z1 T* [- X% [8 _
IMG_20221031_103710.jpg
! r1 @+ p$ o3 ]8 m( n& h+ X6 X% o

6 e: T! l# g+ K3 v1 R
小结:STM32Cube.AI工具真的太香了,这里仅仅演示了模型的部署,其实可以快速验证AI模型在目标板上的运行情况,只用串口连接,直接把输入发送到单片机,然后运行完后把结果返回来,全部都集成到了一起,快速验证模型运行情况。很是方便(本文未涉及,有需要的可以在X-CUBE-AI行下勾选时,application里面选择validation,回到配置界面后设置通信接口即可)9 F6 \7 ?% H$ a9 H7 l
Wio Lite AI视觉开发套件确实是开发AI的很好的选择之一,板子虽小五脏俱全,拿来做单片机视觉绰绰有余,但是不得不吐槽的一点是资料支持太差了,原理图,代码全都藏起来,前期调驱动花了很长的时间,后来管管给了一个例程后好转了一些(但是已经晚了。。。),Ai在单片机上应用已经有很多厂商都推出类似的解决方案了,ST这一个环境很优秀,就是如果相关的培训跟资料再多一点就好了。% k0 j/ G4 E, v8 ?. L% M
收藏 评论5 发布时间:2022-10-31 11:43

举报

5个回答
wj20180813stm32 回答时间:2022-11-16 10:02:15
很好
' b, ~; _8 ^, m
萨法 回答时间:2024-11-24 21:35:02

up有没有原理图资料~

求求了

奇迹 回答时间:2024-11-25 10:35:50

萨法 发表于 2024-11-24 21:35
up有没有原理图资料~</p>
<p>求求了

[md]好久之前做的了,资料都忘了放哪里了。。。你可以在网上找找,或者找卖家要

黄涛12345 回答时间:2024-12-9 20:55:34

奇迹 发表于 2024-11-25 10:35
好久之前做的了,资料都忘了放哪里了。。。你可以在网上找找,或者找卖家要
...

up 有更详细一点的建文件工程的教程吗? 还有模型怎么弄上去, 求解

奇迹 回答时间:2024-12-10 18:48:00

黄涛12345 发表于 2024-12-9 20:55
up 有更详细一点的建文件工程的教程吗? 还有模型怎么弄上去, 求解
...

按这个文章操作就行

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版