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

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

[复制链接]
奇迹 发布时间:2022-10-31 11:43
在经历完各种准备工作后,现在终于来到了正主。直接部署Tensorflow Lite Micro那一套玩意确实没啥问题,但是太麻烦,要添加一大堆文件,还得用它家训练生成模型,然后转换,麻烦的很,在ST平台,怎么能不提到用ST自家工具去部署模型,方便快捷,简单实用。; |. n6 K  j, n1 A' {: d
拿出之前准备的工程,选取ai开发需要支持的软件包cue-ai,在software packs点select components2 O' e" J' {# G
微信截图_20221029165303.png 0 p/ ^. x/ R6 n% V
+ a% s0 D% j/ U, T7 c* l9 j
; l: n" e6 y, L. c& v& x* H

5 R) ~* d  \  t. X在X-CUBE-AI行下core勾选,点OK完成0 H3 s1 e: ^0 r, u, C
微信截图_20221029165346.png + c& k7 t; j  ?% \8 [3 X- A& q( x
* ~! Y6 A6 V  n& r
) b5 O) h( K9 V; }# p
回到引脚配置页面,最下方就是上面导入的CUBE-AI工具包
$ M  A" ~" r3 p; Y 微信截图_20221029171555.png " \& n. P9 U1 ^: r( e) x

0 u- D  n* y. c1 ~6 Z1 w, c
) i' M4 f! a: u* }- _: i( F
8 U  ^1 l$ V; t' D
点击+添加,这里要根据自己使用的模型,以及模型特点选择,如下图选择的是原始模型4 u$ u: k- J2 m& |9 @" X
微信截图_20221029171744.png
3 j; L' x* U5 e5 o7 b
6 q) z% j6 \- b! r; w) b0 w这里选择的是量化后的模型(量化可以减少模型的要求,但是精度会下降),点击分析
+ K' z9 i0 a, C* B/ S3 l% d( Z* R4 K 微信截图_20221029172202.png
# ~( o0 q+ D8 ~" |! n$ U% O  L
. p; D8 d* {' Q" Z7 [& N  `8 W分析中
! t8 E9 ~& a) E, R 微信截图_20221029171816.png $ R$ P- F4 X3 y+ H$ l4 c5 n7 r0 e
0 F" H; O8 U! I# p, K+ V
分析完成会显示是否可以部署到设备上,以及资源使用情况。
6 A: ]7 |8 L* Z 微信截图_20221029172246.png
' x3 t) H% o; Q" Q7 U
) a9 N' y  a7 {- Y6 O* |, i/ r/ H8 w5 K回到工程,有个小bug(使用的STM32CubeMX版本为6.6.1,X-CUBE-AI版本为7.2.0),下图的几个文件路径老是生成错

8 r- D% \; A5 h& k. H% v1 y4 ^: H
" C/ E8 m, _- g9 t& k+ L

) }# J' D# o: [9 p! G3 l3 C QQ截图20221031110850.png # o$ s0 b0 Y, |4 ^0 n
8 C7 a/ j; _* A. Y* f
右键文件打开设置,修改一下路径就行
: X4 ?4 I) K4 S3 C$ y  D

