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

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

[复制链接]
奇迹 发布时间:2022-10-31 11:43
在经历完各种准备工作后,现在终于来到了正主。直接部署Tensorflow Lite Micro那一套玩意确实没啥问题,但是太麻烦,要添加一大堆文件,还得用它家训练生成模型,然后转换,麻烦的很,在ST平台,怎么能不提到用ST自家工具去部署模型,方便快捷,简单实用。$ |# d4 S9 V* |" X  L
拿出之前准备的工程,选取ai开发需要支持的软件包cue-ai,在software packs点select components
: W* H, C- H/ C4 J 微信截图_20221029165303.png 1 w+ v$ {- L: L% A0 m$ Q$ T* A% c
% Z' B" n4 O, Y- P- e% A7 q/ G

! J8 g' C- i* I- G7 i( d
* ?, D9 g5 p2 Y) U$ ^9 @9 L
在X-CUBE-AI行下core勾选,点OK完成5 @& L4 h9 M1 C+ r% z4 F: n
微信截图_20221029165346.png
* W9 K2 w% j- s1 F5 h# |, O" A! p2 H- p, n8 u5 _4 i. |- N% [

2 e/ b* r& q) g" ]5 W4 [6 ^回到引脚配置页面,最下方就是上面导入的CUBE-AI工具包
. U4 H* m* d* Z# ~8 \( X 微信截图_20221029171555.png - S/ ?0 a/ ~7 B4 l  E

$ s1 z  A5 r' N$ E
; s. b3 h$ z' ^

