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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
CC3200AI实验教程
——疯壳·开发板系列
加解密及数据协议
  i0 H2 |% r$ }$ L- U7 H  ]: w
0 W8 D- |9 }3 E# g1 E
6 K6 J. ^$ p5 x* s% b/ R; O

6 h. n: b, k9 I" E9 E2 ^    在《AI人脸系统架构》一节中,我们提到AI设备与服务器之间的通信协议及TEA加密。这一节主要来讲解一下TEA加密另附上《AI设备通信协议》。
8 L1 |& L5 @# y9 L' b5 L+ i/ ]$ a    使用IAR打开AI_OCR工程,在工程中找到TEA.c,并打开其关联的头文件GeekTEA.h,可以见到如图1.0.1所示的在本工程中用到的与TEA加解密相关的函数。' O  u9 Z0 ]$ y" j

9 U+ l2 g2 d: b3 N8 p, @   
) r' |! {" o) c4 v1 A1 Y* O    图1.0.1 TEA加解密相关函数
3 l4 h  r: f0 g. {$ [    图19 z: V$ L3 J3 N
    由于加密前需要传递加密缓冲区大小的形参,故在加密前需要先调用获取加密缓冲区的大小的函数getEncryptSize(),其函数内容如图1.0.2所示。( o; p9 |8 l9 R9 l
8 a6 }. j  n  X( J- v
   
, n* h* G4 f: N. K5 P3 k# T    图1.0.2 getEncryptSize()函数
; B( j% ~, m/ F3 C9 z    图20 t5 o: A. J! M" |1 R! n
    接下来就是对加密数据进行拼装以及对数据进行加密,如图1.0.3所示为批量加密函数。$ F. A2 n* ^8 I  N- k0 x

  z$ u0 x+ w. F! k/ P    
; ~9 v2 N% m$ E- j- q    图1.0.3 加密函数
$ `1 z: |. V; E    图3& C# R1 W( Z+ D# \8 R+ ]
    形参buf为存储加密后的数据缓冲区、size为getEncryptSize获取到大小、key为加密的秘钥即程序中的globle_Auth_key或者Skey、IS_BIG_ENDIAN为大小端选择(1为大端、0为小端,CC3200为大端)。7 ]3 R4 \: C1 q! Y( Q9 U
    大端与小端的区别在于数据的存储在内存的高低位不同。6 t6 O6 O' J+ X# y1 W6 p  H
    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
3 M& y3 C- S; @    小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。( p  b- ^' A. S
    解密部分和加密部分相似,是一个逆运算。如图1.0.4为decryptBatch()即解密函数。  u. X1 Q3 r+ s4 H
3 t- ]& V- h& G( \$ q7 S
   
+ c0 f7 C; f9 g8 E% Z' V    图1.0.4 decryptBatch函数8 j3 t" [7 ?) y( Y$ e2 d. I& c
    图4
: w: x: q1 ?# e6 P% \9 U! _& k) F$ K0 Z. |- G4 U! b7 O6 T7 F
4 t4 T; }. n) j5 Y2 N: z

& x& a8 ?, s0 W& n1 B' C    附:AI设备通信协议
3 [6 Z" J% [$ ]% t    一、数据包种类, @8 p3 [) n, q! u
    响应数据报文分为两部分:报文头、报文体。报文头固定9个字节,头四个字节是报文类型,对应请求数据包的报文类型,接下来四个字节是报文体(不包括报文头)的长度。最后一位是响应状态码,其中0xff固定表示秘钥过期,需要更新秘钥,其他以各自描述为准。5 S! X. Y  k& C. q
    请求数据报文分为两部分:报文头、报文体。报文头固定8字节,头四个字节是报文类型,后四个是报文体的长度。
& L( d, M, u  H) @" ~    人脸注册发送图片报文类型报文头5个字节,第一字节报文类型,后四个报文体长度。
# P  T% A  t+ U    1、通用数据包' T0 W) @3 b8 Q) K4 \
    1.1 激活数据包
& ^2 k7 S% H3 n, L8 L1 L  B' T    设备第一次跟服务器建立连接,建立连接后发送该数据包。! ^" _! r: h5 x& h* T
    数据包格式:5 h* m' Z. c8 Q% E, Z& F

# w2 Q! n( w% {! G( B. O9 i6 I     : K# A4 n+ U0 s  ^6 r7 e/ r
    表1
8 [6 t3 m2 |( ^& |" b0 s' _    响应结果:
7 s, \. g" c' }    如果该设备已经激活、报文无法解析、鉴权失败,将断开连接。
) H) {- j  E$ j! ]5 J' _    解析并鉴权成功后,响应的数据包格式如下:
- V* ^; C& S% G4 e6 z' W2 P
7 D! L. D% U% k% i) p, g6 \    
! N; h) J- Z0 C6 P6 F$ f; L% b9 ^    表2) ^* {5 @; T, l+ V4 o
    1.2 激活确认包
7 b/ S2 A$ R  K# J8 H5 j2 q4 N    用于接收到激活数据包响应数据后返回确认信息。
% R* O5 t; u3 k    数据包格式:
- m  ?, Z2 H. L1 b- R4 q
  w# ~6 v9 I# I. z5 j, ~( [" F     9 {1 i- ^. c* {. T; i9 _
    表3
& O  v- \- M0 k* u    响应结果:2 [, V7 T6 _6 D% e+ T! }2 _
    如果解析包失败或鉴权失败,断开连接。$ K# y" f% F5 _3 K5 h
    解析并鉴权成功,之后数据交互使用skey加密。
  i$ [. o# f+ ?( i/ a0 M
! B4 z8 F, F2 f     7 m4 m% i/ C7 T. G
    表4
' I2 a0 l. ?0 O0 i3 \$ R) W. i    1.3 更新秘钥数据包  \+ ^9 k; I' C
    用于秘钥过期时更新秘钥,也用于心跳,如果一段时间没有请求,发送该包。
0 O" z0 F* M5 P8 h5 Q1 O. z    数据包格式:
% A! ?( a- M1 \: n  m+ ?- c3 j
3 l' A8 S! K& r5 d     + L6 q9 p  \  C0 o& ~$ r1 _
    表58 h, O- |( a5 j0 V3 g1 P  N+ m
    响应结果:
% H$ C; Z! u3 c" X    如果解析包失败或鉴权失败,断开连接。6 p$ [' f/ D4 ]: j
    解析成功,响应的数据包格式有两种:
; s8 `  e: P  ]: F; r- N- b  H' o* B0 x  s* _
   + a* F/ f, z# ?: K" I+ R
    表6
, K" H% U% j9 l' j    1.4 更新秘钥确认包
; b/ W' d! D9 a' k    用于发送更新秘钥数据包接收到返回数据后进行确认的数据包。如果未收到响应或超时,可再次请求。如果请求成功,表示秘钥更新成功,旧的skey将彻底无法使用,之后与服务器通讯将使用新的skey。- T4 l: L- ^* ^$ x+ C$ T& V
    数据包格式:
& W5 |' D- Y8 L5 x  d( c3 \0 w: u  I8 H' {( D, c. q: [) i
    ; Q% j4 h6 N  g
    表76 P* Q# `9 C4 W" |0 _
    响应结果:
7 i2 l! \* F8 N4 T    如果解析包失败或鉴权失败,断开连接。
6 Y/ c$ i. I3 Z* M    解析成功响应报文,之后的请求将使用新的skey。1 L3 W; u/ Q3 Z+ R( B

+ i( ^, ^3 Y# h+ c4 X    
# |; A& T, U' m! R) B% O# F9 K# @    表8
1 I0 P7 t5 {6 h6 r    1.5 握手包+ R; _4 ~7 k' a, F1 v; q; i
    已激活的设备在与服务器建立连接后,先发送该包鉴权。# p8 T2 x: L: e. h" G% x2 b
    数据包格式:
* r- k' m, p+ ~( z8 w* L8 [& z- P
2 v" g8 \& Z5 ^: T% n# D$ e   - k1 i  O) [4 I6 |& b; W, w
    表9
* W; G+ N! j% @$ r9 O1 V    响应结果:
+ D% Y- V) H$ d& D& `, h4 x    如果解析包失败或鉴权失败,断开连接。: G% I$ D* w- `" h9 Y" c
    解析成功响应报文。如果响应结果skey过期,发送1.3、1.4的包
6 K/ g- @  c6 q6 e
3 @% f" l7 a! ^6 r    
8 J7 n' `1 B0 a7 B/ Y5 v- K# N1 T    表10
5 y- R  Y. i& Z8 i6 y3 h) h    2、人脸识别业务数据包
& z% N% P8 F/ d1 e1 V+ ^+ d! m1 q    2.1 人脸注册数据包
  p8 q3 V. i) D    人脸注册流程:先发送注册开始数据包,收到确认后,依次发送各个不同的人脸数据包。最后发送注册结束包,收到确认后结束人脸注册。3 s# f5 X. g  h
    数据包格式:, U* w3 m) p2 m) `

, c) {( Y! E; u& \2 w  ~    9 s, M6 x0 b3 \( m( r0 S
    表11( B* F/ J2 B8 r. z; y, F2 [
    响应数据:: p) v5 h; W* r3 |2 o6 t
    如果解析包失败或鉴权失败,断开连接。
$ E' N; y& f4 `( ^' ]/ r9 t+ L    解析成功,开始发送不同类型的人脸图片。6 d! Z& u- o; O
3 u. E& j3 T: I* n/ p7 ]$ s
    ' y1 [2 M0 B- b: }, _
    表129 p: q: C+ x9 X4 F
    ②脸部信息注册包0 z& d7 O! S* k0 Y) ~1 c% R
    人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。
  g' p/ p5 v; z3 p( S
  l! }: s* `4 [" y9 Q0 u    
- w6 Z) Z! ^% T    表13- K" p2 f$ f9 ?! M- D/ n/ S& l+ P
    响应数据:
) t+ d4 |% n6 I( j+ |% m% D' V! S; i& W; D8 M
    % U6 S9 q  l$ M
    表147 Y" E4 v3 X: y# ]$ q7 J0 M
    ③结束注册数据包
% ]& _9 g6 d4 y* p1 N' \    注册完成发送结束注册包。
2 c1 s3 @6 A0 }8 e) _
9 S# Y6 O# q. d    
# q6 O% \# D" ?7 R3 T6 L    表15
9 F5 u; h* L5 d" a6 ?; W2 c1 A8 }    响应数据:1 N' G4 i# [' h2 M1 Z6 N' |) G

) V" ?; [+ j+ q9 \" a2 d9 Z) K6 t     7 I' N- A3 o% g
    表167 K% ~7 e2 b* i; d
    2.2 人脸删除, o/ T+ t+ x& ?) ?3 K, r
    用于删除人脸信息。, Y) u' ^+ v" S
    数据包格式:
4 `" b" o' w6 a: Y8 x2 P. ~! `, x) g& K
   8 n; K7 l% \$ g* k# D
    表17$ x% T- X( Z$ q) {5 W1 T
    加密字段格式:" `7 @% h/ k  {) \7 d9 ]

& {' V, B2 N" T# H    
5 t3 m( U% F3 s( R; E2 c& k8 q) |, D    表18
7 p& U, s, \' _9 ~1 \    响应数据:
* X. x" Q6 _$ k) J) f" w    如果解析包失败或鉴权失败,断开连接。
5 O! Q: B3 k9 l0 j4 o; y    解析成功。# K. m5 `& H" s4 ?1 S

# d, O( J0 x2 H3 e
0 f0 f3 O% C- Z9 A/ J/ ~! A    表19
0 _( R: ~/ o3 u6 e    2.3 人脸识别
9 p1 t0 h4 f' u; X  J    用于已知一张脸,在人脸库中找到最相似的脸,user_top_num表示返回相似度最高的前多少个人脸。
/ B. |& x5 w  I% W& P) Y% T/ z    数据包格式:1 C2 s2 N9 ]5 x) X( M+ h& ^9 {

: \6 u1 G) F5 P, s& F9 ]     ! J, Z9 e" `1 U# [
    表204 t8 B* J: ]5 ]+ Z; s% v
    加密字段格式:
