소스 검색

add detect facelib

张延森 5 년 전
부모
커밋
414dee5914
1개의 변경된 파일56개의 추가작업 그리고 2개의 파일을 삭제
  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 파일 보기

@@ -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
      * 人脸检索 - 功能弃用,设备不支持