4 x  e, B! X; X: i. @点击+添加,这里要根据自己使用的模型,以及模型特点选择,如下图选择的是原始模型
0 U: s9 c0 g7 g) ~ 微信截图_20221029171744.png 2 x+ [7 Q! d/ ^& i# H0 o
$ ^9 Q( ^  W8 u9 y% C
这里选择的是量化后的模型(量化可以减少模型的要求,但是精度会下降),点击分析1 U$ m% `& {" _' s8 Z7 ~+ Z9 x8 N3 i
微信截图_20221029172202.png ' g. \( b8 U/ U' h: p( g  d

: a, }. m2 k( u* z0 f分析中$ K3 i( j+ T- K9 ]4 G  u6 {7 u" A4 U% ]
微信截图_20221029171816.png 9 n- k6 c/ R4 T
, |# ]! T- P2 ]: a) j3 F
分析完成会显示是否可以部署到设备上,以及资源使用情况。
$ R! B6 L0 r, J 微信截图_20221029172246.png ! Q  V- [# T+ f. a& Z  l1 h

/ c3 ~% T! R  y; W# |回到工程,有个小bug(使用的STM32CubeMX版本为6.6.1,X-CUBE-AI版本为7.2.0),下图的几个文件路径老是生成错

2 r: [% B! b, S; m0 R8 v9 Y) `6 \4 y, n# |

! y1 v+ `# c5 m5 c QQ截图20221031110850.png
8 F) V6 U7 S3 D6 c  Z! m! x% N6 J# u/ {* E) ?# C
右键文件打开设置,修改一下路径就行
+ H' z; s) w5 s( a8 M' Q

% @) X: |% [  c/ ^  n6 S QQ截图20221031110911.png
: ?# o1 p) V: l6 z5 L) m$ ?: c& o/ j  W- Y2 |
头文件路径也有一样的问题7 h* x6 T* F; w% i8 _- ~, u0 i/ Y/ V( l
QQ截图20221031111258.png . M) ?" p; i: l0 Y5 G3 C

* _# t& j5 @! u& u0 R7 t初始化模型
  1. ai_handle ai_init(void)$ W% o1 P; O( Q' h
  2. {
    $ K' E1 B7 l1 K* Z/ T1 N" ?
  3.   network_handle = AI_HANDLE_NULL;
    3 P: }  h+ D! x% [1 Z* N3 t
  4. ! n6 ]! q) A# N& m: S
  5.   /* Creating the network */& M; j( w' a, V7 P  g& J& w! ?6 y
  6.   ai_network_create(&network_handle, AI_NETWORK_DATA_CONFIG);* d& C% y0 W9 t3 r3 m( ~8 n) C
  7. , d3 V2 D# B9 k  C4 i  A( S
  8.   /* Initialize param structure for the activation and weight buffers */% q. v7 J9 o6 t$ w  O0 ]2 h; q
  9.   const ai_network_params params = AI_NETWORK_PARAMS_INIT(9 {7 n9 p' r$ |: L9 c
  10.     AI_NETWORK_DATA_WEIGHTS(ai_network_data_weights_get()),
    0 z: p; I& @4 Z# E4 b
  11.     AI_NETWORK_DATA_ACTIVATIONS(activations)0 i5 Z* x7 v* [
  12.   );  [% H  u, ^' I, Q! D
  13. 3 y0 s$ H0 m4 y% f7 s7 U* |( H2 L2 S
  14.   /* Initializing the network */% F9 Z& A' \$ {9 t# n- ?
  15.   ai_network_init(network_handle, ¶ms);
    & h# y$ m( s* e# f5 j
  16.   - f0 N7 Z& B4 {- @7 `- o
  17.   /*Retrieve network descriptor*/
    3 f1 `8 u& j' r. J
  18.   ai_network_get_info(network_handle, &desc_report);. A: n2 `0 X+ b- j: v, h) i* w
  19.   
    7 X+ Q- [' ^5 G# K/ K
  20.   /*Copy descriptor info*/# H4 }+ d3 H6 W/ z# w- w
  21.   ai_input[0]= desc_report.inputs[0];, P' L2 s! Q' T* T; s# r
  22.   ai_output[0]= desc_report.outputs[0];
    6 }% x: c* S' i* j# D8 H
  23.   9 \$ F: t  [' D& k0 X
  24.   return desc_report.inputs->data;
    $ y4 G( ^/ k- X) E0 d
  25. }
复制代码
2 Y/ F* }. \6 i9 ?" Y
运行模型
. L! k* Y, s) u
  1. void ai_run(void* input, void* output)
    , g5 a/ U* x. Y4 B1 p6 C: H
  2. {
    ! U4 Y4 J9 n  r. i# k4 G: f- L
  3.   ai_i32 nbatch;; m. S1 n/ f$ U6 R- d) b5 n) J% G3 ]4 V
  4.   1 e1 o# U6 q9 u8 \
  5.   ai_input[0].data = AI_HANDLE_PTR(input);! b! z" c. U/ T  a; l4 ~7 z
  6.   ai_output[0].data = AI_HANDLE_PTR(output);9 P. a; {3 {* H& F
  7.     W% q8 ?3 y) `( g3 m9 I' e3 V
  8.   nbatch = ai_network_run(network_handle, &ai_input[0], &ai_output[0]);! {; U2 `& |+ \. c8 h
  9.   
    # D: I7 N9 h0 ]0 ?* ^1 U8 }+ s9 |
  10.   if (nbatch != 1) {) h( W# L$ i9 v5 t
  11.         while(1);
    4 A, W/ w3 e% ]& d/ \
  12.   }
    . a/ X; f. H  a4 {; C; T, |
  13. }
复制代码

