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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

. `) n/ p8 M5 `# X/ \1 L" p) a
: g/ Q! Q( c2 M+ W
: p1 ?  r4 e& Z# g* V! ?5 W- _4 K7 _1 H: I
    在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。% W9 j& Q5 t8 \) w0 p* {9 v& e
    使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。1 E+ b" [# M7 s0 g1 a1 I

, |& \9 e, I7 Z. }0 i0 Q7 f& {   $ Q3 {, h3 |/ s3 S1 E6 y4 c0 P
    图1.0.1 TEA加解密相关函数1 n" s# `1 M% b& y
    图1: x9 D# Y# z+ e- s+ W" v6 X) H
    由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。/ N$ d6 [2 P+ ]% a5 Q

2 R& t1 p0 `7 Y6 U  W6 \9 v+ ]    
# i! Q) V! ]9 ]    图1.0.2 getEncryptSize()函数
  s; H( y0 o) [$ k" _2 y/ f9 ]    图2, M, N; i, T- N2 a
    接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。
- ]0 |! q9 j1 h/ {7 @- A  l) g& X% U& T( c# `* V/ }' n( Q* J
    7 {1 e  N1 ?9 b
    图1.0.3 加密函数 ) L9 M# r2 p$ h$ O$ b* `$ E
    图3, t7 V- {& \) P& B
    形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。0 E9 s3 B: k1 U! M8 w
    大端与小端的区别在于数据的存储在内存的高低位不同。
. A! @4 s* U$ L8 E5 |    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。0 K/ y( J9 s' }" E2 k- X
    小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。, L% o3 f% [! S+ N
    解密部分和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。
& Q9 t2 D3 p4 S2 T5 M/ Z1 ]5 s
- H' ?+ D5 ]. @/ ?& C* u    
# n: \0 }7 j/ d! O( S7 x: c    图1.0.4 decryptBatch函数
( j& n" o8 s! V5 |, ~    图4. W+ T& R( B3 R* N

3 a+ E7 I6 t) Z! B, i( p8 [0 q* e; m) o+ v  U

  p8 I: e3 A$ q3 R! m- R    附:AI设备通信协议9 S5 u2 s, e& m# T
    一、数据包种类
+ e7 [! W$ |+ C: W7 H) X, ~. w* a    响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。" \' H- P" q* H4 p$ `& B
    请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。( A, |8 P) {3 j" c
    人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。1 y* }+ K; v& G1 P! }0 U4 {+ f
    1、通用数据包3 m! \; G6 }- J# d+ `1 M) E' c
    1.1 激活数据包5 c: T( @( m( V; `
    设备第一次跟服务器建立连接,建立连接后发送该数据包。
' N& u+ r: O( l: ?( |1 O! Q    数据包格式:4 \4 _  L+ r# t6 Q( ?" u

/ f( C% M6 J! G     ' ^7 @5 R9 N/ }
    表1  @2 }' T  f( H0 `2 P. f
    响应结果:) O- C' I' ]1 I  E7 Q. o0 d% B
    如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。& @5 l- L4 W) s' P
    解析并鉴权成功后,响应的数据包格式如下:
, Q# F3 h0 G4 Q6 A( a$ ~& `( J0 T' s
    : o4 ^7 E- N7 i* ^, H. J8 s
    表2
  t2 c* \: ~* I    1.2 激活确认包
/ f/ b4 f: @" u! N    用于接收到激活数据包响应数据后返回确认信息。+ h( B" ?" D: L% P: I# E1 c
    数据包格式:( F9 m! n; D. _- t

7 w% ^* T0 q  k$ r" ~     " c) P: }$ l5 `% i6 W9 f
    表3' {" ]- E+ Y# Y3 D" S# h
    响应结果:
0 T7 k4 C8 \; |" N    如果解析包失败或鉴权失败,断开连接。# S' b& x. ^/ l) [5 ]
    解析并鉴权成功,之后数据交互使用skey加密。
1 t1 ]. c. @5 }: A9 z0 h: d+ V9 T# X0 _5 s3 {$ m# r, s
   
4 R, z$ {9 |5 x- O    表43 ^% H) O( \# A* c3 S$ L
    1.3 更新秘钥数据包+ W# w3 g' j2 N1 b5 E8 e# s* ^" n
    用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。* O8 z6 {1 d7 |/ c
    数据包格式:9 U- t% k9 `% o4 T

5 s$ J' l2 M6 V7 \- y; q1 h    
% f, N* l6 u1 _0 G, T# N6 a5 Y    表5
+ C. H. ?. }, F0 R" Q2 U- N    响应结果:1 |; g" d. Y9 S0 M2 o
    如果解析包失败或鉴权失败,断开连接。, w" K9 V, D' S
    解析成功,响应的数据包格式有两种:0 {3 F; F& y- d! S' ]& o
# s. ]- E5 M6 g# _
   
$ R5 L5 Y" L3 L7 Z    表6; C. w8 F+ l  n" }
    1.4 更新秘钥确认包( P  a- I1 E$ M
    用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey。
1 K+ ?: j, s8 i0 t    数据包格式:
. L- n- u5 H' w9 }# L+ ^' J5 C% T' H7 N6 u% R5 {/ N
   
( U) }3 q, f' r) u/ e    表76 S/ p* L( \3 L' e1 F' z
    响应结果:8 a2 ?6 V* e% \$ s- F  ?8 }
    如果解析包失败或鉴权失败,断开连接。
