找回密码
 注册
关于网站域名变更的通知
查看: 149|回复: 0
打印 上一主题 下一主题

【开发教程15】疯壳·AI语音人脸识别-加解密及数据协议

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-10 14:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
CC3200AI实验教程
——疯壳·开发板系列
加解密及数据协议

! x0 E  E. [9 T% B1 n
  [1 a( r! l% s+ r( n0 X$ ^4 {1 Z$ e2 w" a0 [' a! z: B
; E& i. Y. J8 E
    在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。4 d+ D" F: i. {# W* X  d
    使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。; v; s, C! D- J% H5 v8 _5 g& v2 Z6 Z
2 G$ d4 V* D" S1 p
  
. {6 J& p+ p: X    图1.0.1 TEA加解密相关函数
8 c3 a6 B6 E7 Q/ i+ a! Z. T    图1
( q, j) U( X- f0 \  F9 x8 W% \9 @# W    由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。  S2 v$ g9 x2 z0 U% [
0 U! E& L% b' A% ^8 U# {- l
   
. s/ H9 a5 R+ ^/ D% Y    图1.0.2 getEncryptSize()函数
% \; ]4 ~: U2 q; H    图2
+ b$ `+ A: F$ [1 i! a    接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。
4 \$ J- P8 r5 g9 P6 L  q0 F1 o
* D& G  M5 Y# ~% b- l       x! ?# ~, h4 z7 ^4 {8 g9 k
    图1.0.3 加密函数
6 t: Y* n1 J, e  v1 Y) y    图3
* q! I9 l2 Y" q2 t; t' \    形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。
& [3 \' y  t. h6 n% S# X) C, V    大端与小端的区别在于数据的存储在内存的高低位不同。8 `0 `; L: i  `1 U6 @
    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
2 ?' u& P. f% S# g1 k+ p    小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。& D$ q. f; n  l0 V/ X: g' w8 j
    解密部分和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。$ y& N( m4 @1 y' P

: b" p# b( E: c: Q8 u    - W& j, w( u- E3 }
    图1.0.4 decryptBatch函数
9 a4 Z) {+ M% y3 H2 m( ?    图4  e4 M; h) [7 L7 ?

- h6 M; @; p% c7 P( X7 h6 I3 m8 |/ Q% n9 ^0 y+ t
) \& F) X7 \) @+ X0 F
    附:AI设备通信协议. j0 t- P. c9 U2 s" W" Y* W
    一、数据包种类
1 j8 n) q  R7 p( n- |8 {+ q! _    响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。
" c# Y1 Y$ M* f! t# K- Y    请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。+ z+ B* H- ]4 Q) F
    人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。
) I, |$ O7 k$ p8 Z    1、通用数据包$ C7 H  Z+ f4 ?, c, G% o
    1.1 激活数据包
* h- H: a6 w6 m' m    设备第一次跟服务器建立连接,建立连接后发送该数据包。6 W; O: m8 N! M6 h
    数据包格式:
4 j6 l5 y+ w$ b  M+ L9 m2 ]1 J; \! B9 X
   
: K$ I  e3 b/ V' M$ M    表1
  Q, |* N2 Z9 O7 y0 Y    响应结果:! {" k% f: `  s8 r2 q& f8 e/ j* Q
    如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。7 g6 f8 k) d2 e  H: r; s3 ^) ?6 ~
    解析并鉴权成功后,响应的数据包格式如下:
% @3 r% `9 k8 T1 n% ?, i& O" o  l" T. A, ^. k' ~9 |- n" M
   
  y; G1 B$ ]) h6 [% c( l5 c    表2
- C! E  V2 A7 \, ^& ]) r, u& I    1.2 激活确认包$ g) f7 H. S1 x3 {4 |( F! y+ d
    用于接收到激活数据包响应数据后返回确认信息。
* g/ g5 a, X7 l+ d( P    数据包格式:0 s/ @- C# P5 F( c% O. i( `

' b6 x$ g- v! o9 c3 |6 W     ' W% c0 j7 h. z* g- K4 a/ h4 m6 f7 Y0 z
    表31 p* Z7 g) o3 B0 S
    响应结果:  |& R# E! b' R" g. u% R7 p
    如果解析包失败或鉴权失败,断开连接。
+ b" i7 j+ P3 y3 ?/ R    解析并鉴权成功,之后数据交互使用skey加密。
  E+ u3 h* k' q6 W0 _! q1 R0 ^" G+ m4 M) _& \
    * b& o6 L: N, A. X2 p6 n. i0 T. }
    表4; ?' r* U4 h0 g, C% P) S
    1.3 更新秘钥数据包6 c% V4 W. p! w( e* o$ @
    用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。
6 s* l3 }4 y5 L% K! l. o    数据包格式:/ p8 _# E0 Y4 p% \( F& `
8 C. {# G( y1 o- b# R7 Z2 m7 S
    & g. x' X) F* X1 N2 d& f# {  W
    表55 t+ S2 y8 c5 v& j1 W5 ~
    响应结果:
' b9 z5 [6 h' r% w7 ~    如果解析包失败或鉴权失败,断开连接。
4 o: ~$ R# R4 x* A) [3 L' p6 Z    解析成功,响应的数据包格式有两种:5 k1 N1 ~- _6 a0 H  f& I: U
3 ~- w) k* O( A  ], Q  ?
   
* @/ @* L/ c9 Q, M6 c    表6
/ u1 c4 x/ A/ W2 C( i% K6 L' s    1.4 更新秘钥确认包
- \# q, |' T2 l0 u6 G3 U7 P    用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey。
  B1 E/ _5 s( ^) H    数据包格式:) ~7 k8 o- J8 `2 W

2 s; p* [% ^$ S$ @! A9 a     8 S( l7 P9 M* \
    表78 B5 M  \" n) p( b6 }
    响应结果:( X0 V% S( r# E. y3 ^* J; e" X
    如果解析包失败或鉴权失败,断开连接。
" q& i4 A: \" b% n    解析成功响应报文,之后的请求将使用新的skey。
. ]/ v, H1 A. v4 p5 S' ]' y8 W$ K* A' h; V1 b9 P
   
; g( _# o4 f5 }/ U0 ?3 G* F    表8
* n; n4 _1 h0 p    1.5 握手包7 z0 P9 @$ l: K# q+ K% p% M% b
    已激活的设备在与服务器建立连接后,先发送该包鉴权。
: F+ t' S5 L5 j9 h. o( C    数据包格式:
; [0 c! H  Y1 Y5 ~4 T8 U! a8 v6 O# d/ s2 d2 T4 c# H; }9 {
  4 b0 F, I+ M+ R8 D
    表96 ]8 _, h# w- \$ s
    响应结果:
, ?/ ~- Q8 S# r    如果解析包失败或鉴权失败,断开连接。- R' H. _6 V8 p/ i' e" ^
    解析成功响应报文。如果响应结果skey过期,发送1.3、1.4的包" E1 }9 s3 }) a- U

) D# M6 u$ W  [, z, {3 p     ' ]* C0 O& E1 s
    表101 i+ y6 A4 i! K0 F/ }# ]+ q
    2、人脸识别业务数据包
; C- Q$ Z' I) K( g9 `' J1 k9 }+ f    2.1 人脸注册数据包
  A- K- G. g% w) C+ i    人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。
. S( p& {. V0 h( g% O8 t    数据包格式:
0 \; p# g& L5 a( Q: N$ d5 J: e6 i) P: N2 @9 ?- n# v* {  a
   
$ M( W+ ?0 u3 v    表11
' }( y" i* l6 U: ]" q    响应数据:
, I& ]2 N/ @( W) g    如果解析包失败或鉴权失败,断开连接。
6 i& G, N* j; c2 u0 a/ O    解析成功,开始发送不同类型的人脸图片。
4 d8 w7 Z, D. o- u1 w. b( p1 @; h# d! I
    8 T* D3 m/ w- H6 ^1 ^) ?/ Y: K5 W
    表12* |1 ^7 g* \; {0 e- ^
    ②脸部信息注册包
9 E+ u$ ?" y, Y    人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。, E: G3 L4 c8 w7 s; [

$ w% x  |' e* C$ H& E: {7 m     ( R8 T" L: L6 x, f. }
    表13
+ H" h  ^5 Z* q% ?: s  X7 [1 [4 s    响应数据:& n/ F; \8 L; @5 s- O1 D! N
. a$ F# C" [' P! R* B' Z. n' q" F
    2 e8 x9 j8 T; T4 e# u
    表14% s- F- L( k8 z6 a/ v1 b! z; p
    ③结束注册数据包
8 J0 L! @9 N) H, l9 t5 A# P8 h    注册完成发送结束注册包。# ~' X& g4 n( v! J/ }8 g% x

% A/ F& L4 n! `# ]( H       ^# \" j" p, L, e6 E) l
    表15
! U  r+ e8 a6 B! {) z    响应数据:: c4 S6 p3 k' i4 m6 T/ q. o+ q

* n. _# n: d1 Q    
+ C& z( e& v7 N* Q6 C+ K    表16+ s5 P6 K; n  N- `! |4 D9 z* F, d: Y" {
    2.2 人脸删除
7 {) Q5 w$ g, C# j' \. [, p9 R# C    用于删除人脸信息。, |) ~  E( F, R1 n+ U9 X& w9 a
    数据包格式:; N! k% S; l6 v

7 f# Z/ y: W) Q) y, j  V* C% z$ S6 }  E    
( q; A8 H; `" y% b! V+ ?; [6 U+ ^- b    表17
0 c# ]0 q6 b' X) K! u    加密字段格式:
5 {( l( [& H0 M' ~8 @/ d) r, F+ F. q2 j1 E
    1 m5 v) u* i: W3 {" ]
    表18  X; v1 {( ^: @; X% _6 k
    响应数据:
# q8 q: ]; G# P& k  F! U+ y$ \' G' Q    如果解析包失败或鉴权失败,断开连接。
9 N$ n5 v; h9 ?1 h1 H+ [    解析成功。
- @. Q  k% T0 `" W. l8 W
4 R1 i* h' l0 N" c6 {  r
/ u0 P7 `0 e" v' ^    表19
3 ^# v; _* N3 n# \    2.3 人脸识别! t' W, A- ^4 [* l+ U, E+ H& a
    用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸。
* S' N$ I1 u8 B7 x/ r5 j    数据包格式:* a' o  j, r9 y( i

" }' `. H& ^: ~, q     8 U$ g8 B- L0 L3 r- `- `
    表20) J) f8 |/ D: H1 b. r2 C
    加密字段格式:
* z& Q" z9 O! ?* g3 l% j: O5 I2 @4 W! J0 O3 t7 z2 U3 v
   - [3 F( Z5 W7 |, [- {% _4 h' z: o
    表21
3 w: h, w. ^. ]  f* _! y    响应数据:
/ Q) [! I  Y7 t) y9 {    如果解析包失败或鉴权失败,断开连接。* a3 A9 V' D' Y8 E
    解析成功,识别包格式:
3 H7 c3 W' ^* P3 ^; q) c# u7 ~( S! r7 K: A: k" D9 ~$ n
   ! S: W6 c) P! V$ G# k$ @  X  D
    表22
9 M& A6 w0 x+ H  i' A! _0 o  l5 f    单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
, c+ H- u( ?# g; k3 T' y
, y! p* O% u& d  P9 U4 `$ P0 N5 d     ' C7 v. p8 d) g/ ]$ ]
    表236 ?" S/ D9 ~4 l* d& b9 y. p1 f7 \6 i
    2.4 人脸认证
$ E" x" |; \+ h: I/ A- D* y# L    用于比较人脸与指定用户id之间的相似程度。
5 ^" g# i& A$ ]    数据包格式:6 f7 J# R6 ]; p; R
; R5 c4 U. [+ ?, l0 |
    0 z/ J; Z$ Y4 w! `( L8 Z  l
    表247 X! e0 M; x4 _) @- O' p' P
    加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。$ L$ c' Y: Z+ a* ^5 |
3 o; @% O9 S7 w8 U5 \
   
  M4 n) I6 M/ {  v    表25
1 o2 Q$ J; t$ d    响应数据:
# O, Y9 s0 v/ F' d    如果解析包失败或鉴权失败,断开连接。
7 Y9 Z; E# D' b    解析成功,返回数据包格式:
/ C# P9 c" ]. {: P" ?% K9 G* j2 H! s; S9 v5 ~4 d9 u  O! B/ p0 b
   ( h3 s' f$ p! k' l2 c2 `1 U9 ?' e
    表26
+ |% ?. N. @4 o3 h+ ?% Z, ?+ A8 Z) L

& v% t5 J& j0 e7 }4 ]8 M6 E6 ~- s3 e+ A/ u) G
8 E/ L( D) q: a& N
3 z1 s; f+ `) W( {" [8 e; Q1 Z
    文件下载请点击: 【5】加解密及数据协议.pdf (688.68 KB, 下载次数: 0) ! o1 n0 M$ u& a: Q7 j: [2 H) e

  i- u% Q4 p% C# P. n( P. G
# R- u, G5 S+ R% \0 @8 z. t# n. P: M, v5 D
7 M( Z/ a5 e2 @1 n% F

+ Q4 s9 Z3 a4 t; P/ t! V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-28 19:53 , Processed in 0.156250 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表