* u8 z$ @, U. O- Z! V* ?  m' i QQ截图20221031110911.png
6 \+ W) r3 O/ m& `3 M, e' [/ t. o5 r5 e3 G
头文件路径也有一样的问题
! L1 H' U6 Y' G+ |- C QQ截图20221031111258.png ' a9 j$ k; k* e; i+ M  q; m: ~

  D7 i+ b! M% p5 c初始化模型
  1. ai_handle ai_init(void)
    : S3 \% y8 E) A: J/ w* i
  2. {% N; O3 S% V" }' n# N7 A
  3.   network_handle = AI_HANDLE_NULL;' }2 U0 k) x) n6 Y+ P( H- f
  4. / R* Z$ K$ c4 V. j, t. j6 x( Q
  5.   /* Creating the network */8 d: q* D) A1 b- c4 I+ ?
  6.   ai_network_create(&network_handle, AI_NETWORK_DATA_CONFIG);
    7 j4 R1 |/ B! ]" Y+ d' \9 q# N* G
  7. + B$ ~( g0 D+ [/ B
  8.   /* Initialize param structure for the activation and weight buffers */
    ( }) y0 F1 A' C# }
  9.   const ai_network_params params = AI_NETWORK_PARAMS_INIT(/ s2 X0 c1 U/ y" Z9 |! h
  10.     AI_NETWORK_DATA_WEIGHTS(ai_network_data_weights_get()),% i- x6 I  J- k$ S6 ~5 N
  11.     AI_NETWORK_DATA_ACTIVATIONS(activations)
    ! v; W* w9 t9 b) a' m2 H
  12.   );9 z4 e" H3 S) z1 B

  13. . a. p$ G6 h" U  g
  14.   /* Initializing the network */3 }; u8 W; I0 |0 S) [- C
  15.   ai_network_init(network_handle, ¶ms);
    1 ?& Y: \. |0 L
  16.   
    , |; `, w8 c: p# l$ }# K
  17.   /*Retrieve network descriptor*/
    9 a# B% |+ Z4 J* K) t) c  Y6 P9 T
  18.   ai_network_get_info(network_handle, &desc_report);4 f1 F% {# A/ A; V$ ^1 Q$ Z
  19.   
    2 e' f' @. n' U% A6 [( X# D5 t
  20.   /*Copy descriptor info*/
    ; d! \$ J1 E* n! `# r
  21.   ai_input[0]= desc_report.inputs[0];, C2 I' q* L' l: U
  22.   ai_output[0]= desc_report.outputs[0];& r7 C! k) P( h6 [( i9 v2 I
  23.   
    & G7 N. Z7 a" ~; t
  24.   return desc_report.inputs->data;1 c5 z2 z  E: {8 Q7 k! t
  25. }
复制代码
  N7 e) E* e+ e( x6 D' c9 j0 V  k9 c0 u
运行模型
2 ~2 t) k2 j( A# o
  1. void ai_run(void* input, void* output)! L! [& `: P* _! a: ^1 B
  2. {
    $ }* `% {3 s$ n, ~& Q5 m
  3.   ai_i32 nbatch;
    + _# Q0 u) g/ c0 R/ R5 \% ~) y
  4.   ) h' ~, r5 z- B3 M$ B  p
  5.   ai_input[0].data = AI_HANDLE_PTR(input);
    + s( ^( ?" d5 `- Z4 W& A
  6.   ai_output[0].data = AI_HANDLE_PTR(output);% U' X# s+ R5 R' d. s
  7.   
    9 O7 p  ], |9 s0 g- L
  8.   nbatch = ai_network_run(network_handle, &ai_input[0], &ai_output[0]);
    5 K$ y4 l: G$ N: d0 ^
  9.   
    . H$ W1 m- z: r* L
  10.   if (nbatch != 1) {
    ; L* v# H4 L2 y7 J8 |
  11.         while(1);
    2 O3 ]% p' p8 r9 w3 ?
  12.   }) s" c! |8 r: T) D$ Y  i
  13. }