0 E+ K( P$ N1 V  O3 P; m* Z) @& c9 ?# a* h
   ; i' L: T0 r; J0 g3 |& d- E# b
    表21
! F8 m* N! R: g    响应数据:1 h; i+ H+ M6 w" j
    如果解析包失败或鉴权失败,断开连接。$ e& N9 T, p) K+ e. H5 ]
    解析成功,识别包格式:4 @5 d' O3 |: K1 \

: n: x6 a$ H0 E    0 Z  ~/ l4 T3 _
    表22
. x# q* F7 o" t1 r9 |* \5 \3 i    单次循环体格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。! S# |; k  W( Z# p- n# v+ u: C
/ S* {- n2 C! H) S, z1 j* N
   
0 J9 v! [& r( x    表237 |; O' b% X! i- _8 u6 t# R- c+ M4 Q
    2.4 人脸认证: \+ s+ ^7 ~# N' Q
    用于比较人脸与指定用户id之间的相似程度。1 l. ~4 T6 [# r9 H3 w
    数据包格式:
$ v% D. ^* O* Y! L. E  i$ e9 s* o) g0 K8 U
   
" l3 ~7 G# ~% _- @  m/ c    表24
7 G2 ]- j: Q! C: @9 Z9 E    加密字段格式,人脸类型代码:0x00:正脸;0x01:左侧脸;0x02:右侧脸;0x03:闭眼;0x04:张嘴;0x05:微笑;0x06:眨眼。( V2 M3 i$ L- V  `) I9 B' S
' e2 L: F" [( k  I2 S" Y0 v3 N
    - b" W( w# d3 R) I
    表25
7 h/ F8 c4 K3 O! q% D* Q6 m    响应数据:! j4 X; U' \) l% l5 t8 x
    如果解析包失败或鉴权失败,断开连接。) P2 K$ N* x$ A
    解析成功,返回数据包格式:
, O+ p# u2 y2 ]) ?: \4 f
! |+ T6 A! }9 r7 m5 ]- c# Q; ^    
% K' F# w2 r: U4 g5 O; v    表26  j& a% L+ T! O8 ~

. U- x$ X1 o# r/ Y
/ D/ I) U) H+ D& @6 Q* s
  Z* R0 I5 \9 w# v' I2 r( \( a3 Y( A) A

+ c: x: M9 `- S8 g2 p. M    文件下载请点击: 【5】加解密及数据协议.pdf (688.68 KB, 下载次数: 0)
9 }" }  I  C6 b! ]5 p  _4 E' y$ y6 {  y3 Y$ B

" b6 N! K* C4 u; G; i& A; Z3 K, O7 p( K. I

, H! P+ X/ l( Z1 @7 ^' _' k0 S+ }7 \8 h; V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-26 14:46 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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