3 N  L* v& g& Y5 a2 P    解析成功响应报文,之后的请求将使用新的skey。
$ \/ J, ^6 u! J  x7 |/ A/ U+ o4 y, n7 Y+ ~- F
   
: Z3 s0 s2 R) a4 }7 @# ]! `+ \: h    表8& o3 Y+ T! @- ~& |/ ~0 \
    1.5 握手包
1 C' _& L7 ^2 t7 v    已激活的设备在与服务器建立连接后,先发送该包鉴权。8 ?. D7 n  Z9 @. L* |% W9 z
    数据包格式:
1 `( O) X, H* ^1 x9 g: X- f
. P. m5 v3 F: I4 E   : U" f0 o7 o- l8 i: }% R
    表94 P: {# x/ C9 r" l4 j# `
    响应结果:. C* k0 K0 e* y6 V* k  ]
    如果解析包失败或鉴权失败,断开连接。- U; R2 E" H! S, F! N1 e: ^4 X
    解析成功响应报文。如果响应结果skey过期,发送1.3、1.4的包
4 O! E* K9 @$ n
! c: H4 [" n; }' s" j, @    
3 E3 J( K' x; \    表10
/ [! i- l0 p/ s* O    2、人脸识别业务数据包- [' o: s% r7 ]& G0 V3 ^; z: d
    2.1 人脸注册数据包
* M5 J5 P2 S; ~6 w* X) n: X& @    人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。
- C3 u7 O# X6 R( f  T    数据包格式:
9 c3 p7 \5 M" Z" Q7 p$ x3 c0 H$ S. g! X5 k1 x
   ' ?$ ]  w& A2 `- I
    表11
! N8 Y7 J5 L* O, V* B1 E9 H    响应数据:# v/ S( p7 \1 c% w0 |1 f- e4 v: k
    如果解析包失败或鉴权失败,断开连接。& m  M- D# N0 U' |  P( Y8 H* w
    解析成功,开始发送不同类型的人脸图片。7 [( q3 F* P: J( H. F! ?+ H* G% t

' @1 q" }; e% }! _     ' ~. n6 ~; ?8 z
    表120 Y4 Q4 N1 [3 Y# h
    ②脸部信息注册包! o3 p0 G, ^7 L3 V: }
    人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
. Y$ T5 Y& k7 b) l8 k1 E7 {
/ Z2 R2 G4 D' P& ~     5 z$ T2 T( }5 b/ t
    表13
, _  n. C0 r3 E- y9 H3 f    响应数据:
7 q0 L4 z0 X$ k: r6 U# K6 k
# K( p# C! U2 g5 s5 `  O       P. ^! A$ [# W8 O5 a- m
    表14
1 B% l5 p. ^  m7 ?8 |$ V    ③结束注册数据包6 Y8 _. D. ~( l) o1 v% l% {* C7 N
    注册完成发送结束注册包。2 R, y: L' m% b& P3 ?3 A0 f

7 m/ q# c- w2 f( F4 [. k" _* n$ b! g    
! P) l7 a' g+ K& ]. ^! A    表15
, ~, q0 k% a9 ]- B, f    响应数据:
/ _6 c" g5 T/ ]' C0 D2 f# f/ ?/ l
/ J7 f& x  H3 v" _; D     ) k4 b) r* T4 u* ]* \3 H
    表16$ j* \7 O. U$ A9 }) m
    2.2 人脸删除
+ A8 r1 X1 b$ Z7 C# Y2 l1 N    用于删除人脸信息。) t. s' K+ c$ e8 }
    数据包格式:8 ?7 |0 B" I, w! k

8 G$ x: E2 \  e4 r/ K9 H    
# e, G4 u( P% d' _    表174 X9 @+ ]" p* @/ x# ^( i' L
    加密字段格式:  G* D2 ^( H3 ~" X6 N
: o0 b: S7 b- O  c  i
    2 }8 F3 ?3 I& t
    表18
2 I* S/ T/ A3 U/ d1 W$ U    响应数据:/ M- L" o/ J4 D9 R: M' j
    如果解析包失败或鉴权失败,断开连接。& x' M8 q4 I0 z% g2 {& {
    解析成功。
& C$ b- J# Y% `) X0 J- z& S) W! L0 m- r7 _
- S3 k6 t% r5 ~- H2 r5 i9 H
    表19
; h' P/ t2 q$ f& Z! N1 W    2.3 人脸识别* W6 s& y8 c9 K4 w
    用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸。 7 @% E0 S5 R# S! ~2 A& n
    数据包格式:3 R0 b, N7 V8 a& v+ {
2 A: B+ q) l+ q0 l
   
, x+ ~( D9 F4 B' m* ~1 Y) p    表20  \9 ]5 M5 ~; n! Q' c) |9 s
    加密字段格式:  T1 `3 G9 g# o7 b( a+ @
- r1 \  j- I& M7 d! L
   # Z. w( `" v7 S; x' [' o# J8 q/ i. v- s
    表21
5 x' g$ ?( f- n1 L+ O( @+ p6 S' U    响应数据:4 C7 u: `$ Y, S" j0 o
    如果解析包失败或鉴权失败,断开连接。. w8 X/ v: M0 C; t1 h2 U
    解析成功,识别包格式:8 w6 J. H5 h* ~

4 Q7 Z' a  \0 k3 ~# P" t* i$ z    * w2 a$ F  ^6 z. b* t( ^
    表22" t- m4 Y2 r* w" ~, S' ~
    单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
9 Z* M1 R" w. }, _! L+ y" j
/ x4 w, |+ h0 n' K' t    
; {# I  x, _4 q  J1 R0 g    表23
2 ?3 ?- g# \: n    2.4 人脸认证
, S- d8 E' h& a2 O    用于比较人脸与指定用户id之间的相似程度。
, T! p  s: V$ w" D    数据包格式:
: e/ f' F, a; \1 m  q; [; b. Q7 b2 s! q2 T; L5 D- ]
    , N# w, G. s6 o
    表24
, `3 O/ _( ]. Q/ Y% j0 F# W, w/ d    加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。( B; s6 K/ ^! R6 y; ]
: J+ {& r& P6 |
   
6 s: T/ t. K; p( H; }' T* d    表25
/ T4 J$ p! [2 k( Q4 }: s    响应数据:1 b  Y! k+ T) o+ R' b9 e" D1 ^
    如果解析包失败或鉴权失败,断开连接。7 u& W2 l$ r3 [; v+ Y
    解析成功,返回数据包格式:
4 D/ O+ f" |- ^; n4 l% P0 T# t; t9 r2 P
   ) ~9 R! M; `% C% F- l
    表261 i7 m: }) l8 U- e' T/ H  I3 R

4 Z6 c  p5 S6 c6 y  r% ^' i
% e7 E, E+ O& ^$ F8 _+ f* [; p% r7 ]$ l$ z8 m8 I# b

( Y+ y5 i9 T+ k- e; C6 s/ |" A
    文件下载请点击: 【5】加解密及数据协议.pdf (688.68 KB, 下载次数: 0)
6 V2 B. [" x  e* ~+ I/ j+ k4 m( {7 f
9 ^) A7 p( [' Z0 O4 N& r  z3 B# H

; t. g! T! [; z! _9 K) @+ t3 e" d: }" @5 ^3 S5 Y

- h( }: q2 ^4 E% p9 J0 c
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 02:48 , Processed in 0.140625 second(s), 28 queries , Gzip On.

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

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

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