|
@@ -0,0 +1,372 @@
|
|
1
|
+# 配置流程
|
|
2
|
+
|
|
3
|
+## 接入配置
|
|
4
|
+
|
|
5
|
+### 注意事项
|
|
6
|
+
|
|
7
|
+- SDK 最低支持 Android 4.0 以上版本 API LEVEL 16。
|
|
8
|
+- SDK 将以 AAR 文件的形式提供,[cepm-sdk-release.aar](#demo) 和 [sdkproject-release_enc.aar](#demo),详情请参见 [添加依赖](#yilai)。
|
|
9
|
+- 提供多个入口方法,请根据业务选择
|
|
10
|
+
|
|
11
|
+### 准备工作
|
|
12
|
+
|
|
13
|
+1. 向AI平台申请使用凭证
|
|
14
|
+2. 需要提供使用环境的Appid、目标客户
|
|
15
|
+3. LicenseID标签已废弃,无需关注
|
|
16
|
+4. 使用凭证包含如下部分:
|
|
17
|
+ - SysName:系统名称
|
|
18
|
+ - UserCode:用户名
|
|
19
|
+ - Password:密钥
|
|
20
|
+ - Url:AI平台服务链接
|
|
21
|
+
|
|
22
|
+<span id='yilai'></span>
|
|
23
|
+
|
|
24
|
+### 添加依赖
|
|
25
|
+
|
|
26
|
+将提供的 AAR 文件加入到 App 工程的 libs 文件夹内,并且在 build.gradle 中添加下面的配置。
|
|
27
|
+
|
|
28
|
+```
|
|
29
|
+android{
|
|
30
|
+ //...
|
|
31
|
+ repositories {
|
|
32
|
+ flatDir {
|
|
33
|
+ dirs 'libs' //this way we can find the .aar file in libs folder
|
|
34
|
+ }
|
|
35
|
+ }
|
|
36
|
+}
|
|
37
|
+
|
|
38
|
+//添加依赖
|
|
39
|
+dependencies {
|
|
40
|
+ //...other...
|
|
41
|
+ //集成sdk依赖
|
|
42
|
+ implementation 'com.alibaba:fastjson:1.2.73'
|
|
43
|
+ implementation 'com.squareup.okhttp3:okhttp:4.0.0'
|
|
44
|
+ implementation files('libs/cepm-sdk-release.aar')
|
|
45
|
+ implementation files('libs/sdkproject-release_enc.aar')
|
|
46
|
+}
|
|
47
|
+
|
|
48
|
+```
|
|
49
|
+
|
|
50
|
+<span id='shili'></span>
|
|
51
|
+
|
|
52
|
+# 接入示例
|
|
53
|
+初始化:该步骤必须进行,否则无法调用
|
|
54
|
+```
|
|
55
|
+# 项目需要增加Application类
|
|
56
|
+public class MyApp extends Application {
|
|
57
|
+
|
|
58
|
+ @Override
|
|
59
|
+ public void onCreate() {
|
|
60
|
+ super.onCreate();
|
|
61
|
+ //必须执行初始化
|
|
62
|
+ CepmApp.init(this);
|
|
63
|
+ }
|
|
64
|
+}
|
|
65
|
+
|
|
66
|
+```
|
|
67
|
+
|
|
68
|
+快速调用:
|
|
69
|
+```
|
|
70
|
+# 在MainActivity中单击某个按钮的代码逻辑
|
|
71
|
+
|
|
72
|
+Credential cert=new Credential();
|
|
73
|
+final FaceidSDK.IDCardInputData inputdata=FaceidSDK.getInstance().new IDCardInputData("xxx","xxx");
|
|
74
|
+cert.setPassword("xxxx");
|
|
75
|
+cert.setUserCode("xxxx");
|
|
76
|
+cert.setUrl("xxxx");
|
|
77
|
+cert.setSysName("xxxx");
|
|
78
|
+
|
|
79
|
+FaceidSDK.getInstance().init(MainActivity.this,"你的LicenseID", cert,new FaceidSDK.FaceidLoginListener() {
|
|
80
|
+ @Override
|
|
81
|
+ public void onLoginSuccess() { //登录成功,拉起 入口方法一 的SDK 页面,
|
|
82
|
+ FaceidSDK.getInstance().startActivity(inputdata, new FaceidSDK.FaceidResultListener() {
|
|
83
|
+ @Override
|
|
84
|
+ public void onFailed(String errorCode, String errorMsg) {
|
|
85
|
+ //txtresult.setText("失败:错误码"+errorCode+";错误信息"+errorMsg);
|
|
86
|
+ }
|
|
87
|
+
|
|
88
|
+ @Override
|
|
89
|
+ public void onFinish(FaceidSDK.OutputData result) {
|
|
90
|
+ //txtresult.setText("操作完成:识别结果"+result.isSuccess()+";相似分数"+result.getScore());
|
|
91
|
+
|
|
92
|
+ }
|
|
93
|
+ });
|
|
94
|
+ }
|
|
95
|
+
|
|
96
|
+ @Override
|
|
97
|
+ public void onLoginFailed(String errorCode, String errorMsg) {
|
|
98
|
+
|
|
99
|
+ }
|
|
100
|
+});
|
|
101
|
+```
|
|
102
|
+<span id='demo'></span>
|
|
103
|
+
|
|
104
|
+[完整demo和sdk下载](./demo/demo-sdk.zip) (跳转后点击查看**原始文件**)
|
|
105
|
+
|
|
106
|
+# 接口详细说明
|
|
107
|
+
|
|
108
|
+1. [Faceid接口](#faceid)
|
|
109
|
+2. [Ocr接口](#ocr)
|
|
110
|
+
|
|
111
|
+<span id='faceid'></span>
|
|
112
|
+
|
|
113
|
+## SDK Faceid 接口
|
|
114
|
+
|
|
115
|
+SDK 代码调用的入口为 `FaceidSDK` 这个类。
|
|
116
|
+
|
|
117
|
+```
|
|
118
|
+public class FaceidSDK {
|
|
119
|
+ /**
|
|
120
|
+ * 该类为一个单例,需要先获得单例对象再进行后续操作
|
|
121
|
+ */
|
|
122
|
+ public static FaceidSDK getInstance(){
|
|
123
|
+ // ...
|
|
124
|
+ }
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+ /**
|
|
128
|
+ * 自定义动作参数,在init执行之前设置才有效
|
|
129
|
+ * 设置“人脸动作范围”,“从范围中随机选取几个动作”等参数
|
|
130
|
+ */
|
|
131
|
+ public void setFaceSDKConfig(FaceSDKConfig faceSDKConfig) {
|
|
132
|
+ // ...
|
|
133
|
+ }
|
|
134
|
+
|
|
135
|
+ /**
|
|
136
|
+ * 在使用SDK前先初始化,
|
|
137
|
+ * 传入证书key `credential`,证书id LicenseID
|
|
138
|
+ * 由 FaceidLoginListener返回是否初始化SDK成功
|
|
139
|
+ */
|
|
140
|
+ public void init(Context context,String LicenseID,Credential credential, FaceidLoginListener loginListerner){
|
|
141
|
+ // ...
|
|
142
|
+ }
|
|
143
|
+
|
|
144
|
+ /**
|
|
145
|
+ * 入口方法一 人脸核身
|
|
146
|
+ * 初始化成功后,调用此函数拉起sdk页面。
|
|
147
|
+ * 传入IDCardInputData(身份证,姓名)
|
|
148
|
+ * 由FaceidResultListener返回人脸核身结果。
|
|
149
|
+ */
|
|
150
|
+ public void startActivity(IDCardInputData data,FaceidResultListener resultListener) {
|
|
151
|
+ // ...
|
|
152
|
+ }
|
|
153
|
+
|
|
154
|
+ /**
|
|
155
|
+ * 入口方法二 人脸比对
|
|
156
|
+ * 初始化成功后,调用此函数拉起sdk页面。
|
|
157
|
+ * 传入PhotoInputData(照片)
|
|
158
|
+ * 由FaceidResultListener返回人脸核身结果。
|
|
159
|
+ */
|
|
160
|
+ public void startActivity(PhotoInputData data,FaceidResultListener resultListener) {
|
|
161
|
+ // ...
|
|
162
|
+ }
|
|
163
|
+
|
|
164
|
+ /**
|
|
165
|
+ * 入口方法三 照片采集
|
|
166
|
+ * 初始化成功后,调用此函数拉起sdk照片采集页面。
|
|
167
|
+ * 由faceDataResultListener返回照片。
|
|
168
|
+ */
|
|
169
|
+ public void startActivity(faceDataResultListener resultListener) {
|
|
170
|
+ // ...
|
|
171
|
+ }
|
|
172
|
+
|
|
173
|
+ /**
|
|
174
|
+ * 初始化回调接口
|
|
175
|
+ */
|
|
176
|
+ public interface FaceidLoginListener {
|
|
177
|
+ void onLoginSuccess();
|
|
178
|
+ void onLoginFailed(String errorCode, String errorMsg);
|
|
179
|
+ }
|
|
180
|
+
|
|
181
|
+ /**
|
|
182
|
+ * 人脸核身结果回调接口
|
|
183
|
+ */
|
|
184
|
+ public interface FaceidResultListener{
|
|
185
|
+ void onFailed(String errorCode, String errorMsg);
|
|
186
|
+ void onFinish(OutputData result);
|
|
187
|
+ }
|
|
188
|
+ /**
|
|
189
|
+ * 照片采集结果回调接口
|
|
190
|
+ */
|
|
191
|
+ public interface FaceDataResultListener {
|
|
192
|
+ void onFailed(String errorCode, String errorMsg);
|
|
193
|
+ void onFinish(OutputFaceData result);
|
|
194
|
+ }
|
|
195
|
+```
|
|
196
|
+
|
|
197
|
+`startActivity()` 的参数PhotoInputData和IDCardInputData用来传递数据:
|
|
198
|
+
|
|
199
|
+ ```
|
|
200
|
+ String name; //姓名
|
|
201
|
+ String idNum; //身份证
|
|
202
|
+ ----
|
|
203
|
+ DataItem photo;//照片信息
|
|
204
|
+ ```
|
|
205
|
+
|
|
206
|
+> 以上参数被分别封装在 `FaceidSDK.PhotoInputData`,`FaceidSDK.IDCardInputData` 对象中。
|
|
207
|
+
|
|
208
|
+### 接入示例
|
|
209
|
+关于接口调用的示例可参考 [接入示例](#shili)
|
|
210
|
+
|
|
211
|
+<span id='canshu'></span>
|
|
212
|
+
|
|
213
|
+### 接口参数说明
|
|
214
|
+
|
|
215
|
+| IDCardInputData参数 | 说明 | 类型 | 长度(字节) | 是否必填 |
|
|
216
|
+| --- | --- | --- | --- | --- |
|
|
217
|
+| name | 核验人的姓名| String | - | 是 |
|
|
218
|
+| idNum | 核验人的身份证号 | String | 32 | 是 |
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+| PhotoInputData参数 | 说明 | 类型 | 长度(字节) | 是否必填 |
|
|
222
|
+| --- | --- | --- | --- | --- |
|
|
223
|
+| photo | 核验人的照片,DataItem属性见下表| DataItem | - | 是 |
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+| DataItem属性 | 说明 | 类型 | 是否必填 |
|
|
227
|
+| --- | --- | --- | --- |
|
|
228
|
+| origin | 文件类型<br/> base64形式:self<br/> 链接形式:uri <br/> | DataItem.DataOrigin | 是 |
|
|
229
|
+| data | 照片内容(base64或uri链接)| String | 是 |
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+### 动作参数说明
|
|
233
|
+
|
|
234
|
+| FaceSDKConfig参数 | 说明 | 类型 |
|
|
235
|
+| --- | --- | --- |
|
|
236
|
+| actions | [动作](#dongzuo)范围<br/> 可选"eye","mouth","headRight","headLeft","headUp","headDown","yaw"<br/>默认包含所有| List\<String\> |
|
|
237
|
+| actionOrderRandom | 动作顺序是否随机,默认true | boolean |
|
|
238
|
+| actionNum | 随机从actions中选取几个动作,默认3 | int |
|
|
239
|
+
|
|
240
|
+<span id='dongzuo'></span>
|
|
241
|
+
|
|
242
|
+### 动作
|
|
243
|
+
|
|
244
|
+| 参数名 | 说明 |
|
|
245
|
+| --- | --- |
|
|
246
|
+| eye | 眨眼 |
|
|
247
|
+| mouth | 张嘴 |
|
|
248
|
+| headRight | 头右转 |
|
|
249
|
+| headLeft | 头左转 |
|
|
250
|
+
|
|
251
|
+<span id='ocr'></span>
|
|
252
|
+
|
|
253
|
+## SDK Ocr 接口
|
|
254
|
+
|
|
255
|
+SDK 代码调用的入口为 `OcrSDK` 这个类。
|
|
256
|
+
|
|
257
|
+```
|
|
258
|
+public class OcrSDK {
|
|
259
|
+ /**
|
|
260
|
+ * 该类为一个单例,需要先获得单例对象再进行后续操作
|
|
261
|
+ */
|
|
262
|
+ public static OcrSDK getInstance(){
|
|
263
|
+ // ...
|
|
264
|
+ }
|
|
265
|
+
|
|
266
|
+ /**
|
|
267
|
+ * 在使用SDK前先初始化,
|
|
268
|
+ * 传入证书key `credential`,
|
|
269
|
+ * 由 OcrLoginListener返回是否初始化SDK成功
|
|
270
|
+ */
|
|
271
|
+ public void init(Context context,Credential credential, final OcrLoginListener loginListerner){
|
|
272
|
+ // ...
|
|
273
|
+ }
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+ /**
|
|
277
|
+ * 登录成功后,调用此函数拉起sdk页面
|
|
278
|
+ * 打开拍摄页面,传入证件类型ocrType
|
|
279
|
+ *
|
|
280
|
+ * @param resultListener 返回拍摄图片的路径
|
|
281
|
+ */
|
|
282
|
+ public void startTakePhotoActivity(TakePhotoResultListener resultListener,OcrType ocrType) {
|
|
283
|
+ // ...
|
|
284
|
+ }
|
|
285
|
+
|
|
286
|
+ /**
|
|
287
|
+ * 登录成功后,调用此函数拉起sdk页面
|
|
288
|
+ * 打开身份证正面识别
|
|
289
|
+ * @param resultListener 用于返回识别结果
|
|
290
|
+ */
|
|
291
|
+ public void startIdCardFrontActivity(IdCardFrontResultListener resultListener) {
|
|
292
|
+ // ...
|
|
293
|
+
|
|
294
|
+ }
|
|
295
|
+
|
|
296
|
+ /**
|
|
297
|
+ * 登录成功后,调用此函数拉起sdk页面
|
|
298
|
+ * 打开身份证背面识别
|
|
299
|
+ * @param resultListener 用于返回识别结果
|
|
300
|
+ */
|
|
301
|
+ public void startIdCardBackActivity(IdCardBackResultListener resultListener) {
|
|
302
|
+ // ...
|
|
303
|
+
|
|
304
|
+ }
|
|
305
|
+ /**
|
|
306
|
+ * 登录成功后,调用此函数拉起sdk页面
|
|
307
|
+ * 打开银行卡识别
|
|
308
|
+ * @param resultListener 用于返回识别结果
|
|
309
|
+ */
|
|
310
|
+ public void startBankCardActivity(BankCardResultListener resultListener) {
|
|
311
|
+ // ...
|
|
312
|
+
|
|
313
|
+ }
|
|
314
|
+
|
|
315
|
+ /**
|
|
316
|
+ * 登录回调接口
|
|
317
|
+ */
|
|
318
|
+ public interface OcrLoginListener {
|
|
319
|
+ void onLoginSuccess();
|
|
320
|
+
|
|
321
|
+ void onLoginFailed(String errorCode, String errorMsg);
|
|
322
|
+ }
|
|
323
|
+
|
|
324
|
+ /**
|
|
325
|
+ * Ocr结果回调接口
|
|
326
|
+ */
|
|
327
|
+ public interface TakePhotoResultListener {
|
|
328
|
+ /**
|
|
329
|
+ * @RARAM exidCardResult SDK返回的识别结果的错误码
|
|
330
|
+ * @RARAM exidCardResult SDK返回的识别结果的错误信息
|
|
331
|
+ */
|
|
332
|
+ void onFailed(String errorCode, String errorMsg);
|
|
333
|
+
|
|
334
|
+ void onFinish(String result);
|
|
335
|
+ }
|
|
336
|
+ /**
|
|
337
|
+ * Ocr结果回调接口
|
|
338
|
+ */
|
|
339
|
+ public interface IdCardFrontResultListener {
|
|
340
|
+ /**
|
|
341
|
+ * @RARAM exidCardResult SDK返回的识别结果的错误码
|
|
342
|
+ * @RARAM exidCardResult SDK返回的识别结果的错误信息
|
|
343
|
+ */
|
|
344
|
+ void onFailed(String errorCode, String errorMsg);
|
|
345
|
+
|
|
346
|
+ void onFinish(IdCardFrontData result);
|
|
347
|
+ }
|
|
348
|
+ /**
|
|
349
|
+ * Ocr结果回调接口
|
|
350
|
+ */
|
|
351
|
+ public interface IdCardBackResultListener {
|
|
352
|
+ /**
|
|
353
|
+ * @RARAM exidCardResult SDK返回的识别结果的错误码
|
|
354
|
+ * @RARAM exidCardResult SDK返回的识别结果的错误信息
|
|
355
|
+ */
|
|
356
|
+ void onFailed(String errorCode, String errorMsg);
|
|
357
|
+
|
|
358
|
+ void onFinish(IdCardBackData result);
|
|
359
|
+ }
|
|
360
|
+ /**
|
|
361
|
+ * Ocr结果回调接口
|
|
362
|
+ */
|
|
363
|
+ public interface BankCardResultListener {
|
|
364
|
+ /**
|
|
365
|
+ * @RARAM exidCardResult SDK返回的识别结果的错误码
|
|
366
|
+ * @RARAM exidCardResult SDK返回的识别结果的错误信息
|
|
367
|
+ */
|
|
368
|
+ void onFailed(String errorCode, String errorMsg);
|
|
369
|
+
|
|
370
|
+ void onFinish(BankCardData result);
|
|
371
|
+ }
|
|
372
|
+```
|