Browse Source

add detect facelib

张延森 5 years ago
parent
commit
414dee5914
1 changed files with 56 additions and 2 deletions
  1. 56
    2
      src/main/java/com/huiju/welcome/hardware/service/HikService.java

+ 56
- 2
src/main/java/com/huiju/welcome/hardware/service/HikService.java View File

53
     // 回调类
53
     // 回调类
54
     HCNetSDK.FMSGCallBack_V31 fmsgCallBack;
54
     HCNetSDK.FMSGCallBack_V31 fmsgCallBack;
55
 
55
 
56
+    // 正在使用的人脸库
57
+    String faceLib;
58
+
56
     public boolean init() {
59
     public boolean init() {
57
         String deviceIP = Configer.pick("device.ip");
60
         String deviceIP = Configer.pick("device.ip");
58
 
61
 
67
         if (!setDeviceAlarm()) return false;
70
         if (!setDeviceAlarm()) return false;
68
         if (!setDeviceOnline()) return false;
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
         return true;
80
         return true;
71
     }
81
     }
72
 
82
 
262
         HCNetSDK.NET_DVR_XML_CONFIG_INPUT lpInputParam0 = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
272
         HCNetSDK.NET_DVR_XML_CONFIG_INPUT lpInputParam0 = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
263
         lpInputParam0.dwSize = lpInputParam0.size();
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
         HCNetSDK.BYTE_ARRAY ptrUrl = new HCNetSDK.BYTE_ARRAY(url.length());
277
         HCNetSDK.BYTE_ARRAY ptrUrl = new HCNetSDK.BYTE_ARRAY(url.length());
268
         System.arraycopy(url.getBytes(), 0, ptrUrl.byValue, 0, url.length());
278
         System.arraycopy(url.getBytes(), 0, ptrUrl.byValue, 0, url.length());
269
         ptrUrl.write();
279
         ptrUrl.write();
286
         return;
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
      * 人脸检索 - 功能弃用,设备不支持