复制代码
. U- U  i# T% T# N1 x1 N
图像接收处理,这个模型要求输入224*224的RGB888的图像,把数据转换一下。/ R% \) e' |; ?
  1. void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi). K: ~" s' S+ F: `
  2. {
    0 U* s% \; L# k# ]; c  g* M
  3.     uint8_t person_flag;6 p1 M7 u2 x% P- Z1 G0 {$ r
  4.     int i,j;5 w0 M/ v  I2 _: w
  5.     for(i=0; i<224; i++)
    * m" Z0 u: i6 n  T9 y
  6.         {
    " t+ e: j3 i$ ]+ k& Z5 R1 M
  7.         for(j=0; j<224; j++)
    8 ]; q  S  K1 g; Z( E! [& ~
  8.         {
    ; S9 J; z6 i! A4 `6 p: n
  9.             uint16_t bg_color = ((uint16_t *)_OV2640->frame->buffer)[i*320 + j];
    . D( M. f7 ^; o* }2 i
  10.             network_input[3*i*224 + 3*j + 0] = ((bg_color>>11)&0xff)<<3;
    2 q# d: T% R; _' |: ~( E
  11.             network_input[3*i*224 + 3*j + 1] = ((bg_color>>5)&0x3f)<<2;
    ( F4 }/ M1 L. v( a9 Q* Y
  12.             network_input[3*i*224 + 3*j + 2] = (bg_color&0x1f)<<2;; G" H2 D8 Z0 Q
  13.         }
    5 s4 G% u* O: A( p; C" N, i+ z: F
  14.         }
    6 v# q. z: S& t( Z2 w5 }
  15.     ai_run(network_input, network_output);7 l& S, A# _, D- T. q/ N$ I
  16. ) y1 S" x* {; C3 A% P0 A
  17.     LCD_Draw_Image(0, 0, 320, 240, (uint16_t *)_OV2640->frame->buffer);! K8 u5 c9 X* `
  18.     LCD_Draw_String(0, 0, 320, 240, 32, output_labels[network_max()]);6 X( Z, H' `) X- {6 j0 J" O; \
  19.    
    # r% V* D  B6 }' s: r1 }6 y2 O
  20.     OV2640_DMA_Config(_OV2640->frame->buffer, (_OV2640->frame->length)/4);/ r6 u3 b9 g3 C5 o( V
  21.    
    6 H( ^* n% V1 D) D% ^4 g
  22. }
复制代码

: ], }: f! L& a9 m) W' A7 e
& Z# G. I5 Q$ E& K7 [5 P& a1 y运行效果(一共能识别18种食物,这里选了几个看看)

* i. {$ O( \( c+ z+ b1 U
0 Z6 c+ v: o% t; m! D

# {! n0 H# @+ W" }$ i IMG_20221031_113022.jpg
" Y( D# F& H# G( q可乐' K/ o: Q1 ?; o1 J- L- a5 |! A
IMG_20221031_102903.jpg
* l' K3 n! i( e3 g! ?0 J' K! w( |5 h/ E' r0 s% B, n2 |+ p0 K
甜甜圈* \; p) w% A/ h1 e
IMG_20221031_103256.jpg
- k5 f0 t0 n, _$ Y0 i
5 Z% F; i$ L: S汉堡包2 I0 q: E9 U* O+ o! V( z, A- @) a
IMG_20221031_103432.jpg " N( I) S+ N9 ~% k$ M) k' j

* S% ^' R# ^& W( J: s" v薯条) `# V  o) s" t
IMG_20221031_103710.jpg ! D+ K& v% f" j- E- B7 E
% z! p1 @6 w# i( S2 o& \) h
" E+ F" @5 @1 s2 O; H
小结:STM32Cube.AI工具真的太香了,这里仅仅演示了模型的部署,其实可以快速验证AI模型在目标板上的运行情况,只用串口连接,直接把输入发送到单片机,然后运行完后把结果返回来,全部都集成到了一起,快速验证模型运行情况。很是方便(本文未涉及,有需要的可以在X-CUBE-AI行下勾选时,application里面选择validation,回到配置界面后设置通信接口即可)  ~0 v) K2 \% t, g
Wio Lite AI视觉开发套件确实是开发AI的很好的选择之一,板子虽小五脏俱全,拿来做单片机视觉绰绰有余,但是不得不吐槽的一点是资料支持太差了,原理图,代码全都藏起来,前期调驱动花了很长的时间,后来管管给了一个例程后好转了一些(但是已经晚了。。。),Ai在单片机上应用已经有很多厂商都推出类似的解决方案了,ST这一个环境很优秀,就是如果相关的培训跟资料再多一点就好了。: D* w5 h0 g# C" s( P; ?5 d
收藏 评论5 发布时间:2022-10-31 11:43

举报

5个回答
wj20180813stm32 回答时间:2022-11-16 10:02:15
很好" {% g( |: a! a5 {) ~! I1 B- I
萨法 回答时间: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 手机版