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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

$ o3 H0 V7 i: a5 N; \5 w: ?
6 _9 ~; b; E( E% W& j  i3 X/ I" F- N; b! f1 F
( ~3 t. |* Q5 s$ [- \- F  m' c& y. a: F8 m
    在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。
" w2 X7 F, ?' Z# A9 T" I# Q    使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。
( J/ O0 z5 X/ G4 X+ B. k/ G% ~3 T: K  C. J  k
  4 g9 m' X( H, B
    图1.0.1 TEA加解密相关函数/ [9 X* i3 P4 @( l' l
    图1
- W: A; T+ D4 w- M, B8 G( a+ c2 x    由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。
) o& U7 s" d) V( D
. o) j1 k/ A9 @0 o8 C* G& b' W5 C    ) e3 s+ I6 z. f) E7 }9 H( a0 F
    图1.0.2 getEncryptSize()函数
4 C/ y% n2 T8 g9 a& o4 E. m    图28 v$ j; s; \2 a! E
    接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。
1 {# v  D9 A+ \- M7 y) `, X3 K/ u& k1 n# s3 l
   
* ~* f; k/ a4 P    图1.0.3 加密函数 0 q* q# y% {7 a6 r, o% G* F
    图3. Y5 }5 V* h4 y+ q* Z! C
    形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。
3 |+ s( C; d% b0 i2 C    大端与小端的区别在于数据的存储在内存的高低位不同。
7 W1 q: |9 U9 `: M+ ^4 [    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。  x9 q2 M0 H# E7 _9 k+ g% J1 o
    小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
; E" _7 ^' i" }. f7 a9 T# a/ ~    解密部分和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。
7 t* {) h( [- y' ~2 g
4 x3 Z6 |' H* z; A    / z# Q& w- R9 h
    图1.0.4 decryptBatch函数& l5 f9 \7 _/ [7 i, z
    图4
9 L# N0 c" h. e
- D6 F8 t6 U' F+ \( M
$ g4 f% D, k) x2 r8 z8 `  J) E( }
' U# I2 }& x4 m1 K6 K' U- m    附:AI设备通信协议. @2 q6 E, j/ S- P* P% W' R, S
    一、数据包种类) T; P) {: d! p9 u
    响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。+ @: C( q9 l* x# l: u6 k
    请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。
( c' t; N( h* F' W    人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。
" j' q$ a+ o# ], ^    1、通用数据包
$ I  `/ Z! M, C    1.1 激活数据包! |; `6 R9 y2 I
    设备第一次跟服务器建立连接,建立连接后发送该数据包。
+ o) F: _* r% h! {    数据包格式:
: U& B% b& K$ B' M- R/ H* }* H9 z* ~% S9 g; b
    9 N( X/ H2 q( {4 r1 b: @
    表1
6 }7 L* [3 v4 O3 l, |6 ?9 D1 c; ~  r    响应结果:
& A( d2 B' x, B# O6 z- f( z    如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。
4 {) Q+ ^: w4 G7 r* x" q3 t    解析并鉴权成功后,响应的数据包格式如下:5 S" k& D. ]6 @  R$ ~. o

! s& ?6 P4 q; e" D& ?/ }3 h# K     6 H) ~$ ^) `# I6 O9 y  P$ \8 [
    表2
7 I' R* a) O3 n7 B& b9 d    1.2 激活确认包" X* m8 u' h# z8 k! N
    用于接收到激活数据包响应数据后返回确认信息。4 u3 n' M4 g6 G, p. k
    数据包格式:6 d3 b& s' W( j: R

$ t% |+ l$ f4 _7 o; x) Q+ `; `( F    
1 E# R1 g2 \  }' _8 g    表3
+ s7 P) |6 t/ J- Y$ n    响应结果:8 M) q6 D: ~: h# K2 y. \
    如果解析包失败或鉴权失败,断开连接。
" U+ S! [+ {5 o: A' o9 \! u* V    解析并鉴权成功,之后数据交互使用skey加密。+ \' y  B$ o/ a7 k* x+ ^* G0 |
" O* s* o# Y8 f
    ' Y8 f5 |. x# T' ~9 X# a9 @/ Q
    表44 z/ ]" ^5 g0 N( U) X
    1.3 更新秘钥数据包6 y" S" c$ K7 C1 u
    用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。
' G0 ^/ w; r0 `$ d! c+ c  A$ R  p: C    数据包格式:3 s" J" m5 U4 V) g. @
& v4 N7 i6 m( [0 y2 j
    . D- S8 y7 _, Q2 A" R7 ?
    表5
+ U0 v; O" c6 n    响应结果:
: T- \, m$ W# `" k0 f& U% W& H2 `7 W9 O    如果解析包失败或鉴权失败,断开连接。
4 s  M+ i5 o* x4 n. O8 {    解析成功,响应的数据包格式有两种:' V" \8 T; V6 Q3 \; p7 U5 H
: z+ C; s8 J, B5 c' _4 |6 C3 @
   
( j0 i: ?& h1 i& K' T) y3 l    表6- ]* x/ L( H! r2 c0 f
    1.4 更新秘钥确认包
% j% R7 ?; M/ r, W8 K. [    用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey。, z/ G* \3 a: n, L# g+ Y6 d
    数据包格式:% ?$ r3 W2 w2 N2 G) ]4 o) J

  f0 J7 }) r! J, H$ l    
: A; l4 L8 r6 N    表7
9 Q5 R7 d; l$ B1 B* e: q; l    响应结果:
0 H- ~& K$ c5 M+ P& i# Z    如果解析包失败或鉴权失败,断开连接。
/ w0 b# W5 U: r( ^- v3 Q    解析成功响应报文,之后的请求将使用新的skey。  o2 Y; y- v( ]2 }: {0 ]
2 e1 W3 x$ P$ h2 A+ L3 s
   
4 F  g. u. g8 p% P    表8
! a+ z* z! M0 W5 T    1.5 握手包$ A- v8 B# m9 b$ F9 }
    已激活的设备在与服务器建立连接后,先发送该包鉴权。
! @3 ~% g0 E' }& {$ a  ^. X    数据包格式:4 H& ?5 _0 O% E# V$ y

2 @/ S- y: D* x! a& o   : W; F$ w9 _) B9 s
    表9% K2 V$ d# J: A$ ?% Y
    响应结果:, v/ ^, C6 B5 D) `& h$ H' z- ]
    如果解析包失败或鉴权失败,断开连接。+ w% _: H) Q/ Q6 f# t
    解析成功响应报文。如果响应结果skey过期,发送1.3、1.4的包
2 o5 f2 V; }! X) l
; o( M" h; `# `/ P. a% s    
1 p' v" S# L* p9 `$ p) \; N    表10
7 b' ^1 Y: h0 N    2、人脸识别业务数据包
* l: H( `, e% T2 |, W  j    2.1 人脸注册数据包0 e0 Y% |! V# Q
    人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。
( G  V/ w7 ^3 u4 g) A: F, [9 ?    数据包格式:1 ?1 J$ ?& T/ j  B2 Z; X
* l- ], M+ T$ P  p7 D( _% G
   
) R) s) ~0 c* G; |0 Z    表114 H' u3 H5 g7 `. O: e1 _2 V; x
    响应数据:2 u. P. w) C. w1 r
    如果解析包失败或鉴权失败,断开连接。: ]3 a$ P3 f9 B% R
    解析成功,开始发送不同类型的人脸图片。
9 u. j7 i3 x2 P/ v$ p! n& g) g. q$ p) K, A1 J7 T5 Q
    ( s+ F$ v2 N+ W3 S$ V4 o- G0 k' R
    表12) v' r; p3 A. a( x
    ②脸部信息注册包
7 z. F9 O6 b0 S* k. ~, U* K& c    人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。' s' q. g# c5 B  I
- Z1 w( _: Y. a/ W& F
   
% E5 K5 K5 g- G% \8 {8 ]    表13" H# B4 a( S5 ~
    响应数据:
0 |! R  e6 G9 c
+ Y0 W9 [5 [* X3 E6 {    
$ `2 x3 X4 J2 s2 p2 M" ^$ J: |    表14
7 {! p: I8 [0 x, {% E    ③结束注册数据包- t$ G& \7 X8 l3 \
    注册完成发送结束注册包。
# R2 ^9 F; U& ]( O# i7 |" i
3 m$ y! W* U8 i2 z* n5 i    
$ }2 x% @$ e" p' r    表15
6 X1 G6 C/ n  V& I. u- n    响应数据:) r- @0 Q" c+ a* h* S
6 @  r5 _, A( y$ R
   
1 H1 W/ g4 Y, B$ G    表167 g- x7 x$ p5 o8 a# ?4 k
    2.2 人脸删除
9 O# i8 {% ]6 z8 O" x# }' h    用于删除人脸信息。
/ l. j% g/ P; V- [    数据包格式:
& Q( ^. S5 x. J5 ?% e# M& D; z
% X! E7 H7 j+ [* U' i    3 f  [8 r6 E7 i  c* H
    表17$ k: S5 M( N; M7 k4 `3 M
    加密字段格式:
; I! E) I7 q7 j0 u  @7 ^: Q4 @& d% ^, \" S6 ~* o7 I
    6 D9 X" J# b5 O  q3 T; d
    表18
+ e. f9 O: Q2 m# z* l    响应数据:
2 v! G) l* V  Q# `" w3 o& r7 W2 S# G    如果解析包失败或鉴权失败,断开连接。
1 Q; K! l( J8 C    解析成功。. n/ d# L* A/ s( c7 J& r+ M

& z# u. T6 i0 } ; x. u2 n/ T' `
    表19& K& j0 T  ~1 e" x6 X
    2.3 人脸识别
! B! u+ N; m- V    用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸。 # Y( P8 G/ U: X# d
    数据包格式:7 e; q/ E" }9 f6 i) g' L
  I. Z5 W# G4 a, c/ ]9 z
   
2 s3 o* \8 D$ W. N4 V1 e    表20
" ^5 W. L5 x8 S    加密字段格式:
' |) Z& c# [" V# u- n
% c( X! j7 D0 m3 s9 F    ) B) M6 m( ]! T' B/ J: k3 ?" S
    表21' I5 }6 Z3 C0 o! o4 p
    响应数据:# N- b( \7 Q! ~9 L6 ^
    如果解析包失败或鉴权失败,断开连接。; R2 J8 C- ?4 W- i# B8 F# F: V
    解析成功,识别包格式:
# j, t  F; M+ L. \2 @0 {5 `$ B4 L7 E7 E/ A5 n5 V" L
   2 k5 W( H& }; T$ I  j$ p
    表22
9 O5 c7 b0 _2 w) @, w8 E    单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。7 A9 g' ^% M' j' R6 R$ j2 ]

8 y! u( u% U% r    
5 i3 g1 E* z( {8 \6 w& t8 m    表23* O2 S( Z4 g% w4 H/ I/ R& g1 Y
    2.4 人脸认证
$ y& p. ^2 {$ j/ @$ W    用于比较人脸与指定用户id之间的相似程度。7 U4 e% E; p' o
    数据包格式:! ~- W& j' P3 m, O* q$ V

( p6 S1 U" x, Q0 R9 t' |+ J4 E7 }1 J; D+ E    
5 e$ O4 h+ p' ~5 |+ A6 h- H    表24# f1 ?& g% |8 O) d; R
    加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
# |& S0 d4 G) D- h9 j6 w+ ]+ |
   
% ~# o# C: E- Z    表258 R( _" X2 N: U, C$ l- q
    响应数据:
; Y* c" V6 Z7 E) r  y    如果解析包失败或鉴权失败,断开连接。7 p) k8 v+ `  O) {/ Q
    解析成功,返回数据包格式:
, A/ }$ f4 A6 P" B; C! o" U2 x6 o
   
2 P8 H) K. S' {9 p( z    表261 u9 o( a) A7 [( e6 N

9 W5 }& r; M1 E
2 \& h0 B0 D3 g$ }7 h7 W
$ L" [8 B! i4 ^8 P3 o7 y/ a0 ]4 m) T& A2 z) Y1 j
" [/ j7 T* u5 v9 e0 K6 ]9 l
    文件下载请点击: 【5】加解密及数据协议.pdf (688.68 KB, 下载次数: 0)
# c( j7 H! @3 O8 Y  e( j& N! ]8 k+ x7 }+ v" S
+ r6 ]" O& R; R6 q8 C" V' p

: U) k8 J0 Q0 b" ^3 e
2 U+ d6 Z: U* t+ W3 O8 c
% b- `5 u, h. h0 J* V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-20 16:29 , Processed in 0.109375 second(s), 27 queries , Gzip On.

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

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

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