: c( v  e  H1 N图像接收处理,这个模型要求输入224*224的RGB888的图像,把数据转换一下。
2 Z9 `: H- Q4 Q; p! b; v8 y& J/ Y1 x
  1. void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
    , N2 D. Y  ?- v0 ^: f5 H0 |8 t
  2. {
    : [) k, L* j2 t& d  R% y
  3.     uint8_t person_flag;/ a9 P. s" u. g7 m+ ]9 |( W  h3 }
  4.     int i,j;
    ) ]( h  _. _6 o: e" J
  5.     for(i=0; i<224; i++)
    : s. `9 c& L: ~2 L" I3 a  E
  6.         {- x% S4 ?* [7 T  I
  7.         for(j=0; j<224; j++)5 s) k% y$ o5 c! `
  8.         {9 o1 C. M' @* ~5 `% ^/ j: p
  9.             uint16_t bg_color = ((uint16_t *)_OV2640->frame->buffer)[i*320 + j];
    5 y2 Q: t% r3 L3 Z9 z" Y4 \
  10.             network_input[3*i*224 + 3*j + 0] = ((bg_color>>11)&0xff)<<3;* q* S* L* m3 m/ ~7 N0 Q
  11.             network_input[3*i*224 + 3*j + 1] = ((bg_color>>5)&0x3f)<<2;5 q+ G$ h; W; Z" n! O  \; j) R. K
  12.             network_input[3*i*224 + 3*j + 2] = (bg_color&0x1f)<<2;
      k; ?5 ]3 l* x; {, ?
  13.         }
    2 h1 T; \/ `: d) R& A( |
  14.         }% W) R, p# |* K1 b
  15.     ai_run(network_input, network_output);
    : S8 r* D9 h; ~# r: B* ]

  16. ; P) w7 {% e9 o5 {
  17.     LCD_Draw_Image(0, 0, 320, 240, (uint16_t *)_OV2640->frame->buffer);1 w, U. J* }7 e0 Y* X+ k
  18.     LCD_Draw_String(0, 0, 320, 240, 32, output_labels[network_max()]);
    % K; ^, S; c8 m% f9 Y
  19.    
    . N9 z! E. x6 |' P0 j, I6 g6 M3 E
  20.     OV2640_DMA_Config(_OV2640->frame->buffer, (_OV2640->frame->length)/4);- `7 }, ^' F6 D7 A7 y1 P7 i8 x' k
  21.    
    ! I2 }& T. M% \- b
  22. }
复制代码

! E7 @- _2 u+ V& q, `
' c! ^4 a% A3 e3 S运行效果(一共能识别18种食物,这里选了几个看看)
$ q3 L8 x* I. Q

3 Z4 C  ~5 G' b8 W, \! a, Z1 [2 @8 F6 p  ?
IMG_20221031_113022.jpg   m% R- o/ Z+ q+ s; p$ D5 ~3 y
可乐
, g) @3 B1 e3 i5 ?3 p2 ? IMG_20221031_102903.jpg 7 B% Z9 a+ w; N0 n; _

) G, ?  t" r" O甜甜圈% A" U! g1 d0 a
IMG_20221031_103256.jpg
4 d+ X& z8 ~% O( S! B# K4 A' k: i6 J
0 ^5 q$ L' P" R$ V/ z) @2 x汉堡包
) _" t/ F. i3 u' D' A IMG_20221031_103432.jpg
& M2 C1 l2 @* G+ n; O' Q
- r/ X+ \8 `6 W: j8 x薯条
" O% e6 F% i8 S IMG_20221031_103710.jpg ! b) K5 `; z; Y# ]9 [. P! B

1 w* A% g" a/ B. B4 Q7 {. W  i
! M4 I9 W$ n& t
小结:STM32Cube.AI工具真的太香了,这里仅仅演示了模型的部署,其实可以快速验证AI模型在目标板上的运行情况,只用串口连接,直接把输入发送到单片机,然后运行完后把结果返回来,全部都集成到了一起,快速验证模型运行情况。很是方便(本文未涉及,有需要的可以在X-CUBE-AI行下勾选时,application里面选择validation,回到配置界面后设置通信接口即可)
% D- N0 j+ J: U2 o8 R; O0 J7 bWio Lite AI视觉开发套件确实是开发AI的很好的选择之一,板子虽小五脏俱全,拿来做单片机视觉绰绰有余,但是不得不吐槽的一点是资料支持太差了,原理图,代码全都藏起来,前期调驱动花了很长的时间,后来管管给了一个例程后好转了一些(但是已经晚了。。。),Ai在单片机上应用已经有很多厂商都推出类似的解决方案了,ST这一个环境很优秀,就是如果相关的培训跟资料再多一点就好了。
1 @$ P0 M& H  |2 P* C: G' B9 ~, \
收藏 评论5 发布时间:2022-10-31 11:43

举报

5个回答
wj20180813stm32 回答时间:2022-11-16 10:02:15
很好
' }5 N; F8 i7 |5 T
萨法 回答时间: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 手机版