|
@@ -53,6 +53,9 @@ public class HikService {
|
53
|
53
|
// 回调类
|
54
|
54
|
HCNetSDK.FMSGCallBack_V31 fmsgCallBack;
|
55
|
55
|
|
|
56
|
+ // 正在使用的人脸库
|
|
57
|
+ String faceLib;
|
|
58
|
+
|
56
|
59
|
public boolean init() {
|
57
|
60
|
String deviceIP = Configer.pick("device.ip");
|
58
|
61
|
|
|
@@ -67,6 +70,13 @@ public class HikService {
|
67
|
70
|
if (!setDeviceAlarm()) return false;
|
68
|
71
|
if (!setDeviceOnline()) return false;
|
69
|
72
|
|
|
73
|
+ try {
|
|
74
|
+ detectFaceLib();
|
|
75
|
+ } catch (Exception e) {
|
|
76
|
+ e.printStackTrace();
|
|
77
|
+ log.error("探测人脸库失败: {}", e.getMessage());
|
|
78
|
+ }
|
|
79
|
+
|
70
|
80
|
return true;
|
71
|
81
|
}
|
72
|
82
|
|
|
@@ -262,8 +272,8 @@ public class HikService {
|
262
|
272
|
HCNetSDK.NET_DVR_XML_CONFIG_INPUT lpInputParam0 = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
|
263
|
273
|
lpInputParam0.dwSize = lpInputParam0.size();
|
264
|
274
|
|
265
|
|
- String customFaceLibID = Configer.pick("hik.facelib");
|
266
|
|
- String url = "DELETE /ISAPI/Intelligent/FDLib/"+customFaceLibID+"/picture/"+personId+"\r\n";
|
|
275
|
+ String customFaceLibID = null == faceLib ? Configer.pick("hik.facelib") : faceLib;
|
|
276
|
+ String url = "DELETE /ISAPI/Intelligent/FDLib/"+customFaceLibID+"/picture/"+personId+"?FDType=custom\r\n";
|
267
|
277
|
HCNetSDK.BYTE_ARRAY ptrUrl = new HCNetSDK.BYTE_ARRAY(url.length());
|
268
|
278
|
System.arraycopy(url.getBytes(), 0, ptrUrl.byValue, 0, url.length());
|
269
|
279
|
ptrUrl.write();
|
|
@@ -286,6 +296,50 @@ public class HikService {
|
286
|
296
|
return;
|
287
|
297
|
}
|
288
|
298
|
|
|
299
|
+ public void detectFaceLib() throws Exception {
|
|
300
|
+ HCNetSDK.NET_DVR_XML_CONFIG_INPUT lpInputParam0 = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
|
|
301
|
+ lpInputParam0.dwSize = lpInputParam0.size();
|
|
302
|
+
|
|
303
|
+ String url = "GET /ISAPI/Intelligent/FDLib\r\n";
|
|
304
|
+ HCNetSDK.BYTE_ARRAY ptrUrl = new HCNetSDK.BYTE_ARRAY(url.length());
|
|
305
|
+ System.arraycopy(url.getBytes(), 0, ptrUrl.byValue, 0, url.length());
|
|
306
|
+ ptrUrl.write();
|
|
307
|
+ lpInputParam0.lpRequestUrl = ptrUrl.getPointer();
|
|
308
|
+ lpInputParam0.dwRequestUrlLen = url.length();
|
|
309
|
+ lpInputParam0.write();
|
|
310
|
+
|
|
311
|
+ HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT lpOutputParam0 = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
|
|
312
|
+ lpOutputParam0.dwSize = lpOutputParam0.size();
|
|
313
|
+ HCNetSDK.BYTE_ARRAY ptrOutByte = new HCNetSDK.BYTE_ARRAY(HCNetSDK.ISAPI_DATA_LEN);
|
|
314
|
+ lpOutputParam0.lpOutBuffer = ptrOutByte.getPointer();
|
|
315
|
+ lpOutputParam0.dwOutBufferSize = HCNetSDK.ISAPI_DATA_LEN;
|
|
316
|
+ lpOutputParam0.write();
|
|
317
|
+
|
|
318
|
+ if (!hcNetSDK.NET_DVR_STDXMLConfig(user, lpInputParam0, lpOutputParam0)) {
|
|
319
|
+ String error = getHcNetError();
|
|
320
|
+ log.error("检测人脸库失败: {}", error);
|
|
321
|
+ }
|
|
322
|
+
|
|
323
|
+ byte[] fDSearchResult = lpOutputParam0.lpOutBuffer.getByteArray(0, lpOutputParam0.dwOutBufferSize);
|
|
324
|
+ // https://dom4j.github.io/javadoc/2.1.1/overview-summary.html
|
|
325
|
+ String xml = new String(fDSearchResult, "GBK");
|
|
326
|
+ Document document = DocumentHelper.parseText(xml);
|
|
327
|
+ Element root = document.getRootElement();
|
|
328
|
+ for (Iterator<Element> it = root.elementIterator("FDLibBaseCfg"); it.hasNext();) {
|
|
329
|
+ Element fDLibBaseCfg = it.next();
|
|
330
|
+ Element nameNode = fDLibBaseCfg.element("name");
|
|
331
|
+ if ("default".equals(nameNode.getStringValue())) {
|
|
332
|
+ Element fdidNode = fDLibBaseCfg.element("FDID");
|
|
333
|
+ faceLib = fdidNode.getStringValue();
|
|
334
|
+
|
|
335
|
+ // todo
|
|
336
|
+ // 反写配置文件
|
|
337
|
+
|
|
338
|
+ break;
|
|
339
|
+ }
|
|
340
|
+ }
|
|
341
|
+ }
|
|
342
|
+
|
289
|
343
|
|
290
|
344
|
/**
|
291
|
345
|
* 人脸检索 - 功能弃用,设备不支持
|