From 7d797b1a5786a8d4ca3aafe2484c75ad15ba9d8f Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期一, 17 十二月 2018 20:25:22 +0800
Subject: [PATCH] init QiaojiaoSystem Code (svn version is r3340)
---
QiaoJiaSystem/build/data/labels/34_1.png | 0
QiaoJiaSystem/build/data/labels/50_2.png | 0
QiaoJiaSystem/build/data/labels/104_7.png | 0
QiaoJiaSystem/build/data/labels/68_2.png | 0
QiaoJiaSystem/build/data/labels/62_5.png | 0
QiaoJiaSystem/build/data/labels/83_6.png | 0
QiaoJiaSystem/YoloServer/YoloDetectServerI.h | 40
QiaoJiaSystem/build/data/labels/121_5.png | 0
QiaoJiaSystem/build/data/labels/47_1.png | 0
QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.h | 42
QiaoJiaSystem/build/data/labels/85_0.png | 0
QiaoJiaSystem/build/data/labels/105_4.png | 0
QiaoJiaSystem/build/data/labels/46_4.png | 0
QiaoJiaSystem/build/data/labels/75_5.png | 0
QiaoJiaSystem/RecordVideo/CommonFFmpegFunc.hpp | 264
QiaoJiaSystem/build/data/labels/45_7.png | 0
QiaoJiaSystem/build/data/labels/114_2.png | 0
QiaoJiaSystem/build/data/labels/54_5.png | 0
QiaoJiaSystem/build/data/labels/84_3.png | 0
QiaoJiaSystem/build/data/labels/106_1.png | 0
QiaoJiaSystem/build/data/labels/76_2.png | 0
QiaoJiaSystem/build/data/labels/93_0.png | 0
QiaoJiaSystem/build/data/labels/39_1.png | 0
QiaoJiaSystem/build/data/labels/92_3.png | 0
QiaoJiaSystem/build/data/labels/38_4.png | 0
QiaoJiaSystem/build/data/labels/91_6.png | 0
QiaoJiaSystem/build/data/labels/122_2.png | 0
QiaoJiaSystem/build/data/labels/37_7.png | 0
QiaoJiaSystem/build/data/labels/42_2.png | 0
QiaoJiaSystem/build/data/labels/100_4.png | 0
QiaoJiaSystem/build/data/labels/41_4.png | 0
QiaoJiaSystem/build/data/labels/55_2.png | 0
QiaoJiaSystem/build/data/labels/113_5.png | 0
QiaoJiaSystem/build/data/voc.names | 20
QiaoJiaSystem/build/data/labels/101_2.png | 0
QiaoJiaSystem/build/data/labels/88_6.png | 0
QiaoJiaSystem/build/data/labels/59_4.png | 0
QiaoJiaSystem/build/data/labels/70_6.png | 0
QiaoJiaSystem/build/data/labels/109_7.png | 0
QiaoJiaSystem/build/data/labels/54_4.png | 0
QiaoJiaSystem/build/data/labels/126_5.png | 0
QiaoJiaSystem/build/data/labels/67_5.png | 0
QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h | 48
QiaoJiaSystem/build/data/labels/75_6.png | 0
QiaoJiaSystem/build/data/labels/119_2.png | 0
QiaoJiaSystem/build/data/labels/72_0.png | 0
QiaoJiaSystem/RapidStructureApp/VideoChangeScore.h | 22
QiaoJiaSystem/build/data/labels/118_4.png | 0
QiaoJiaSystem/build/data/labels/71_2.png | 0
QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.ice | 24
QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.h | 28
QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.cpp | 86
QiaoJiaSystem/build/data/labels/97_3.png | 0
QiaoJiaSystem/build/data/labels/32_7.png | 0
QiaoJiaSystem/build/data/labels/89_2.png | 0
QiaoJiaSystem/build/data/labels/125_7.png | 0
QiaoJiaSystem/build/data/labels/50_3.png | 0
QiaoJiaSystem/build/data/labels/110_0.png | 0
QiaoJiaSystem/build/data/labels/51_0.png | 0
QiaoJiaSystem/build/data/labels/79_7.png | 0
QiaoJiaSystem/StructureApp/AppPipeController.h | 116
QiaoJiaSystem/build/data/labels/62_6.png | 0
QiaoJiaSystem/build/cfg/yolov3-voc.cfg | 785 +
QiaoJiaSystem/build/data/labels/122_3.png | 0
QiaoJiaSystem/build/data/labels/63_3.png | 0
QiaoJiaSystem/build/data/labels/67_4.png | 0
QiaoJiaSystem/build/data/labels/80_1.png | 0
QiaoJiaSystem/build/data/labels/121_6.png | 0
QiaoJiaSystem/build/data/labels/105_5.png | 0
QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp | 312
QiaoJiaSystem/build/data/labels/66_7.png | 0
QiaoJiaSystem/build/data/labels/77_0.png | 0
QiaoJiaSystem/build/data/labels/114_1.png | 0
QiaoJiaSystem/build/data/labels/85_1.png | 0
QiaoJiaSystem/build/data/labels/39_0.png | 0
QiaoJiaSystem/build/data/labels/91_7.png | 0
QiaoJiaSystem/RecordVideo/CMakeLists.txt | 88
QiaoJiaSystem/build/FaceDetectServer | 0
QiaoJiaSystem/build/data/labels/38_3.png | 0
QiaoJiaSystem/build/erl_crash.dump | 10393 +++++++++++++
QiaoJiaSystem/RecordVideo/VideoRecorderManager.cpp | 54
QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt | 228
QiaoJiaSystem/build/data/labels/75_4.png | 0
QiaoJiaSystem/build/data/labels/83_5.png | 0
QiaoJiaSystem/build/data/labels/76_1.png | 0
QiaoJiaSystem/build/data/labels/46_5.png | 0
QiaoJiaSystem/build/data/labels/54_6.png | 0
QiaoJiaSystem/build/data/labels/84_2.png | 0
QiaoJiaSystem/build/data/labels/106_0.png | 0
QiaoJiaSystem/build/data/labels/120_7.png | 0
QiaoJiaSystem/build/data/labels/87_7.png | 0
QiaoJiaSystem/build/data/labels/113_6.png | 0
QiaoJiaSystem/build/data/labels/101_3.png | 0
QiaoJiaSystem/StructureApp/TrackingTrigger.h | 69
QiaoJiaSystem/build/data/labels/92_2.png | 0
QiaoJiaSystem/StructureApp/rpc/StructureApp.cpp | 854 +
QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.h | 59
QiaoJiaSystem/build/runTestCutImage.sh | 9
QiaoJiaSystem/build/data/labels/40_7.png | 0
QiaoJiaSystem/build/data/labels/70_7.png | 0
QiaoJiaSystem/StructureApp/FaceExtractElement.h | 61
QiaoJiaSystem/build/data/labels/59_3.png | 0
QiaoJiaSystem/build/data/labels/89_3.png | 0
QiaoJiaSystem/StructureApp/PerimeterElement.h | 82
QiaoJiaSystem/build/data/labels/69_0.png | 0
QiaoJiaSystem/build/data/labels/71_3.png | 0
QiaoJiaSystem/build/data/labels/55_1.png | 0
QiaoJiaSystem/build/data/labels/100_3.png | 0
QiaoJiaSystem/build/data/labels/58_7.png | 0
QiaoJiaSystem/build/data/labels/63_2.png | 0
QiaoJiaSystem/build/data/labels/47_0.png | 0
QiaoJiaSystem/build/data/labels/80_0.png | 0
QiaoJiaSystem/build/data/labels/109_6.png | 0
QiaoJiaSystem/build/configjson说明.txt | 16
QiaoJiaSystem/build/data/labels/97_4.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp | 91
QiaoJiaSystem/build/data/labels/32_6.png | 0
QiaoJiaSystem/build/data/labels/117_7.png | 0
QiaoJiaSystem/build/data/labels/118_3.png | 0
QiaoJiaSystem/LocalDBTool/CMakeLists.txt | 59
QiaoJiaSystem/build/data/labels/42_3.png | 0
QiaoJiaSystem/build/data/labels/126_4.png | 0
QiaoJiaSystem/build/data/labels/34_2.png | 0
QiaoJiaSystem/build/data/labels/98_0.png | 0
QiaoJiaSystem/build/data/labels/84_1.png | 0
QiaoJiaSystem/build/data/labels/106_3.png | 0
QiaoJiaSystem/build/data/labels/47_3.png | 0
QiaoJiaSystem/StructureApp/PerimeterElement.cpp | 241
QiaoJiaSystem/build/data/labels/63_4.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/DB/DB.pri | 22
QiaoJiaSystem/build/data/labels/125_6.png | 0
QiaoJiaSystem/build/data/labels/66_6.png | 0
QiaoJiaSystem/VideoAnalysFromHC/myThread.cpp | 1
QiaoJiaSystem/build/data/labels/118_6.png | 0
QiaoJiaSystem/build/data/labels/97_1.png | 0
QiaoJiaSystem/build/data/labels/38_2.png | 0
QiaoJiaSystem/build/data/labels/110_1.png | 0
QiaoJiaSystem/build/data/labels/93_2.png | 0
QiaoJiaSystem/RecordVideo/LoopVideoRecorder.h | 38
QiaoJiaSystem/build/data/labels/122_4.png | 0
QiaoJiaSystem/build/data/labels/42_0.png | 0
QiaoJiaSystem/build/data/labels/113_3.png | 0
QiaoJiaSystem/FaceSearchServer/rpc/gen.sh | 3
QiaoJiaSystem/build/data/labels/105_2.png | 0
QiaoJiaSystem/build/data/labels/50_0.png | 0
QiaoJiaSystem/build/data/labels/82_7.png | 0
QiaoJiaSystem/StructureApp/YoloRpcElement.h | 52
QiaoJiaSystem/VideoServer/QiaoJia/widget.h | 22
QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro.user | 271
QiaoJiaSystem/build/data/labels/126_7.png | 0
QiaoJiaSystem/build/data/labels/39_3.png | 0
QiaoJiaSystem/build/data/labels/90_7.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/mySem.hpp | 70
QiaoJiaSystem/build/DataWebServer | 0
QiaoJiaSystem/build/data/labels/58_6.png | 0
QiaoJiaSystem/build/data/labels/121_3.png | 0
QiaoJiaSystem/build/data/labels/71_4.png | 0
QiaoJiaSystem/build/data/labels/89_0.png | 0
QiaoJiaSystem/build/data/labels/92_1.png | 0
QiaoJiaSystem/build/data/labels/83_7.png | 0
QiaoJiaSystem/build/data/labels/102_0.png | 0
QiaoJiaSystem/build/data/labels/46_3.png | 0
QiaoJiaSystem/build/data/labels/114_3.png | 0
QiaoJiaSystem/build/data/labels/101_0.png | 0
QiaoJiaSystem/StructureApp/ImageDrawElement.h | 30
QiaoJiaSystem/RecordVideo/rpc/RecordVideo/__init__.py | 10
QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.h | 92
QiaoJiaSystem/build/data/labels/100_2.png | 0
QiaoJiaSystem/RapidStructureApp/TriggerElement.h | 51
QiaoJiaSystem/build/data/labels/98_1.png | 0
QiaoJiaSystem/build/data/labels/117_6.png | 0
QiaoJiaSystem/build/data/labels/70_4.png | 0
QiaoJiaSystem/build/data/labels/51_1.png | 0
QiaoJiaSystem/build/data/labels/67_7.png | 0
QiaoJiaSystem/build/data/labels/43_0.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/myThread.h | 128
QiaoJiaSystem/build/data/labels/109_5.png | 0
QiaoJiaSystem/build/data/labels/59_6.png | 0
QiaoJiaSystem/build/data/labels/62_3.png | 0
QiaoJiaSystem/build/data/labels/54_2.png | 0
QiaoJiaSystem/build/data/labels/109_4.png | 0
QiaoJiaSystem/build/data/labels/97_2.png | 0
QiaoJiaSystem/build/data/labels/38_1.png | 0
QiaoJiaSystem/build/data/labels/122_5.png | 0
QiaoJiaSystem/build/data/labels/84_0.png | 0
QiaoJiaSystem/build/data/labels/118_5.png | 0
QiaoJiaSystem/build/data/labels/34_0.png | 0
QiaoJiaSystem/build/data/labels/125_5.png | 0
QiaoJiaSystem/build/data/labels/94_0.png | 0
QiaoJiaSystem/build/data/labels/106_2.png | 0
QiaoJiaSystem/LocalDBTool/GetUUId.h | 27
QiaoJiaSystem/build/data/labels/93_1.png | 0
QiaoJiaSystem/build/data/labels/105_3.png | 0
QiaoJiaSystem/build/data/labels/50_1.png | 0
QiaoJiaSystem/build/data/labels/113_4.png | 0
QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.h | 85
QiaoJiaSystem/build/data/labels/110_2.png | 0
QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt.user | 484
QiaoJiaSystem/build/data/labels/102_1.png | 0
QiaoJiaSystem/build/data/labels/47_2.png | 0
QiaoJiaSystem/build/data/labels/63_5.png | 0
QiaoJiaSystem/build/data/labels/121_4.png | 0
QiaoJiaSystem/YoloServer/CMakeLists.txt | 103
QiaoJiaSystem/build/data/labels/66_5.png | 0
QiaoJiaSystem/build/data/labels/74_6.png | 0
QiaoJiaSystem/build/data/labels/117_5.png | 0
QiaoJiaSystem/build/data/labels/58_5.png | 0
QiaoJiaSystem/build/data/labels/39_2.png | 0
QiaoJiaSystem/build/data/labels/55_4.png | 0
QiaoJiaSystem/build/data/labels/71_5.png | 0
QiaoJiaSystem/build/data/labels/89_1.png | 0
QiaoJiaSystem/build/data/labels/55_3.png | 0
QiaoJiaSystem/DataManagerServer/AppPipeController.cpp | 33
QiaoJiaSystem/build/data/labels/74_7.png | 0
QiaoJiaSystem/build/data/labels/86_0.png | 0
QiaoJiaSystem/build/data/labels/114_4.png | 0
QiaoJiaSystem/build/data/labels/46_2.png | 0
QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp | 194
QiaoJiaSystem/build/data/labels/126_6.png | 0
QiaoJiaSystem/build/data/labels/42_1.png | 0
QiaoJiaSystem/RecordVideo/VideoRecorderManager.h | 25
QiaoJiaSystem/build/data/labels/92_0.png | 0
QiaoJiaSystem/build/data/labels/98_2.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.h | 26
QiaoJiaSystem/build/data/labels/59_5.png | 0
QiaoJiaSystem/build/data/labels/62_4.png | 0
QiaoJiaSystem/build/data/labels/51_2.png | 0
QiaoJiaSystem/build/data/labels/54_3.png | 0
QiaoJiaSystem/build/data/labels/70_5.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/widget.ui | 20
QiaoJiaSystem/build/data/labels/43_1.png | 0
QiaoJiaSystem/build/data/labels/75_7.png | 0
QiaoJiaSystem/build/data/labels/101_1.png | 0
QiaoJiaSystem/build/data/labels/67_6.png | 0
QiaoJiaSystem/build/data/labels/35_0.png | 0
QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.cpp | 276
QiaoJiaSystem/build/data/labels/37_3.png | 0
QiaoJiaSystem/build/data/labels/36_6.png | 0
QiaoJiaSystem/build/data/labels/111_7.png | 0
QiaoJiaSystem/build/data/labels/53_4.png | 0
QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp | 463
QiaoJiaSystem/build/data/labels/109_3.png | 0
QiaoJiaSystem/build/data/labels/125_4.png | 0
QiaoJiaSystem/build/data/labels/67_1.png | 0
QiaoJiaSystem/build/data/labels/83_2.png | 0
QiaoJiaSystem/build/data/labels/48_2.png | 0
QiaoJiaSystem/build/data/labels/112_4.png | 0
QiaoJiaSystem/build/data/labels/82_5.png | 0
QiaoJiaSystem/DataManagerServer/net_config/net_config.h | 61
QiaoJiaSystem/build/data/labels/35_2.png | 0
QiaoJiaSystem/build/data/labels/34_5.png | 0
QiaoJiaSystem/build/data/coco.names | 80
QiaoJiaSystem/build/data/labels/66_4.png | 0
QiaoJiaSystem/build/data/labels/64_3.png | 0
QiaoJiaSystem/build/data/labels/126_1.png | 0
QiaoJiaSystem/build/data/labels/81_1.png | 0
QiaoJiaSystem/StructureApp/FaceRpcElement.h | 52
QiaoJiaSystem/build/data/labels/80_4.png | 0
QiaoJiaSystem/build/data/labels/65_0.png | 0
QiaoJiaSystem/build/data/labels/71_6.png | 0
QiaoJiaSystem/StructureApp/StructureAppI.h | 50
QiaoJiaSystem/build/data/labels/57_7.png | 0
QiaoJiaSystem/build/config.db | 0
QiaoJiaSystem/build/data/labels/110_3.png | 0
QiaoJiaSystem/build/data/labels/89_6.png | 0
QiaoJiaSystem/build/data/labels/32_3.png | 0
QiaoJiaSystem/build/data/labels/33_0.png | 0
QiaoJiaSystem/build/data/labels/99_1.png | 0
QiaoJiaSystem/RecordVideo/ImageGrabberI.cpp | 117
QiaoJiaSystem/build/data/labels/105_1.png | 0
QiaoJiaSystem/build/data/labels/85_3.png | 0
QiaoJiaSystem/build/data/labels/68_5.png | 0
QiaoJiaSystem/build/data/labels/69_3.png | 0
QiaoJiaSystem/build/data/labels/62_1.png | 0
QiaoJiaSystem/build/data/labels/55_5.png | 0
QiaoJiaSystem/build/data/labels/73_7.png | 0
QiaoJiaSystem/CMakeLists.txt | 28
QiaoJiaSystem/build/data/labels/116_6.png | 0
QiaoJiaSystem/build/data/labels/88_2.png | 0
QiaoJiaSystem/RecordVideo/rpc/RecordVideo.ice | 24
QiaoJiaSystem/build/data/labels/51_3.png | 0
QiaoJiaSystem/build/data/labels/35_1.png | 0
QiaoJiaSystem/build/data/labels/60_0.png | 0
QiaoJiaSystem/FaceDetectServer/CMakeLists.txt | 75
QiaoJiaSystem/build/data/labels/38_7.png | 0
QiaoJiaSystem/build/data/labels/50_5.png | 0
QiaoJiaSystem/build/data/labels/124_0.png | 0
QiaoJiaSystem/build/data/labels/39_5.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/dbtest.h | 46
QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.h | 25
QiaoJiaSystem/StructureApp/rpc/StructureApp_ice.py | 172
QiaoJiaSystem/build/data/labels/84_7.png | 0
QiaoJiaSystem/build/data/labels/121_1.png | 0
QiaoJiaSystem/build/data/labels/107_2.png | 0
QiaoJiaSystem/build/data/labels/114_5.png | 0
QiaoJiaSystem/build/data/labels/46_1.png | 0
QiaoJiaSystem/build/data/labels/86_1.png | 0
QiaoJiaSystem/build/data/labels/make_labels.py | 23
QiaoJiaSystem/build/data/labels/118_7.png | 0
QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h | 27
QiaoJiaSystem/build/data/labels/123_2.png | 0
QiaoJiaSystem/build/data/labels/89_7.png | 0
QiaoJiaSystem/build/data/labels/48_1.png | 0
QiaoJiaSystem/build/data/labels/81_0.png | 0
QiaoJiaSystem/VideoAnalysFromHC/mySem.hpp | 70
QiaoJiaSystem/build/data/labels/59_7.png | 0
QiaoJiaSystem/build/data/labels/112_5.png | 0
QiaoJiaSystem/build/data/labels/82_6.png | 0
QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.h | 28
QiaoJiaSystem/build/data/labels/111_6.png | 0
QiaoJiaSystem/build/data/labels/36_7.png | 0
QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp | 89
QiaoJiaSystem/build/data/labels/37_4.png | 0
QiaoJiaSystem/build/data/labels/44_0.png | 0
QiaoJiaSystem/build/data/labels/86_7.png | 0
QiaoJiaSystem/VideoAnalysFromHC/TestThreads.cpp | 17
QiaoJiaSystem/build/data/labels/125_3.png | 0
QiaoJiaSystem/build/data/labels/80_5.png | 0
QiaoJiaSystem/build/data/labels/33_7.png | 0
QiaoJiaSystem/build/data/labels/109_2.png | 0
QiaoJiaSystem/build/data/labels/97_0.png | 0
QiaoJiaSystem/build/data/labels/71_7.png | 0
QiaoJiaSystem/DataManagerServer/net_config/net_config.cpp | 969 +
QiaoJiaSystem/build/data/labels/103_0.png | 0
QiaoJiaSystem/build/data/labels/57_6.png | 0
QiaoJiaSystem/build/data/labels/33_1.png | 0
QiaoJiaSystem/build/data/labels/35_3.png | 0
QiaoJiaSystem/build/startHC.sh | 3
QiaoJiaSystem/build/data/labels/64_2.png | 0
QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp | 265
QiaoJiaSystem/build/data/labels/34_6.png | 0
QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp | 135
QiaoJiaSystem/RecordVideo/RecordVideoI.cpp | 38
QiaoJiaSystem/build/data/labels/126_0.png | 0
QiaoJiaSystem/build/data/labels/84_6.png | 0
QiaoJiaSystem/build/data/labels/121_2.png | 0
QiaoJiaSystem/build/data/labels/62_2.png | 0
QiaoJiaSystem/RapidStructureApp/mainRtsp.cpp | 26
QiaoJiaSystem/build/data/labels/116_7.png | 0
QiaoJiaSystem/build/data/labels/46_0.png | 0
QiaoJiaSystem/build/data/labels/51_4.png | 0
QiaoJiaSystem/build/data/labels/88_3.png | 0
QiaoJiaSystem/build/data/labels/105_0.png | 0
QiaoJiaSystem/build/data/labels/85_2.png | 0
QiaoJiaSystem/build/data/labels/99_0.png | 0
QiaoJiaSystem/build/data/labels/39_4.png | 0
QiaoJiaSystem/build/data/labels/114_6.png | 0
QiaoJiaSystem/build/data/labels/55_6.png | 0
QiaoJiaSystem/build/data/labels/66_3.png | 0
QiaoJiaSystem/YoloServer/rpc/YoloServer.cpp | 496
QiaoJiaSystem/build/data/labels/60_1.png | 0
QiaoJiaSystem/build/data/labels/83_1.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/main.cpp | 436
QiaoJiaSystem/build/data/labels/86_2.png | 0
QiaoJiaSystem/build/data/labels/107_1.png | 0
QiaoJiaSystem/build/data/labels/123_3.png | 0
QiaoJiaSystem/build/data/labels/53_5.png | 0
QiaoJiaSystem/build/data/labels/68_4.png | 0
QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.h | 67
QiaoJiaSystem/build/data/labels/50_4.png | 0
QiaoJiaSystem/build/killAll.sh | 9
QiaoJiaSystem/build/data/labels/123_1.png | 0
QiaoJiaSystem/build/data/labels/67_3.png | 0
QiaoJiaSystem/build/data/labels/83_4.png | 0
QiaoJiaSystem/build/data/labels/107_0.png | 0
QiaoJiaSystem/build/data/labels/64_1.png | 0
QiaoJiaSystem/build/data/labels/86_6.png | 0
QiaoJiaSystem/build/data/labels/126_3.png | 0
QiaoJiaSystem/build/data/labels/34_3.png | 0
QiaoJiaSystem/RecordVideo/rpc/RecordVideo.h | 1571 ++
QiaoJiaSystem/YoloServer/ImageDrawElement.h | 20
QiaoJiaSystem/build/data/labels/33_6.png | 0
QiaoJiaSystem/build/data/labels/114_7.png | 0
QiaoJiaSystem/FaceDetectServer/main.cpp | 40
QiaoJiaSystem/build/data/labels/53_6.png | 0
QiaoJiaSystem/build/data/labels/80_2.png | 0
QiaoJiaSystem/build/data/labels/37_5.png | 0
QiaoJiaSystem/FaceDetectServer/FaceDetectResourcesTest.cpp | 38
QiaoJiaSystem/build/data/labels/52_5.png | 0
QiaoJiaSystem/build/data/labels/69_4.png | 0
QiaoJiaSystem/build/data/labels/89_4.png | 0
QiaoJiaSystem/build/data/labels/62_0.png | 0
QiaoJiaSystem/build/data/labels/33_2.png | 0
QiaoJiaSystem/build/data/labels/88_7.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/taskmanage.h | 29
QiaoJiaSystem/build/data/labels/87_3.png | 0
QiaoJiaSystem/build/data/labels/125_2.png | 0
QiaoJiaSystem/build/data/labels/109_1.png | 0
QiaoJiaSystem/build/data/labels/112_6.png | 0
QiaoJiaSystem/build/data/labels/48_0.png | 0
QiaoJiaSystem/build/data/labels/68_0.png | 0
QiaoJiaSystem/build/data/labels/38_5.png | 0
QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp | 4
QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h | 142
QiaoJiaSystem/build/data/labels/35_4.png | 0
QiaoJiaSystem/build/data/labels/51_5.png | 0
QiaoJiaSystem/build/data/labels/113_7.png | 0
QiaoJiaSystem/build/data/labels/32_2.png | 0
QiaoJiaSystem/build/data/labels/54_7.png | 0
QiaoJiaSystem/build/data/labels/84_5.png | 0
QiaoJiaSystem/VideoServer/CMakeLists.txt | 50
QiaoJiaSystem/build/data/labels/50_7.png | 0
QiaoJiaSystem/build/data/labels/65_2.png | 0
QiaoJiaSystem/FaceDetectServer/main_extract.cpp | 60
QiaoJiaSystem/build/data/labels/32_5.png | 0
QiaoJiaSystem/build/data/labels/49_0.png | 0
QiaoJiaSystem/build/data/labels/67_0.png | 0
QiaoJiaSystem/build/data/labels/85_5.png | 0
QiaoJiaSystem/build/data/labels/36_4.png | 0
QiaoJiaSystem/build/data/labels/63_1.png | 0
QiaoJiaSystem/build/data/labels/108_0.png | 0
QiaoJiaSystem/build/data/labels/68_3.png | 0
QiaoJiaSystem/build/data/labels/82_4.png | 0
QiaoJiaSystem/build/data/labels/124_2.png | 0
QiaoJiaSystem/build/data/labels/66_2.png | 0
QiaoJiaSystem/build/data/labels/55_7.png | 0
QiaoJiaSystem/build/data/labels/87_6.png | 0
QiaoJiaSystem/FaceSearchServer/CMakeLists.txt | 151
QiaoJiaSystem/build/data/labels/69_1.png | 0
QiaoJiaSystem/build/data/labels/88_4.png | 0
QiaoJiaSystem/build/data/labels/120_0.png | 0
QiaoJiaSystem/build/data/labels/61_0.png | 0
QiaoJiaSystem/build/data/labels/86_5.png | 0
QiaoJiaSystem/build/data/labels/33_5.png | 0
QiaoJiaSystem/build/data/labels/67_2.png | 0
QiaoJiaSystem/build/data/labels/80_3.png | 0
QiaoJiaSystem/RecordVideo/ImageGrabberI.h | 21
QiaoJiaSystem/build/data/labels/39_7.png | 0
QiaoJiaSystem/build/data/labels/52_6.png | 0
QiaoJiaSystem/FaceSearchServer/main.cpp | 37
QiaoJiaSystem/build/data/labels/64_0.png | 0
QiaoJiaSystem/build/data/labels/83_3.png | 0
QiaoJiaSystem/build/data/labels/33_3.png | 0
QiaoJiaSystem/build/data/labels/126_2.png | 0
QiaoJiaSystem/build/test_cpu_mem.sh | 28
QiaoJiaSystem/build/data/labels/34_4.png | 0
QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.cpp | 5
QiaoJiaSystem/build/data/labels/65_1.png | 0
QiaoJiaSystem/build/data/labels/81_2.png | 0
QiaoJiaSystem/build/data/labels/53_7.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/dispathdatatype.hpp | 90
QiaoJiaSystem/build/data/labels/51_7.png | 0
QiaoJiaSystem/build/data/labels/87_4.png | 0
QiaoJiaSystem/build/data/labels/122_1.png | 0
QiaoJiaSystem/build/data/labels/37_6.png | 0
QiaoJiaSystem/build/data/labels/112_7.png | 0
QiaoJiaSystem/build/data/labels/32_4.png | 0
QiaoJiaSystem/build/data/labels/68_1.png | 0
QiaoJiaSystem/build/data/labels/89_5.png | 0
QiaoJiaSystem/build/data/labels/123_0.png | 0
QiaoJiaSystem/DataManagerServer/http_configserver.cpp | 2787 +++
QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.cpp | 105
QiaoJiaSystem/build/data/labels/109_0.png | 0
QiaoJiaSystem/build/StructureApp | 0
QiaoJiaSystem/build/data/labels/69_2.png | 0
QiaoJiaSystem/build/data/labels/125_1.png | 0
QiaoJiaSystem/build/data/labels/88_5.png | 0
QiaoJiaSystem/build/data/labels/35_5.png | 0
QiaoJiaSystem/build/data/labels/38_6.png | 0
QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.ice | 61
QiaoJiaSystem/build/data/labels/81_3.png | 0
QiaoJiaSystem/build/data/labels/122_0.png | 0
QiaoJiaSystem/build/data/labels/50_6.png | 0
QiaoJiaSystem/DataManagerServer/main.cpp | 31
QiaoJiaSystem/build/data/labels/84_4.png | 0
QiaoJiaSystem/build/data/labels/124_1.png | 0
QiaoJiaSystem/build/data/labels/87_5.png | 0
QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.h | 43
QiaoJiaSystem/build/KeepRight | 0
QiaoJiaSystem/build/data/labels/82_3.png | 0
QiaoJiaSystem/build/data/labels/39_6.png | 0
QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h | 85
QiaoJiaSystem/build/data/labels/85_4.png | 0
QiaoJiaSystem/build/data/labels/33_4.png | 0
QiaoJiaSystem/StructureApp/CMakeLists.txt | 127
QiaoJiaSystem/build/data/labels/110_7.png | 0
QiaoJiaSystem/build/data/labels/63_0.png | 0
QiaoJiaSystem/build/data/labels/121_0.png | 0
QiaoJiaSystem/build/data/labels/36_5.png | 0
QiaoJiaSystem/build/data/labels/52_7.png | 0
QiaoJiaSystem/build/data/labels/66_1.png | 0
QiaoJiaSystem/build/data/labels/73_4.png | 0
QiaoJiaSystem/StructureApp/rpc/Structure/__init__.py | 10
QiaoJiaSystem/build/data/labels/74_1.png | 0
QiaoJiaSystem/build/data/labels/57_3.png | 0
QiaoJiaSystem/build/data/labels/117_0.png | 0
QiaoJiaSystem/build/data/labels/115_6.png | 0
QiaoJiaSystem/build/data/labels/56_6.png | 0
QiaoJiaSystem/build/data/labels/116_3.png | 0
QiaoJiaSystem/build/data/labels/86_4.png | 0
QiaoJiaSystem/build/data/labels/87_1.png | 0
QiaoJiaSystem/build/data/labels/120_1.png | 0
QiaoJiaSystem/build/data/labels/43_6.png | 0
QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp | 145
QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.cpp | 0
QiaoJiaSystem/build/data/labels/90_2.png | 0
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h | 56
QiaoJiaSystem/RecordVideo/VideoRecorder.cpp | 146
QiaoJiaSystem/build/testLoadDB.sh | 17
QiaoJiaSystem/build/data/labels/44_3.png | 0
QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp | 112
QiaoJiaSystem/build/data/labels/45_0.png | 0
QiaoJiaSystem/build/data/labels/60_4.png | 0
QiaoJiaSystem/StructureApp/rpc/StructureApp.ice | 17
QiaoJiaSystem/build/data/labels/85_7.png | 0
QiaoJiaSystem/build/data/labels/51_6.png | 0
QiaoJiaSystem/build/data/labels/52_3.png | 0
QiaoJiaSystem/build/data/labels/69_6.png | 0
QiaoJiaSystem/build/data/labels/78_4.png | 0
QiaoJiaSystem/build/data/coco9k.map | 80
QiaoJiaSystem/build/data/labels/53_0.png | 0
QiaoJiaSystem/build/data/labels/61_1.png | 0
QiaoJiaSystem/build/data/labels/77_7.png | 0
QiaoJiaSystem/build/data/labels/108_2.png | 0
QiaoJiaSystem/build/data/labels/49_2.png | 0
QiaoJiaSystem/build/data/labels/82_2.png | 0
QiaoJiaSystem/build/data/labels/123_6.png | 0
QiaoJiaSystem/build/data/labels/124_4.png | 0
QiaoJiaSystem/build/data/labels/66_0.png | 0
QiaoJiaSystem/build/data/labels/81_4.png | 0
QiaoJiaSystem/build/data/labels/110_6.png | 0
QiaoJiaSystem/build/data/labels/36_2.png | 0
QiaoJiaSystem/build/data/labels/48_6.png | 0
QiaoJiaSystem/build/data/labels/95_2.png | 0
QiaoJiaSystem/build/data/labels/79_0.png | 0
QiaoJiaSystem/build/data/labels/37_0.png | 0
QiaoJiaSystem/build/data/labels/125_0.png | 0
QiaoJiaSystem/build/data/labels/112_0.png | 0
QiaoJiaSystem/VideoAnalysFromHC/myThread.h | 128
QiaoJiaSystem/build/data/labels/94_4.png | 0
QiaoJiaSystem/build/data/labels/40_1.png | 0
QiaoJiaSystem/build/data/labels/32_0.png | 0
QiaoJiaSystem/build/data/labels/35_6.png | 0
QiaoJiaSystem/build/data/labels/99_4.png | 0
QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h | 158
QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.cpp | 68
QiaoJiaSystem/PerimeterAlarm/AppPaController.cpp | 363
QiaoJiaSystem/StructureApp/AppPipeController.cpp | 508
QiaoJiaSystem/RecordVideo/VideoRecorder.h | 56
QiaoJiaSystem/RecordVideo/main.cpp | 93
QiaoJiaSystem/build/data/labels/111_4.png | 0
QiaoJiaSystem/RecordVideo/LoopVideoRecorder.cpp | 98
QiaoJiaSystem/build/data/labels/103_3.png | 0
QiaoJiaSystem/build/data/labels/65_4.png | 0
QiaoJiaSystem/RecordVideo/rpc/test2.py | 70
QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.cpp | 0
QiaoJiaSystem/build/data/labels/64_6.png | 0
QiaoJiaSystem/build/data/labels/72_7.png | 0
QiaoJiaSystem/build/data/labels/87_2.png | 0
QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.h | 678
QiaoJiaSystem/DataManagerServer/AppPipeController.h | 18
QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.cpp | 55
QiaoJiaSystem/build/data/labels/56_7.png | 0
QiaoJiaSystem/build/data/labels/74_0.png | 0
QiaoJiaSystem/build/data/labels/73_3.png | 0
QiaoJiaSystem/build/data/labels/90_1.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/myThread.cpp | 1
QiaoJiaSystem/build/data/labels/85_6.png | 0
QiaoJiaSystem/build/data/labels/116_2.png | 0
QiaoJiaSystem/build/data/labels/44_4.png | 0
QiaoJiaSystem/build/data/labels/86_3.png | 0
QiaoJiaSystem/RapidStructureApp/main.cpp | 36
QiaoJiaSystem/build/data/labels/69_5.png | 0
QiaoJiaSystem/build/data/labels/61_2.png | 0
QiaoJiaSystem/build/data/labels/60_5.png | 0
QiaoJiaSystem/build/data/labels/52_4.png | 0
QiaoJiaSystem/build/data/labels/107_6.png | 0
QiaoJiaSystem/build/data/labels/115_7.png | 0
QiaoJiaSystem/build/data/labels/77_6.png | 0
QiaoJiaSystem/FaceSearchServer/Cleint.cpp | 438
QiaoJiaSystem/build/data/labels/53_1.png | 0
QiaoJiaSystem/build/data/labels/48_5.png | 0
QiaoJiaSystem/build/data/labels/107_5.png | 0
QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp | 304
QiaoJiaSystem/build/data/labels/79_2.png | 0
QiaoJiaSystem/build/data/labels/81_5.png | 0
QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.cpp | 192
QiaoJiaSystem/build/data/labels/65_3.png | 0
QiaoJiaSystem/build/data/labels/95_3.png | 0
QiaoJiaSystem/build/data/labels/79_1.png | 0
QiaoJiaSystem/YoloServer/ImageDrawElement.cpp | 30
QiaoJiaSystem/build/data/labels/123_7.png | 0
QiaoJiaSystem/build/data/labels/64_7.png | 0
QiaoJiaSystem/build/data/labels/34_7.png | 0
QiaoJiaSystem/build/data/labels/108_1.png | 0
QiaoJiaSystem/build/data/labels/93_7.png | 0
QiaoJiaSystem/RapidStructureApp/AppController.cpp | 132
QiaoJiaSystem/StructureApp/main.cpp | 120
QiaoJiaSystem/build/data/labels/32_1.png | 0
QiaoJiaSystem/build/data/labels/82_1.png | 0
QiaoJiaSystem/build/data/labels/110_5.png | 0
QiaoJiaSystem/build/data/labels/36_3.png | 0
QiaoJiaSystem/build/data/labels/124_3.png | 0
QiaoJiaSystem/build/data/labels/103_4.png | 0
QiaoJiaSystem/build/data/labels/111_5.png | 0
QiaoJiaSystem/build/data/labels/120_2.png | 0
QiaoJiaSystem/build/data/labels/35_7.png | 0
QiaoJiaSystem/build/data/labels/112_1.png | 0
QiaoJiaSystem/build/data/labels/94_3.png | 0
QiaoJiaSystem/build/data/labels/104_0.png | 0
QiaoJiaSystem/build/data/labels/49_1.png | 0
QiaoJiaSystem/build/data/labels/99_5.png | 0
QiaoJiaSystem/build/data/labels/57_2.png | 0
QiaoJiaSystem/RapidStructureApp/VideoChangeScore.cpp | 28
QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp | 79
QiaoJiaSystem/build/WebFDSClient.conf | 62
QiaoJiaSystem/build/startAllServer.sh | 44
QiaoJiaSystem/build/data/labels/44_1.png | 0
QiaoJiaSystem/YoloServer/DnDetect.cpp | 121
QiaoJiaSystem/DataManagerServer/demo.cpp | 28
QiaoJiaSystem/build/data/labels/40_2.png | 0
QiaoJiaSystem/build/data/labels/60_2.png | 0
QiaoJiaSystem/build/data/labels/115_4.png | 0
QiaoJiaSystem/build/data/labels/72_5.png | 0
QiaoJiaSystem/build/data/labels/103_1.png | 0
QiaoJiaSystem/build/scpToSer.sh | 40
QiaoJiaSystem/PerimeterAlarm/main.cpp | 113
QiaoJiaSystem/build/data/labels/90_0.png | 0
QiaoJiaSystem/build/data/labels/53_2.png | 0
QiaoJiaSystem/build/data/labels/68_7.png | 0
QiaoJiaSystem/build/data/labels/116_5.png | 0
QiaoJiaSystem/build/data/labels/57_5.png | 0
QiaoJiaSystem/build/data/labels/82_0.png | 0
QiaoJiaSystem/build/data/labels/108_4.png | 0
QiaoJiaSystem/build/data/labels/88_0.png | 0
QiaoJiaSystem/build/data/labels/99_2.png | 0
QiaoJiaSystem/DataManagerServer/web-server接口.txt | 605
QiaoJiaSystem/build/data/labels/124_5.png | 0
QiaoJiaSystem/build/data/labels/36_1.png | 0
QiaoJiaSystem/build/data/labels/96_0.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h | 324
QiaoJiaSystem/build/data/labels/111_2.png | 0
QiaoJiaSystem/StructureApp/NewRecordVideoElement.h | 38
QiaoJiaSystem/build/data/labels/110_4.png | 0
QiaoJiaSystem/VideoAnalysFromHC/HcRecord.h | 52
QiaoJiaSystem/build/data/labels/107_4.png | 0
QiaoJiaSystem/build/data/labels/52_1.png | 0
QiaoJiaSystem/build/data/labels/61_3.png | 0
QiaoJiaSystem/build/data/labels/49_4.png | 0
QiaoJiaSystem/build/data/labels/80_6.png | 0
QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.h | 1459 +
QiaoJiaSystem/build/data/labels/119_7.png | 0
QiaoJiaSystem/build/data/labels/64_4.png | 0
QiaoJiaSystem/StructureApp/ImageDrawElement.cpp | 42
QiaoJiaSystem/build/data/labels/112_2.png | 0
QiaoJiaSystem/build/data/labels/123_4.png | 0
QiaoJiaSystem/build/data/labels/95_0.png | 0
QiaoJiaSystem/build/data/labels/94_2.png | 0
QiaoJiaSystem/build/data/labels/83_0.png | 0
QiaoJiaSystem/build/data/labels/91_1.png | 0
QiaoJiaSystem/build/data/labels/48_4.png | 0
QiaoJiaSystem/build/data/labels/37_2.png | 0
QiaoJiaSystem/build/data/labels/81_6.png | 0
QiaoJiaSystem/RecordVideo/LoopRecordVideoI.h | 37
QiaoJiaSystem/build/data/labels/73_5.png | 0
QiaoJiaSystem/build/data/labels/56_5.png | 0
QiaoJiaSystem/DataManagerServer/http_configserver.h | 178
QiaoJiaSystem/build/data/labels/120_3.png | 0
QiaoJiaSystem/build/data/labels/104_1.png | 0
QiaoJiaSystem/build/data/labels/60_3.png | 0
QiaoJiaSystem/build/data/labels/103_2.png | 0
QiaoJiaSystem/build/data/labels/100_0.png | 0
QiaoJiaSystem/build/data/labels/41_0.png | 0
QiaoJiaSystem/build/data/labels/69_7.png | 0
QiaoJiaSystem/build/data/labels/91_0.png | 0
QiaoJiaSystem/build/data/labels/72_6.png | 0
QiaoJiaSystem/build/data/labels/57_4.png | 0
QiaoJiaSystem/build/data/labels/53_3.png | 0
QiaoJiaSystem/build/data/labels/115_5.png | 0
QiaoJiaSystem/build/data/labels/76_7.png | 0
QiaoJiaSystem/StructureApp/RecordVideoElement.h | 33
QiaoJiaSystem/VideoAnalysFromHC/TestThreads.h | 19
QiaoJiaSystem/build/data/labels/124_6.png | 0
QiaoJiaSystem/build/data/labels/65_6.png | 0
QiaoJiaSystem/build/data/labels/45_1.png | 0
QiaoJiaSystem/build/data/labels/99_3.png | 0
QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.h | 21
QiaoJiaSystem/build/data/labels/119_6.png | 0
QiaoJiaSystem/DataManagerServer/http_examples.cpp | 264
QiaoJiaSystem/build/data/labels/88_1.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro | 30
QiaoJiaSystem/build/data/labels/116_4.png | 0
QiaoJiaSystem/build/data/labels/108_3.png | 0
QiaoJiaSystem/build/data/labels/44_2.png | 0
QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp | 80
QiaoJiaSystem/build/data/labels/96_1.png | 0
QiaoJiaSystem/LocalDBTool/GetUUId.cpp | 6
QiaoJiaSystem/build/data/labels/111_3.png | 0
QiaoJiaSystem/build/data/labels/52_2.png | 0
QiaoJiaSystem/build/data/labels/120_4.png | 0
QiaoJiaSystem/build/data/labels/36_0.png | 0
QiaoJiaSystem/build/data/labels/80_7.png | 0
QiaoJiaSystem/YoloServer/rpc/gen.sh | 1
QiaoJiaSystem/build/data/labels/123_5.png | 0
QiaoJiaSystem/build/data/labels/64_5.png | 0
QiaoJiaSystem/build/data/labels/68_6.png | 0
QiaoJiaSystem/build/data/labels/49_3.png | 0
QiaoJiaSystem/build/data/labels/61_4.png | 0
QiaoJiaSystem/build/data/labels/65_5.png | 0
QiaoJiaSystem/build/data/labels/45_2.png | 0
QiaoJiaSystem/RecordVideo/rpc/testClient.py | 74
QiaoJiaSystem/build/data/labels/95_1.png | 0
QiaoJiaSystem/build/data/labels/87_0.png | 0
QiaoJiaSystem/build/data/labels/73_6.png | 0
QiaoJiaSystem/build/data/labels/37_1.png | 0
QiaoJiaSystem/build/data/labels/81_7.png | 0
QiaoJiaSystem/build/data/labels/107_3.png | 0
QiaoJiaSystem/build/data/labels/48_3.png | 0
QiaoJiaSystem/build/data/labels/56_4.png | 0
QiaoJiaSystem/build/data/labels/104_2.png | 0
QiaoJiaSystem/build/data/labels/112_3.png | 0
QiaoJiaSystem/build/data/labels/40_0.png | 0
QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp | 406
QiaoJiaSystem/VideoServer/QiaoJia/DB/config.db | 0
QiaoJiaSystem/build/data/labels/94_1.png | 0
QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt | 74
QiaoJiaSystem/build/data/labels/93_4.png | 0
QiaoJiaSystem/build/data/labels/54_1.png | 0
QiaoJiaSystem/build/data/labels/76_6.png | 0
QiaoJiaSystem/build/data/labels/124_7.png | 0
QiaoJiaSystem/build/data/labels/108_6.png | 0
QiaoJiaSystem/build/data/labels/100_1.png | 0
QiaoJiaSystem/build/data/labels/113_1.png | 0
QiaoJiaSystem/build/data/labels/70_2.png | 0
QiaoJiaSystem/YoloServer/rpc/YoloServer.ice | 27
QiaoJiaSystem/build/data/labels/47_5.png | 0
QiaoJiaSystem/build/data/labels/42_5.png | 0
QiaoJiaSystem/build/data/labels/102_2.png | 0
QiaoJiaSystem/build/data/labels/111_0.png | 0
QiaoJiaSystem/build/data/labels/95_5.png | 0
QiaoJiaSystem/build/data/labels/101_5.png | 0
QiaoJiaSystem/build/data/labels/63_6.png | 0
QiaoJiaSystem/build/data/labels/96_2.png | 0
QiaoJiaSystem/build/data/labels/56_2.png | 0
QiaoJiaSystem/build/FaceExtractServer | 0
QiaoJiaSystem/build/data/labels/65_7.png | 0
QiaoJiaSystem/build/data/labels/59_1.png | 0
QiaoJiaSystem/StructureApp/StructureAppI.cpp | 90
QiaoJiaSystem/build/data/labels/41_1.png | 0
QiaoJiaSystem/build/data/labels/40_4.png | 0
QiaoJiaSystem/build/data/labels/58_4.png | 0
QiaoJiaSystem/build/data/labels/73_0.png | 0
QiaoJiaSystem/build/data/labels/119_5.png | 0
QiaoJiaSystem/build/data/labels/49_6.png | 0
QiaoJiaSystem/build/data/labels/72_3.png | 0
QiaoJiaSystem/build/data/labels/120_5.png | 0
QiaoJiaSystem/build/data/labels/61_5.png | 0
QiaoJiaSystem/build/cfg/coco.data | 8
QiaoJiaSystem/build/data/labels/103_7.png | 0
QiaoJiaSystem/build/data/labels/44_7.png | 0
QiaoJiaSystem/build/data/labels/74_5.png | 0
QiaoJiaSystem/build/data/labels/60_7.png | 0
QiaoJiaSystem/build/data/labels/98_3.png | 0
QiaoJiaSystem/build/data/labels/91_3.png | 0
QiaoJiaSystem/build/runWebSer.sh | 13
QiaoJiaSystem/build/data/labels/117_4.png | 0
QiaoJiaSystem/build/data/labels/56_3.png | 0
QiaoJiaSystem/build/data/labels/104_3.png | 0
QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt | 121
QiaoJiaSystem/build/data/labels/43_2.png | 0
QiaoJiaSystem/build/data/labels/78_7.png | 0
QiaoJiaSystem/build/data/labels/90_5.png | 0
QiaoJiaSystem/build/data/labels/75_1.png | 0
QiaoJiaSystem/build/data/labels/115_3.png | 0
QiaoJiaSystem/RecordVideo/config.cfg | 1
QiaoJiaSystem/build/data/labels/79_5.png | 0
QiaoJiaSystem/StructureApp/FaceRpcElement.cpp | 168
QiaoJiaSystem/build/data/labels/106_4.png | 0
QiaoJiaSystem/build/fastDfsClient.conf | 62
QiaoJiaSystem/VideoServer/QiaoJia/widget.cpp | 14
QiaoJiaSystem/build/data/labels/45_3.png | 0
QiaoJiaSystem/build/data/labels/122_6.png | 0
QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h | 64
QiaoJiaSystem/build/data/labels/78_0.png | 0
QiaoJiaSystem/build/data/labels/38_0.png | 0
QiaoJiaSystem/build/data/labels/119_4.png | 0
QiaoJiaSystem/build/data/labels/70_3.png | 0
QiaoJiaSystem/build/data/labels/113_2.png | 0
QiaoJiaSystem/build/data/labels/93_3.png | 0
QiaoJiaSystem/build/data/labels/40_3.png | 0
QiaoJiaSystem/build/data/labels/92_6.png | 0
QiaoJiaSystem/RapidStructureApp/AppController.h | 37
QiaoJiaSystem/build/data/labels/47_4.png | 0
QiaoJiaSystem/build/data/labels/43_3.png | 0
QiaoJiaSystem/build/yolov3.weights | 0
QiaoJiaSystem/VideoAnalysFromHC/HcRecord.cpp | 356
QiaoJiaSystem/build/data/labels/108_5.png | 0
QiaoJiaSystem/build/data/labels/54_0.png | 0
QiaoJiaSystem/build/data/labels/96_3.png | 0
QiaoJiaSystem/RecordVideo/rpc/RecordVideo.cpp | 1385 +
QiaoJiaSystem/build/data/labels/58_3.png | 0
QiaoJiaSystem/build/data/labels/117_3.png | 0
QiaoJiaSystem/build/data/labels/49_5.png | 0
QiaoJiaSystem/build/data/labels/41_2.png | 0
QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.cpp | 185
QiaoJiaSystem/build/data/labels/102_3.png | 0
QiaoJiaSystem/build/data/labels/72_4.png | 0
QiaoJiaSystem/build/data/labels/94_7.png | 0
QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp | 91
QiaoJiaSystem/build/data/labels/111_1.png | 0
QiaoJiaSystem/build/data/labels/101_4.png | 0
QiaoJiaSystem/StructureApp/rpc/StructureApp.h | 1268 +
QiaoJiaSystem/build/data/labels/95_4.png | 0
QiaoJiaSystem/StructureApp/RecordVideoElement.cpp | 63
QiaoJiaSystem/build/data/labels/56_1.png | 0
QiaoJiaSystem/build/data/labels/100_7.png | 0
QiaoJiaSystem/build/data/labels/98_4.png | 0
QiaoJiaSystem/build/data/labels/45_4.png | 0
QiaoJiaSystem/runPath.sh | 2
QiaoJiaSystem/build/FaceSearchServer | 0
QiaoJiaSystem/PerimeterAlarm/AppPaController.h | 168
QiaoJiaSystem/build/data/labels/98_5.png | 0
QiaoJiaSystem/build/data/labels/104_4.png | 0
QiaoJiaSystem/build/data/labels/76_0.png | 0
QiaoJiaSystem/build/data/labels/120_6.png | 0
QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.h | 73
QiaoJiaSystem/build/data/labels/90_6.png | 0
QiaoJiaSystem/build/data/labels/78_6.png | 0
QiaoJiaSystem/build/data/labels/41_7.png | 0
QiaoJiaSystem/build/data/labels/60_6.png | 0
QiaoJiaSystem/FaceSearchServer/LoadFeaTool/Client.cpp | 112
QiaoJiaSystem/RecordVideo/rpc/RecordVideo_ice.py | 285
QiaoJiaSystem/build/data/labels/74_4.png | 0
QiaoJiaSystem/build/data/labels/52_0.png | 0
QiaoJiaSystem/build/data/labels/91_2.png | 0
QiaoJiaSystem/build/data/labels/63_7.png | 0
QiaoJiaSystem/build/data/labels/75_0.png | 0
QiaoJiaSystem/build/data/labels/106_5.png | 0
QiaoJiaSystem/build/data/labels/122_7.png | 0
QiaoJiaSystem/build/data/labels/78_1.png | 0
QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.cpp | 861 +
QiaoJiaSystem/FaceSearchServer/LoadFeaTool/demoTime.cpp | 118
QiaoJiaSystem/StructureApp/rpc/Basic/__init__.py | 10
QiaoJiaSystem/build/VideoAnalysFromHC | 0
QiaoJiaSystem/build/data/labels/115_2.png | 0
QiaoJiaSystem/build/data/labels/61_6.png | 0
QiaoJiaSystem/build/data/labels/79_6.png | 0
QiaoJiaSystem/build/data/labels/76_5.png | 0
QiaoJiaSystem/StructureApp/YoloRpcElement.cpp | 199
QiaoJiaSystem/build/data/labels/92_7.png | 0
QiaoJiaSystem/build/data/labels/121_7.png | 0
QiaoJiaSystem/build/data/labels/62_7.png | 0
QiaoJiaSystem/build/data/labels/99_6.png | 0
QiaoJiaSystem/build/data/labels/105_6.png | 0
QiaoJiaSystem/build/data/labels/46_6.png | 0
QiaoJiaSystem/build/data/labels/101_7.png | 0
QiaoJiaSystem/build/data/labels/43_4.png | 0
QiaoJiaSystem/build/runAll.sh | 52
QiaoJiaSystem/build/PerimeterAlarm | 0
QiaoJiaSystem/build/data/labels/95_7.png | 0
QiaoJiaSystem/build/data/labels/96_4.png | 0
QiaoJiaSystem/build/data/labels/76_4.png | 0
QiaoJiaSystem/build/data/labels/119_3.png | 0
QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.cpp | 515
QiaoJiaSystem/build/data/labels/57_1.png | 0
QiaoJiaSystem/build/data/labels/77_1.png | 0
QiaoJiaSystem/build/data/labels/73_2.png | 0
QiaoJiaSystem/build/data/labels/92_5.png | 0
QiaoJiaSystem/build/data/labels/58_2.png | 0
QiaoJiaSystem/build/data/labels/102_4.png | 0
QiaoJiaSystem/build/data/labels/41_3.png | 0
QiaoJiaSystem/build/data/labels/77_5.png | 0
QiaoJiaSystem/build/data/labels/70_0.png | 0
QiaoJiaSystem/build/data/labels/117_2.png | 0
QiaoJiaSystem/build/data/labels/48_7.png | 0
QiaoJiaSystem/YoloServer/DnDetect.h | 26
QiaoJiaSystem/build/data/labels/107_7.png | 0
QiaoJiaSystem/build/data/labels/104_5.png | 0
QiaoJiaSystem/build/data/labels/114_0.png | 0
QiaoJiaSystem/build/data/labels/94_6.png | 0
QiaoJiaSystem/build/data/labels/42_7.png | 0
QiaoJiaSystem/build/data/labels/72_2.png | 0
QiaoJiaSystem/build/data/labels/118_2.png | 0
QiaoJiaSystem/build/data/labels/59_2.png | 0
QiaoJiaSystem/build/data/labels/115_1.png | 0
QiaoJiaSystem/build/data/labels/75_3.png | 0
QiaoJiaSystem/build/data/labels/56_0.png | 0
QiaoJiaSystem/build/data/labels/78_5.png | 0
QiaoJiaSystem/build/data/labels/100_6.png | 0
QiaoJiaSystem/YoloServer/main.cpp | 35
QiaoJiaSystem/build/data/labels/45_5.png | 0
QiaoJiaSystem/build/data/labels/79_3.png | 0
QiaoJiaSystem/build/data/labels/103_5.png | 0
QiaoJiaSystem/FaceSearchServer/LoadFeaTool/main.cpp | 100
QiaoJiaSystem/build/data/labels/106_6.png | 0
QiaoJiaSystem/build/data/labels/98_6.png | 0
QiaoJiaSystem/build/data/labels/97_5.png | 0
QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp | 198
QiaoJiaSystem/build/data/labels/40_6.png | 0
QiaoJiaSystem/build/data/labels/78_2.png | 0
QiaoJiaSystem/build/data/labels/102_7.png | 0
QiaoJiaSystem/build/data/labels/43_7.png | 0
QiaoJiaSystem/build/data/labels/61_7.png | 0
QiaoJiaSystem/build/data/labels/93_6.png | 0
QiaoJiaSystem/build/data/labels/47_6.png | 0
QiaoJiaSystem/build/data/labels/74_3.png | 0
QiaoJiaSystem/LocalDBTool/new_file | 0
QiaoJiaSystem/build/data/labels/42_4.png | 0
QiaoJiaSystem/build/data/labels/44_5.png | 0
QiaoJiaSystem/build/data/labels/116_1.png | 0
QiaoJiaSystem/build/data/labels/55_0.png | 0
QiaoJiaSystem/build/data/labels/113_0.png | 0
QiaoJiaSystem/build/data/labels/119_0.png | 0
QiaoJiaSystem/build/data/labels/41_6.png | 0
QiaoJiaSystem/build/cfg/yolov3.cfg | 789 +
QiaoJiaSystem/build/data/labels/108_7.png | 0
QiaoJiaSystem/build/data/labels/49_7.png | 0
QiaoJiaSystem/build/data/labels/71_0.png | 0
QiaoJiaSystem/build/data/labels/96_5.png | 0
QiaoJiaSystem/build/data/labels/43_5.png | 0
QiaoJiaSystem/build/data/labels/77_2.png | 0
QiaoJiaSystem/build/data/labels/90_3.png | 0
QiaoJiaSystem/build/data/labels/99_7.png | 0
QiaoJiaSystem/build/data/labels/102_5.png | 0
QiaoJiaSystem/build/data/labels/58_1.png | 0
QiaoJiaSystem/RecordVideo/LoopRecordVideoI.cpp | 105
QiaoJiaSystem/build/data/labels/46_7.png | 0
QiaoJiaSystem/build/data/labels/77_4.png | 0
QiaoJiaSystem/build/data/labels/101_6.png | 0
QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.cpp | 52
QiaoJiaSystem/build/data/labels/95_6.png | 0
QiaoJiaSystem/build/data/labels/96_7.png | 0
QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h | 27
QiaoJiaSystem/build/data/labels/76_3.png | 0
QiaoJiaSystem/RecordVideo/RecordVideoI.h | 14
QiaoJiaSystem/build/data/labels/92_4.png | 0
QiaoJiaSystem/build/data/labels/104_6.png | 0
QiaoJiaSystem/build/data/labels/45_6.png | 0
QiaoJiaSystem/build/LocalDataDB | 0
QiaoJiaSystem/build/data/labels/57_0.png | 0
QiaoJiaSystem/build/data/labels/59_0.png | 0
QiaoJiaSystem/build/data/labels/73_1.png | 0
QiaoJiaSystem/build/data/labels/40_5.png | 0
QiaoJiaSystem/build/data/labels/70_1.png | 0
QiaoJiaSystem/build/data/labels/78_3.png | 0
QiaoJiaSystem/build/data/labels/42_6.png | 0
QiaoJiaSystem/RapidStructureApp/CMakeLists.txt | 74
QiaoJiaSystem/build/data/labels/118_0.png | 0
QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.cpp | 145
QiaoJiaSystem/build/data/labels/97_6.png | 0
QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp | 169
QiaoJiaSystem/build/data/labels/117_1.png | 0
QiaoJiaSystem/build/data/labels/91_5.png | 0
QiaoJiaSystem/StructureApp/FaceExtractElement.cpp | 230
QiaoJiaSystem/build/data/labels/97_7.png | 0
QiaoJiaSystem/build/data/labels/41_5.png | 0
QiaoJiaSystem/build/data/labels/106_7.png | 0
QiaoJiaSystem/build/data/labels/91_4.png | 0
QiaoJiaSystem/build/config.json | 23
QiaoJiaSystem/build/syncDBClient | 0
QiaoJiaSystem/VideoAnalysFromHC/main.cpp | 182
QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h | 118
QiaoJiaSystem/build/data/labels/94_5.png | 0
QiaoJiaSystem/build/data/labels/75_2.png | 0
QiaoJiaSystem/build/data/labels/72_1.png | 0
QiaoJiaSystem/build/data/labels/103_6.png | 0
QiaoJiaSystem/build/data/labels/115_0.png | 0
QiaoJiaSystem/build/data/labels/100_5.png | 0
QiaoJiaSystem/build/data/labels/118_1.png | 0
QiaoJiaSystem/build/data/labels/79_4.png | 0
QiaoJiaSystem/DataManagerServer/CMakeLists.txt | 202
QiaoJiaSystem/build/data/labels/98_7.png | 0
QiaoJiaSystem/build/data/labels/105_7.png | 0
QiaoJiaSystem/StructureApp/AppPipeControllerTest.cpp | 93
QiaoJiaSystem/build/data/labels/71_1.png | 0
QiaoJiaSystem/build/data/labels/96_6.png | 0
QiaoJiaSystem/FaceDetectServer/main_detect.cpp | 59
QiaoJiaSystem/StructureApp/TrackingTrigger.cpp | 1
QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp | 2709 +++
QiaoJiaSystem/build/data/labels/93_5.png | 0
QiaoJiaSystem/build/data/labels/77_3.png | 0
QiaoJiaSystem/build/data/labels/119_1.png | 0
QiaoJiaSystem/build/data/labels/44_6.png | 0
QiaoJiaSystem/YoloServer/rpc/YoloServer.h | 731
QiaoJiaSystem/build/data/labels/102_6.png | 0
QiaoJiaSystem/build/data/labels/116_0.png | 0
QiaoJiaSystem/build/data/labels/90_4.png | 0
QiaoJiaSystem/LocalDBTool/main.cpp | 273
QiaoJiaSystem/build/data/labels/47_7.png | 0
QiaoJiaSystem/build/data/labels/74_2.png | 0
QiaoJiaSystem/build/data/labels/58_0.png | 0
981 files changed, 46,660 insertions(+), 0 deletions(-)
diff --git a/QiaoJiaSystem/CMakeLists.txt b/QiaoJiaSystem/CMakeLists.txt
new file mode 100644
index 0000000..8dcb3f2
--- /dev/null
+++ b/QiaoJiaSystem/CMakeLists.txt
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.5)
+project(QiaoJiaSystem)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-fpermissive)
+
+include_directories(
+ ./
+ ../BasicPlatForm/
+ ../BasicPlatForm/libs/jsoncpp/include
+ ../BasicPlatForm/libs/opencv/include
+ ../BasicPlatForm/libs/libuuid/include
+)
+
+add_subdirectory(StructureApp)
+add_subdirectory(FaceDetectServer)
+#add_subdirectory(YoloServer)
+add_subdirectory(FaceSearchServer)
+add_subdirectory(VideoAnalysFromHC)
+add_subdirectory(RapidStructureApp)
+add_subdirectory(RecordVideo)
+add_subdirectory(DataManagerServer)
+
+
+#add_subdirectory(FaceSearchDbWithImg)
+
diff --git a/QiaoJiaSystem/DataManagerServer/AppPipeController.cpp b/QiaoJiaSystem/DataManagerServer/AppPipeController.cpp
new file mode 100644
index 0000000..1b7a76a
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/AppPipeController.cpp
@@ -0,0 +1,33 @@
+#include "AppPipeController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppUtil.h>
+//#include <sstream>
+#include <algorithm>
+AppPipeController::AppPipeController(int index, const Json::Value &json):
+ videoCaptureElement(json["rtsp"].asString(), 25,3000,appPref.getLongData("gpu.index")),
+ index(index), videoPublishElement(appPref.getStringData("publish.basepath")+".flv",
+ cv::Size(appPref.getIntData("pulish.width"),appPref.getIntData("pulish.height")),
+ "flv", 25, appPref.getLongData("gpu.index"))
+{
+ videoCaptureElement.registerConnector([&]{
+ //if(!videoPublishElement.isBusy()){
+ videoPublishElement.setImage(videoCaptureElement.getImage());
+ //videoPublishElement.submit();
+ //}
+
+ });
+
+ registerElement(videoCaptureElement);
+ registerElement(videoPublishElement);
+
+ videoCaptureElement.setOutPutInterval(3);
+}
+
+std::string AppPipeController::getRtmp()
+{
+ std::string ret = videoPublishElement.getPath();
+ size_t pos = ret.find(".flv");
+ ret = ret.substr(0,pos);
+ INFO(ret);
+ return ret;
+}
diff --git a/QiaoJiaSystem/DataManagerServer/AppPipeController.h b/QiaoJiaSystem/DataManagerServer/AppPipeController.h
new file mode 100644
index 0000000..fb7c9b1
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/AppPipeController.h
@@ -0,0 +1,18 @@
+#ifndef APPPIPECONTROLLER_H
+#define APPPIPECONTROLLER_H
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ffmpeg/FfmpegElement.h>
+#include <jsoncpp/json/json.h>
+
+class AppPipeController : public PipeController
+{
+public:
+ AppPipeController(int index, const Json::Value& json);
+ std::string getRtmp();
+private:
+ ffmpeg::VideoCaptureElement videoCaptureElement;
+ ffmpeg::VideoPublishElement videoPublishElement;
+ int index;
+};
+
+#endif // APPPIPECONTROLLER_H
diff --git a/QiaoJiaSystem/DataManagerServer/CMakeLists.txt b/QiaoJiaSystem/DataManagerServer/CMakeLists.txt
new file mode 100644
index 0000000..dd5cd26
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/CMakeLists.txt
@@ -0,0 +1,202 @@
+cmake_minimum_required(VERSION 3.5)
+project(DataWebServer)
+
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+
+set(CMAKE_CXX_STANDARD 11)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive)
+add_definitions(-DGLOG)
+set(CMAKE_BUILD_TYPE debug)
+
+include_directories(
+ ./
+ ../FaceSearchServer/CasiaFaceWrapper
+ ../VideoServer/QiaoJia/DB
+
+ #
+ ../LocalDBTool/
+ ../../BasicPlatForm/basic/db/sqlite/
+ ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000/
+
+ ../../BasicPlatForm
+ ../../BasicPlatForm/libs/opencv/include
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/Casia_Face/FaceSdk/include
+ ../../BasicPlatForm/libs/jsoncpp/include
+ ../../BasicPlatForm/libs/crul/include
+ ../../BasicPlatForm/libs/FastDFS/include
+ ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+ ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+ ../../BasicPlatForm/libs/ffmpeg/include
+
+ ../../BasicPlatForm/basic/util/fastdfs/
+ ../../BasicPlatForm/basic/util/curl/
+ ../../BasicPlatForm/basic/http_server/
+ ../../BasicPlatForm/libs/libuuid/include
+ ../../BasicPlatForm/libs/uniview/include
+
+ ../../../Erlang/syncDBTool
+
+ ../../BasicPlatForm/libs/hcTool/HCNetSDK64/incCn
+
+ ../../BasicPlatForm/libs/libboost/include
+
+ /usr/include/x86_64-linux-gnu/qt5
+ /usr/include/x86_64-linux-gnu/qt5/QtCore/
+ /usr/include/x86_64-linux-gnu/qt5/QtSql/
+
+
+ #glog
+ ../../BasicPlatForm/libs/glog/include
+
+)
+
+link_directories(
+ #glog
+ ../../BasicPlatForm/libs/glog/lib
+
+ /usr/lib/erlang/lib/erl_interface-3.8.2/lib/
+ /usr/local/cuda/lib64
+
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/Casia_Face/FaceSdk/lib/cpu
+ ../../BasicPlatForm/libs/crul/lib
+ ../../BasicPlatForm/libs/FastDFS/lib
+ ../../BasicPlatForm/libs/jsoncpp/lib
+ ../../BasicPlatForm/libs/ffmpeg/lib
+ ../../BasicPlatForm/libs/libuuid/lib
+
+ ../../BasicPlatForm/libs/hcTool/HCNetSDK64/lib/
+ ../../BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom/
+ ../../BasicPlatForm/libs/uniview/lib
+
+ ../../BasicPlatForm/libs/libboost/lib
+
+
+ ../../BasicPlatForm/basic/db/sqlite/
+ ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+)
+
+add_executable(DataWebServer
+ main.cpp
+ http_configserver.cpp
+ http_configserver.h
+
+ ./net_config/net_config.cpp
+ ./net_config/net_config.h
+ ../VideoServer/QiaoJia/DB/LDBTool.cpp
+ ./AppPipeController.cpp
+ ./AppPipeController.h
+
+ ../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
+ ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+ ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+ ../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp
+ ../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
+
+
+ ../../../Erlang/syncDBTool/ErlangDbTool.cpp
+ #
+ ../LocalDBTool/GetUUId.cpp
+ ../LocalDBTool/SqliteFaceEncap.cpp
+ ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.cpp
+ ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.h
+ )
+
+target_link_libraries(DataWebServer
+ glog
+ boost_system
+ boost_thread
+ boost_filesystem
+ ei
+ erl_interface_st
+ ei_st
+ erl_interface
+ uuid
+ rt
+ avformat
+ avcodec
+ swresample
+ swscale
+ avutil
+ bz2 dl z
+
+ opencv_world
+ THFaceImage
+ THFeature
+ THFaceProperty
+
+ curl
+ fastcommon
+ fdfsclient
+
+ Qt5Core
+ Qt5Sql
+ sqlite3
+
+ jsoncpp
+
+ imos_mw_sdk
+ mw_sdk_player
+ mw_sdk_ipc
+ mw_sdk_bp
+ mw_sdk_rm
+
+ HCCore
+ hcnetsdk
+ pthread
+ )
+
+#add_executable(Apptest
+# demo.cpp
+# ./AppPipeController.cpp
+# ./AppPipeController.h
+#
+# ../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
+# ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+# ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+# ../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp
+# ../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h
+# ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+# ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
+# )
+#
+#target_link_libraries(Apptest
+# boost_system
+# boost_thread
+# boost_filesystem
+# ei
+# erl_interface_st
+# ei_st
+# erl_interface
+# # uuid
+# rt
+# pthread
+# avformat
+# avcodec
+# swresample
+# swscale
+# avutil
+# bz2 dl z
+#
+# opencv_world
+# THFaceImage
+# THFeature
+# THFaceProperty
+#
+# curl
+# fastcommon
+# fdfsclient
+#
+# Qt5Core
+# Qt5Sql
+#
+# jsoncpp
+#
+# HCCore
+# hcnetsdk
+# )
+
diff --git a/QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp b/QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp
new file mode 100644
index 0000000..cbff042
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp
@@ -0,0 +1,80 @@
+#ifndef HTTPSRVRETRECIEVE_H_XZL_201808171114
+#define HTTPSRVRETRECIEVE_H_XZL_201808171114
+
+#include "client_http.hpp"
+#include "server_http.hpp"
+
+// Added for the json-example
+#define BOOST_SPIRIT_THREADSAFE
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+
+// Added for the default_resource example
+#include <algorithm>
+#include <boost/filesystem.hpp>
+#include <fstream>
+#include <vector>
+#include <basic/debug/Debug.h>
+
+#ifdef HAVE_OPENSSL
+#include "crypto.hpp"
+#endif
+
+using HttpServer = SimpleWeb::Server<SimpleWeb::HTTP>;
+using HttpClient = SimpleWeb::Client<SimpleWeb::HTTP>;
+class HttpSrvRetRecieve
+{
+ using TASK_FUNCTION = std::function<std::string(std::string,unsigned short,std::string,std::shared_ptr<HttpServer::Response>&)>;
+ using OTHER_FUNCTION = std::function<void(int)>;
+public:
+ HttpSrvRetRecieve(const std::string& ip,const unsigned short port,const std::size_t& threadPoolSize)
+ :m_TASK_FUNCTION(nullptr)
+ {
+ m_server.config.address = ip;
+ m_server.config.port = port;
+ m_server.config.thread_pool_size = threadPoolSize;
+ }
+
+ int setInfo(const std::string& strInfo,const std::string& strType,TASK_FUNCTION f)
+ {
+ m_map_TASKFUNC[strInfo.substr(1,(strInfo.size()-2))] = f;
+ m_server.resource[strInfo][strType] = [this](std::shared_ptr<HttpServer::Response> response, std::shared_ptr<HttpServer::Request> request)
+ {
+ std::string strInfo = request->path;
+ auto func = m_map_TASKFUNC[strInfo];
+ if(func != nullptr){
+ std::string strRet = func(request->remote_endpoint_address(),request->remote_endpoint_port(),request->content.string(),response);
+ if(strRet.size() > 0){
+ DBG("strRet.size() > 0");
+ response->write(strRet);
+ } else{
+ ERR("strRet.size() <= 0");
+ }
+ }else{
+ std::cout << " func == nullptr " << std::endl;
+ }
+ };
+ m_server.on_error = [](std::shared_ptr<HttpServer::Request> /*request*/, const SimpleWeb::error_code & /*ec*/)
+ {};
+ }
+
+ int start()
+ {
+ m_server_thread = std::make_shared<std::thread>([&]() {
+ // Start server
+ m_server.start();
+ });
+ return 0;
+ }
+ int waitForShutDown()
+ {
+ m_server_thread->join();
+ }
+
+private:
+ HttpServer m_server;
+ TASK_FUNCTION m_TASK_FUNCTION;
+ std::map<std::string,TASK_FUNCTION> m_map_TASKFUNC;
+ std::shared_ptr<std::thread> m_server_thread;
+};
+#endif
diff --git a/QiaoJiaSystem/DataManagerServer/demo.cpp b/QiaoJiaSystem/DataManagerServer/demo.cpp
new file mode 100644
index 0000000..8756a8c
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/demo.cpp
@@ -0,0 +1,28 @@
+//
+// Created by ps on 18-9-18.
+//
+
+#include <AppPipeController.h>
+#include <basic/util/app/AppPreference.hpp>
+
+
+int main() {
+ Json::Value json;
+ json["rtsp"] = "rtsp://admin:a1234567@192.168.1.201:554/h264/ch1/main/av_stream";
+
+ std::string publish_basepath = "rtmp://localhost:1934/live/cam" + std::to_string(554);
+ appPref.setLongData("gpu.index", 0);
+ appPref.setStringData("publish.basepath", publish_basepath);
+ appPref.setIntData("pulish.width", 640);
+ appPref.setIntData("pulish.height", 360);
+
+ AppPipeController a(0, json);
+ a.start();
+
+ getchar();
+
+ a.stop();
+ a.wait();
+
+ return 0;
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
new file mode 100644
index 0000000..5505ad3
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -0,0 +1,2787 @@
+#include <iostream>
+#include <VideoServer/QiaoJia/DB/DBStruct.h>
+#include <jsoncpp/json/json.h>
+#include "http_configserver.h"
+#include <QString>
+#include <basic/util/app/AppConfig.h>
+#include "net_config/net_config.h"
+#include "HCNetSDK.h"
+#include "univiewDriver.h"
+#include <basic/util/app/AppPreference.hpp>
+#include "HttpRequestWithCrul.hpp"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <GetUUId.h>
+
+#include <uuid/uuid.h>
+//#include "HcRecord.h"
+#include <time.h>
+#include <dirent.h>
+using namespace std;
+
+devHttpServer_c::devHttpServer_c()
+ : _HttpSrvRetRecieve("0.0.0.0", 8083, 1), erlangDbTool(nullptr), m_SqliteFaceEncap("LocalDataDB") {
+ init();
+}
+
+devHttpServer_c::devHttpServer_c(std::string test)
+ : _HttpSrvRetRecieve("0.0.0.0", 8083, 1), erlangDbTool(nullptr), m_SqliteFaceEncap("LocalDataDB") {
+
+ fdfsClient.rwLock.wrlock();
+ fdfsClient.fastFds = new FastFds("WebFDSClient.conf");
+ fdfsClient.rwLock.unlock();
+}
+
+
+devHttpServer_c::devHttpServer_c(std::string ip, int port, int pthNum)
+ : _HttpSrvRetRecieve(ip, port, pthNum), erlangDbTool(nullptr), m_SqliteFaceEncap("LocalDataDB") {
+
+ auto erlNode = appConfig.getStringProperty("erlNode");
+ auto erlCookie = appConfig.getStringProperty("erlCookie");
+ auto erlPath = appConfig.getStringProperty("erlPath");
+ auto erlFatherNode = appConfig.getStringProperty("erlFatherNode");
+ if (erlNode.size() > 0 && erlCookie.size() > 0) {
+ string str_tmp = "DataWebserver";
+ erlangDbTool = new ErlangTool::ErlangDbTool(erlPath, erlNode, erlCookie, str_tmp);
+ if (erlangDbTool->initErlang() == 1) {
+ erlangDbTool->startNodeDb(erlFatherNode);
+ } else {
+ DBG("not is startNodeDb");
+ }
+ }
+ init();
+}
+
+devHttpServer_c::~devHttpServer_c() {
+
+}
+
+
+void devHttpServer_c::init(void) {
+
+ std::string strDevId = appConfig.getStringProperty("DEV_ID");
+// DSVAD010120181119
+ m_batch = strDevId.substr(5, 2);
+ m_SerialNumber = strDevId.substr(7, 2);
+
+
+ fdfsClient.rwLock.wrlock();
+ fdfsClient.fastFds = new FastFds("WebFDSClient.conf");
+ fdfsClient.rwLock.unlock();
+
+ _HttpSrvRetRecieve.setInfo("^/dev_show$", "POST", std::bind(&devHttpServer_c::dev_show, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/dev_edit$", "POST", std::bind(&devHttpServer_c::dev_edit, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/devchn_show$", "POST", std::bind(&devHttpServer_c::devchn_show, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/devchn_edit$", "POST", std::bind(&devHttpServer_c::devchn_edit, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/dev_search_chns$", "POST", std::bind(&devHttpServer_c::dev_search_chns, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/chk_chn_connet$", "POST", std::bind(&devHttpServer_c::chk_chn_connet, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/cam_edit$", "POST", std::bind(&devHttpServer_c::cam_edit, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/cam_show$", "POST", std::bind(&devHttpServer_c::cam_show, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/chk_cam_connet$", "POST", std::bind(&devHttpServer_c::chk_cam_connet, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/chk_cam_disconnet$", "POST", std::bind(&devHttpServer_c::chk_cam_disconnet, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/dev_del$", "POST", std::bind(&devHttpServer_c::dev_del, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/cam_del$", "POST", std::bind(&devHttpServer_c::cam_del, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/server_info_edit$", "POST", std::bind(&devHttpServer_c::server_info_edit, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/server_info_show$", "POST", std::bind(&devHttpServer_c::server_info_show, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/cut_dura_edit$", "POST", std::bind(&devHttpServer_c::cut_dura_edit, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/cut_dura_show$", "POST", std::bind(&devHttpServer_c::cut_dura_show, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ //#data modifyCluName
+ _HttpSrvRetRecieve.setInfo("^/addNode$", "POST", std::bind(&devHttpServer_c::addNode, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/searchNode$", "POST", std::bind(&devHttpServer_c::searchNode, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+ _HttpSrvRetRecieve.setInfo("^/modifyCluName$", "POST", std::bind(&devHttpServer_c::modifyCluName, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+ _HttpSrvRetRecieve.setInfo("^/removeNode$", "POST", std::bind(&devHttpServer_c::removeNode, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/createDatabase$", "POST", std::bind(&devHttpServer_c::createDatabase, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/deleteDatabase$", "POST", std::bind(&devHttpServer_c::deleteDatabase, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+ _HttpSrvRetRecieve.setInfo("^/updateDatabase$", "POST", std::bind(&devHttpServer_c::updateDatabase, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/findAllDatabase$", "POST", std::bind(&devHttpServer_c::findAllDatabase, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/findLocalDatabase$", "POST", std::bind(&devHttpServer_c::findLocalDatabase, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/addPerson$", "POST", std::bind(&devHttpServer_c::addPerson, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/addPersons$", "POST", std::bind(&devHttpServer_c::addPersons, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/personIsExists$", "POST", std::bind(&devHttpServer_c::personIsExists, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/updatePersonByOldId$", "POST", std::bind(&devHttpServer_c::updatePersonByOldId, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3,
+ std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/delPerson$", "POST", std::bind(&devHttpServer_c::delPerson, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/loadFaceFeaData$", "POST", std::bind(&devHttpServer_c::loadFaceFeaData, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/netconfig_edit$", "POST", std::bind(&devHttpServer_c::netconfig_edit, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/netconfig_show$", "POST", std::bind(&devHttpServer_c::netconfig_show, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/getAlarmImageFromVideoFile$", "POST",
+ std::bind(&devHttpServer_c::getAlarmImageFromVideoFile, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+ _HttpSrvRetRecieve.setInfo("^/getRecordVideoPath$", "POST",
+ std::bind(&devHttpServer_c::getRecordVideoPath, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+
+ _HttpSrvRetRecieve.setInfo("^/findDevId$", "POST",
+ std::bind(&devHttpServer_c::findDevId, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+ _HttpSrvRetRecieve.setInfo("^/editDevName$", "POST",
+ std::bind(&devHttpServer_c::editDevName, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+ _HttpSrvRetRecieve.setInfo("^/editDevId$", "POST",
+ std::bind(&devHttpServer_c::editDevId, this,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4));
+ _HttpSrvRetRecieve.start();
+ _HttpSrvRetRecieve.waitForShutDown();
+}
+
+
+//鏄剧ず纾佺洏闃靛垪
+std::string devHttpServer_c::dev_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Value value;
+ Json::Value elem;
+ bool ret = false;
+
+ std::list<Record_Storage_Dev> rec_list = db_c.searchDeviceTableAll();
+
+ list<Record_Storage_Dev>::iterator iter;
+
+ for (iter = rec_list.begin(); iter != rec_list.end(); ++iter) {
+ elem["str_storage_dev_id"] = iter->str_storage_dev_id.toStdString();
+ elem["str_dev_name"] = iter->str_dev_name.toStdString();
+ elem["str_addr"] = iter->str_addr.toStdString();
+ elem["str_longitude"] = iter->str_longitude.toStdString();
+ elem["str_latitude"] = iter->str_latitude.toStdString();
+ elem["str_ip"] = iter->str_ip.toStdString();
+ elem["n_port"] = iter->n_port;
+ elem["str_username"] = iter->str_username.toStdString();
+ elem["str_password"] = iter->str_password.toStdString();
+ elem["tim_start_time"] = iter->tim_start_time.toString("yyyy-MM-dd hh:mm:ss").toStdString();
+ elem["n_duration"] = iter->n_duration;
+ elem["str_brand"] = iter->str_brand.toStdString();
+ elem["str_reserved"] = iter->str_reserved.toStdString();
+ cout << elem.toStyledString() << endl;
+ value.append(elem);
+ }
+ cout << value.toStyledString() << endl;
+// std::string out = value.toStyledString();
+ std::string out = value.size() > 0 ? value.toStyledString() : "[]";
+
+ return out;
+}
+
+//************************************
+// Method: string_replace
+// FullName: string_replace
+// Access: public
+// Returns: void
+// Qualifier: 鎶婂瓧绗︿覆鐨剆trsrc鏇挎崲鎴恠trdst
+// Parameter: std::string & strBig
+// Parameter: const std::string & strsrc
+// Parameter: const std::string & strdst
+//************************************
+static void string_replace(std::string &strBig, const std::string &strsrc, const std::string &strdst) {
+ std::string::size_type pos = 0;
+ std::string::size_type srclen = strsrc.size();
+ std::string::size_type dstlen = strdst.size();
+
+ while ((pos = strBig.find(strsrc, pos)) != std::string::npos) {
+ strBig.replace(pos, srclen, strdst);
+ pos += dstlen;
+ }
+}
+
+static std::string rtspAddrBuild(std::string ip, const int port, std::string username,
+ std::string passwd, std::string brand) {
+ std::string rtsp_url;
+ if (brand == "haikang") {
+ rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+ "/h264/ch1/main/av_stream";
+ } else if (brand == "dahua") {
+ //rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
+ rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+ "/cam/realmonitor?channel=1&subtype=0";
+ //TODO
+ } else if (brand == "yushi") {
+ rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+ "/video1";
+ } else {
+ //TODO
+ }
+
+ return rtsp_url;
+}
+
+bool devHttpServer_c::getDevSerialNumber(const char *ip, const int port, const char *username, const char *passwd, \
+ const char *brand, unsigned char *serialNumber) const {
+ std::string strBrand(brand);
+ if (strBrand == "haikang") {
+ getHKDevSerialNumber(ip, port, username, passwd, serialNumber);
+ } else if (strBrand == "dahua") {
+ //TODO
+ } else if (strBrand == "yushi") {
+ return getUVDevSerialNumber(ip, username, passwd, serialNumber);
+ } else {
+ //TODO
+ }
+
+ return true;
+}
+
+bool devHttpServer_c::getHKDevSerialNumber(const char *ip, const int port, const char *username, const char *passwd,
+ unsigned char *serialNumber) const {
+ NET_DVR_Init();
+ //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+ NET_DVR_SetConnectTime(2000, 1);
+ NET_DVR_SetReconnect(10000, true);
+
+ NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+ struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+ strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+ struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+ strcpy(struLoginInfo.sUserName, username); //璁惧鐧诲綍鐢ㄦ埛鍚�
+ strcpy(struLoginInfo.sPassword, passwd); //璁惧鐧诲綍瀵嗙爜
+
+ //璁惧淇℃伅, 杈撳嚭鍙傛暟
+ NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+ LONG m_lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+ if (m_lUserID < 0) {
+ // printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+ NET_DVR_Cleanup();
+ return false;
+ }
+
+ if (serialNumber != NULL) {
+ memcpy(serialNumber, struDeviceInfoV40.struDeviceV30.sSerialNumber, SERIALNO_LEN);//TODO鑾峰彇纾佺洏闃靛垪鐨勮澶噄d
+ string serialNO((char *) serialNumber);
+
+ string_replace(serialNO, " ", "_");
+ serialNO.copy(serialNumber, serialNO.length(), 0);
+ *(serialNumber + serialNO.length()) = '\0';
+ }
+
+ //娉ㄩ攢鐢ㄦ埛
+ NET_DVR_Logout(m_lUserID);
+ //閲婃斁SDK璧勬簮
+ NET_DVR_Cleanup();
+}
+
+bool
+devHttpServer_c::getUVDevSerialNumber(const char *ip, const char *username, const char *passwd,
+ unsigned char *serialNumber) const {
+ ULONG ulRet = 0;
+ CHAR szUserID[1024] = {0};
+ IMOS_MW_BASIC_DEVICE_INFO_S *pstBasicInfo = NULL;
+
+ ulRet = IMOS_MW_Initiate();
+ if (ERR_COMMON_SUCCEED != ulRet) {
+ printf("Initiate ret[%lu]", ulRet);
+ return false;
+ }
+
+ /*sdk login*/
+ ulRet = IMOS_MW_Login(username, passwd, ip, 0, szUserID);
+ if (ERR_COMMON_SUCCEED != ulRet) {
+ printf("Login error ulRet[%lu]", ulRet);
+ return false;
+ }
+
+ pstBasicInfo = (IMOS_MW_BASIC_DEVICE_INFO_S *) malloc(sizeof(IMOS_MW_BASIC_DEVICE_INFO_S));
+ ulRet = IMOS_MW_GetDeviceStatus(szUserID, 0, IMOS_MW_STATUS_BASIC_INFO, (void *) pstBasicInfo);
+ if (ERR_COMMON_SUCCEED != ulRet) {
+ printf("GetDeviceStatus Error[%lu]\n", ulRet);
+ return false;
+ }
+
+ if (serialNumber != NULL) {
+ printf("SerialNumber :%s\n", pstBasicInfo->szSerialNumber);
+ strcpy((char *) serialNumber, pstBasicInfo->szSerialNumber);//TODO鑾峰彇纾佺洏闃靛垪鐨勮澶噄d
+ string serialNO((char *) serialNumber);
+
+ string_replace(serialNO, " ", "_");
+ serialNO.copy(serialNumber, serialNO.length(), 0);
+ *(serialNumber + serialNO.length()) = '\0';
+ free(pstBasicInfo);
+ }
+
+ (VOID) IMOS_MW_Logout(szUserID);
+ (VOID) IMOS_MW_Cleanup();
+
+ return true;
+}
+
+bool devHttpServer_c::getDevChnList(const char *ip, const int port, const char *username, const char *passwd, \
+ const char *brand, std::vector<int> &lvecUsefulChans) const {
+ std::string strBrand(brand);
+ if (strBrand == "haikang") {
+ NET_DVR_Init();
+ //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+ NET_DVR_SetConnectTime(2000, 1);
+ NET_DVR_SetReconnect(10000, true);
+
+ //鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑
+ NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+ struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+ strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+ struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+ strcpy(struLoginInfo.sUserName, username); //璁惧鐧诲綍鐢ㄦ埛鍚�
+ strcpy(struLoginInfo.sPassword, passwd); //璁惧鐧诲綍瀵嗙爜
+
+ //璁惧淇℃伅, 杈撳嚭鍙傛暟
+ NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+ LONG m_lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+ if (m_lUserID < 0) {
+ // printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+ NET_DVR_Cleanup();
+ return false;
+ }
+
+
+ NET_DVR_IPPARACFG_V40 ipOut;
+ long len;
+ int iGroupNO = 0 + 33;//33 offset
+ BOOL bret = NET_DVR_GetDVRConfig(m_lUserID, NET_DVR_GET_IPPARACFG_V40, iGroupNO, &ipOut,
+ sizeof(NET_DVR_IPPARACFG_V40),
+ (LPDWORD) &len);
+ DWORD dErr = NET_DVR_GetLastError();
+ NET_DVR_PICCFG_V40 picOut;
+
+ bret = NET_DVR_GetDVRConfig(m_lUserID, NET_DVR_GET_PICCFG_V40, iGroupNO, &picOut, sizeof(NET_DVR_PICCFG_V40),
+ (LPDWORD) &len);
+ dErr = NET_DVR_GetLastError();
+ lvecUsefulChans.clear();
+ for (int i = 0; i < ipOut.dwDChanNum; i++) {
+ if (ipOut.struStreamMode[i].uGetStream.struChanInfo.byEnable) {
+
+ BYTE byIPID, byIPIDHigh;
+ int iDevInfoIndex;
+ byIPID = ipOut.struStreamMode[i].uGetStream.struChanInfo.byIPID;
+ byIPIDHigh = ipOut.struStreamMode[i].uGetStream.struChanInfo.byIPIDHigh;
+ iDevInfoIndex = byIPIDHigh * 256 + byIPID - 1 - iGroupNO * 64;
+// printf("IP channel no.%d is online, IP: %s\n", i + 1,
+// ipOut.struIPDevInfo[iDevInfoIndex].struIP.sIpV4);
+
+
+ lvecUsefulChans.push_back(i + 33);
+ }
+ }
+
+ //娉ㄩ攢鐢ㄦ埛
+ NET_DVR_Logout(m_lUserID);
+ //閲婃斁SDK璧勬簮
+ NET_DVR_Cleanup();
+ } else if (strBrand == "dahua") {
+ return false;//TODO
+ } else if (strBrand == "yushi") {
+ return false;//TODO
+ } else {
+ return false;//TODO
+ }
+
+ return true;
+}
+
+bool devHttpServer_c::loadCurrentVideo(const char *ip, const int port, const char *username, const char *passwd, \
+ const char *brand, const int chn, std::string &videopath) const {
+ std::string strBrand(brand);
+ if (strBrand == "haikang") {
+ NET_DVR_Init();
+ //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+ NET_DVR_SetConnectTime(2000, 1);
+ NET_DVR_SetReconnect(10000, true);
+
+ //鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑
+ NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+ struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+ strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+ struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+ strcpy(struLoginInfo.sUserName, username); //璁惧鐧诲綍鐢ㄦ埛鍚�
+ strcpy(struLoginInfo.sPassword, passwd); //璁惧鐧诲綍瀵嗙爜
+
+ //璁惧淇℃伅, 杈撳嚭鍙傛暟
+ NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+ LONG m_lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+ if (m_lUserID < 0) {
+ // printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+ NET_DVR_Cleanup();
+ return false;
+ }
+
+ NET_DVR_PLAYCOND struDownloadCond = {0};
+ struDownloadCond.dwChannel = chn;
+
+ time_t rowtime;
+ time(&rowtime);
+ time_t start_time = rowtime - 7200;
+ time_t end_time = rowtime - 7200 + 10;
+ struct tm *pStartTime = localtime(&start_time);
+
+ struDownloadCond.struStartTime.dwYear = pStartTime->tm_year + 1900;
+ struDownloadCond.struStartTime.dwMonth = pStartTime->tm_mon + 1;
+ struDownloadCond.struStartTime.dwDay = pStartTime->tm_mday;
+ struDownloadCond.struStartTime.dwHour = pStartTime->tm_hour;
+ struDownloadCond.struStartTime.dwMinute = pStartTime->tm_min;
+ struDownloadCond.struStartTime.dwSecond = pStartTime->tm_sec;
+
+ struct tm *pEndTime = localtime(&end_time);
+ struDownloadCond.struStopTime.dwYear = pEndTime->tm_year + 1900;
+ struDownloadCond.struStopTime.dwMonth = pEndTime->tm_mon + 1;
+ struDownloadCond.struStopTime.dwDay = pEndTime->tm_mday;
+ struDownloadCond.struStopTime.dwHour = pEndTime->tm_hour;
+ struDownloadCond.struStopTime.dwMinute = pEndTime->tm_min;
+ struDownloadCond.struStopTime.dwSecond = pEndTime->tm_sec;
+
+ std::string ip_t(ip);
+ std::string filePath = "./" + ip_t + ":" + \
+ std::to_string(port) + "-" + \
+ std::to_string(chn) + "-" + \
+ std::to_string(struDownloadCond.struStopTime.dwYear) + "-" + \
+ std::to_string(struDownloadCond.struStopTime.dwMonth) + "-" + \
+ std::to_string(struDownloadCond.struStopTime.dwDay) + "_" + \
+ std::to_string(struDownloadCond.struStopTime.dwHour) + ":" + \
+ std::to_string(struDownloadCond.struStopTime.dwMinute) + ":" + \
+ std::to_string(struDownloadCond.struStopTime.dwSecond) + ".mp4";
+
+ std::string filePath_tmp = "./" + ip_t + ":" + \
+ std::to_string(port) + "-" + \
+ std::to_string(chn) + "-" + \
+ std::to_string(struDownloadCond.struStopTime.dwYear) + "-" + \
+ std::to_string(struDownloadCond.struStopTime.dwMonth) + "-" + \
+ std::to_string(struDownloadCond.struStopTime.dwDay) + "_" + \
+ std::to_string(struDownloadCond.struStopTime.dwHour) + ":" + \
+ std::to_string(struDownloadCond.struStopTime.dwMinute) + ":" + \
+ std::to_string(struDownloadCond.struStopTime.dwSecond) + "_tmp.mp4";
+
+ //---------------------------------------
+ //鎸夋椂闂翠笅杞�
+ int hPlayback;
+ hPlayback = NET_DVR_GetFileByTime_V40(m_lUserID, (char *) filePath.c_str(), &struDownloadCond);
+ if (hPlayback < 0) {
+ printf("NET_DVR_GetFileByTime_V40 fail,last error %d\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(m_lUserID);
+ NET_DVR_Cleanup();
+ return false;
+ }
+
+ //---------------------------------------
+ //寮�濮嬩笅杞�
+ if (!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL, 0, NULL, NULL)) {
+ printf("Play back control failed [%d]\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(m_lUserID);
+ NET_DVR_Cleanup();
+ return false;
+ }
+
+ int nPos = 0;
+ for (nPos = 0; nPos < 100 && nPos >= 0; nPos = NET_DVR_GetDownloadPos(hPlayback)) {
+ //printf("Be downloading... %d %%\n",nPos);
+ sleep(5); //millisecond
+ }
+ if (!NET_DVR_StopGetFile(hPlayback)) {
+ printf("failed to stop get file [%d]\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(m_lUserID);
+ NET_DVR_Cleanup();
+ return false;
+ }
+ if (nPos < 0 || nPos > 100) {
+ printf("download err [%d]\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(m_lUserID);
+ NET_DVR_Cleanup();
+ return false;
+ }
+
+ std::string cmd_transform = "ffmpeg -i " + filePath + " -strict -2 -vf scale=640:360 " + filePath_tmp;
+ system(cmd_transform.c_str());
+ std::string cmd_delsrc = "rm -f " + filePath;
+ system(cmd_delsrc.c_str());
+ videopath = filePath_tmp;
+
+ //娉ㄩ攢鐢ㄦ埛
+ NET_DVR_Logout(m_lUserID);
+ //閲婃斁SDK璧勬簮
+ NET_DVR_Cleanup();
+ } else if (strBrand == "dahua") {
+ //TODO
+ } else if (strBrand == "yushi") {
+ //TODO
+ } else {
+ //TODO
+ }
+
+ return true;
+}
+
+#define DEV_NO_TYPE (0)
+#define DEV_STORAGE (1)
+#define DEV_CAMERA (2)
+
+//缂栬緫纾佺洏闃靛垪
+std::string devHttpServer_c::dev_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value;
+ bool ret = false;
+
+ int dev_type = db_c.searchDevTypeFromConfigTable();
+ if (DEV_CAMERA == dev_type) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ } else {
+ DBG("dev_type :" << dev_type);
+ }
+
+ Record_Storage_Dev dev_rec;
+ if (reader.parse(content, value)) {
+ dev_rec.str_dev_name = QString::fromStdString(value["str_dev_name"].asString());
+ dev_rec.n_total_chn = 0;
+ dev_rec.str_all_chn_num = "";
+ dev_rec.str_addr = QString::fromStdString(value["str_addr"].asString());
+ dev_rec.str_longitude = QString::fromStdString(value["str_longitude"].asString());
+ dev_rec.str_latitude = QString::fromStdString(value["str_latitude"].asString());
+ dev_rec.str_ip = QString::fromStdString(value["str_ip"].asString());
+ dev_rec.n_port = value["n_port"].asInt();
+ dev_rec.str_username = QString::fromStdString(value["str_username"].asString());
+ dev_rec.str_password = QString::fromStdString(value["str_password"].asString());
+ dev_rec.tim_start_time = QDateTime::fromString(QString::fromStdString(value["tim_start_time"].asString()), \
+ "yyyy-MM-dd hh:mm:ss");
+ dev_rec.n_duration = value["n_duration"].asInt();
+ dev_rec.str_brand = QString::fromStdString(value["str_brand"].asString());
+ dev_rec.str_reserved = "";
+
+ unsigned char serialnumber[SERIALNO_LEN] = {0};
+ ret = getDevSerialNumber(value["str_ip"].asCString(), value["n_port"].asInt(),
+ value["str_username"].asCString(), \
+ value["str_password"].asCString(), value["str_brand"].asCString(), serialnumber);
+ if ((!ret) || (serialnumber[0] == 0)) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ dev_rec.str_storage_dev_id = QString::fromLatin1((const char *) serialnumber);//鑾峰彇纾佺洏闃靛垪鐨勮澶噄d
+ std::cout << dev_rec.str_storage_dev_id.toStdString() << std::endl;
+ ret = db_c.updateDeviceTable(dev_rec);
+ } else {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ if (ret) {
+ if (DEV_NO_TYPE == dev_type) {
+ db_c.updateConfigTableByDevType(DEV_STORAGE);
+ runAllApp();
+ } else {
+ DBG("dev_type :" << dev_type);
+ }
+
+ Json::Value value_out;
+ value_out["str_storage_dev_id"] = dev_rec.str_storage_dev_id.toStdString();
+ std::string out = value_out.toStyledString();
+
+ return out;
+ } else {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+//鎼滅储纾佺洏闃靛垪閫氶亾
+std::string
+devHttpServer_c::dev_search_chns(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value_reader;
+
+ if (!reader.parse(content, value_reader)) {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ Record_Storage_Dev rec = db_c.searchDeviceTableByDeviceId(
+ QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+ //璋冪敤娴峰悍澶у崕纾佺洏闃靛垪sdk锛岃幏鍙栫鐩樼殑閫氶亾鍒楄〃
+ std::vector<int> lvecUsefulChans;
+ getDevChnList(rec.str_ip.toStdString().c_str(), rec.n_port, rec.str_username.toStdString().c_str(), \
+ rec.str_password.toStdString().c_str(), rec.str_brand.toStdString().c_str(), lvecUsefulChans);
+
+ std::string str_result;
+ std::string str_tmp;
+ for (int i = 0; i < lvecUsefulChans.size(); i++) {
+ std::cout << lvecUsefulChans.at(i) << std::endl;
+ str_tmp = std::to_string(lvecUsefulChans.at(i));
+ str_result += str_tmp;
+ str_result += ",";
+ }
+ str_result = str_result.substr(0, str_result.length() - 1);
+ Json::Value value;
+
+ value["devchn_list"] = str_result;
+ std::string out = value.toStyledString();
+
+ return out;
+}
+
+//娴嬭瘯纾佺洏闃靛垪閫氶亾杩炴帴
+std::string
+devHttpServer_c::chk_chn_connet(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value_reader;
+
+ if (!reader.parse(content, value_reader)) {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ Record_Storage_Dev rec = db_c.searchDeviceTableByDeviceId(\
+ QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+
+ //TODO
+ //璋冪敤娴峰悍澶у崕纾佺洏闃靛垪sdk锛岃幏鍙栫鐩榲alue_reader["str_storage_dev_id"].asString(),value_reader["n_chn"].asString()
+ std::string loadpath;
+ bool ret = loadCurrentVideo(rec.str_ip.toStdString().c_str(), \
+ rec.n_port, \
+ rec.str_username.toStdString().c_str(), \
+ rec.str_password.toStdString().c_str(), \
+ rec.str_brand.toStdString().c_str(), \
+ value_reader["n_chn"].asInt(), \
+ loadpath);
+
+ fdfsClient.rwLock.rdlock();
+ std::string vid_url = "http://";
+ if (fdfsClient.fastFds != nullptr) {
+ vid_url.append(fdfsClient.fastFds->getIp() + "/");
+ std::string t_strVid = "";
+ if (!fdfsClient.fastFds->uploadFile(loadpath, t_strVid)) {
+ vid_url = "upload video fail";
+ } else {
+ vid_url.append(t_strVid);
+ }
+ }
+ fdfsClient.rwLock.unlock();
+ std::string cmd_delsrc = "rm -f " + loadpath;
+ system(cmd_delsrc.c_str());
+
+ Json::Value value;
+ if (!ret) {
+ value["connect_status"] = "False";
+ value["video_url"] = "";
+ } else {
+
+
+ value["connect_status"] = "True";
+ value["video_url"] = vid_url;
+ }
+
+ std::string out = value.toStyledString();
+
+ return out;
+}
+
+static std::vector<int> string2vectorint(std::string str_list) {
+ std::vector<int> result_int;
+ char *property_list = const_cast<char *>(str_list.c_str());
+ const char *c_Analyse = ",";
+ char *t_property;
+
+#ifdef linux
+ char *t_save = NULL;
+ t_property = strtok_r(property_list, c_Analyse, &t_save);
+#else
+ t_property = strtok(property_list,c_Analyse);
+#endif
+
+ while (t_property) {
+ std::string str_pro(t_property);
+ result_int.push_back(std::stoi(str_pro));
+#ifdef linux
+ t_property = strtok_r(t_save, c_Analyse, &t_save);
+#else
+ t_property = strtok(NULL,c_Analyse);
+#endif
+
+ }
+ return result_int;
+}
+
+//鏄剧ず纾佺洏闃靛垪閫氶亾鍒楄〃
+std::string
+devHttpServer_c::devchn_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value_reader;
+ Json::Value value;
+ Json::Value elem;
+ Json::Value chn_unused;
+ bool ret = false;
+
+ if (reader.parse(content, value_reader)) {
+ QString dev_id = QString::fromStdString(value_reader["str_storage_dev_id"].asString());
+
+ std::list<Record_Cam_Chn> rec_list = db_c.searchChannelTableByDevlId(dev_id);
+ list<Record_Cam_Chn>::iterator iter;
+
+ Record_Storage_Dev rec = db_c.searchDeviceTableByDeviceId(
+ QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+ std::vector<int> chns;
+ getDevChnList(rec.str_ip.toStdString().c_str(), rec.n_port, rec.str_username.toStdString().c_str(), \
+ rec.str_password.toStdString().c_str(), rec.str_brand.toStdString().c_str(), chns);
+
+ for (iter = rec_list.begin(); iter != rec_list.end(); ++iter) {
+ // elem["str_storage_dev_id"] = iter->str_storage_dev_id.toStdString();
+ elem["str_name"] = iter->str_name.toStdString();
+ elem["n_chn"] = iter->n_chn;
+ elem["str_addr"] = iter->str_addr.toStdString();
+ elem["str_longitude"] = iter->str_longitude.toStdString();
+ elem["str_latitude"] = iter->str_latitude.toStdString();
+ elem["str_reserved"] = iter->str_reserved.toStdString();
+
+ Record_Chn_Sdk rec_sdk = db_c.searchChnSdkTableByChannelId(iter->str_storage_dev_id, iter->n_chn);
+ elem["str_sdks"] = rec_sdk.str_sdks.toStdString();
+ elem["str_det_thr"] = rec_sdk.str_det_thr.toStdString();
+ elem["str_cmp_thr"] = rec_sdk.str_cmp_thr.toStdString();
+
+ for (std::vector<int>::iterator it = chns.begin(); it != chns.end();) {
+ if (*it == iter->n_chn) {
+ it = chns.erase(it); //鍒犻櫎鍏冪礌锛岃繑鍥炲�兼寚鍚戝凡鍒犻櫎鍏冪礌鐨勪笅涓�涓綅缃�
+ } else {
+ ++it; //鎸囧悜涓嬩竴涓綅缃�
+ }
+ }
+
+ cout << elem.toStyledString() << endl;
+ value.append(elem);
+ }
+
+ for (std::vector<int>::iterator it1 = chns.begin(); it1 != chns.end(); it1++) {
+ chn_unused["n_chn"] = *it1;
+ cout << "*it1" << *it1 << endl;
+ value.append(chn_unused);
+ }
+
+ cout << value.toStyledString() << endl;
+// std::string out = value.toStyledString();
+ std::string out = value.size() > 0 ? value.toStyledString() : "[]";
+ return out;
+ }
+
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+}
+
+//缂栬緫纾佺洏闃靛垪閫氶亾
+std::string
+devHttpServer_c::devchn_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value;
+ bool ret = false;
+ Record_Chn_Sdk rec_sdk_old;
+ Record_Chn_Sdk rec_sdk;
+
+ if (reader.parse(content, value)) {
+ Record_Cam_Chn rec;
+ rec.str_storage_dev_id = QString::fromStdString(value["str_storage_dev_id"].asString());
+ rec.n_chn = value["n_chn"].asInt();
+ rec.str_name = QString::fromStdString(value["str_name"].asString());
+ rec.str_addr = QString::fromStdString(value["str_addr"].asString());
+ rec.str_longitude = QString::fromStdString(value["str_longitude"].asString());
+ rec.str_latitude = QString::fromStdString(value["str_latitude"].asString());
+
+ Record_Storage_Dev dev_rec = db_c.searchDeviceTableByDeviceId(rec.str_storage_dev_id);
+ rec.tim_do_time = dev_rec.tim_start_time;
+ rec.tim_update_time = QDateTime::currentDateTime();
+
+ rec_sdk_old = db_c.searchChnSdkTableByChannelId(rec.str_storage_dev_id, rec.n_chn);
+
+ rec_sdk.str_storage_dev_id = QString::fromStdString(value["str_storage_dev_id"].asString());
+ rec_sdk.n_chn = value["n_chn"].asInt();
+ rec_sdk.str_sdks = QString::fromStdString(value["str_sdks"].asString());
+ rec_sdk.str_det_thr = QString::fromStdString(value["str_det_thr"].asString());
+ rec_sdk.str_cmp_thr = QString::fromStdString(value["str_cmp_thr"].asString());
+
+ ret = db_c.updateDevChnAndSdk(rec, rec_sdk);
+ if (!ret) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+ } else {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ //edit chn's sdks
+ if ((rec_sdk_old.str_sdks != rec_sdk.str_sdks) ||
+ (rec_sdk_old.str_det_thr != rec_sdk.str_det_thr) ||
+ (rec_sdk_old.str_cmp_thr != rec_sdk.str_cmp_thr)) {
+ killVideoAnalysFromHCApp();
+ sleep(1);
+ runAllApp();
+ }
+
+ return "{\"ret_status\": \"ok_ack\"}";
+}
+
+void devHttpServer_c::killFaceSearchServerApp() const {
+ string local_passwd = appConfig.getStringProperty("localPasswd");
+ string cmd_kill = "sleep 1 && echo \"" + local_passwd + "\" | sudo -S pkill -9 FaceSearch";
+ system(cmd_kill.c_str());
+ DBG("system(\"sudo -S pkill -9 FaceSearchServer\");");
+}
+
+void devHttpServer_c::killVideoAnalysFromHCApp() const {
+ string local_passwd = appConfig.getStringProperty("localPasswd");
+ string cmd_kill = "echo \"" + local_passwd + "\" | sudo -S pkill -9 VideoAnalysFrom";
+ system(cmd_kill.c_str());
+ DBG("system(\"sudo -S pkill -9 VideoAnalysFromHC\");");
+}
+
+void devHttpServer_c::runAllApp() const {
+ string buildAddr = appConfig.getStringProperty("buildAddr");
+ string cmd = "cd " + buildAddr + " && sh runAll.sh &";
+ system(cmd.c_str());
+ DBG("system(\"cd ~/Apps/QiaoJiaSystem/build/ && sh runAll.sh\");");
+}
+
+//鏄剧ず鎽勫儚鏈哄垪琛�
+std::string devHttpServer_c::cam_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Value value;
+ Json::Value elem;
+
+ std::list<Record_Cam_Dev> rec_list = db_c.searchCamDevTableAll();
+ list<Record_Cam_Dev>::iterator iter;
+
+ for (iter = rec_list.begin(); iter != rec_list.end(); ++iter) {
+ // elem["str_storage_dev_id"] = iter->str_storage_dev_id.toStdString();
+ elem["str_cam_dev_id"] = iter->str_cam_dev_id.toStdString();
+ elem["str_name"] = iter->str_name.toStdString();
+ elem["str_addr"] = iter->str_addr.toStdString();
+ elem["str_longitude"] = iter->str_longitude.toStdString();
+ elem["str_latitude"] = iter->str_latitude.toStdString();
+ elem["str_ip"] = iter->str_ip.toStdString();
+ elem["n_port"] = iter->n_port;
+ elem["str_username"] = iter->str_username.toStdString();
+ elem["str_password"] = iter->str_password.toStdString();
+ elem["str_brand"] = iter->str_brand.toStdString();
+ elem["str_reserved"] = iter->str_reserved.toStdString();
+
+ Record_Cam_Sdk rec_sdk = db_c.searchCamSdkTableByCamId(iter->str_cam_dev_id);
+ elem["str_sdks"] = rec_sdk.str_sdks.toStdString();
+ elem["str_det_thr"] = rec_sdk.str_det_thr.toStdString();
+ elem["str_cmp_thr"] = rec_sdk.str_cmp_thr.toStdString();
+
+ cout << elem.toStyledString() << endl;
+
+ value.append(elem);
+ }
+
+ cout << value.toStyledString() << endl;
+ std::string out = value.size() > 0 ? value.toStyledString() : "[]";
+ return out;
+}
+
+//缂栬緫鎽勫儚鏈�
+std::string devHttpServer_c::cam_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value;
+ bool ret = false;
+ Record_Cam_Dev rec;
+ Record_Cam_Sdk rec_sdk_old;
+ Record_Cam_Sdk rec_sdk;
+
+ int dev_type = db_c.searchDevTypeFromConfigTable();
+ if (DEV_STORAGE == dev_type) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ if (reader.parse(content, value)) {
+ unsigned char serialnumber[SERIALNO_LEN] = {0};
+ ret = getDevSerialNumber(value["str_ip"].asCString(), value["n_port"].asInt(),
+ value["str_username"].asCString(), \
+ value["str_password"].asCString(), value["str_brand"].asCString(), serialnumber);
+ if ((!ret) || (serialnumber[0] == 0)) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ rec.str_cam_dev_id = QString::fromLatin1((const char *) serialnumber);//鎽勫儚鏈篿d cam_mac
+ rec.str_name = QString::fromStdString(value["str_name"].asString());
+ rec.str_addr = QString::fromStdString(value["str_addr"].asString());
+ rec.str_longitude = QString::fromStdString(value["str_longitude"].asString());
+ rec.str_latitude = QString::fromStdString(value["str_latitude"].asString());
+ rec.str_ip = QString::fromStdString(value["str_ip"].asString());
+ rec.n_port = value["n_port"].asInt();
+ rec.str_username = QString::fromStdString(value["str_username"].asString());
+ rec.str_password = QString::fromStdString(value["str_password"].asString());
+ rec.str_brand = QString::fromStdString(value["str_brand"].asString());
+
+ rec_sdk_old = db_c.searchCamSdkTableByCamId(rec.str_cam_dev_id);
+
+ rec_sdk.str_cam_dev_id = rec.str_cam_dev_id;
+ rec_sdk.str_sdks = QString::fromStdString(value["str_sdks"].asString());
+ rec_sdk.str_det_thr = QString::fromStdString(value["str_det_thr"].asString());
+ rec_sdk.str_cmp_thr = QString::fromStdString(value["str_cmp_thr"].asString());
+
+ ret = db_c.updateCamAndSdkTable(rec, rec_sdk);
+ if (!ret) {
+ return "err_db_content";
+ }
+ } else {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ if (DEV_NO_TYPE == dev_type) {//add new camera
+ db_c.updateConfigTableByDevType(DEV_CAMERA);
+ runAllApp();
+ }
+ //edit camera's sdks
+ else/* if ((rec_sdk_old.str_sdks != rec_sdk.str_sdks) ||
+ (rec_sdk_old.str_det_thr != rec_sdk.str_det_thr) ||
+ (rec_sdk_old.str_cmp_thr != rec_sdk.str_cmp_thr)) */{
+ killVideoAnalysFromHCApp();
+ sleep(1);
+ runAllApp();
+ }
+
+ Json::Value value_out;
+ value_out["str_cam_dev_id"] = rec.str_cam_dev_id.toStdString();
+ std::string out = value_out.toStyledString();
+
+ return out;
+}
+
+bool devHttpServer_c::cam_connect_video_start(std::string ip, int port, std::string username, std::string passwd, \
+ std::string brand) const {
+
+ if (brand == "haikang") {
+ bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str());
+ if (!ret) {
+ ERR("getHKDevSerialNumber ERR");
+ return false;
+ }
+ //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+ port = 554;//TODO
+// std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+// "/h264/ch1/main/av_stream";
+ std::string rtsp_url = rtspAddrBuild(ip.c_str(), port, username.c_str(), passwd.c_str(), brand.c_str());
+ if (rtsp_url.empty()) {
+ return false;
+ }
+
+ DBG("rtsp_url:" << rtsp_url);
+ Json::Value json;
+ json["rtsp"] = rtsp_url;
+
+ //鎷兼帴json
+ string str_uuid;
+ uuid_t t_uuid;
+ char str[36];
+ uuid_generate(t_uuid);
+ uuid_unparse(t_uuid, str);
+ str_uuid = str;
+
+ std::string rtmpAddr = appConfig.getStringProperty("srsAddr");
+ std::string publish_basepath = rtmpAddr + "cam" + str_uuid;
+ DBG("publish_basepath:" << publish_basepath);
+ appPref.setStringData("publish.basepath", publish_basepath);
+ appPref.setIntData("pulish.width", 640);
+ appPref.setIntData("pulish.height", 360);
+
+ if (m_rtmp.find(ip) != m_rtmp.end()) {
+ if (m_rtmp[ip].appPC == nullptr) {
+ m_rtmp[ip].userCounter = 0;
+ m_rtmp[ip].appPC = new AppPipeController(0, json);
+ m_rtmp[ip].appPC->start();
+ }
+ m_rtmp[ip].userCounter++;
+
+ } else {
+ m_rtmp[ip].appPC = new AppPipeController(0, json);
+ m_rtmp[ip].appPC->start();
+ m_rtmp[ip].userCounter = 1;
+ }
+
+ DBG("m_rtmp[ip]->start(); ip:" << ip);
+
+ } else if (brand == "dahua") {
+ //rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
+ return false;//TODO
+ } else if (brand == "yushi") {
+// rtsp://admin:admin@192.168.8.8:554/video1
+ bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str());
+ if (!ret) {
+ ERR("getUVDevSerialNumber ERR");
+ return false;
+ }
+
+ port = 554;
+// std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+// "/video1";
+ std::string rtsp_url = rtspAddrBuild(ip.c_str(), port, username.c_str(), passwd.c_str(), brand.c_str());
+ if (rtsp_url.empty()) {
+ return false;
+ }
+ DBG("rtsp_url:" << rtsp_url);
+ Json::Value json;
+ json["rtsp"] = rtsp_url;
+
+ //鎷兼帴json
+ string str_uuid;
+ uuid_t t_uuid;
+ char str[36];
+ uuid_generate(t_uuid);
+ uuid_unparse(t_uuid, str);
+ str_uuid = str;
+
+ std::string rtmpAddr = appConfig.getStringProperty("srsAddr");
+ std::string publish_basepath = rtmpAddr + "cam" + str_uuid;
+ DBG("publish_basepath:" << publish_basepath);
+ appPref.setStringData("publish.basepath", publish_basepath);
+ appPref.setIntData("pulish.width", 640);
+ appPref.setIntData("pulish.height", 360);
+
+ if (m_rtmp.find(ip) != m_rtmp.end()) {
+ if (m_rtmp[ip].appPC == nullptr) {
+ m_rtmp[ip].userCounter = 0;
+ m_rtmp[ip].appPC = new AppPipeController(0, json);
+ m_rtmp[ip].appPC->start();
+ }
+ m_rtmp[ip].userCounter++;
+
+ } else {
+ m_rtmp[ip].appPC = new AppPipeController(0, json);
+ m_rtmp[ip].appPC->start();
+ m_rtmp[ip].userCounter = 1;
+ }
+
+ DBG("m_rtmp[ip]->start(); ip:" << ip);
+
+ } else {
+ DBG("other brand");
+ return false;//TODO
+ }
+
+ return true;
+}
+
+bool devHttpServer_c::cam_connect_video_stop(std::string ip) const {
+
+ DBG("cam_connect_video_stop begin");
+// if (m_rtmp.size() > 0) {
+// auto it = m_rtmp.begin();
+// while (it != m_rtmp.end()) {
+// m_rtmp[it->first]->stop();
+// m_rtmp[it->first]->wait();
+// it++;
+// }
+// }
+ if (m_rtmp.find(ip) != m_rtmp.end()) {
+ if (m_rtmp[ip].appPC == nullptr) {
+ m_rtmp.erase(ip);
+ } else {
+ m_rtmp[ip].userCounter--;
+
+ if (m_rtmp[ip].userCounter == 0) {
+ m_rtmp[ip].appPC->stop();
+ m_rtmp[ip].appPC->wait();
+ m_rtmp.erase(ip);
+ }
+ }
+ }
+ DBG("cam_connect_video_stop end");
+
+
+ return true;
+}
+
+//娴嬭瘯鎽勫儚鏈鸿繛鎺�
+std::string
+devHttpServer_c::chk_cam_connet(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value_reader;
+
+ if (!reader.parse(content, value_reader)) {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ //TODO
+ //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+// std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + "/h264/ch1/main/av_stream";
+ bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \
+ value_reader["str_username"].asString(), value_reader["str_password"].asString(), \
+ value_reader["str_brand"].asString());
+ if (!ret) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp();
+ Json::Value value;
+ value["connect_status"] = "True";
+ value["video_url"] = rtmp_url;
+ std::string out = value.toStyledString();
+
+ return out;
+}
+
+//娴嬭瘯鎽勫儚鏈鸿繛鎺�
+std::string
+devHttpServer_c::chk_cam_disconnet(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value_reader;
+
+ if (!reader.parse(content, value_reader)) {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ //TODO
+ //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+// std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) + "/h264/ch1/main/av_stream";
+ DBG("cam_connect_video_stop begin");
+ bool ret = cam_connect_video_stop(value_reader["str_ip"].asString());
+ if (!ret) {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+ DBG("cam_connect_video_stop end");
+
+ Json::Value value;
+ value["ret_status"] = "ok_ack";
+
+ std::string out = value.toStyledString();
+
+ return out;
+}
+
+//鍒犻櫎纾佺洏闃靛垪鍙婂搴旈�氶亾鍒楄〃
+std::string devHttpServer_c::dev_del(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value_reader;
+
+ int dev_type = db_c.searchDevTypeFromConfigTable();
+ if (DEV_CAMERA == dev_type) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ if (reader.parse(content, value_reader)) {
+ QString dev_id = QString::fromStdString(value_reader["str_storage_dev_id"].asString());
+ int ret = db_c.deleteDeviceTableAndChnAndSdk(dev_id);
+ if (ret) {
+ killVideoAnalysFromHCApp();
+ db_c.deleteLoadFileTablebyDevID(QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+ db_c.deleteCutVideoTablebyDevID(QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+ db_c.deleteSdkHdlTablebyDevID(QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+ int dev_record = db_c.searchDeviceNumber();
+ if (dev_record == 0) {
+ db_c.updateConfigTableByDevType(DEV_NO_TYPE);
+ } else {
+ runAllApp();
+ }
+ return "{\"ret_status\": \"ok_ack\"}";
+ } else {
+ return "err_db";
+ }
+ }
+
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+}
+
+//鍒犻櫎鎽勫儚鏈�
+std::string devHttpServer_c::cam_del(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value_reader;
+
+ int dev_type = db_c.searchDevTypeFromConfigTable();
+ if (DEV_STORAGE == dev_type) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+
+ if (reader.parse(content, value_reader)) {
+ QString cam_id = QString::fromStdString(value_reader["str_cam_dev_id"].asString());
+ int ret = db_c.deleteCamDevandSdkByCamID(cam_id);
+ if (ret) {
+ killVideoAnalysFromHCApp();
+ int dev_record = db_c.searchCamDevNumber();
+ if (dev_record == 0) {
+ db_c.updateConfigTableByDevType(DEV_NO_TYPE);
+ } else {
+ runAllApp();
+ }
+ return "{\"ret_status\": \"ok_ack\"}";
+ } else {
+ return "err_db";
+ }
+ }
+
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+}
+
+//淇敼ip 绔彛绛夐厤缃俊鎭�
+std::string
+devHttpServer_c::server_info_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value;
+ bool ret = false;
+
+ if (reader.parse(content, value)) {
+ Record_Config lRec;
+ lRec.str_alarm_ip = QString::fromStdString(value["alarm_ip"].asString());
+ lRec.n_alarm_port = value["alarm_port"].asInt();
+ lRec.str_web_pic_ip = QString::fromStdString(value["web_pic_ip"].asString());
+ lRec.n_web_pic_port = value["web_pic_port"].asInt();
+ lRec.str_es_pic_ip = QString::fromStdString(value["es_pic_ip"].asString());
+ lRec.n_es_pic_port = value["es_pic_port"].asInt();
+ if ((checkip(lRec.str_alarm_ip.toStdString())) &&
+ (checkip(lRec.str_web_pic_ip.toStdString())) &&
+ (checkip(lRec.str_es_pic_ip.toStdString()))) {
+ ret = db_c.updateConfigTableByServerInfo(lRec);
+
+ //#todo webserver
+ std::string cmd_web =
+ "sed -i '/tracker_server=/d' ./WebFDSClient.conf && sed -i '/\\\"host:port\\\"/atracker_server=" + \
+ value["web_pic_ip"].asString() + ":" + std::to_string(value["web_pic_port"].asInt()) + \
+ "' ./WebFDSClient.conf";//
+ std::cout << "cmd_web:" << cmd_web << std::endl;
+ system(cmd_web.c_str());
+
+ //#todo fastDfsClient
+ //system("sed -i '/tracker_server=/d' ./fastDfsClient.conf && sed -i '/\"host:port\"/atracker_server=192.168.1.188:22122' ./fastDfsClient.conf");
+ std::string cmd_es =
+ "sed -i '/tracker_server=/d' ./fastDfsClient.conf && sed -i '/\\\"host:port\\\"/atracker_server=" + \
+ value["es_pic_ip"].asString() + ":" + std::to_string(value["es_pic_port"].asInt()) + \
+ "' ./fastDfsClient.conf";
+ std::cout << "cmd_es:" << cmd_es << std::endl;
+ system(cmd_es.c_str());
+
+ //#todo config
+ {
+ fdfsClient.rwLock.wrlock();
+ if (fdfsClient.fastFds != nullptr) {
+ delete fdfsClient.fastFds;
+ }
+ fdfsClient.fastFds = new FastFds("./WebFDSClient.conf");
+ fdfsClient.rwLock.unlock();
+ }
+
+ //# http client 127.0.0.1:9999/resetFdfs
+ std::string http_cmd = "http://127.0.0.1:9999/resetFdfs";
+ HttpRequestWithCrul httpRequestWithCrul;
+ std::string response_bak = "";
+ std::string postParams_bak = "";
+ httpRequestWithCrul.curl_post_req("http://127.0.0.1:9999/resetFdfs", postParams_bak, response_bak);
+ }
+ } else {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ if (ret) {
+ return "{\"ret_status\": \"ok_ack\"}";
+ } else {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+//鏌ヨ ip 绔彛绛夐厤缃俊鎭�
+std::string
+devHttpServer_c::server_info_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Value value;
+
+ Record_Config rec = db_c.searchConfigTableWithinServerInfo();
+
+ value["alarm_ip"] = rec.str_alarm_ip.toStdString();
+ value["alarm_port"] = rec.n_alarm_port;
+ value["web_pic_ip"] = rec.str_web_pic_ip.toStdString();
+ value["web_pic_port"] = rec.n_web_pic_port;
+ value["es_pic_ip"] = rec.str_es_pic_ip.toStdString();
+ value["es_pic_port"] = rec.n_es_pic_port;
+
+ std::string out = value.toStyledString();
+
+ return out;
+}
+
+//缂栬緫 瑁佸壀瑙嗛鏃堕暱
+std::string
+devHttpServer_c::cut_dura_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value;
+ bool ret = false;
+
+ if (reader.parse(content, value)) {
+ int cut_max_duration = value["cut_max_duration"].asInt();
+
+ ret = db_c.updateConfigTableByCutDuration(cut_max_duration);
+
+ } else {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ if (ret) {
+ killVideoAnalysFromHCApp();
+ sleep(1);
+ runAllApp();
+ return "{\"ret_status\": \"ok_ack\"}";
+ } else {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+//鏌ヨ 瑁佸壀瑙嗛鏃堕暱
+std::string
+devHttpServer_c::cut_dura_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Value value;
+
+ int cut_max_duration = db_c.searchConfigTableWithinCutDuration();
+
+ value["cut_max_duration"] = cut_max_duration;
+
+ std::string out = value.toStyledString();
+
+ return out;
+}
+
+//璁剧疆鏈満netconfig netconfig_edit
+std::string
+devHttpServer_c::netconfig_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Reader reader;
+ Json::Value value;
+ bool ret = false;
+ unsigned char ip_old[15] = {0};
+ unsigned char netmask_old[15] = {0};
+ unsigned char gateway_old[15] = {0};
+
+ if (reader.parse(content, value)) {
+ std::string ip_addr = value["ipaddr"].asString();
+ std::string netmask = value["netmask"].asString();
+ std::string gateway = value["gateway"].asString();
+
+ //ipaddr
+ std::string net_ifname = appConfig.getStringProperty("netIfName");
+ if (!((GetIpAddress(net_ifname.c_str(), ip_old)) && \
+ (GetMaskAddress(net_ifname.c_str(), netmask_old)) && \
+ (GetGateWay(net_ifname.c_str(), gateway_old)))) {
+// return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ std::string ip_old_temp((char *) ip_old);
+ std::string netmask_old_temp((char *) netmask_old);
+ std::string gateway_old_temp((char *) gateway_old);
+
+ if (!((ip_old_temp == ip_addr) && \
+ (netmask_old_temp == netmask) && \
+ (gateway_old_temp == gateway))) {
+ if (!((checkip(ip_addr)) && (checkMask(netmask)) && (checkip(gateway)))) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ ret = SetIpAddress(net_ifname.c_str(), ip_addr.c_str());
+ if (!ret) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+ ret = SetMaskAddress(net_ifname.c_str(), netmask.c_str());
+ if (!ret) {
+ return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+ ret = SetGateWay(net_ifname.c_str(), gateway_old_temp.c_str(), gateway.c_str());
+ if (!ret) {
+ //return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ //#todo /etc/network/interfaces
+ //system("sed -i '/tracker_server=/d' ./fastDfsClient.conf && sed -i '/\"host:port\"/atracker_server=192.168.1.188:22122' ./fastDfsClient.conf");
+// system("sed -i 's/address .*$/address 192.168.1.111/g' test");
+ std::string cmd_ip =
+ "sed -i 's/address .*$/address " + ip_addr + "/g' /etc/network/interfaces";
+ std::cout << "cmd_ip:" << cmd_ip << std::endl;
+ system(cmd_ip.c_str());
+
+ //淇敼config.json
+ std::string strtmp = appConfig.getStringProperty("erlNode");
+ std::string::size_type pos = strtmp.find_last_of("@");
+ if (pos != std::string::npos) {
+ ++pos;//淇濈暀sep '@'
+ strtmp.replace(pos, strtmp.size() - pos, ip_addr);
+ appConfig.setStringProperty("erlNode", strtmp);
+ }
+
+ strtmp = appConfig.getStringProperty("erlFatherNode");
+ pos = strtmp.find_last_of("@");
+ if (pos != std::string::npos) {
+ ++pos;//淇濈暀sep '@'
+ strtmp.replace(pos, strtmp.size() - pos, ip_addr);
+ appConfig.setStringProperty("erlFatherNode", strtmp);
+ }
+ //ES_IP
+ appConfig.setStringProperty("ES_IP", ip_addr);
+
+ strtmp = appConfig.getStringProperty("srsAddr");
+ strtmp.replace(strtmp.begin() + 7, strtmp.begin() + strtmp.find(":1934/live/"), ip_addr);
+ appConfig.setStringProperty("srsAddr", strtmp);
+ appConfig.save();
+
+ sleep(10);
+ system("reboot");
+ }
+ } else {
+ return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ return "{\"ret_status\": \"ok_ack\"}";
+}
+
+//鏌ヨ 鏈満netconfig netconfig_show
+std::string
+devHttpServer_c::netconfig_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ Json::Value value;
+ unsigned char netmask_old[15] = {0};
+ unsigned char gateway_old[15] = {0};
+ unsigned char ip_old[15] = {0};
+
+ std::string net_ifname = appConfig.getStringProperty("netIfName");
+// if (!((GetIpAddress(net_ifname.c_str(), ip_old)) && \
+// (GetMaskAddress(net_ifname.c_str(), netmask_old)) && \
+// (GetGateWay(net_ifname.c_str(), gateway_old)))) {
+// return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+// }
+ if (GetIpAddress(net_ifname.c_str(), ip_old)) {
+ std::string ip_old_temp((char *) ip_old);
+ value["ipaddr"] = ip_old_temp;
+ } else {
+ value["ipaddr"] = "";
+ }
+
+ if (GetMaskAddress(net_ifname.c_str(), netmask_old)) {
+ std::string netmask_old_temp((char *) netmask_old);
+ value["netmask"] = netmask_old_temp;
+ } else {
+ value["netmask"] = "";
+ }
+
+ if (GetGateWay(net_ifname.c_str(), gateway_old)) {
+ std::string gateway_old_temp((char *) gateway_old);
+ value["gateway"] = gateway_old_temp;
+ } else {
+ value["gateway"] = "";
+ }
+
+ std::string out = value.toStyledString();
+
+ return out;
+}
+
+std::string devHttpServer_c::addNode(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+ Json::Reader reader;
+ Json::Value value;
+ bool ret = false;
+ if (reader.parse(content, value)) {
+
+ //#todo nodeName Automatic generated?
+ //#todo nodes have counter?
+ //#todo nodeName Automatic generated?
+ //#todo devId+num
+ std::string uuid = GetUUId::getUUID();
+
+ unsigned char ip_old[15] = {0};
+ std::string str_netIfName = appConfig.getStringProperty("netIfName");
+ GetIpAddress(str_netIfName.c_str(), ip_old);
+ std::string str_ip((char *) ip_old);
+ std::string nodeName = uuid.append("@" + str_ip);
+
+ std::string cookie = value["cookie"].asString();
+ std::string FatherNodeName = value["fatherNodeName"].asString();
+
+ //#todo ClusterID ClusterName
+ std::string clusterID = value["culID"].asString();
+ clusterID = clusterID.size() > 0 ? clusterID : GetUUId::getUUID();
+ std::string clusterName = value["culName"].asString();
+ std::string devID = value["devID"].asString();
+ std::string devName = value["devName"].asString();
+
+
+ std::string path = std::string("/opt/erlang/").append(nodeName.substr(0, nodeName.find("@")));
+ if (erlangDbTool != nullptr) {
+ //gaunbi node
+ //clear data
+// erlangDbTool.stop();
+ delete erlangDbTool;
+ erlangDbTool = nullptr;
+ }
+
+ if (cookie.size() > 0 && (clusterID.size() > 0 || clusterName.size() > 0)) {
+// erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie);
+ string str_tmp = "DataWebserver";
+ erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie, clusterID, clusterName, str_tmp);
+ bool ret = erlangDbTool->initErlang();
+ FatherNodeName = FatherNodeName.size() > 0 ? FatherNodeName : " ";
+// FatherNodeName = clusterID.size() > 0 ? clusterID : " ";
+ ret = erlangDbTool->startNodeDb(FatherNodeName, devID);
+
+ if (ret) {
+ appConfig.setStringProperty("erlNode", nodeName);
+ appConfig.setStringProperty("erlCookie", cookie);
+ appConfig.setStringProperty("erlPath", path);
+ appConfig.setStringProperty("erlFatherNode", FatherNodeName);
+ appConfig.save();
+// erlangDbTool->findAllNode();
+ //face search server reboot
+ killFaceSearchServerApp();
+ runAllApp();
+// sleep(4);
+ } else {
+ appConfig.setStringProperty("erlNode", "");
+ appConfig.setStringProperty("erlCookie", "");
+ appConfig.setStringProperty("erlPath", "");
+ appConfig.setStringProperty("erlFatherNode", "");
+ appConfig.save();
+ delete erlangDbTool;
+ erlangDbTool = nullptr;
+ }
+
+ std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+ return str_result;
+ } else {
+ std::string str_result = std::string("{\"result\":").append("\"鏁版嵁鏈夎\"}");
+ return str_result;
+ }
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒 \"}");
+ return "";
+ }
+}
+
+std::string devHttpServer_c::removeNode(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ bool ret = false;
+
+ if (erlangDbTool != nullptr) {
+
+ ret = erlangDbTool->removeNode();
+
+ appConfig.setStringProperty("erlNode", "");
+ appConfig.setStringProperty("erlCookie", "");
+ appConfig.setStringProperty("erlPath", "");
+ appConfig.setStringProperty("erlFatherNode", "");
+ appConfig.save();
+ delete erlangDbTool;
+ erlangDbTool = nullptr;
+ std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+ //#todo
+ system("pkill beam.*");
+ return str_result;
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+ return "";
+ }
+}
+
+string devHttpServer_c::searchNode(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+ if (erlangDbTool == nullptr) {
+ ERR("{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+ return "";
+// return "{\"error\":\"erlang is null\"}";
+ }
+// sleep(1);
+ auto resu = erlangDbTool->findAllNode();
+ string json = "";
+ if (resu.size() > 0) {
+ auto t_itor = resu.begin();
+ m_cluster_id = t_itor->second.cluster_id;
+ m_cluster_name = t_itor->second.cluster_name;
+ json.append("{ \"cluster_id\":\"" + t_itor->second.cluster_id
+ + "\",\"cluster_name\":\"" + t_itor->second.cluster_name + "\",\"list\":[");
+ for (auto &item : resu) {
+ string subJson = "{ ";
+ subJson.append("\"uuid\":\"" + item.second.uuid + "\",");
+ subJson.append("\"create_time\":\"" + item.second.create_time + "\",");
+ subJson.append("\"dev_id\":\"" + item.second.device_id + "\",");
+ //#todo
+ auto rec = db_c.searchConfigTableWithinServerInfo();
+ subJson.append("\"dev_name\":\"" + rec.dev_name.toStdString() + "\",");
+
+ string t_nodeId = item.second.node_id;
+ subJson.append(
+ "\"node_ip\":\"" + t_nodeId.substr(t_nodeId.find("@") + 1, t_nodeId.size() - t_nodeId.find("@")) +
+ "\",");
+ subJson.append("\"node_id\":\"" + item.second.node_id + "\"");
+ subJson.append("},");
+ json.append(subJson);
+ }
+ auto str = json.substr(0, json.size() - 1);
+ str.append("]}");
+ DBG(str);
+ return str;
+ } else {
+ ERR("resu is null");
+// response->write(SimpleWeb::StatusCode::err_erlNodeIsNull, "{\"error\":\"err_erlNodeIsNull \"}");
+ return "{}";
+ }
+}
+
+string devHttpServer_c::modifyCluName(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+ return "";
+ return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+// bool ret = false;
+
+ if (reader.parse(content, value)) {
+ std::string cluster_id = value["cluster_id"].asString();
+ std::string cluster_name = value["cluster_name"].asString();
+ bool ret = false;
+ if (cluster_id.size() <= 0 || cluster_name.size() <= 0) {
+ return "{\"error\":\"鍙傛暟閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ ret = erlangDbTool->modifyCluName(cluster_id, cluster_name);
+
+ std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+ return str_result;
+
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒 \"}");
+ return "";
+ return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string devHttpServer_c::createDatabase(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+ return "";
+ return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+// bool ret = false;
+
+ if (reader.parse(content, value)) {
+ std::string TableType = value["TableType"].asString();
+ std::string TableName = value["TableName"].asString();
+ int SyncType = atoi(value["SyncType"].asCString());
+ std::string BwType = value["BwType"].asString();
+ std::string StartTime = value["StartTime"].asString();
+ std::string EndTime = value["EndTime"].asString();
+ bool ret = false;
+ if (SyncType == 1) {
+ //鍚屾搴�
+ ret = erlangDbTool->createDatabase(TableType, TableName, SyncType, BwType, StartTime, EndTime);
+ } else if (SyncType == 0) {
+ TableName.insert(0, "lt_");
+ //鏈湴搴�
+ FieldValues fieldValues;
+ fieldValues.insert(std::make_pair("uuid", GetUUId::getUUID()));
+ fieldValues.insert(std::make_pair("tableName", TableName));
+ fieldValues.insert(std::make_pair("tableDesc", "ceshi"));
+ fieldValues.insert(std::make_pair("tableType", TableType));
+ fieldValues.insert(std::make_pair("bwType", BwType));
+ fieldValues.insert(std::make_pair("startTime", StartTime));
+ fieldValues.insert(std::make_pair("endTime", EndTime));
+ fieldValues.insert(std::make_pair("create_by", "who"));
+ ret = m_SqliteFaceEncap.createTable(TableName, fieldValues);
+ }
+
+ erlangDbTool->sendMessage();
+ std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+ return str_result;
+
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒 \"}");
+ return "";
+ return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string devHttpServer_c::deleteDatabase(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+ return "";
+ return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+// bool ret = false;
+
+ if (reader.parse(content, value)) {
+ std::string uuid = value["uuid"].asString();
+ std::string TableType = value["TableType"].asString();
+ std::string TableName = value["TableName"].asString();
+ int SyncType = atoi(value["SyncType"].asCString());
+
+ bool ret = false;
+ if (SyncType == 1) {
+ //鍚屾搴�
+ ret = erlangDbTool->deleteDatabase(TableType, TableName, SyncType);
+ } else if (SyncType == 0) {
+ //鏈湴搴�
+ if (TableName.find("lt_") != 0) {
+ TableName.insert(0, "lt_");
+ }
+ ret = m_SqliteFaceEncap.deleteTable(TableName);
+ }
+ erlangDbTool->sendMessage();
+ std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+ return str_result;
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒 \"}");
+ return "";
+ return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string devHttpServer_c::findAllDatabase(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+ return "";
+ return "{\"error\":\"erlang is null\"}";
+ }
+
+ auto resDB = erlangDbTool->findAllDatabase();
+ auto si = resDB.size();
+ if (resDB.size() > 0) {
+// auto resType = erlangDbTool->findAllTypeInfo();
+ string json = "[";
+ for (auto &item : resDB) {
+ if (item.second.tableName.find("lt_") == 0) {
+ continue;
+ }
+ string subJson = "{ ";
+ subJson.append("\"uuid\":\"" + item.second.uuid + "\",");
+ subJson.append("\"tableName\":\"" + item.second.tableName + "\",");
+ subJson.append("\"tableType\":\"" + item.second.tableType + "\",");
+// subJson.append("\"bwType\":\"" + resType[item.second.tableName].bwType + "\",");
+ subJson.append("\"bwType\":\"" + item.second.bwType + "\",");
+ //#todo modify
+ subJson.append("\"start_time\":\"" + item.second.startTime + "\",");
+ subJson.append("\"end_time\":\"" + item.second.endTime + "\"");
+ subJson.append("},");
+ json.append(subJson);
+ }
+
+ auto str = json.substr(0, json.size() - 1);
+ if (str.size() <= 1)
+ return "[]";
+ str.append("]");
+ return str;
+ } else {
+// response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"size is 0 \"}");
+// return "";
+ return "[]";
+ }
+}
+
+std::string devHttpServer_c::findLocalDatabase(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+ return "";
+ return "{\"error\":\"erlang is null\"}";
+ }
+ string str_local = "lt_";
+// auto resDB = erlangDbTool->findAllDatabase();
+// auto si = resDB.size();
+
+ auto resDB = m_SqliteFaceEncap.getTableInfos();
+
+ if (resDB.size() > 0) {
+ string json = "[";
+ for (auto &item : resDB) {
+ string subJson = "{ ";
+ subJson.append("\"uuid\":\"" + item.uuid + "\",");
+ subJson.append("\"tableName\":\"" + item.tableName + "\",");
+ subJson.append("\"tableType\":\"" + item.tableType + "\",");
+ subJson.append("\"bwType\":\"" + item.bwType + "\",");
+ subJson.append("\"start_time\":\"" + item.startTime + "\",");
+ subJson.append("\"end_time\":\"" + item.endTime + "\"");
+ subJson.append("},");
+ json.append(subJson);
+ }
+ auto str = json.substr(0, json.size() - 1);
+ if (str.size() <= 1)
+ return "[]";
+ str.append("]");
+ return str;
+ } else {
+// response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"size is 0\"}");
+// return "";
+ return "[]";
+ }
+}
+
+std::string devHttpServer_c::addPerson(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+// DBG("content: " << content);
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+ return "";
+// return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(content, value)) {
+ std::string TableName = value["TableName"].asString();
+ std::string img_url = value["img_url"].asString();
+ auto tests = value["img_base64"].size();
+ auto ret = value["img_base64"].isString();
+
+ std::string img_base64 = value["img_base64"].asString();
+ std::string idcard = value["idcard"].asString();
+ std::string strUUID = value["uuid"].asString();
+
+ cv::Mat image;
+ if (img_url.size() > 0) {
+ auto t_results = m_curlDownloadImg.download_jpeg(const_cast<char *>(img_url.c_str()));
+ cvutil.buffer2CvMat(t_results.buffer, image);
+ } else if (img_base64.size() > 0) {
+ img_url = "http://";
+ auto str_img = base64.Decode(img_base64.c_str(), img_base64.size());
+ std::vector<unsigned char> buffer(str_img.size());
+ memcpy(buffer.data(), str_img.data(), str_img.size());
+ cvutil.buffer2CvMat(buffer, image);
+
+
+ fdfsClient.rwLock.rdlock();
+ if (fdfsClient.fastFds != nullptr) {
+ img_url.append(fdfsClient.fastFds->getIp() + "/");
+ std::string t_strImg = "";
+ if (!fdfsClient.fastFds->uploadFile(buffer, t_strImg, "jpg")) {
+ img_url = "upload image fail";
+ } else {
+ img_url.append(t_strImg);
+ img_url.clear();
+ img_url = t_strImg;
+// img_url.append("/").append(t_strImg);
+ }
+ }
+ fdfsClient.rwLock.unlock();
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"not found img\"}");
+ return "";
+// return "{\"error\":\"not found img\"}";
+ }
+
+ thread::id pid = std::this_thread::get_id();
+ if (m_handleMap[pid] == nullptr) {
+ DBG("pid is " << pid);
+ m_handleMap[pid] = new CasiaFaceWrapperN;
+ }
+ CasiaFaceWrapperN *t_CasiaFaceWapper = m_handleMap[pid];
+
+ std::string feature_base64;
+ FaceImageN faceImage{image.cols, image.rows, image.step, image.data};
+ auto faceResults = t_CasiaFaceWapper->extractFace(faceImage);
+
+ if (faceResults.size() <= 0) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"not found face\"}");
+// string str_path = "./img/";
+// str_path.append(AppUtil::getTimeString() + ".jpg");
+// cv::imwrite(str_path, image);
+ return "";
+// return "{\"error\":\"not found face\"}";
+ }
+
+ for (auto &item : faceResults) {
+ feature_base64 = base64.Encode(item.feature.data(), item.feature.size());
+ }
+ auto size = feature_base64.size();
+// std::string uuid = "";
+ bool ret_addPerson = false;
+
+ if (TableName.find("lt_") == 0) {
+ FieldValues fieldValues;
+ AddFaceData addFaceData;
+ addFaceData.feature.resize(faceResults[0].feature.size());
+ memcpy(addFaceData.feature.data(), faceResults[0].feature.data(), faceResults[0].feature.size());
+
+ //#todo uuid have value is update
+ if (strUUID.size() <= 0) {
+ // get Person id
+
+ strUUID = AppUtil::getPersonId(m_batch, m_SerialNumber);
+ addFaceData.uuid = strUUID;
+ addFaceData.faceUrl = img_url;
+
+ fieldValues.insert(std::make_pair("uuid", strUUID));
+ fieldValues.insert(std::make_pair("idCard", idcard));
+ auto t_id = m_SqliteFaceEncap.addFace(TableName, addFaceData, fieldValues);
+ ret_addPerson = t_id.size() > 0 ? true : false;
+ } else {
+ //#todo update table
+ addFaceData.uuid = strUUID;
+ addFaceData.faceUrl = img_url;
+
+ fieldValues.insert(std::make_pair("uuid", strUUID));
+ fieldValues.insert(std::make_pair("idCard", idcard));
+ m_SqliteFaceEncap.updateFace(TableName, addFaceData, fieldValues);
+ }
+
+ } else {
+ //#todo update data
+ // get Person id
+ strUUID = strUUID.size() > 0 ? strUUID : AppUtil::getPersonId(m_batch, m_SerialNumber);
+ ret_addPerson = erlangDbTool->addPerson(strUUID, TableName, feature_base64, img_url, idcard);
+ }
+
+ if (ret_addPerson && strUUID.size() > 0) {
+ std::string str_result = std::string("{\"uuid\":").append(
+ "\"" + strUUID + "\",\"img_url\":\"" + img_url + "\"}");
+// usleep(100);
+ erlangDbTool->sendMessage();
+ //todo send person to backServer
+ HttpRequestWithCrul m_requestWithCrul;
+
+ std::thread sendPerson([&](std::string parm_uuid, std::string parm_img_url, std::string parm_idcard,
+ std::string parm_fea) {
+ Json::Value perInfos;
+ Json::Value perInfo;
+// #todo get string from config.json file
+// get
+ perInfo["id"] = parm_uuid;
+ perInfo["distributionIds"] = m_cluster_id;
+ perInfo["distributionNames"] = m_cluster_name;
+ auto rec = db_c.searchConfigTableWithinServerInfo();
+ perInfo["deviceId"] = rec.dev_id.toStdString();
+ perInfo["photos"] = parm_img_url;
+// perInfo["featureBase"] = feature_base64;
+ perInfo["featureBase64"] = parm_fea;
+ perInfo["cardId"] = parm_idcard;
+ perInfos.append(perInfo);
+
+ std::string str_serIp = GET_STR_CONFIG("mainServerIp");
+ std::string str_serPort = GET_STR_CONFIG("mainServerPort");
+
+// string sendUrl = "192.168.1.203:3697/addPerson/uploadToTemporary";
+ string sendUrl = str_serIp;
+ sendUrl.append(":").append(str_serPort).append("/addPerson/uploadToTemporary");
+ string postParams = perInfos.toStyledString();
+ string str_addRes;
+
+ m_requestWithCrul.curl_post_req(sendUrl, postParams, str_addRes);
+ }, strUUID, img_url, idcard, feature_base64);
+ sendPerson.detach();
+
+ return str_result;
+ } else {
+ std::string str_result = std::string("{\"error\":\"addPerson error\"}");
+ return str_result;
+ }
+
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+ return "";
+// return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string devHttpServer_c::loadFaceFeaData(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+ return "";
+// return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(content, value)) {
+ std::string TableName = value["TableName"].asString();
+
+
+ if (TableName.find("lt_") == 0) {
+ auto t_resDB = m_SqliteFaceEncap.getFacesFromTable(TableName);
+ auto t_faceInfoCache = m_SqliteFaceEncap.getFaceInfoFromTable(TableName);
+
+ auto &resDB = *t_resDB;
+ if (resDB.size() > 0) {
+ string json = "[";
+ for (auto &item : resDB) {
+ string subJson = "{ ";
+ subJson.append("\"uuid\":\"" + item.second.uuid + "\",");
+ subJson.append("\"tableName\":\"" + TableName + "\",");
+ subJson.append("\"idcard\":\"" + t_faceInfoCache[item.second.uuid].idCard + "\",");
+ subJson.append("\"imgUrl\":\"" + item.second.faceurl + "\"");
+// subJson.append("\"feature\":\"" + item.second.feature + "\",");
+ //#todo modifysvn upda svn comm
+// subJson.append("\"start_time\":\"" + item.second.create_time + "\",");
+// subJson.append("\"end_time\":\"" + item.second.update_time + "\"");
+ subJson.append("},");
+ json.append(subJson);
+ }
+ auto str = json.substr(0, json.size() - 1);
+ str.append("]");
+ return str;
+ }
+ } else {
+ auto resDB = erlangDbTool->loadFaceFeaData2(TableName);
+ if (resDB.size() > 0) {
+ string json = "[";
+ for (auto &item : resDB) {
+ string subJson = "{ ";
+ subJson.append("\"uuid\":\"" + item.second.id + "\",");
+ subJson.append("\"tableName\":\"" + TableName + "\",");
+ subJson.append("\"idcard\":\"" + item.second.idcard + "\",");
+ subJson.append("\"imgUrl\":\"" + item.second.img + "\"");
+// subJson.append("\"feature\":\"" + item.second.feature + "\",");
+ //#todo modifysvn upda svn comm
+// subJson.append("\"start_time\":\"" + item.second.create_time + "\",");
+// subJson.append("\"end_time\":\"" + item.second.update_time + "\"");
+ subJson.append("},");
+ json.append(subJson);
+ }
+ auto str = json.substr(0, json.size() - 1);
+ str.append("]");
+ return str;
+ }
+ }
+
+
+// response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"size is 0\"}");
+// return "";
+ return "[]";
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+ return "";
+// return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string devHttpServer_c::updateDatabase(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+ return "";
+ return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+// bool ret = false;
+
+ if (reader.parse(content, value)) {
+ std::string Uuid = value["uuid"].asString();
+ std::string TableType = value["TableType"].asString();
+ std::string TableName = value["TableName"].asString();
+ int SyncType = atoi(value["SyncType"].asCString());
+ std::string BwType = value["BwType"].asString();
+ std::string StartTime = value["StartTime"].asString();
+ std::string EndTime = value["EndTime"].asString();
+
+ bool ret = false;
+ if (SyncType == 1) {
+ //鍚屾搴�
+ ret = erlangDbTool->updateDatabase(Uuid, TableType, TableName, SyncType, BwType, StartTime, EndTime);
+ } else if (SyncType == 0) {
+ //鏈湴搴�
+ //#鏇存柊搴曞簱绠$悊琛�
+ FieldValues fieldValues;
+ fieldValues.insert(std::make_pair("uuid", Uuid));
+ if (TableName.find("lt_") != 0) {
+ TableName.insert(0, "lt_");
+ }
+ fieldValues.insert(std::make_pair("tableName", TableName));
+// fieldValues.insert(std::make_pair("tableDesc", "ceshi2"));
+ fieldValues.insert(std::make_pair("tableType", TableType));
+ fieldValues.insert(std::make_pair("bwType", BwType));
+ fieldValues.insert(std::make_pair("startTime", StartTime));
+ fieldValues.insert(std::make_pair("endTime", EndTime));
+// fieldValues.insert(std::make_pair("create_by", "who"));
+ ret = m_SqliteFaceEncap.updateTable("sys_o_tables", fieldValues);
+ }
+
+ erlangDbTool->sendMessage();
+ std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+ return str_result;
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+ return "";
+ return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string devHttpServer_c::delPerson(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+ return "";
+// return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(content, value)) {
+ std::string TableName = value["TableName"].asString();
+ std::string strUUID = value["uuid"].asString();
+
+ bool ret = false;
+ if (TableName.find("lt_") == 0) {
+ ret = m_SqliteFaceEncap.deleteFace(TableName, strUUID);
+ } else {
+ ret = erlangDbTool->delPerson(strUUID, TableName);
+ }
+
+ erlangDbTool->sendMessage();
+ std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+ return str_result;
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+ return "";
+// return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string devHttpServer_c::getAlarmImageFromVideoFile(std::string ip, unsigned int port, std::string content,
+ PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+ Json::Reader reader;
+ Json::Value value;
+ try {
+ if (reader.parse(content, value)) {
+ std::string videoPath;
+ std::string devId = value["videoNum"].asString();
+ std::string picDate = value["picDate"].asString();
+
+ //std::string path_uuid = videoPath;//value["path_uuid"].asString();
+ qint64 sub ;
+ std::string path = getVideoPathByTime(picDate,devId,sub);
+
+ if (path.empty()) {
+ ERR("{\"error\":\"not find path\"}");
+ return "{\"error\":\"鏈煡鍒拌棰戣矾寰刓"}";
+ }
+ DBG("path="<<path);
+ videoPath.clear();
+ videoPath = path;
+
+
+
+ // sub = (dt.toMSecsSinceEpoch() - dtFile.toMSecsSinceEpoch());
+ //#yanchi buchong
+ // sub = sub > 3000 ? sub - 3000 : 0000;
+ //shijian yuejie buchang
+ // sub = sub < 0 ? 0000 : sub;
+ int haomiao = sub % 1000;
+ sub /= 1000;
+ int m = sub;
+ int shi, fen, miao;
+ char ch_time[128];
+ if (m / 3600 < 24) {
+ shi = m / 3600;
+ fen = m / 60 % 60;
+ miao = m % 60;
+ sprintf(ch_time, "%02d:%02d:%02d.%03d", shi, fen, miao, haomiao);
+ cout << ch_time << endl;
+ } else printf("杈撳叆鏁板�煎お澶�");
+
+ std::string str_time(ch_time);
+ //#todo 鎸夌収鏃堕棿鍛藉悕
+ std::string str_imgName(AppUtil::getTimeString() + ".jpg");// = "test.jpg";
+
+ std::string cmd_getVideoFileTime(
+ " ffmpeg -i '" + videoPath + "' 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");
+
+ std::string str_tmpTime = AppUtil::getCmdResult(cmd_getVideoFileTime);
+
+ if (str_time > str_tmpTime) {
+ ERR("{\"error\":\"Time error\"}" << str_time << " str_tmpTime " << str_tmpTime);
+ str_time = str_tmpTime.size() > 0 ? str_tmpTime.substr(0, str_tmpTime.rfind(".")) : str_time;
+// return "{\"error\":\"Time error\"}";
+ }
+
+ std::string cmd("ffmpeg -ss " + str_time + " -i '" + videoPath + "' -y '" + str_imgName + "'");
+ DBG(cmd);
+ system(cmd.c_str());
+
+ cv::Mat img = cv::imread(str_imgName);
+ if (img.empty()) {
+ ERR("{\"error\":\"Video File error\"}");
+ return "{\"error\":\"瑙嗛鏂囦欢閿欒\"}";
+ }
+ std::vector<unsigned char> buffer;
+ CvUtil::cvMat2Buffer(img, buffer);
+ std::string img_url = "http://";
+ fdfsClient.rwLock.rdlock();
+ if (fdfsClient.fastFds != nullptr) {
+ img_url.append(fdfsClient.fastFds->getIp() + "/");
+ std::string t_strImg = "";
+ if (!fdfsClient.fastFds->uploadFile(buffer, t_strImg, "jpg")) {
+ img_url = "upload image fail";
+ } else {
+ std::string str_tmp_cmd("rm -f '" + str_imgName + "'");
+ system(str_tmp_cmd.c_str());
+ img_url.append(t_strImg);
+ img_url.clear();
+ img_url = t_strImg;
+// img_url.append("/").append(t_strImg);
+ }
+ }
+ fdfsClient.rwLock.unlock();
+ std::string result("{\"img_url\":\"" + img_url + "\"}");
+// cout << result << endl;
+ return result;
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+ return "";
+// return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+ }
+ catch (std::exception ex) {
+ std::string message = "{\"error\":\"寮傚父閿欒锛�";
+ message.append(const_cast<char *>(ex.what())).append("\"}");
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, message);
+ return "";
+ }
+}
+
+std::string
+devHttpServer_c::getRecordVideoPath(std::string ip, unsigned int port, std::string content, PResponse &response) {
+
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(content, value))
+ {
+ std::string devId = value["videoNum"].asString();
+ std::string picDate = value["picDate"].asString();
+ qint64 sub;
+ std::string path=getVideoPathByTime(picDate,devId,sub);
+ if (path.empty())
+ {
+
+ return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+ else
+ {
+ std::string result = "{\"file_path\":\"" + path + "\"}";
+ return result;
+ }
+ }
+ else
+ {
+ return "{\"ret_status\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string devHttpServer_c::findDevId(std::string ip, unsigned int port, std::string content, PResponse &response) {
+
+ Record_Config rc = db_c.searchConfigTableWithinServerInfo();
+
+ Json::Value value;
+ value["dev_id"] = rc.dev_id.toStdString();
+ value["dev_name"] = rc.dev_name.toStdString();
+
+ return value.toStyledString();
+
+}
+
+std::string devHttpServer_c::editDevName(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(content, value)) {
+ std::string dev_name = value["dev_name"].asString();
+ if (dev_name.empty()) {
+ return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ if (db_c.updateDevNameConfigTable(QString::fromStdString(dev_name))) {
+ return "{\"ret_status\": \"ok_ack\"}";
+ } else {
+ return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+ }
+
+ } else {
+ return "{\"ret_status\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+}
+
+
+std::string devHttpServer_c::editDevId(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(content, value)) {
+ //DSVAD010120181114
+ int dev_batch = value["dev_batch"].asInt();
+ int dev_sequence = value["dev_sequence"].asInt();
+ if (createDevId(dev_batch, dev_sequence)) {
+ return "{\"ret_status\": \"ok_ack\"}";
+ } else {
+ return "{\"ret_status\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+ } else {
+ return "{\"ret_status\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+
+}
+
+bool devHttpServer_c::createDevId(const int &dev_batch, const int &dev_sequence) {
+ // std::string dev_id="DSVAD";
+ char buf[12] = {0};
+ char dev_id[17] = {0};
+
+ time_t cur = time(nullptr);
+
+ strftime(buf, 12, "%Y%m%d", localtime(&cur));
+ sprintf(dev_id, "%s%02d%02d%s", "DSVAD", dev_batch, dev_sequence, buf);
+
+
+ if (strlen(dev_id) != 17) {
+ return false;
+ }
+
+ appConfig.setStringProperty("DEV_ID", dev_id);
+ appConfig.save();
+ //std::cout<<dev_id<<std::endl;
+ return true;
+}
+
+ std::string devHttpServer_c::getVideoPathByTime(const std::string& time,const std::string& camId,qint64& sub)
+ {
+ std::string t_FilePath = appConfig.getStringProperty("cutPath");
+
+ bool find=false;;
+ if (t_FilePath.back() != '/') {
+ t_FilePath.push_back('/');
+ }
+
+ QDateTime dt = QDateTime::fromString(QString::fromStdString(time), "yyyy-MM-dd hh:mm:ss:zzz");
+
+ std::string t_strTime=dt.toString("yyyyMMddhh").toStdString();
+ //# ./camIndex/YYYYMM/DD/
+ t_FilePath.append(camId + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/");
+ //YYYYMMDDHH
+ t_FilePath.append(t_strTime.substr(0,10) + "/");
+
+
+ qint64 t=dt.toMSecsSinceEpoch();
+ std::vector<std::string> vec=forEachFile(t_FilePath);
+ std::sort(vec.begin(),vec.end());
+ DBG("t_FilePath" << t_FilePath);
+ DBG("vec.size()" << vec.size());
+ int size=vec.size();
+ for(int i=0;i<size;++i)
+ {
+ qint64 t1=QDateTime::fromString(QString::fromStdString(vec[i]), "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch();
+ if(i+1<size)
+ {
+ qint64 t2=QDateTime::fromString(QString::fromStdString(vec[i+1]), "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch();
+ if(t>=t1 && t<t2)
+ {
+ DBG("path="<<vec[i]);
+ t_FilePath+=vec[i]+".mp4";
+ sub=t-t1;
+ find=true;
+ break;
+ }
+
+ }
+ else
+ {
+ sub=t-t1;
+ if(t>=t1 && sub<=3000)
+ {
+ DBG("path="<<vec[i]);
+ t_FilePath+=vec[i]+".mp4";
+ find=true;
+ break;
+ }
+ }
+
+
+ }
+ DBG("sub="<<sub);
+ if(!find)
+ {
+ t_FilePath="";
+ }
+ return t_FilePath;
+
+ }
+ std::vector<std::string> devHttpServer_c::forEachFile(const std::string &dir_name)
+ {
+ std::vector<std::string> v;
+ auto dir = opendir(dir_name.data());
+ struct dirent *ent;
+ int len = 0;
+ if (dir) {
+ while ((ent = readdir(dir)) != NULL) {
+ std::string filename = std::string(ent->d_name);
+ std::string temp;
+ if(filename!="."&&filename!="..")
+ {
+
+ temp = filename.substr(0, filename.rfind('.'));
+ v.push_back(temp);
+ }
+
+ }
+ closedir(dir);
+ }
+ return v;
+ }
+
+std::string devHttpServer_c::addPersons(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+// DBG("content: " << content);
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+ return "";
+// return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(content, value)) {
+ string strUUID = value["uuid"].asString();
+ auto perlists = value["personList"];
+
+ std::vector<SyncDB::AddPersonInfo> tmpPers;
+// int lsize = perlists.size();
+ for (auto &item : perlists) {
+ SyncDB::AddPersonInfo addPersonInfo;
+ addPersonInfo.personid = item["personId"].asString();
+ addPersonInfo.idcard = item["idcard"].asString();
+ addPersonInfo.personPic = item["personPic"].asString();
+ addPersonInfo.feature = item["feature"].asString();
+ tmpPers.push_back(addPersonInfo);
+ }
+
+ auto ret_addPersons = erlangDbTool->addPersons(strUUID, tmpPers);
+
+ std::string str_result;
+ if (ret_addPersons.size() > 0) {
+ str_result = "[";
+ for (auto &item : ret_addPersons) {
+ string subJson = "{ ";
+ subJson.append("\"personId\":\"" + item.PersonId + "\",");
+ subJson.append("\"result\":\"" + item.Result + "\",");
+ subJson.append("\"msg\":\"" + item.msg + "\"");
+ subJson.append("},");
+ str_result.append(subJson);
+ }
+ auto str = str_result.substr(0, str_result.size() - 1);
+ str_result.swap(str.append("]"));
+ erlangDbTool->sendMessage();
+ } else {
+ str_result = "[]";
+ }
+ return str_result;
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+ return "";
+// return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string
+devHttpServer_c::personIsExists(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+ return "";
+// return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(content, value)) {
+ std::string str_res;
+ try {
+ string strUUID = value["personId"].asString();
+ //#todo 杩炴帴澶辫触鐨勫垽鏂�.
+ auto ret_resPerEits = erlangDbTool->personIsExistOnClu(strUUID);
+ std::string str_result = "[";
+ if (ret_resPerEits.size() > 0) {
+ for (auto &item : ret_resPerEits) {
+ // tableName ,uuid 鏃犳浜烘槸id涓簄ull
+ if (item.uuid == "null") {
+ continue;
+ }
+ string subJson = "{ ";
+ subJson.append("\"tableName\":\"" + item.tableName + "\",");
+ subJson.append("\"uuid\":\"" + item.tableUuid + "\"");
+ subJson.append("},");
+ str_result.append(subJson);
+ }
+ auto str = str_result.substr(0, str_result.size() - 1);
+ if (str.size() <= 1) {
+ str_result = "[]";
+ } else {
+ str_result.swap(str.append("]"));
+ }
+ } else {
+ str_result = "[]";
+ }
+ if (str_result == "[]") {
+ str_res = "{\"result\":\"0\",\"msg\":\"success\",\"existDataBase\":[]}";
+ } else {
+ str_res = "{\"result\":\"1\",\"msg\":\"success\",\"existDataBase\":";
+ str_res.append(str_result).append("}");
+ }
+ } catch (std::exception ex) {
+ str_res = "{\"result\":\"-1\",\"msg\":\"error\",\"existDataBase\":[]}";
+ ERR(ex.what());
+ }
+ return str_res;
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+ return "";
+// return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
+
+std::string
+devHttpServer_c::updatePersonByOldId(std::string ip, unsigned int port, std::string content, PResponse &response) {
+ DBG("ip:" << ip << "; port:" << port);
+ DBG("content: " << content);
+ if (erlangDbTool == nullptr) {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+ return "";
+// return "{\"error\":\"erlang is null\"}";
+ }
+
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(content, value)) {
+ std::string str_res;
+ try {
+ string newPerId = value["newPerId"].asString();
+ string idcard = value["idcard"].asString();
+ string perPicUrl = value["perPicUrl"].asString();
+ string oldId = value["oldId"].asString();
+ string perFea = value["feature"].asString();
+ //#todo 杩炴帴澶辫触鐨勫垽鏂�.
+ auto ret_resUpdPersRet = erlangDbTool->singlePersonUpdate(newPerId, oldId, idcard, perPicUrl, perFea);
+ std::string str_result = "[";
+ int notexist_conNum = 0;
+ if (ret_resUpdPersRet.size() > 0) {
+ for (auto &item : ret_resUpdPersRet) {
+ // tableName ,uuid 鏃犳浜烘槸id涓簄ull
+ if (item.result == "true") {
+ continue;
+ }
+ if (item.result == "notexist") {
+ notexist_conNum++;
+ continue;
+ }
+
+ string subJson = "{ ";
+ subJson.append("\"tableName\":\"" + item.tableName + "\",");
+ subJson.append("\"uuid\":\"" + item.tableUuid + "\"");
+ subJson.append("},");
+ str_result.append(subJson);
+ }
+ auto str = str_result.substr(0, str_result.size() - 1);
+ if (str.size() <= 1) {
+ str_result = "[]";
+ } else {
+ str_result.swap(str.append("]"));
+ }
+ } else {
+ str_result = "error";
+ }
+ if (str_result == "[]") {
+ if (notexist_conNum == ret_resUpdPersRet.size()) {
+ str_res = "{\"result\":\"0\",\"msg\":\"success\",\"existDataBase\":[]}";
+ } else {
+ str_res = "{\"result\":\"1\",\"msg\":\"success\",\"existDataBase\":[]}";
+ }
+ } else if (str_result == "error") {
+ str_res = "{\"result\":\"-1\",\"msg\":\"error\",\"existDataBase\":[]}";
+ } else {
+ str_res = "{\"result\":\"-1\",\"msg\":\"success\",\"existDataBase\":";
+ str_res.append(str_result).append("}");
+ }
+ } catch (std::exception ex) {
+ str_res = "{\"result\":\"-1\",\"msg\":\"error\",\"existDataBase\":[]}";
+ ERR(ex.what());
+ }
+ return str_res;
+ } else {
+ response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+ return "";
+// return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+ }
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.h b/QiaoJiaSystem/DataManagerServer/http_configserver.h
new file mode 100644
index 0000000..09f8e27
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.h
@@ -0,0 +1,178 @@
+#ifndef HTTP_CONFIGSERVER_H
+#define HTTP_CONFIGSERVER_H
+
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+
+#include "opencv2/opencv.hpp"
+#include <string>
+#include "HttpSrvRetRecieve.hpp"
+#include "LDBTool.h"
+#include <ErlangDbTool.h>
+#include <basic/util/BASE64/Base64.h>
+#include <basic/util/opencv/CvUtil.h>
+#include <sys/sem.h>
+
+#include <LocalDBTool/SqliteFaceEncap.h>
+#include <CurlDownloadImg.hpp>
+#include <basic/util/fastdfs/FastFds.hpp>
+#include <atomic>
+#include "../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h"
+#include "AppPipeController.h"
+
+typedef std::shared_ptr<HttpServer::Response> PResponse;
+
+
+struct srsPipeController_s {
+ AppPipeController *appPC;
+ std::atomic<int> userCounter;
+};
+
+class devHttpServer_c {
+public:
+ devHttpServer_c();
+
+ devHttpServer_c(std::string test);
+
+ devHttpServer_c(std::string ip, int port, int pthNum);
+
+ ~devHttpServer_c();
+
+//private:
+ std::string dev_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string dev_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string devchn_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string devchn_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string dev_search_chns(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string chk_chn_connet(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string cam_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string cam_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string chk_cam_connet(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string chk_cam_disconnet(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string dev_del(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string cam_del(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string server_info_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string server_info_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string cut_dura_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string cut_dura_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string netconfig_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string netconfig_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+
+ std::string addNode(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string searchNode(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string modifyCluName(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string removeNode(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string createDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string deleteDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string updateDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string findAllDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string findLocalDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string addPerson(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string addPersons(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string personIsExists(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string updatePersonByOldId(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+
+ std::string delPerson(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string loadFaceFeaData(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string getAlarmImageFromVideoFile(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string getRecordVideoPath(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string findDevId(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string editDevName(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+ std::string editDevId(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+private:
+ void init(void);
+
+private:
+
+ HttpSrvRetRecieve _HttpSrvRetRecieve;
+ LDBTool db_c;
+ std::string m_cluster_id;
+ std::string m_cluster_name;
+ std::map<std::string, srsPipeController_s> m_rtmp;
+
+
+ ErlangTool::ErlangDbTool *erlangDbTool;
+ SqliteFaceEncap m_SqliteFaceEncap;
+
+// ErlangDbTool *erlangDbTool;
+ std::map<std::thread::id, CasiaFaceWrapperN *> m_handleMap;
+ CvUtil cvutil;
+ Base64 base64;
+ std::string m_batch;
+ std::string m_SerialNumber;
+
+ CurlDownloadImg m_curlDownloadImg;
+
+ FastFdsWithLock fdfsClient;
+
+ bool getDevSerialNumber(const char *ip, const int port, const char *username, \
+ const char *passwd, const char *brand, unsigned char *serialNumber) const;
+
+ bool getDevChnList(const char *ip, const int port, const char *username, const char *passwd, \
+ const char *brand, std::vector<int> &lvecUsefulChans) const;
+
+ bool loadCurrentVideo(const char *ip, const int port, const char *username, const char *passwd, \
+ const char *brand, const int chn, std::string &videopath) const;
+
+ bool cam_connect_video_start(std::string ip, int port, std::string username, std::string passwd, \
+ std::string brand) const;
+
+ bool cam_connect_video_stop(std::string ip) const;
+
+ void runAllApp() const;
+
+ void killFaceSearchServerApp() const;
+
+ void killVideoAnalysFromHCApp() const;
+
+ bool getUVDevSerialNumber(const char *ip, const char *username, const char *passwd,
+ unsigned char *serialNumber = NULL) const;
+
+ bool getHKDevSerialNumber(const char *ip, const int port, const char *username, const char *passwd,
+ unsigned char *serialNumber = NULL) const;
+ bool createDevId(const int& dev_batch, const int& dev_sequence) ;
+
+ std::string getVideoPathByTime(const std::string& time,const std::string& camId,qint64& sub);
+
+ std::vector<std::string> forEachFile(const std::string &dir_name);
+};
+
+#endif
diff --git a/QiaoJiaSystem/DataManagerServer/http_examples.cpp b/QiaoJiaSystem/DataManagerServer/http_examples.cpp
new file mode 100644
index 0000000..58e3a82
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/http_examples.cpp
@@ -0,0 +1,264 @@
+#include "client_http.hpp"
+#include "server_http.hpp"
+
+// Added for the json-example
+#define BOOST_SPIRIT_THREADSAFE
+
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+
+// Added for the default_resource example
+#include <algorithm>
+#include <boost/filesystem.hpp>
+#include <fstream>
+#include <vector>
+
+#ifdef HAVE_OPENSSL
+
+#include "crypto.hpp"
+
+#endif
+
+using namespace std;
+// Added for the json-example:
+using namespace boost::property_tree;
+
+using HttpServer = SimpleWeb::Server<SimpleWeb::HTTP>;
+using HttpClient = SimpleWeb::Client<SimpleWeb::HTTP>;
+
+int main() {
+ // HTTP-server at port 8080 using 1 thread
+ // Unless you do more heavy non-threaded processing in the resources,
+ // 1 thread is usually faster than several threads
+ HttpServer server;
+ server.config.thread_pool_size
+ server.config.address = "192.168.188.128";
+ server.config.port = 8090;
+
+ // Add resources using path-regex and method-string, and an anonymous function
+ // POST-example for the path /string, responds the posted string
+ server.resource["^/string$"]["POST"] = [](shared_ptr<HttpServer::Response> response,
+ shared_ptr<HttpServer::Request> request) {
+ // Retrieve string:
+ auto content = request->content.string();
+ // request->content.string() is a convenience function for:
+ // stringstream ss;
+ // ss << request->content.rdbuf();
+ // auto content=ss.str();
+
+ *response << "HTTP/1.1 200 OK\r\nContent-Length: " << content.length() << "\r\n\r\n"
+ << content;
+
+
+ // Alternatively, use one of the convenience functions, for instance:
+ // response->write(content);
+ };
+
+ // POST-example for the path /json, responds firstName+" "+lastName from the posted json
+ // Responds with an appropriate error message if the posted json is not valid, or if firstName or lastName is missing
+ // Example posted json:
+ // {
+ // "firstName": "John",
+ // "lastName": "Smith",
+ // "age": 25
+ // }
+ server.resource["^/json$"]["POST"] = [](shared_ptr<HttpServer::Response> response,
+ shared_ptr<HttpServer::Request> request) {
+ try {
+ ptree pt;
+ read_json(request->content, pt);
+
+ auto name = pt.get<string>("firstName") + " " + pt.get<string>("lastName");
+
+// write_json()
+// write_json(*response,pt);
+
+// *response << "HTTP/1.1 200 OK\r\n"
+// << "Content-Length: " << name.length() << "\r\n\r\n"
+// << name;
+ string res = "{\"aaaa\": \"cccc\",\"dasfd\": \"asdfasdf\",\"age\": 123212}";
+ *response << "HTTP/1.1 200 OK\r\n"
+ << "Content-Length: " << res.size() << "\r\n\r\n"<<res;
+// write_json(*response,pt);
+ }
+ catch (const exception &e) {
+ *response << "HTTP/1.1 400 Bad Request\r\nContent-Length: " << strlen(e.what()) << "\r\n\r\n"
+ << e.what();
+ }
+
+
+ // Alternatively, using a convenience function:
+ // try {
+ // ptree pt;
+ // read_json(request->content, pt);
+
+ // auto name=pt.get<string>("firstName")+" "+pt.get<string>("lastName");
+ // response->write(name);
+ // }
+ // catch(const exception &e) {
+ // response->write(SimpleWeb::StatusCode::client_error_bad_request, e.what());
+ // }
+ };
+
+ // GET-example for the path /info
+ // Responds with request-information
+ server.resource["^/info$"]["GET"] = [](shared_ptr<HttpServer::Response> response,
+ shared_ptr<HttpServer::Request> request) {
+ stringstream stream;
+ stream << "<h1>Request from " << request->remote_endpoint_address() << ":" << request->remote_endpoint_port()
+ << "</h1>";
+
+ stream << request->method << " " << request->path << " HTTP/" << request->http_version;
+
+ stream << "<h2>Query Fields</h2>";
+ auto query_fields = request->parse_query_string();
+ for (auto &field : query_fields)
+ stream << field.first << ": " << field.second << "<br>";
+
+ stream << "<h2>Header Fields</h2>";
+ for (auto &field : request->header)
+ stream << field.first << ": " << field.second << "<br>";
+
+ response->write(stream);
+ };
+
+ // GET-example for the path /match/[number], responds with the matched string in path (number)
+ // For instance a request GET /match/123 will receive: 123
+ server.resource["^/match/([0-9]+)$"]["GET"] = [](shared_ptr<HttpServer::Response> response,
+ shared_ptr<HttpServer::Request> request) {
+ response->write(request->path_match[1]);
+ };
+
+ // GET-example simulating heavy work in a separate thread
+ server.resource["^/work$"]["GET"] = [](shared_ptr<HttpServer::Response> response,
+ shared_ptr<HttpServer::Request> /*request*/) {
+ thread work_thread([response] {
+ this_thread::sleep_for(chrono::seconds(5));
+ response->write("Work done");
+ });
+ work_thread.detach();
+ };
+
+ // Default GET-example. If no other matches, this anonymous function will be called.
+ // Will respond with content in the web/-directory, and its subdirectories.
+ // Default file: index.html
+ // Can for instance be used to retrieve an HTML 5 client that uses REST-resources on this server
+ server.default_resource["GET"] = [](shared_ptr<HttpServer::Response> response,
+ shared_ptr<HttpServer::Request> request) {
+ try {
+ auto web_root_path = boost::filesystem::canonical("web");
+ auto path = boost::filesystem::canonical(web_root_path / request->path);
+ // Check if path is within web_root_path
+ if (distance(web_root_path.begin(), web_root_path.end()) > distance(path.begin(), path.end()) ||
+ !equal(web_root_path.begin(), web_root_path.end(), path.begin()))
+ throw invalid_argument("path must be within root path");
+ if (boost::filesystem::is_directory(path))
+ path /= "index.html";
+
+ SimpleWeb::CaseInsensitiveMultimap header;
+
+ // Uncomment the following line to enable Cache-Control
+ // header.emplace("Cache-Control", "max-age=86400");
+
+#ifdef HAVE_OPENSSL
+// Uncomment the following lines to enable ETag
+// {
+// ifstream ifs(path.string(), ifstream::in | ios::binary);
+// if(ifs) {
+// auto hash = SimpleWeb::Crypto::to_hex_string(SimpleWeb::Crypto::md5(ifs));
+// header.emplace("ETag", "\"" + hash + "\"");
+// auto it = request->header.find("If-None-Match");
+// if(it != request->header.end()) {
+// if(!it->second.empty() && it->second.compare(1, hash.size(), hash) == 0) {
+// response->write(SimpleWeb::StatusCode::redirection_not_modified, header);
+// return;
+// }
+// }
+// }
+// else
+// throw invalid_argument("could not read file");
+// }
+#endif
+
+ auto ifs = make_shared<ifstream>();
+ ifs->open(path.string(), ifstream::in | ios::binary | ios::ate);
+
+ if (*ifs) {
+ auto length = ifs->tellg();
+ ifs->seekg(0, ios::beg);
+
+ header.emplace("Content-Length", to_string(length));
+ response->write(header);
+
+ // Trick to define a recursive function within this scope (for example purposes)
+ class FileServer {
+ public:
+ static void
+ read_and_send(const shared_ptr<HttpServer::Response> &response, const shared_ptr<ifstream> &ifs) {
+ // Read and send 128 KB at a time
+ static vector<char> buffer(131072); // Safe when server is running on one thread
+ streamsize read_length;
+ if ((read_length = ifs->read(&buffer[0], static_cast<streamsize>(buffer.size())).gcount()) >
+ 0) {
+ response->write(&buffer[0], read_length);
+ if (read_length == static_cast<streamsize>(buffer.size())) {
+ response->send([response, ifs](const SimpleWeb::error_code &ec) {
+ if (!ec)
+ read_and_send(response, ifs);
+ else
+ cerr << "Connection interrupted" << endl;
+ });
+ }
+ }
+ }
+ };
+ FileServer::read_and_send(response, ifs);
+ } else
+ throw invalid_argument("could not read file");
+ }
+ catch (const exception &e) {
+ response->write(SimpleWeb::StatusCode::client_error_bad_request,
+ "Could not open path " + request->path + ": " + e.what());
+ }
+ };
+
+ server.on_error = [](shared_ptr<HttpServer::Request> /*request*/, const SimpleWeb::error_code & /*ec*/) {
+ // Handle errors here
+ // Note that connection timeouts will also call this handle with ec set to SimpleWeb::errc::operation_canceled
+ };
+
+ thread server_thread([&server]() {
+ // Start server
+ server.start();
+ });
+
+ // Wait for server to start so that the client can connect
+ this_thread::sleep_for(chrono::seconds(1));
+
+ // Client examples
+ HttpClient client("192.168.188.128:8090");
+
+ string json_string = "{\"firstName\": \"John\",\"lastName\": \"Smith\",\"age\": 25}";
+
+ // Synchronous request examples
+ try {
+ auto r1 = client.request("GET", "/match/123");
+ cout << r1->content.rdbuf() << endl; // Alternatively, use the convenience function r1->content.string()
+
+ auto r2 = client.request("POST", "/string", json_string);
+ cout << r2->content.rdbuf() << endl;
+ }
+ catch (const SimpleWeb::system_error &e) {
+ cerr << "Client request error: " << e.what() << endl;
+ }
+
+ // Asynchronous request example
+ client.request("POST", "/json", json_string,
+ [](shared_ptr<HttpClient::Response> response, const SimpleWeb::error_code &ec) {
+ if (!ec)
+ cout << response->content.rdbuf() << endl;
+ });
+ client.io_service->run();
+
+ server_thread.join();
+}
diff --git a/QiaoJiaSystem/DataManagerServer/main.cpp b/QiaoJiaSystem/DataManagerServer/main.cpp
new file mode 100644
index 0000000..62ffa51
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/main.cpp
@@ -0,0 +1,31 @@
+#include <iostream>
+
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppConfig.h>
+#include "http_configserver.h"
+#include "net_config/net_config.h"
+//#include "../segvCatch.h"
+using namespace std;
+using namespace cv;
+
+int main(int argc, char **argv) {
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+
+// unsigned char gateway_addr[15] = {0};
+// SetIpAddress("enp1s0", "192.168.1.181");
+// SetMaskAddress("enp1s0", "255.255.255.0");
+// GetGateWay("enp1s0", gateway_addr);
+// SetGateWay("enp1s0", (char *)gateway_addr, "192.168.1.1");
+
+ appPref.setLongData("gpu.index", 0);//gpu
+ appPref.setLongData("thread.max", 20);//sdk
+ int port = appConfig.getIntProperty("webPort");
+ devHttpServer_c _devHttpServer("0.0.0.0", port, 20);//webserver thread
+
+ cout << "Hello World!" << endl;
+ return 0;
+}
+
+
+//erl -name sub1@192.168.1.164 -setcookie abc -mnesia dir '"/opt/erlang/sub1"'
+//erl -name sub2@192.168.1.116 -setcookie abc -mnesia dir '"/opt/erlang/sub2"' -detached -noshell
\ No newline at end of file
diff --git a/QiaoJiaSystem/DataManagerServer/net_config/net_config.cpp b/QiaoJiaSystem/DataManagerServer/net_config/net_config.cpp
new file mode 100644
index 0000000..ab336be
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/net_config/net_config.cpp
@@ -0,0 +1,969 @@
+/******************************************************************************
+*
+*
+*******************************************************************************
+* File name: net.c
+* Purpose:
+* Author: Felix(HuangFei)
+* Version: v01.00
+* Compiler: arm-linux-gcc
+* Created on: 2014-11-28
+*******************************************************************************
+* Note:
+* Revision history:
+* Created by HuangFei 2014-11-28
+******************************************************************************/
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <ctype.h>
+
+#include <linux/sockios.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <net/if_arp.h>
+#include <unistd.h>
+#include <net/if.h>
+#include <net/route.h>
+
+#include <string.h>
+#include <ifaddrs.h>
+
+#include "net_config.h"
+#include <errno.h>
+
+#define TRUE 1
+#define FALSE 0
+#define MAC_ADDRESS_LEN 6
+#define PATH_PROCNET_ROUTE "/proc/net/route"
+#define IFACE_NAME_LENGTH IF_NAMESIZE
+
+#include <string>
+#include <regex>
+bool checkip(std::string ip)
+{
+ std::regex rx2("^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$");
+ if( !regex_match(ip.cbegin(), ip.cend(), rx2) ) {
+ return false;
+ }
+ return true;
+}
+
+bool checkMask(std::string mask)
+{
+ std::regex rx2("^(254|252|248|240|224|192|128|0)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)$");
+ if( !regex_match(mask.cbegin(), mask.cend(), rx2)) {
+ return false;
+ }
+ return true;
+}
+
+/**********************************************************************
+ * Function: SetMacAddress
+ * Description: 璁剧疆mac鍦板潃
+ * Input: pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛宲MacAddress锛歮ac鍦板潃棣栧湴鍧�
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool SetMacAddress(char *pInterface,char *pMacAddress)
+{
+ struct ifreq ifr;
+ struct sockaddr *hwaddr;
+ unsigned char *hwptr;
+ int sockfd;
+ int i;
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+ if((pInterface == NULL)||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h'))
+ {
+ printf("input inteface error!\n");
+ return FALSE;
+ }
+ if(pMacAddress == NULL)
+ {
+ printf("input mac address error\n");
+ return FALSE;
+ }
+
+ sockfd= socket(AF_INET,SOCK_DGRAM,0);
+ if (sockfd<0)
+ {
+ printf("Can't creat socket \r\n");
+ }
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+
+ /*璇诲嚭socket鐨勪俊鎭�*/
+ if (0 > ioctl(sockfd, SIOCGIFFLAGS, &ifr))
+ {
+ printf("close the ethx:unknown interface\r\n");
+ }
+ ifr.ifr_flags &= ~IFF_UP;
+ /*灏嗕俊鎭啓鍒皊ocket涓紝浠庤�屽叧闂璭th0*/
+ if (0 > ioctl(sockfd, SIOCSIFFLAGS, &ifr))
+ {
+ printf("Can't close the ethx \r\n");
+ return FALSE;
+ }
+
+ /*---------------------------------------------------------------------*/
+ /* set the interface eth0's MAC address */
+ /*---------------------------------------------------------------------*/
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+ hwaddr=(struct sockaddr *)&ifr.ifr_hwaddr;
+
+ /*ARPHRD_ETHER锛�1锛屾爣璇嗘帴鏀剁殑ARP涓轰互澶綉鏍煎紡*/
+ hwaddr->sa_family = ARPHRD_ETHER;
+ hwptr=(unsigned char*)hwaddr->sa_data;
+
+ for(i=0;i<6;i++)
+ *hwptr++ = (unsigned char)pMacAddress[i];
+
+ if (0 > ioctl(sockfd, SIOCSIFHWADDR, &ifr))
+ {
+ printf("Can't set the MAC address\r\n");
+ }
+
+ /*---------------------------------------------------------------------*/
+ /* open the interface eth0 */
+ /*---------------------------------------------------------------------*/
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+ if (0 > ioctl(sockfd,SIOCGIFFLAGS, &ifr))
+ {
+ printf("open the ethx:unknown interface\r\n");
+ }
+ ifr.ifr_flags |= (IFF_UP | IFF_RUNNING);
+ if (0 > ioctl(sockfd, SIOCSIFFLAGS, &ifr))
+ {
+ printf("Can't open the ethx\r\n");
+ }
+
+ close(sockfd);
+
+ return TRUE;
+}
+
+
+/**********************************************************************
+ * Function: SetIpAddress
+ * Description: 璁剧疆ip鍦板潃
+ * Input: pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孖pAddress锛歩p鍦板潃鐨�
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool SetIpAddress(char *pInterface,const char* IpAddress)
+{
+
+ struct ifreq ifr;
+ struct sockaddr_in *sinaddr;
+ int sockfd;
+
+
+ if((pInterface == NULL)/*||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h')*/)
+ {
+ printf("input inteface error!\n");
+ return FALSE;
+ }
+ if(IpAddress == NULL)
+ {
+ printf("input ip address error\n");
+ return FALSE;
+ }
+
+ sockfd= socket(AF_INET,SOCK_DGRAM,0);
+ if (sockfd<0)
+ {
+ printf("Can't creat socket \r\n");
+ }
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+ sinaddr = (struct sockaddr_in *)&ifr.ifr_addr;
+ sinaddr->sin_family = AF_INET;
+// sinaddr->sin_addr.s_addr = inet_aton(IpAddress);
+ if(inet_aton(IpAddress, &(sinaddr->sin_addr)) < 0)
+ {
+ printf("input ip address error\n");
+ return FALSE;
+ }
+
+ if (ioctl(sockfd, SIOCSIFADDR, &ifr) < 0)
+ {
+ printf("Can't set ip address\r\n");
+ return FALSE;
+ }
+
+ close(sockfd);
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * Function: SetMaskAddress
+ * Description: 璁剧疆瀛愮綉鎺╃爜
+ * Input: pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孖pMask锛氬瓙缃戞帺鐮�
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool SetMaskAddress(char *pInterface,const char* IpMask)
+{
+ struct ifreq ifr;
+ struct sockaddr_in *sinaddr;
+ int sockfd;
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+ if((pInterface == NULL)/*||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h')*/)
+ {
+ printf("input inteface error!\n");
+ return FALSE;
+ }
+ if(IpMask == NULL)
+ {
+ printf("input mask address error\n");
+ return FALSE;
+ }
+
+
+ sockfd= socket(AF_INET,SOCK_DGRAM,0);
+ if (sockfd<0)
+ {
+ printf("Can't creat socket \r\n");
+ }
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+ sinaddr = (struct sockaddr_in *)&ifr.ifr_netmask;
+ sinaddr->sin_family = AF_INET;
+// sinaddr->sin_addr.s_addr = IpMask;
+ if(inet_aton(IpMask, &(sinaddr->sin_addr)) < 0)
+ {
+ printf("input ip address error\n");
+ return FALSE;
+ }
+
+ if (0 > ioctl(sockfd, SIOCSIFNETMASK, &ifr))
+ {
+ printf("Can't set subnet netmask\r\n");
+ }
+
+ close(sockfd);
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * Function: DelGateWay
+ * Description: 鍒犻櫎鎸囧畾鐨勭綉鍏�
+ * Input: pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孌elGateWay锛氱綉鍏�
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool DelGateWay(char *pInterface,unsigned int DelGateWay)
+{
+
+ struct sockaddr_in *sinaddr;
+ struct rtentry rt;
+ struct sockaddr rtsockaddr;
+ int sockfd;
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+ if((pInterface == NULL)||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h'))
+ {
+ printf("input inteface error!\n");
+ return FALSE;
+ }
+ if(DelGateWay == 0)
+ {
+ printf("input GateWay error!\n");
+ return FALSE;
+ }
+
+ sockfd= socket(AF_INET,SOCK_DGRAM,0);
+ if (sockfd<0)
+ {
+ printf("Can't creat socket \r\n");
+ }
+
+
+ /* Clean out the RTREQ structure. */
+ memset((char *) &rt, 0, sizeof(struct rtentry));
+ memset((char *)&rtsockaddr,0,sizeof(struct sockaddr));
+ sinaddr = (struct sockaddr_in *)&rtsockaddr;
+ sinaddr->sin_family = AF_INET;
+
+ /*INADDR_ANY灏辨槸鎸囧畾鍦板潃涓�0.0.0.0鐨勫湴鍧�,杩欎釜鍦板潃浜嬪疄涓婅〃绀轰笉纭畾鍦板潃,鎴栤�滄墍鏈夊湴鍧�鈥濄�佲�滀换鎰忓湴鍧�鈥�*/
+ sinaddr->sin_addr.s_addr = INADDR_ANY;
+
+ /*set the destination address to '0.0.0.0'*/
+ rt.rt_dst = rtsockaddr;
+
+ /*set the netmask to '0.0.0.0'*/
+ rt.rt_genmask = rtsockaddr;
+
+ /* Fill in the other fields. */
+ rt.rt_flags = (RTF_UP|RTF_GATEWAY);
+ rt.rt_metric = 1;
+ rt.rt_dev = pInterface;
+
+ /*delete the current default gateway*/
+ sinaddr->sin_addr.s_addr = DelGateWay;
+ rt.rt_gateway = rtsockaddr;
+
+
+ if (0 > ioctl(sockfd, SIOCDELRT, &rt))
+ {
+ printf("Can't delete the current gateway\r\n");
+ }
+
+ close(sockfd);
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * Function: AddGateWay
+ * Description: 澧炲姞鎸囧畾鐨勭綉鍏�
+ * Input: pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孨ewGateWay锛氱綉鍏�
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool AddGateWay(char *pInterface,unsigned int NewGateWay)
+{
+ struct sockaddr_in *sinaddr;
+ struct rtentry rt;
+ struct sockaddr rtsockaddr;
+ int sockfd;
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+ if((pInterface == NULL)||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h'))
+ {
+ printf("input inteface error!\n");
+ return FALSE;
+ }
+ if(NewGateWay == 0)
+ {
+ printf("input GateWay error!\n");
+ return FALSE;
+ }
+
+ sockfd= socket(AF_INET,SOCK_DGRAM,0);
+ if (sockfd<0)
+ {
+ printf("Can't creat socket \r\n");
+ }
+
+
+ /* Clean out the RTREQ structure. */
+ memset((char *) &rt, 0, sizeof(struct rtentry));
+ memset((char *)&rtsockaddr,0,sizeof(struct sockaddr));
+ sinaddr = (struct sockaddr_in *)&rtsockaddr;
+ sinaddr->sin_family = AF_INET;
+
+ /*INADDR_ANY灏辨槸鎸囧畾鍦板潃涓�0.0.0.0鐨勫湴鍧�,杩欎釜鍦板潃浜嬪疄涓婅〃绀轰笉纭畾鍦板潃,鎴栤�滄墍鏈夊湴鍧�鈥濄�佲�滀换鎰忓湴鍧�鈥�*/
+ sinaddr->sin_addr.s_addr = INADDR_ANY;
+
+ /*set the destination address to '0.0.0.0'*/
+ rt.rt_dst = rtsockaddr;
+
+ /*set the netmask to '0.0.0.0'*/
+ rt.rt_genmask = rtsockaddr;
+
+ /* Fill in the other fields. */
+ rt.rt_flags = (RTF_UP|RTF_GATEWAY);
+ rt.rt_metric = 1;
+ rt.rt_dev = pInterface;
+
+ /*set the new default gateway*/
+ sinaddr->sin_addr.s_addr = NewGateWay;
+ rt.rt_gateway =rtsockaddr;
+
+ if (0 > ioctl(sockfd, SIOCADDRT, &rt))
+ {
+ printf("Can't set the new default gateway\r\n");
+ }
+
+ close(sockfd);
+
+ return TRUE;
+
+}
+
+/**********************************************************************
+ * Function: SetGateWay
+ * Description: 璁剧疆缃戝叧锛屽厛鍒犻櫎宸茬粡鏈夌殑锛屽啀娣诲姞鏂扮殑
+ * Input: pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孌elGateWay锛氬垹闄ょ殑缃戝叧锛�
+ NewGateWay锛� 鏂版坊鍔犵殑缃戝叧
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool SetGateWay(char *pInterface,const char* DelGateWay,const char* NewGateWay)
+{
+
+ struct sockaddr_in *sinaddr;
+ struct rtentry rt;
+ struct sockaddr rtsockaddr;
+ int sockfd;
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+ if((pInterface == NULL)/*||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h')*/)
+ {
+ printf("input inteface error!\n");
+ return FALSE;
+ }
+ if((DelGateWay == NULL) && (NewGateWay == NULL))
+ {
+ printf("input GateWay error!\n");
+ return FALSE;
+ }
+
+ sockfd= socket(AF_INET,SOCK_DGRAM,0);
+ if (sockfd<0)
+ {
+ printf("Can't creat socket \r\n");
+ }
+
+
+ /* Clean out the RTREQ structure. */
+ memset((char *) &rt, 0, sizeof(struct rtentry));
+ memset((char *)&rtsockaddr,0,sizeof(struct sockaddr));
+ sinaddr = (struct sockaddr_in *)&rtsockaddr;
+ sinaddr->sin_family = AF_INET;
+
+ /*INADDR_ANY灏辨槸鎸囧畾鍦板潃涓�0.0.0.0鐨勫湴鍧�,杩欎釜鍦板潃浜嬪疄涓婅〃绀轰笉纭畾鍦板潃,鎴栤�滄墍鏈夊湴鍧�鈥濄�佲�滀换鎰忓湴鍧�鈥�*/
+ sinaddr->sin_addr.s_addr = INADDR_ANY;
+
+ /*set the destination address to '0.0.0.0'*/
+ rt.rt_dst = rtsockaddr;
+
+ /*set the netmask to '0.0.0.0'*/
+ rt.rt_genmask = rtsockaddr;
+
+ /* Fill in the other fields. */
+ rt.rt_flags = (RTF_UP|RTF_GATEWAY);
+ rt.rt_metric = 1;
+ rt.rt_dev = pInterface;
+
+ /*delete the current default gateway*/
+// sinaddr->sin_addr.s_addr = DelGateWay;
+ if(inet_aton(DelGateWay, &(sinaddr->sin_addr)) < 0)
+ {
+ printf("input ip address error\n");
+ return FALSE;
+ }
+ rt.rt_gateway = rtsockaddr;
+
+
+ if (0 > ioctl(sockfd, SIOCDELRT, &rt))
+ {
+ printf("Can't delete the current default gateway\r\n");
+ }
+
+ /*set the new default gateway*/
+// sinaddr->sin_addr.s_addr = NewGateWay;
+ if(inet_aton(NewGateWay, &(sinaddr->sin_addr)) < 0)
+ {
+ printf("input ip address error\n");
+ return FALSE;
+ }
+ rt.rt_gateway =rtsockaddr;
+
+ if (0 > ioctl(sockfd, SIOCADDRT, &rt))
+ {
+ printf("Can't set the new default gateway\r\n");
+ }
+
+ close(sockfd);
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * Function: GetMacAddress
+ * Description: 鑾峰緱鎸囧畾缃戝彛鐨勭墿鐞哅AC鍦拌川
+ * Input: ifaceName 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛宧wAddr锛氬緱鍒扮殑mac鍦板潃
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool GetMacAddress (char* ifaceName, unsigned char* hwAddr)
+{
+ int ret;
+ int sockfd;
+ struct ifreq ifr;
+ unsigned char temp_mac[6] = {0};
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+// if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+// {
+// printf("input inteface error!\n");
+// return FALSE;
+// }
+
+ sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(sockfd < 0)
+ {
+ printf("Could not open test socket");
+ return FALSE;
+ }
+
+ memset(&ifr, 0, sizeof(ifr));
+
+ strncpy(ifr.ifr_name, ifaceName, IFACE_NAME_LENGTH);
+
+ if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) < 0)
+ {
+ printf("failed to request hardware address for %s", ifaceName);
+ close(sockfd);
+ return FALSE;
+ }
+
+ int af = ifr.ifr_hwaddr.sa_family;
+ //int af = ifr.ifr_addr.sa_family;
+
+ memcpy(temp_mac, ifr.ifr_hwaddr.sa_data, MAC_ADDRESS_LEN);
+ sprintf((char *)hwAddr,"%02x:%02x:%02x:%02x:%02x:%02x", \
+ temp_mac[0], temp_mac[1], temp_mac[2], temp_mac[3], temp_mac[4], temp_mac[5]);
+ //memcpy(hwAddr, ifr.ifr_addr.sa_data, hwAddrSize);
+
+ return TRUE;
+
+}
+
+/**********************************************************************
+ * Function: GetIpAddress
+ * Description: 鑾峰緱鎸囧畾绔彛鐨刬p鍦板潃
+ * Input: ifaceName 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孖pAddress锛氬緱鍒扮殑ip鍦板潃
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool GetIpAddress(char* ifaceName,unsigned char *IpAddress)
+{
+ struct ifaddrs *ifaddr, *ifa;
+ struct ifreq ifr;
+ struct sockaddr_in *sinaddr;
+ int sockfd;
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+// if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+// {
+// printf("input inteface error!\n");
+// return FALSE;
+// }
+
+ if(getifaddrs(&ifaddr) == -1)
+ {
+ printf("Could not get interface list");
+ freeifaddrs(ifaddr);
+ return FALSE;
+ }
+
+ sockfd= socket(AF_INET,SOCK_DGRAM,0);
+ if (sockfd<0)
+ {
+ printf("Can't creat socket \r\n");
+ return FALSE;
+ }
+
+ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
+ {
+ if(!strcmp(ifaceName, ifa->ifa_name) && (ifa->ifa_addr->sa_family == AF_INET))
+ {
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)-1);
+ if (0 > ioctl(sockfd, SIOCGIFADDR, &ifr))
+ {
+ printf("Can't get ip address\r\n");
+ return FALSE;
+ }
+ sinaddr = (struct sockaddr_in *)&ifr.ifr_addr;
+ strcpy((char *)IpAddress,inet_ntoa(sinaddr->sin_addr));
+ freeifaddrs(ifaddr);
+ close(sockfd);
+ return TRUE;
+
+ }
+
+ }
+
+ printf("input interface no found\n");
+
+ freeifaddrs(ifaddr);
+
+ return FALSE;
+}
+
+/**********************************************************************
+ * Function: GetMaskAddress
+ * Description: 鑾峰緱鎸囧畾绔彛鐨勫瓙缃戞帺鐮�
+ * Input: pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孧askAddress锛氬緱鍒扮殑瀛愮綉鎺╃爜
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool GetMaskAddress(char* ifaceName,unsigned char *MaskAddress)
+{
+ struct ifaddrs *ifaddr, *ifa;
+ struct ifreq ifr;
+ struct sockaddr_in *sinaddr;
+ int sockfd;
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+// if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+// {
+// printf("input inteface error!\n");
+// return FALSE;
+// }
+
+ if(getifaddrs(&ifaddr) == -1)
+ {
+ printf("Could not get interface list");
+ freeifaddrs(ifaddr);
+ return FALSE;
+ }
+
+ sockfd= socket(AF_INET,SOCK_DGRAM,0);
+ if (sockfd<0)
+ {
+ printf("Can't creat socket \r\n");
+ return FALSE;
+ }
+
+
+ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
+ {
+ if(!strcmp(ifaceName, ifa->ifa_name) && (ifa->ifa_addr->sa_family == AF_INET))
+ {
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)-1);
+ if (0 > ioctl(sockfd, SIOCGIFNETMASK, &ifr))
+ {
+ printf("Can't get ip address\r\n");
+ return FALSE;
+ }
+ sinaddr = (struct sockaddr_in *)&ifr.ifr_netmask;
+// *MaskAddress = sinaddr->sin_addr.s_addr;
+ strcpy((char *)MaskAddress,inet_ntoa(sinaddr->sin_addr));
+ freeifaddrs(ifaddr);
+ close(sockfd);
+ return TRUE;
+ }
+ }
+
+ printf("input interface no found\n");
+ freeifaddrs(ifaddr);
+
+ return FALSE;
+}
+
+/**********************************************************************
+ * Function: GetAddress
+ * Description: 鑾峰緱鎸囧畾缃戝彛鐨剆ockdaddr鍦板潃
+ * Input: ifaceName 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛宎ddr锛氬湴鍧�
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool GetAddress(char* ifaceName,struct sockaddr* addr)
+{
+ struct ifaddrs *ifaddr, *ifa;
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+// if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+// {
+// printf("input inteface error!\n");
+// return FALSE;
+// }
+
+ if(getifaddrs(&ifaddr) == -1)
+ {
+ printf("Could not get interface list");
+ freeifaddrs(ifaddr);
+ return FALSE;
+ }
+
+ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
+ {
+
+ if(!strcmp(ifaceName, ifa->ifa_name) && (ifa->ifa_addr->sa_family == AF_INET))
+ {
+ memcpy(addr, ifa->ifa_addr, sizeof(struct sockaddr));
+ freeifaddrs(ifaddr);
+ return TRUE;
+
+ }
+
+ }
+
+ printf("input interface no found\n");
+ freeifaddrs(ifaddr);
+ return FALSE;
+}
+
+
+/**********************************************************************
+ * Function: GetGateWay
+ * Description: 寰楀埌榛樿缃戝叧
+ * Input: pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛宲GateWay锛氬緱鍒扮殑缃戝叧
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool GetGateWay(char *pInterface,unsigned char *pGateWay)
+{
+ short i = 0;
+ char buff[1024], iface[16];
+ char gate_addr[128], net_addr[128];
+ char mask_addr[128];
+ int num, iflags, metric, refcnt, use, mss, window, irtt;
+
+ char *sp , *bp;
+ unsigned int val=0;
+
+ /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+// if((pInterface == NULL)||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h'))
+// {
+// printf("input inteface error!\n");
+// return FALSE;
+// }
+ if(pGateWay == NULL)
+ {
+ printf("input mac address error\n");
+ return FALSE;
+ }
+
+ FILE *fp = fopen(PATH_PROCNET_ROUTE, "r");
+
+ while (fgets(buff, 1023, fp))
+ {
+ num = sscanf(buff, "%16s %128s %128s %X %d %d %d %128s %d %d %d\n",
+ iface, net_addr, gate_addr,
+ &iflags, &refcnt, &use, &metric, mask_addr,
+ &mss, &window, &irtt);
+ if (num < 10 || !(iflags & RTF_UP))
+ continue;
+ if(strncmp(iface,pInterface,4)!=0)
+ continue;
+ if(strncmp(net_addr,"00000000",8)!=0)
+ continue;
+ if(strncmp(mask_addr,"00000000",8)!=0)
+ continue;
+ bp = (char *) &val;
+
+ sp = gate_addr;
+ for (i = 0; i < 4; i++)
+ {
+ *sp = toupper(*sp);
+ if ((*sp >= 'A') && (*sp <= 'F'))
+ bp[i] |= (int) (*sp - 'A') + 10;
+ else if ((*sp >= '0') && (*sp <= '9'))
+ bp[i] |= (int) (*sp - '0');
+ else
+ {
+ printf("Can't convert the gateway string to integer.\n\r");
+ fclose(fp);
+ return 0;
+ }
+ bp[i] <<= 4;
+ sp++;
+ *sp = toupper(*sp);
+
+ if ((*sp >= 'A') && (*sp <= 'F'))
+ bp[i] |= (int) (*sp - 'A') + 10;
+ else if ((*sp >= '0') && (*sp <= '9'))
+ bp[i] |= (int) (*sp - '0');
+ else
+ {
+ printf("Can't convert the gateway string to integer.\n");
+ fclose(fp);
+ return 0;
+ }
+ sp++;
+ }
+ }
+
+ if(val == 0)
+ {
+ printf("Don't find default gateway = %d\n",val);
+ fclose(fp);
+ return FALSE;
+ }
+ else
+ {
+// *pGateWay = htonl(val);
+ sprintf((char *)pGateWay,"%d.%d.%d.%d", (val>>24)&0xFF, (val>>16)&0xFF, (val>>8)&0xFF,val&0xFF);
+ }
+
+
+ fclose(fp);
+ return TRUE;
+}
+
+
+/**********************************************************************
+ * Function: SetSock_reUse
+ * Description: 璁剧疆缃戠粶濂楁帴瀛楅噸澶嶄娇鐢�
+ * Input: sockfd锛氱綉缁滃鎺ュ瓧
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool SetSock_reUse(int sockfd)
+{
+ int reuse = 1;
+ if(-1 == setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(int)))
+ {
+ printf("setsockopt fail!\n");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * Function: SetSock_NoCheck
+ * Description: 璁剧疆濂楁帴瀛楁暟鎹寘涓嶆娴�
+ * Input: sockfd锛氱綉缁滃鎺ュ瓧
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool SetSock_NoCheck(int sockfd)
+{
+ int nocheck = 1;
+ if(0 != setsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, &nocheck, sizeof(int)))
+ {
+ printf("setsockopt NO_CHECK error!\n");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * Function: SetMutiCastLoop
+ * Description: 璁剧疆鍥炵幆澶氭挱
+ * Input: sockfd锛歴ocket濂楁帴瀛楋紝val锛�0 鍏抽棴锛�1 鎵撳紑
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool SetMutiCastLoop(int sockfd,int val)
+{
+ if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &val, sizeof(int))< 0)
+ {
+ printf("failed to set multicast LOOP value \n");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * Function: SetMutiCastTTl
+ * Description: 璁剧疆澶氭挱鍦板潃缁勬暟鎹寘鐨勭敓瀛樻椂闂�
+ * Input: sockfd锛歴ocket濂楁帴瀛楋紝ttl锛岀敓瀛樻椂闂�
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool SetMutiCastTTl(int sockfd,int ttl)
+{
+ if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl))< 0)
+ {
+ printf("failed to set multicast TTL value \n");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool BindSockDevice(unsigned char*ifaceNmae,int sockfd)
+{
+ struct ifreq ifreg;
+ strncpy(ifreg.ifr_name, (const char*)ifaceNmae,IFNAMSIZ);
+ if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE,(char *)&ifreg, sizeof(ifreg)) < 0)
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * Function: AddIpAddr_ToMultiCast
+ * Description: 灏嗘寚瀹歩p鍦板潃娣诲姞鍏ュ鎾粍
+ * Input: sockfd锛歴ocket濂楁帴瀛楋紝ip锛歩p鍦板潃锛宮ulti_ip锛氬鎾湴鍧�锛宼tl锛氱敓瀛樻椂闂�
+ * Return: 鎴愬姛 1锛屽け璐� 0
+ * Others:
+**********************************************************************/
+bool AddIpAddr_ToMultiCast(int sockfd,unsigned int ip,unsigned int multi_ip,int ttl)
+{
+ struct ip_mreq imr;
+
+ imr.imr_multiaddr.s_addr = multi_ip;
+ imr.imr_interface.s_addr = ip;
+
+ if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_IF, &imr.imr_interface.s_addr, sizeof(struct in_addr)) < 0)
+ {
+ printf("failed to set multicast send interface\n");
+ return FALSE;
+ }
+
+ if(setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imr, sizeof(imr))< 0)
+ {
+ printf("failed to add multicast member\n");
+ return FALSE;
+ }
+ if(SetMutiCastTTl(sockfd,ttl) == FALSE)
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**********************************************************************
+ * Function: DisplayInterfaceStatus
+ * Description: 鏄剧ず褰撳墠鎺ュ彛鐘舵�佷俊鎭�
+ * Input: ifaceName 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0
+ * Return: void
+ * Others:
+**********************************************************************/
+void DisplayInterfaceStatus(char* ifaceName)
+{
+ int sockfd;
+ struct ifreq ifr;
+ struct ifaddrs *ifaddr, *ifa;
+ unsigned int flags;
+
+
+ if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+ {
+ printf("input inteface error!\n");
+ return;
+ }
+
+ if(getifaddrs(&ifaddr) == -1)
+ {
+ printf("Could not get interface list");
+ freeifaddrs(ifaddr);
+ return;
+ }
+
+ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
+ {
+
+ if(!strcmp(ifaceName, ifa->ifa_name))
+ {
+ flags = ifa->ifa_flags;
+ freeifaddrs(ifaddr);
+ }
+
+ }
+ if(flags & IFF_UP)
+ {
+ printf("Interface %s is up \n",ifaceName);
+ }
+ if(flags & IFF_RUNNING)
+ {
+ printf("Interface %s is running ",ifaceName);
+ }
+
+}
+
+
diff --git a/QiaoJiaSystem/DataManagerServer/net_config/net_config.h b/QiaoJiaSystem/DataManagerServer/net_config/net_config.h
new file mode 100644
index 0000000..8449997
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/net_config/net_config.h
@@ -0,0 +1,61 @@
+/******************************************************************************
+*
+*
+*******************************************************************************
+* File name: net.h
+* Purpose:
+* Author: Felix(HuangFei)
+* Version: v01.00
+* Compiler: arm-linux-gcc
+* Created on: 2014-11-28
+*******************************************************************************
+* Note:
+* Revision history:
+* Created by HuangFei 2014-11-28
+******************************************************************************/
+
+#ifndef __NET_CONFIG_H__
+#define __NET_CONFIG_H__
+#include <string>
+
+#define NET_IFNAME "eth0"
+
+bool checkip(std::string ip);
+
+bool checkMask(std::string mask);
+
+bool SetMacAddress(char *pInterface,char *pMacAddress);
+
+bool SetIpAddress(char *pInterface,const char* IpAddress);
+
+bool SetMaskAddress(char *pInterface,const char* IpMask);
+
+bool DelGateWay(char *pInterface,unsigned int DelGateWay);
+
+bool AddGateWay(char *pInterface,unsigned int NewGateWay);
+
+bool SetGateWay(char *pInterface,const char* DelGateWay,const char* NewGateWay);
+
+bool GetMacAddress (char* ifaceName, unsigned char* hwAddr);
+
+bool GetIpAddress(char* ifaceName,unsigned char *IpAddress);
+
+bool GetMaskAddress(char* ifaceName,unsigned char *MaskAddress);
+
+bool GetGateWay(char *pInterface,unsigned char *pGateWay);
+
+bool SetSock_reUse(int sockfd);
+
+bool SetSock_NoCheck(int sockfd);
+
+bool SetMutiCastLoop(int sockfd,int val);
+
+bool SetMutiCastTTl(int sockfd,int ttl);
+
+bool AddIpAddr_ToMultiCast(int sockfd,unsigned int ip,unsigned int multi_ip,int ttl);
+
+bool BindSockDevice(unsigned char*ifaceNmae,int sockfd);
+
+void DisplayInterfaceStatus(char* ifaceName);
+
+#endif/*__NET_CONFIG_H__*/
diff --git "a/QiaoJiaSystem/DataManagerServer/web-server\346\216\245\345\217\243.txt" "b/QiaoJiaSystem/DataManagerServer/web-server\346\216\245\345\217\243.txt"
new file mode 100644
index 0000000..99682e8
--- /dev/null
+++ "b/QiaoJiaSystem/DataManagerServer/web-server\346\216\245\345\217\243.txt"
@@ -0,0 +1,605 @@
+鏍囧噯杩斿洖鍊硷細
+{"ret_status": "鍐呭鏈夎锛岃妫�鏌ワ紒"}锛氬唴瀹归敊璇�
+{"ret_status": "浼犺緭閿欒锛岃妫�鏌ワ紒"}锛歫son鏍煎紡閿欒
+{"ret_status": "ok_ack"}锛氭搷浣滄垚鍔�
+
+
+
+
+璁惧缂栬緫 dev_edit
+涓嬪彂锛�
+{
+ "n_duration" : 2,
+ "n_port" : 8000,
+ "str_addr" : "鏈涗含sohoT3",
+ "str_brand" : "haikang",
+ "str_dev_name" : "鏈涗含soho娴峰悍纾佺洏闃靛垪1",
+ "str_ip" : "192.168.1.4",
+ "str_latitude" : "116.45755",
+ "str_longitude" : "39.994445",
+ "str_password" : "basic123",
+ "str_reserved" : "",
+ "str_storage_dev_id" : "DS-7808N-SN0820161208AARR691369356WCVU",
+ "str_username" : "admin",
+}
+杩斿洖锛�
+{
+ "str_storage_dev_id" : "DS-7808N-SN0820161208AARR691369356WCVU"
+}
+
+
+璁惧鏌ヨ dev_show
+涓嬪彂锛氭棤
+杩斿洖锛氬涓嬶細
+[
+ {
+ "n_duration" : 1,
+ "n_port" : 8080,
+ "str_addr" : "鏈涗含soho澶у帵",
+ "str_brand" : "haikang",
+ "str_dev_name" : "鏈涗含soho娴峰悍纾佺洏闃靛垪",
+ "str_ip" : "192.168.1.181",
+ "str_latitude" : "116.457092",
+ "str_longitude" : "39.994827",
+ "str_password" : "123456",
+ "str_reserved" : "",
+ "str_storage_dev_id" : "haikang:12:34:56:78:90:ab",
+ "str_username" : "admin",
+ "tim_start_time" : "2018-08-28 00:00:00"
+ },
+ {
+ "n_duration" : 2,
+ "n_port" : 8080,
+ "str_addr" : "鏈涗含soho澶у帵",
+ "str_brand" : "dahua",
+ "str_dev_name" : "鏈涗含soho澶ц瘽纾佺洏闃靛垪",
+ "str_ip" : "192.168.1.181",
+ "str_latitude" : "116.457092",
+ "str_longitude" : "39.994827",
+ "str_password" : "123456",
+ "str_reserved" : "",
+ "str_storage_dev_id" : "dahua:12:34:56:78:90:ab",
+ "str_username" : "admin",
+ "tim_start_time" : "2018-08-28 00:00:00"
+ },
+ {
+ "n_duration" : 3,
+ "n_port" : 8083,
+ "str_addr" : "鏈涗含soho澶у帵3",
+ "str_brand" : "dahua",
+ "str_dev_name" : "鏈涗含soho澶у崕纾佺洏闃靛垪",
+ "str_ip" : "192.168.1.183",
+ "str_latitude" : "116.457093",
+ "str_longitude" : "39.994823",
+ "str_password" : "123333",
+ "str_reserved" : "",
+ "str_storage_dev_id" : "dahua:11:22:33:44:55:ab",
+ "str_username" : "admin3",
+ "tim_start_time" : "2018-08-23 00:00:00"
+ }
+]
+
+//閫氶亾鎽勫儚鏈虹紪杈� devchn_edit
+涓嬪彂锛�
+{
+ "str_storage_dev_id": "dahua:11:22:33:44:55:ab",
+ "n_chn": 5,
+ "str_name": "澶у崕纾佺洏闃靛垪閫氶亾5",
+ "str_addr": "鏈涗含soho澶у帵濉�3琛╞搴�2005",
+ "str_latitude": "116.457095",
+ "str_longitude": "39.994825",
+ "str_sdks": "1,2,4",
+ "str_det_thr": "90,80,95",
+ "str_cmp_thr": "80,85,95",
+ "str_reserved": ""
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+//閫氶亾鎽勫儚鏈烘煡璇� devchn_show
+涓嬪彂锛�
+{
+ "str_storage_dev_id": "DS-7808N-SN0820161208AARR691369356WCVU"
+}
+杩斿洖锛�
+[
+ {
+ "n_chn" : 5,
+ "str_addr" : "鏈涗含soho澶у帵濉�3琛╞搴�2005",
+ "str_cmp_thr" : "80,85,96",
+ "str_det_thr" : "90,80,94",
+ "str_latitude" : "116.457095",
+ "str_longitude" : "39.994825",
+ "str_name" : "澶у崕纾佺洏闃靛垪閫氶亾4",
+ "str_reserved" : "",
+ "str_sdks" : "1,2,4"
+ },
+ {
+ "n_chn" : 4,
+ "str_addr" : "鏈涗含soho澶у帵濉�3琛╞搴�2004",
+ "str_cmp_thr" : "80,85,94",
+ "str_det_thr" : "90,80,94",
+ "str_latitude" : "116.457094",
+ "str_longitude" : "39.994824",
+ "str_name" : "澶у崕纾佺洏闃靛垪閫氶亾4",
+ "str_reserved" : "",
+ "str_sdks" : "1,2,4"
+ }
+]
+
+
+//妫�绱㈢鐩橀樀鍒楃殑鎵�鏈夐�氶亾 dev_search_chns
+涓嬪彂锛�
+{
+ "str_storage_dev_id": "dahua:11:22:33:44:55:ab"
+}
+杩斿洖锛�
+{
+ "devchn_list" : "1,2,3,4"
+}
+
+
+//娴嬭瘯纾佺洏闃靛垪閫氶亾杩炴帴鎯呭喌 chk_chn_connet
+涓嬪彂锛�
+{
+ "str_storage_dev_id": "dahua:11:22:33:44:55:ab",
+ "n_chn" : 1
+}
+杩斿洖锛�
+{
+ "connect_status" : "True",
+ "video_url" : "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCADeQUABVsWlPEN7w947.mp4"
+}
+
+
+//鎽勫儚鏈虹紪杈� cam_edit
+涓嬪彂锛�
+{
+ "str_cam_dev_id": "dahua:ca:me:ra:11:22:33",
+ "str_name": "澶у崕鎽勫儚鏈�1",
+ "str_addr": "鏈涗含soho澶у帵濉�3 b搴�2005",
+ "str_latitude": "116.457092",
+ "str_longitude": "39.994827",
+ "str_ip" : "192.168.1.181",
+ "n_port" : 8080,
+ "str_username" : "admin",
+ "str_password" : "123456",
+ "str_brand" : "dahua",
+ "str_sdks": "1,2,4",
+ "str_det_thr": "90,80,95",
+ "str_cmp_thr": "80,85,90",
+ "str_reserved": ""
+}
+杩斿洖锛�
+{
+ "str_cam_dev_id" : "dahua:ca:me:ra:11:22:33"
+}
+
+
+//鎽勫儚鏈烘煡璇� cam_show
+涓嬪彂锛�
+杩斿洖锛�
+[
+ {
+ "str_addr" : "鏈涗含soho澶у帵濉�3 b搴�2005",
+ "str_brand" : "dahua",
+ "str_cam_dev_id" : "dahua:ca:me:ra:22:22:22",
+ "str_cmp_thr" : "80,92",
+ "str_det_thr" : "90,92",
+ "str_ip" : 8080,
+ "str_latitude" : "116.457092",
+ "str_longitude" : "39.994827",
+ "str_name" : "澶у崕鎽勫儚鏈�2",
+ "str_password" : "123456",
+ "str_reserved" : "",
+ "str_sdks" : "1,2",
+ "str_username" : "admin"
+ },
+ {
+ "str_addr" : "鏈涗含soho澶у帵濉�3 b搴�33",
+ "str_brand" : "dahua",
+ "str_cam_dev_id" : "dahua:ca:me:ra:33:33:33",
+ "str_cmp_thr" : "80,85,93",
+ "str_det_thr" : "90,80,93",
+ "str_ip" : 8080,
+ "str_latitude" : "116.457033",
+ "str_longitude" : "39.994833",
+ "str_name" : "澶у崕鎽勫儚鏈�3",
+ "str_password" : "123433",
+ "str_reserved" : "",
+ "str_sdks" : "1,2,3",
+ "str_username" : "admin"
+ }
+]
+
+
+//娴嬭瘯鎽勫儚鏈鸿繛鎺�,寮�鍚繛鎺� chk_cam_connet
+涓嬪彂锛�
+{
+ "str_brand" : "haikang",
+ "str_ip" : "192.168.1.215",
+ "n_port" : 554,
+ "str_username" : "admin",
+ "str_password" : "a1234567"
+}
+杩斿洖锛�
+{
+ "connect_status" : "True",
+ "video_url" : "rtmp://localhost:1934/live/cam554"
+}
+
+//娴嬭瘯鎽勫儚鏈鸿繛鎺�,鏂紑杩炴帴 chk_cam_disconnet
+涓嬪彂锛�
+{
+ "str_ip" : "192.168.1.215"
+}
+杩斿洖锛�
+鏍囧噯杩斿洖鍊�
+
+//鍒犻櫎纾佺洏闃靛垪锛屽強瀵瑰簲鎵�鏈夐�氶亾锛屽強閫氶亾瀵瑰簲sdk dev_del
+涓嬪彂锛�
+{
+ "str_storage_dev_id": "dahua:11:22:33:44:55:ab"
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+//鍒犻櫎鎽勫儚鏈哄強瀵瑰簲sdk cam_del
+涓嬪彂锛�
+{
+ "str_cam_dev_id": "dahua:ca:me:ra:11:22:33"
+}
+杩斿洖锛�
+
+
+//绯荤粺绠$悊淇℃伅鏌ヨ server_info_show
+涓嬪彂锛氭棤
+杩斿洖锛�
+{
+ "alarm_ip" : "192.168.1.321",
+ "alarm_port" : 111,
+ "es_pic_ip" : "192.168.1.223",
+ "es_pic_port" : 333,
+ "web_pic_ip" : "192.168.1.312",
+ "web_pic_port" : 222
+}
+
+//绯荤粺绠$悊淇℃伅璁剧疆 server_info_edit
+涓嬪彂锛�
+{
+ "alarm_ip": "192.168.1.111",
+ "alarm_port": 111,
+ "web_pic_ip": "192.168.1.222",
+ "web_pic_port": 222,
+ "es_pic_ip": "192.168.1.233",
+ "es_pic_port": 333
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+
+//瑙嗛鏃堕暱鏌ヨ cut_dura_show
+涓嬪彂锛氭棤
+杩斿洖锛�
+{
+ "cut_max_duration" : 4
+}
+
+//瑙嗛鏃堕暱璁剧疆 cut_dura_edit
+涓嬪彂锛�
+{
+ "cut_max_duration" : 3
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+//璁剧疆鏈満缃戠粶閰嶇疆 netconfig_edit
+涓嬪彂锛�
+{
+ "ipaddr" : "192.168.1.113",
+ "netmask" : "255.255.255.0",
+ "gateway" : "192.168.1.1"
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+//鏌ョ湅鏈満缃戠粶閰嶇疆 netconfig_show
+涓嬪彂锛氭棤
+杩斿洖锛�
+{
+ "ipaddr" : "192.168.1.113",
+ "netmask" : "255.255.255.0",
+ "gateway" : "192.168.1.1"
+}
+
+鏌ヨ鑺傜偣 searchNode
+涓嬪彂锛� 鏃�
+杩斿洖锛�
+{
+ "cluster_id": "a",
+ "cluster_name": "b",
+ "list":[
+ {
+ "uuid": "317026e2-6df8-5bac-aea4-166d2ee250fb",
+ "node_id": "sub1@192.168.1.186",
+ "create_time":"time",
+ "dev_id":"",
+ "dev_name":"",
+ "node_ip":""
+ },
+ {
+ "uuid": "317026e2-6df8-5bac-aea4-166d2ee250fb",
+ "node_id": "sub1@192.168.1.186",
+ "create":"time",
+ "dev_id":"",
+ "dev_name":"",
+ "node_ip":""
+ },
+ {
+ "uuid": "317026e2-6df8-5bac-aea4-166d2ee250fb",
+ "node_id": "sub1@192.168.1.186",
+ "create":"time",
+ "dev_id":"",
+ "dev_name":"",
+ "node_ip":""
+ }
+ ]
+}
+
+淇敼闆嗙兢鍚嶇О modifyCluName
+涓嬪彂锛�
+{
+ "cluster_id": "a",
+ "cluster_name": "b"
+}
+杩斿洖锛�
+{
+ "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+ "error": ["erlang is null"||"err_json"]
+}
+
+娣诲姞鑺傜偣 addNode
+涓嬪彂锛�
+{
+ "cookie": "abc", //闆嗙兢cookie
+ "fatherNodeName": "main@192.168.1.186", //寮曞鑺傜偣鍚嶇О,娣诲姞寮曞鑺傜偣鏃惰鍊间负" "(鍐呬负绌烘牸)
+ "culID" : "uuid", //闆嗙兢id
+ "culName" : "name", //闆嗙兢鍚嶇О
+ "devID" : "uuid" //璁惧id
+}
+杩斿洖锛�
+{
+ "error": ["erlang is null"||"err_json"]
+}
+
+#TODO
+鍒犻櫎鑺傜偣 removeNode
+涓嬪彂锛�
+{
+}
+杩斿洖锛�
+{
+ "error": ["erlang is null"]
+}
+
+鍒涘缓搴曞簱 createDatabase
+涓嬪彂锛�
+{
+ "TableType": "person", //琛ㄧ被鍨媝erson/car
+ "TableName": "test", //琛ㄥ悕
+ "SyncType": "1", //鍚屾绫诲瀷1鍚屾/0鏈湴搴�
+ "BwType": "1", //榛戠櫧鍚嶅崟1榛戝悕鍗�/0鐧藉悕鍗�
+ "StartTime": "2018-01-01 01:02:00", //寮�濮嬫椂闂�
+ "EndTime": "2018-12-31 01:02:00" //缁撴潫鏃堕棿
+}
+杩斿洖锛�
+{
+ "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+ "error": ["erlang is null"||"err_json"]
+}
+
+
+鏇存柊搴曞簱 updateDatabase
+涓嬪彂锛�
+{
+ "uuid":"", //琛╱uid
+ "TableType": "person", //琛ㄧ被鍨媝erson/car
+ "TableName": "test", //琛ㄥ悕
+ "SyncType": "1", //鍚屾绫诲瀷1鍚屾/0鏈湴搴�
+ "BwType": "1", //榛戠櫧鍚嶅崟1榛戝悕鍗�/0鐧藉悕鍗�
+ "StartTime": "2018-01-01 01:02:00", //寮�濮嬫椂闂�
+ "EndTime": "2018-12-31 01:02:00" //缁撴潫鏃堕棿
+}
+杩斿洖锛�
+{
+ "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+ "error": ["erlang is null"||"err_json"]
+}
+
+鍒犻櫎搴曞簱 deleteDatabase
+涓嬪彂锛�
+{
+ "uuid":"", //琛╱uid
+ "TableType": "car", //琛ㄧ被鍨媝erson/car
+ "TableName": "test2", //琛ㄥ悕
+ "SyncType": "1" //鍚屾绫诲瀷1鍚屾/0鏈湴搴�
+}
+杩斿洖锛�
+{
+ "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+ "error": ["erlang is null"||"err_json"]
+}
+
+#鍒犻櫎淇敼琛ㄦ椂,琛ㄥ悕涓嶅姞 lt_;闇�瑕佷紶SyncType 瀛楁
+
+# 鍒犻櫎淇敼娣诲姞鏌ヨ搴曞簱浜哄憳鏁版嵁鏃�,闇�瑕佸簳搴撳悕绉板姞 lt_
+
+
+鏌ユ壘鍚屾搴曞簱 findAllDatabase
+涓嬪彂锛�
+杩斿洖锛�
+[{
+ "uuid": "e92a005e-fc19-56b5-8a23-53570bc270ae", //琛╱uid
+ "tableName": "test", //琛ㄥ悕
+ "tableType": "person", //琛ㄧ被鍨�
+ "bwType": "1", //榛戠櫧鍚嶅崟绫诲瀷
+ "start_time": "2018-01-01 01:02:00", //寮�濮嬫椂闂�
+ "end_time": "2018-12-31 01:02:00" //缁撴潫鏃堕棿
+}]
+閿欒锛�
+{
+ "error": "erlang is null"
+}
+
+鏌ユ壘鍚屾搴曞簱 findLocalDatabase
+涓嬪彂锛氭棤
+杩斿洖锛�
+[{
+ "uuid": "e92a005e-fc19-56b5-8a23-53570bc270ae", //琛╱uid
+ "tableName": "test", //琛ㄥ悕
+ "tableType": "person", //琛ㄧ被鍨�
+ "bwType": "1", //榛戠櫧鍚嶅崟绫诲瀷
+ "start_time": "2018-01-01 01:02:00", //寮�濮嬫椂闂�
+ "end_time": "2018-12-31 01:02:00" //缁撴潫鏃堕棿
+}]
+閿欒锛�
+{
+ "error": "erlang is null"
+}
+
+#d
+
+鍔犺浇搴曞簱鏁版嵁 loadFaceFeaData
+涓嬪彂锛�
+{
+ "TableName":"test" //琛ㄥ悕
+}
+杩斿洖锛�
+[{
+ "uuid": "00b429d6-3746-57b9-8123-0dbf134731d2", //UUID
+ "tableName": "test", //琛ㄥ悕
+ "idcard": "123456789012345678", //韬唤璇佸彿
+ "imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCAbYeQAB86k1llhSw841.jpg"
+ },
+ {
+ "uuid": "0148cb5c-2232-5b02-9a00-f1f9a6b71de7",
+ "tableName": "test",
+ "idcard": "123456789012345678",
+ "imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCADeQUABVsWlPEN7w947.jpg"
+ },
+ {
+ "uuid": "01f20455-32bf-5c6e-b7b8-dea1395049a0",
+ "tableName": "test",
+ "idcard": "123456789012345678",
+ "imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOct-Aaz39ACP45aaRJUY002.jpg"
+ }
+]
+閿欒锛�
+{
+ "error": ["erlang is null"||"err_json"]
+}
+
+
+娣诲姞鎴栬�呮洿鏂颁汉鍛� addPerson
+涓嬪彂锛�
+{
+ "uuid": "", //娣诲姞浜哄憳鏃惰涓虹┖""
+ "TableName": "test", //琛ㄥ悕
+ "img_url ": "http: //192.168.1.188/group1/M00/00/01/wKgBvFuOcuGADRA_ABzanOgXxUE975.jpg",
+ "idcard : 123456789012345678", //韬唤璇乮d
+ "img_base64 ": "" //鍥剧墖base64
+}
+杩斿洖锛�
+{
+ "uuid": "82ee3b83-da2c-5d18-8cfa-f15e3ec4c9d4",
+ "img_url": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuGADRA_ABzanOgXxUE975.jpg"
+}
+閿欒锛�
+{
+ "error": ["erlang is null"||"err_json"]
+}
+
+
+娣诲姞鎴栬�呮洿鏂颁汉鍛� delPerson
+涓嬪彂锛�
+{
+ "uuid": "",
+ "TableName": "test" //琛ㄥ悕
+}
+杩斿洖锛�
+{
+ "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+ "error": ["erlang is null"||"err_json"]
+}
+
+鑾峰彇鎶ヨ澶у浘 getAlarmImageFromVideoFile
+涓嬪彂锛�
+{
+ "videoNum": "", //camId
+ "picDate": "2018-01-01 00:00:00" //鏃堕棿
+}
+杩斿洖锛�
+{
+ "img_url": "http://192.168.1.185/group1/M00/00/7E/wKgBuVu8pAiALzfPAAPo1cKj6Hc363.jpg"
+}
+閿欒锛�
+{
+ "error": ["err_json"||""Not found Time"||"Time format error"||"Time error"||"Video File error"]
+}
+
+
+鑾峰彇瑙嗛璺緞 getRecordVideoPath
+涓嬪彂锛�
+{
+ "videoNum": "", //camId
+ "picDate": "2018-01-01 00:00:00" //鏃堕棿
+}
+杩斿洖锛�
+{
+ "file_path": "/home/basic/work_src/test_Rec/1/20181109_11:04:46:509.mp4"
+}
+閿欒锛�
+鏍囧噯杩斿洖鍊�
+
+鑾峰彇璁惧id findDevId
+涓嬪彂锛氭棤
+杩斿洖
+{
+ "dev_id":"1",
+ "dev_name":"sss"
+}
+閿欒锛�
+鏍囧噯杩斿洖鍊�
+
+淇敼璁惧鍚� editDevName
+涓嬪彂锛歿"dev_name":"sss"}
+杩斿洖锛�
+{
+ "ret_status": "ok_ack"
+}
+閿欒:
+鏍囧噯杩斿洖鍊�
+
+淇敼璁惧id editDevId
+涓嬪彂锛�
+{
+ "dev_batch":6, //鎵规
+ "dev_sequence":6//搴忓垪鍙�
+}
+杩斿洖锛�
+{
+ "ret_status": "ok_ack"
+}
+閿欒:
+鏍囧噯杩斿洖鍊�
+
diff --git a/QiaoJiaSystem/FaceDetectServer/CMakeLists.txt b/QiaoJiaSystem/FaceDetectServer/CMakeLists.txt
new file mode 100644
index 0000000..1160b13
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/CMakeLists.txt
@@ -0,0 +1,75 @@
+cmake_minimum_required(VERSION 3.5)
+project(FaceDetectServer)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+add_definitions(-DGLOG)
+add_compile_options(-fPIC)
+
+SET(LIBS
+ glog
+ jsoncpp
+ Ice
+ crypto
+ pthread
+ opencv_world
+ Qt5Core
+ THFaceImage
+ THFeature
+ THFaceProperty
+ )
+include_directories(
+ ./rpc
+ ../../BasicPlatForm
+ ../../BasicPlatForm/libs/opencv/include
+ ../../BasicPlatForm/libs/jsoncpp/include
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/ffmpeg/include
+ ../../BasicPlatForm/wrapper/casia/include
+ ../../BasicPlatForm/libs/Casia_Face/FaceSdk/include
+ /usr/include/x86_64-linux-gnu/qt5
+ #glog
+ ../../BasicPlatForm/libs/glog/include
+)
+
+link_directories(
+ #glog
+ ../../BasicPlatForm/libs/glog/lib
+ ../../BasicPlatForm/libs/jsoncpp/lib
+ /usr/local/cuda/lib64
+ ../../BasicPlatForm/libs/openssl/lib/
+ ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+ ../../BasicPlatForm/libs/openssl/lib
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/Casia_Face/FaceSdk/lib/gpu
+)
+
+add_executable(${PROJECT_NAME}
+ main_detect.cpp
+ FaceDetectServerI.cpp
+ rpc/FaceServer.cpp
+ )
+add_executable(FaceDetectResourcesTest
+ FaceDetectResourcesTest.cpp
+ )
+
+add_executable(FaceExtractServer
+ main_extract.cpp
+ FaceExtractServerI.cpp
+ rpc/FaceServer.cpp
+ )
+
+target_link_libraries(${PROJECT_NAME}
+ ${LIBS}
+ )
+
+target_link_libraries(FaceExtractServer
+ ${LIBS}
+ )
+
+target_link_libraries(FaceDetectResourcesTest
+ glog
+ pthread
+ )
+
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceDetectResourcesTest.cpp b/QiaoJiaSystem/FaceDetectServer/FaceDetectResourcesTest.cpp
new file mode 100644
index 0000000..76bf27b
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceDetectResourcesTest.cpp
@@ -0,0 +1,38 @@
+#include "basic/util/resource/ResourcesManager.h"
+#include <string>
+#include <iostream>
+#include <unistd.h>
+#include <thread>
+#include <basic/debug/Debug.h>
+
+using namespace std;
+
+int main(int argc, char *argv[]) {
+ ENABLEGLOG("./log/");
+ ResourcesManager<int> resource(10000);
+ for (int i = 0; i < 10; i++) {
+ resource.pushResource(i);
+ }
+ std::thread thd1([&] {
+ int i = 6;
+ while (1) {
+ cout << i << ":" << resource.getAvilableChannel(to_string(i)) << endl;
+ usleep(2000000);
+ i++;
+ if (i > 13) i = 0;
+ }
+
+ });
+ std::thread thd2([&] {
+ int i = 0;
+ while (1) {
+ cout << i << ":" << resource.getAvilableChannel(to_string(i)) << endl;
+ usleep(100000);
+ i++;
+ if (i > 6)i = 0;
+ }
+
+ });
+ getchar();
+ return 0;
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp
new file mode 100644
index 0000000..7e2236d
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp
@@ -0,0 +1,91 @@
+#include "FaceDetectServerI.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QString>
+#include <QtCore/QSharedMemory>
+#include <basic/timer_counter/Clocktimer.h>
+#include <THFaceImage_i.h>
+#include <THFaceProperty_i.h>
+
+FaceDetectServerI::FaceDetectServerI() {
+ long threadMax = appPref.getLongData("thread.max");
+ long gpuIndex = appPref.getLongData("gpu.index");
+ for (int i = 0; i < threadMax; i++) {
+ detectResourcesManager.pushResource(i);
+ }
+ for (int i = 0; i < threadMax; i++) {
+ propertyResourcesManager.pushResource(i);
+ }
+ if (gpuIndex < 0) {
+ THFI_Param *param = new THFI_Param[threadMax];
+ THFI_Create(threadMax, param);
+ delete[] param;
+ } else {
+ THFI_Param_Ex *param = new THFI_Param_Ex[threadMax];
+ THFI_Param detParam;
+ detParam.nMinFaceSize = 20;
+ detParam.nRollAngle = 60;
+ for (int i = 0; i < threadMax; i++) {
+ param[i].tp = detParam;
+ param[i].nDeviceID = gpuIndex;
+ }
+ THFI_Create_Ex(threadMax, param);
+ delete[] param;
+ }
+ THFP_Create(threadMax);
+}
+
+FaceDetectServerI::~FaceDetectServerI() {
+ THFI_Release();
+ THFP_Release();
+}
+
+FaceDetect::Faces FaceDetectServerI::faceDetect(Ice::Int width, Ice::Int height, const std::string &shareMemoryName,
+ const Ice::Current &) {
+ ClockTimer ct("FaceDetectServerI::faceDetect");
+ FaceDetect::Faces faces;
+ QSharedMemory shareMemory(QString(shareMemoryName.c_str()));
+ if (shareMemory.attach()) {
+ auto data = shareMemory.constData();
+ THFI_FacePos facesPos[30];
+ int channel = detectResourcesManager.getAvilableChannel(shareMemoryName);
+ int faceNum = THFI_DetectFace(channel, (BYTE *) data, 24, width, height, facesPos, 30);
+ if (faceNum > 0) {
+ for (int i = 0; i < faceNum; i++) {
+ FaceDetect::FacePos face;
+ auto &pos = facesPos[i];
+ memcpy(&face, &pos, sizeof(pos) - sizeof(pos.pFacialData));
+ face.pFacialData.resize(sizeof(pos.pFacialData));
+ memcpy(face.pFacialData.data(), pos.pFacialData, sizeof(pos.pFacialData));
+// DBG(face.fAngle.confidence);
+ faces.push_back(face);
+ }
+ } else {
+ DBG("Face num is 0");
+ }
+ } else {
+ ERR("shareMemory error " << shareMemoryName);
+ }
+ return faces;
+}
+
+FaceDetect::ThftResult FaceDetectServerI::faceProperty(Ice::Int width, Ice::Int height, const FaceDetect::FacePos &pos,
+ const std::string &shareMemoryName, const Ice::Current &) {
+ QSharedMemory shareMemory(QString(shareMemoryName.c_str()));
+ if (shareMemory.attach()) {
+ FaceDetect::ThftResult thftResult;
+ THFP_Result_V2 propertys;
+ auto data = shareMemory.constData();
+ THFI_FacePos facesPos;
+ int channel = propertyResourcesManager.getAvilableChannel(shareMemoryName);
+ memcpy(&facesPos, &pos, sizeof(facesPos) - sizeof(facesPos.pFacialData));
+ memcpy(facesPos.pFacialData, pos.pFacialData.data(), sizeof(facesPos.pFacialData));
+ int ret = THFP_Execute_V2(channel, (BYTE *) data, width, height, &facesPos, &propertys);
+ if (ret == 0)memcpy(&thftResult, &propertys, sizeof(propertys));
+ else {
+ ERR("THFP_Execute_V2 faild, returns " << ret)
+ }
+ return thftResult;
+ } else {
+ throw std::runtime_error("shareMemory attach faild");
+ }
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h
new file mode 100644
index 0000000..dfb93d3
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h
@@ -0,0 +1,27 @@
+#ifndef FACEDETECTSERVERI_H
+#define FACEDETECTSERVERI_H
+#include <FaceServer.h>
+#include <basic/util/resource/ResourcesManager.h>
+#include <list>
+class FaceDetectServerI : public FaceDetect::FaceDetectServer
+{
+public:
+ FaceDetectServerI();
+ ~FaceDetectServerI();
+ // FaceDetectServer interface
+public:
+ virtual FaceDetect::Faces faceDetect(Ice::Int, Ice::Int, const std::string &, const Ice::Current &) override;
+
+private:
+ ResourcesManager<int> detectResourcesManager;
+ ResourcesManager<int> propertyResourcesManager;
+
+
+ // FaceDetectServer interface
+public:
+ virtual FaceDetect::ThftResult faceProperty(Ice::Int, Ice::Int, const FaceDetect::FacePos &, const std::string &, const Ice::Current &) override;
+};
+
+
+
+#endif // FACEDETECTSERVERI_H
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.cpp b/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.cpp
new file mode 100644
index 0000000..1b83824
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.cpp
@@ -0,0 +1,52 @@
+#include "FaceExtractServerI.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QString>
+#include <QtCore/QSharedMemory>
+#include <basic/timer_counter/Clocktimer.h>
+#include <THFeature_i.h>
+
+FaceExtractServerI::FaceExtractServerI() {
+ long threadMax = appPref.getLongData("thread.max");
+ long gpuIndex = appPref.getLongData("gpu.index");
+ for (int i = 0; i < threadMax; i++) {
+ extractResourcesManager.pushResource(i);
+ }
+ if (gpuIndex < 0) {
+ CHKERR(EF_Init(threadMax), threadMax, "EF_Init returns ");
+ } else {
+ EF_Param *param = new EF_Param[threadMax];
+ for (int i = 0; i < threadMax; i++) {
+ param[i].nDeviceID = gpuIndex;
+ }
+
+ CHKERR(EF_Init_Ex(threadMax, param), threadMax, "EF_Init returns ");
+ delete[] param;
+ }
+}
+
+FaceExtractServerI::~FaceExtractServerI() {
+ EF_Release();
+}
+
+FaceDetect::Data FaceExtractServerI::faceExtract(Ice::Int width, Ice::Int height, const FaceDetect::FacePos &pos,
+ const std::string &shareMemoryName, const Ice::Current &) {
+ ClockTimer ct("FaceExtractServerI::faceExtract");
+ QSharedMemory shareMemory(QString(shareMemoryName.c_str()));
+ FaceDetect::Data feature;
+ if (shareMemory.attach()) {
+ auto data = shareMemory.constData();
+ THFI_FacePos facesPos;
+ int channel = extractResourcesManager.getAvilableChannel(shareMemoryName);
+ memcpy(&facesPos, &pos, sizeof(facesPos) - sizeof(facesPos.pFacialData));
+ memcpy(facesPos.pFacialData, pos.pFacialData.data(), sizeof(facesPos.pFacialData));
+ feature.resize(EF_Size());
+ int ret = EF_Extract(channel, (BYTE *) data, width, height, 3, &facesPos, feature.data());
+ if (ret != 1) {
+ ERR("THFP_Execute_V2 faild, returns " << ret)
+ }
+ return feature;
+ } else {
+ throw std::runtime_error("shareMemory attach faild");
+ }
+
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.h b/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.h
new file mode 100644
index 0000000..4b29294
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.h
@@ -0,0 +1,21 @@
+#ifndef FACEEXTRACTSERVERI_H
+#define FACEEXTRACTSERVERI_H
+
+#include <FaceServer.h>
+#include <basic/util/resource/ResourcesManager.h>
+class FaceExtractServerI : public FaceDetect::FaceExtractServer
+{
+public:
+ FaceExtractServerI();
+ ~FaceExtractServerI();
+
+ // FaceExtractServer interface
+public:
+ virtual FaceDetect::Data faceExtract(Ice::Int, Ice::Int, const FaceDetect::FacePos &, const std::string &, const Ice::Current &) override;
+
+ ResourcesManager<int> extractResourcesManager;
+};
+
+
+
+#endif // FACEEXTRACTSERVERI_H
diff --git a/QiaoJiaSystem/FaceDetectServer/main.cpp b/QiaoJiaSystem/FaceDetectServer/main.cpp
new file mode 100644
index 0000000..2529adc
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/main.cpp
@@ -0,0 +1,40 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <thread>
+#include <basic/util/app/AppPreference.hpp>
+#include "FaceDetectServerI.h"
+int main(int argc,char** argv) {
+#ifdef DEBUG
+ argc = 2;
+ const char* home = argv[0];
+ const char* iceCfg = "--Ice.Config=./node/servers/FaceDetectServer/config/config";
+ argv = new char*[2];
+ argv[0] = (char*)home;
+ argv[1] = (char*)iceCfg;
+#endif
+
+ SAVE_APP_ARGS;
+ auto ich = Ice::initialize(argc,argv);
+
+#ifdef DEBUG
+ std::string identity("FaceDetectServer");
+ std::string gpuIndex("0");
+ std::string adapterName("FaceDetectServerAdapter");
+ int threadMax = 10;
+#else
+ std::string identity =ich->getProperties()->getProperty("user.face.identity");
+ std::string gpuIndex =ich->getProperties()->getProperty("user.gpu.index");
+ std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+ int threadMax = atol(ich->getProperties()->getProperty("user.thread.max").c_str());
+#endif
+ ich->getProperties()->setProperty("Ice.ThreadPool.Server.SizeMax",to_string(threadMax));
+ appPref.setLongData("gpu.index",atol(gpuIndex.c_str()));
+ appPref.setLongData("thread.max", threadMax);
+
+ auto adapter = ich->createObjectAdapter(adapterName);
+ adapter->add(new FaceDetectServerI(), Ice::stringToIdentity(identity));
+ adapter->activate();
+ ich->waitForShutdown();
+
+ return 0;
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/main_detect.cpp b/QiaoJiaSystem/FaceDetectServer/main_detect.cpp
new file mode 100644
index 0000000..dabd089
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/main_detect.cpp
@@ -0,0 +1,59 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <thread>
+#include <basic/util/app/AppPreference.hpp>
+#include "FaceDetectServerI.h"
+#include <basic/debug/Debug.h>
+#include <basic/util/app/AppConfig.h>
+
+int main1(int argc, char **argv) {
+#ifdef DEBUG
+ argc = 2;
+ const char* home = argv[0];
+ const char* iceCfg = "--Ice.Config=./node/servers/FaceDetectServer/config/config";
+ argv = new char*[2];
+ argv[0] = (char*)home;
+ argv[1] = (char*)iceCfg;
+#endif
+
+ SAVE_APP_ARGS;
+ auto ich = Ice::initialize(argc, argv);
+
+#ifdef DEBUG
+ std::string identity("FaceDetectServer");
+ std::string gpuIndex("0");
+ std::string adapterName("FaceDetectServerAdapter");
+ int threadMax = 10;
+#else
+ std::string identity = ich->getProperties()->getProperty("user.face.identity");
+ std::string gpuIndex = ich->getProperties()->getProperty("user.gpu.index");
+ std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+ int threadMax = atol(ich->getProperties()->getProperty("user.thread.max").c_str());
+#endif
+ ich->getProperties()->setProperty("Ice.ThreadPool.Server.SizeMax", std::to_string(threadMax));
+ appPref.setLongData("gpu.index", atol(gpuIndex.c_str()));
+ appPref.setLongData("thread.max", threadMax);
+
+ auto adapter = ich->createObjectAdapter(adapterName);
+ adapter->add(new FaceDetectServerI(), Ice::stringToIdentity(identity));
+ adapter->activate();
+ ich->waitForShutdown();
+
+ return 0;
+}
+
+int main(int argc, char **argv) {
+ SAVE_APP_ARGS;
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+ auto ich = Ice::initialize(argc, argv);
+
+ appPref.setLongData("gpu.index", 0);
+ appPref.setLongData("thread.max", 32);
+
+ IceRpcServer<FaceDetectServerI> server("faceServer", 10002, "tcp");
+ server.setMessageSizeMax(1024 * 1024 * 50);
+ server.setPoolInitSize(10);
+ server.setPoolMaxSize(32);
+ server.runWaitShutDown();
+ return 0;
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/main_extract.cpp b/QiaoJiaSystem/FaceDetectServer/main_extract.cpp
new file mode 100644
index 0000000..a71d8f5
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/main_extract.cpp
@@ -0,0 +1,60 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <thread>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppConfig.h>
+#include "FaceExtractServerI.h"
+#include <basic/debug/Debug.h>
+
+int main1(int argc, char **argv) {
+#ifdef DEBUG
+ argc = 2;
+ const char* home = argv[0];
+ const char* iceCfg = "--Ice.Config=./node/servers/FaceExtractServer/config/config";
+ argv = new char*[2];
+ argv[0] = (char*)home;
+ argv[1] = (char*)iceCfg;
+#endif
+
+ SAVE_APP_ARGS;
+ auto ich = Ice::initialize(argc, argv);
+
+#ifdef DEBUG
+ std::string identity("FaceExtractServer");
+ std::string gpuIndex("0");
+ std::string adapterName("FaceExtractServerAdapter");
+ int threadMax = 10;
+#else
+ std::string identity = ich->getProperties()->getProperty("user.face.identity");
+ std::string gpuIndex = ich->getProperties()->getProperty("user.gpu.index");
+ std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+ int threadMax = atol(ich->getProperties()->getProperty("user.thread.max").c_str());
+#endif
+ ich->getProperties()->setProperty("Ice.ThreadPool.Server.SizeMax", std::to_string(threadMax));
+ appPref.setLongData("gpu.index", atol(gpuIndex.c_str()));
+ appPref.setLongData("thread.max", threadMax);
+
+ auto adapter = ich->createObjectAdapter(adapterName);
+ adapter->add(new FaceExtractServerI(), Ice::stringToIdentity(identity));
+ adapter->activate();
+ ich->waitForShutdown();
+
+ return 0;
+}
+
+int main(int argc, char **argv) {
+
+ SAVE_APP_ARGS;
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+ auto ich = Ice::initialize(argc, argv);
+
+ appPref.setLongData("gpu.index", 0);
+ appPref.setLongData("thread.max", 32);
+
+ IceRpcServer<FaceExtractServerI> server("faceExtractServer", 10008, "tcp");
+ server.setMessageSizeMax(1024 * 1024 * 50);
+ server.setPoolInitSize(10);
+ server.setPoolMaxSize(32);
+ server.runWaitShutDown();
+ return 0;
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.cpp b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.cpp
new file mode 100644
index 0000000..df47a6d
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.cpp
@@ -0,0 +1,861 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `FaceServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <FaceServer.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+# pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+# pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_FaceDetect_FaceDetectServer_ids[2] =
+{
+ "::FaceDetect::FaceDetectServer",
+ "::Ice::Object"
+};
+const ::std::string iceC_FaceDetect_FaceDetectServer_ops[] =
+{
+ "faceDetect",
+ "faceProperty",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+const ::std::string iceC_FaceDetect_FaceDetectServer_faceDetect_name = "faceDetect";
+const ::std::string iceC_FaceDetect_FaceDetectServer_faceProperty_name = "faceProperty";
+
+const ::std::string iceC_FaceDetect_FaceExtractServer_ids[2] =
+{
+ "::FaceDetect::FaceExtractServer",
+ "::Ice::Object"
+};
+const ::std::string iceC_FaceDetect_FaceExtractServer_ops[] =
+{
+ "faceExtract",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+const ::std::string iceC_FaceDetect_FaceExtractServer_faceExtract_name = "faceExtract";
+
+}
+
+bool
+FaceDetect::FaceDetectServer::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_FaceDetect_FaceDetectServer_ids, iceC_FaceDetect_FaceDetectServer_ids + 2, s);
+}
+
+::std::vector<::std::string>
+FaceDetect::FaceDetectServer::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector<::std::string>(&iceC_FaceDetect_FaceDetectServer_ids[0], &iceC_FaceDetect_FaceDetectServer_ids[2]);
+}
+
+::std::string
+FaceDetect::FaceDetectServer::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+FaceDetect::FaceDetectServer::ice_staticId()
+{
+ static const ::std::string typeId = "::FaceDetect::FaceDetectServer";
+ return typeId;
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceD_faceDetect(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ int iceP_width;
+ int iceP_height;
+ ::std::string iceP_shareMemory;
+ istr->readAll(iceP_width, iceP_height, iceP_shareMemory);
+ inS.endReadParams();
+ ::FaceDetect::Faces ret = this->faceDetect(iceP_width, iceP_height, ::std::move(iceP_shareMemory), current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceD_faceProperty(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ int iceP_width;
+ int iceP_height;
+ ::FaceDetect::FacePos iceP_pos;
+ ::std::string iceP_shareMemory;
+ istr->readAll(iceP_width, iceP_height, iceP_pos, iceP_shareMemory);
+ inS.endReadParams();
+ ::FaceDetect::ThftResult ret = this->faceProperty(iceP_width, iceP_height, ::std::move(iceP_pos), ::std::move(iceP_shareMemory), current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceDetect_FaceDetectServer_ops, iceC_FaceDetect_FaceDetectServer_ops + 6, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_FaceDetect_FaceDetectServer_ops)
+ {
+ case 0:
+ {
+ return _iceD_faceDetect(in, current);
+ }
+ case 1:
+ {
+ return _iceD_faceProperty(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+bool
+FaceDetect::FaceExtractServer::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_FaceDetect_FaceExtractServer_ids, iceC_FaceDetect_FaceExtractServer_ids + 2, s);
+}
+
+::std::vector<::std::string>
+FaceDetect::FaceExtractServer::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector<::std::string>(&iceC_FaceDetect_FaceExtractServer_ids[0], &iceC_FaceDetect_FaceExtractServer_ids[2]);
+}
+
+::std::string
+FaceDetect::FaceExtractServer::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+FaceDetect::FaceExtractServer::ice_staticId()
+{
+ static const ::std::string typeId = "::FaceDetect::FaceExtractServer";
+ return typeId;
+}
+
+bool
+FaceDetect::FaceExtractServer::_iceD_faceExtract(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ int iceP_width;
+ int iceP_height;
+ ::FaceDetect::FacePos iceP_pos;
+ ::std::string iceP_shareMemory;
+ istr->readAll(iceP_width, iceP_height, iceP_pos, iceP_shareMemory);
+ inS.endReadParams();
+ ::FaceDetect::Data ret = this->faceExtract(iceP_width, iceP_height, ::std::move(iceP_pos), ::std::move(iceP_shareMemory), current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+FaceDetect::FaceExtractServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceDetect_FaceExtractServer_ops, iceC_FaceDetect_FaceExtractServer_ops + 5, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_FaceDetect_FaceExtractServer_ops)
+ {
+ case 0:
+ {
+ return _iceD_faceExtract(in, current);
+ }
+ case 1:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+FaceDetect::FaceDetectServerPrx::_iceI_faceDetect(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::Faces>>& outAsync, int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_FaceDetect_FaceDetectServer_faceDetect_name);
+ outAsync->invoke(iceC_FaceDetect_FaceDetectServer_faceDetect_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_width, iceP_height, iceP_shareMemory);
+ },
+ nullptr);
+}
+
+void
+FaceDetect::FaceDetectServerPrx::_iceI_faceProperty(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::ThftResult>>& outAsync, int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_FaceDetect_FaceDetectServer_faceProperty_name);
+ outAsync->invoke(iceC_FaceDetect_FaceDetectServer_faceProperty_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_width, iceP_height, iceP_pos, iceP_shareMemory);
+ },
+ nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+FaceDetect::FaceDetectServerPrx::_newInstance() const
+{
+ return ::IceInternal::createProxy<FaceDetectServerPrx>();
+}
+
+const ::std::string&
+FaceDetect::FaceDetectServerPrx::ice_staticId()
+{
+ return FaceDetect::FaceDetectServer::ice_staticId();
+}
+
+void
+FaceDetect::FaceExtractServerPrx::_iceI_faceExtract(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::Data>>& outAsync, int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_FaceDetect_FaceExtractServer_faceExtract_name);
+ outAsync->invoke(iceC_FaceDetect_FaceExtractServer_faceExtract_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_width, iceP_height, iceP_pos, iceP_shareMemory);
+ },
+ nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+FaceDetect::FaceExtractServerPrx::_newInstance() const
+{
+ return ::IceInternal::createProxy<FaceExtractServerPrx>();
+}
+
+const ::std::string&
+FaceDetect::FaceExtractServerPrx::ice_staticId()
+{
+ return FaceDetect::FaceExtractServer::ice_staticId();
+}
+
+namespace Ice
+{
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_FaceDetect_FaceDetectServer_faceDetect_name = "faceDetect";
+
+const ::std::string iceC_FaceDetect_FaceDetectServer_faceProperty_name = "faceProperty";
+
+const ::std::string iceC_FaceDetect_FaceExtractServer_faceExtract_name = "faceExtract";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::FaceDetect::upCast(::IceProxy::FaceDetect::FaceDetectServer* p) { return p; }
+
+void
+::IceProxy::FaceDetect::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceDetectServer>& v)
+{
+ ::Ice::ObjectPrx proxy;
+ istr->read(proxy);
+ if(!proxy)
+ {
+ v = 0;
+ }
+ else
+ {
+ v = new ::IceProxy::FaceDetect::FaceDetectServer;
+ v->_copyFrom(proxy);
+ }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceDetect::FaceDetectServer::_iceI_begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_FaceDetect_FaceDetectServer_faceDetect_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceDetect_FaceDetectServer_faceDetect_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_FaceDetect_FaceDetectServer_faceDetect_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_width);
+ ostr->write(iceP_height);
+ ostr->write(iceP_shareMemory);
+ result->endWriteParams();
+ result->invoke(iceC_FaceDetect_FaceDetectServer_faceDetect_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::FaceDetect::Faces
+IceProxy::FaceDetect::FaceDetectServer::end_faceDetect(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_FaceDetect_FaceDetectServer_faceDetect_name);
+ ::FaceDetect::Faces ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceDetect::FaceDetectServer::_iceI_begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_FaceDetect_FaceDetectServer_faceProperty_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceDetect_FaceDetectServer_faceProperty_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_FaceDetect_FaceDetectServer_faceProperty_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_width);
+ ostr->write(iceP_height);
+ ostr->write(iceP_pos);
+ ostr->write(iceP_shareMemory);
+ result->endWriteParams();
+ result->invoke(iceC_FaceDetect_FaceDetectServer_faceProperty_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::FaceDetect::ThftResult
+IceProxy::FaceDetect::FaceDetectServer::end_faceProperty(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_FaceDetect_FaceDetectServer_faceProperty_name);
+ ::FaceDetect::ThftResult ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::FaceDetect::FaceDetectServer::_newInstance() const
+{
+ return new FaceDetectServer;
+}
+
+const ::std::string&
+IceProxy::FaceDetect::FaceDetectServer::ice_staticId()
+{
+ return ::FaceDetect::FaceDetectServer::ice_staticId();
+}
+::IceProxy::Ice::Object* ::IceProxy::FaceDetect::upCast(::IceProxy::FaceDetect::FaceExtractServer* p) { return p; }
+
+void
+::IceProxy::FaceDetect::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceExtractServer>& v)
+{
+ ::Ice::ObjectPrx proxy;
+ istr->read(proxy);
+ if(!proxy)
+ {
+ v = 0;
+ }
+ else
+ {
+ v = new ::IceProxy::FaceDetect::FaceExtractServer;
+ v->_copyFrom(proxy);
+ }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceDetect::FaceExtractServer::_iceI_begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_FaceDetect_FaceExtractServer_faceExtract_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceDetect_FaceExtractServer_faceExtract_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_FaceDetect_FaceExtractServer_faceExtract_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_width);
+ ostr->write(iceP_height);
+ ostr->write(iceP_pos);
+ ostr->write(iceP_shareMemory);
+ result->endWriteParams();
+ result->invoke(iceC_FaceDetect_FaceExtractServer_faceExtract_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::FaceDetect::Data
+IceProxy::FaceDetect::FaceExtractServer::end_faceExtract(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_FaceDetect_FaceExtractServer_faceExtract_name);
+ ::FaceDetect::Data ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::FaceDetect::FaceExtractServer::_newInstance() const
+{
+ return new FaceExtractServer;
+}
+
+const ::std::string&
+IceProxy::FaceDetect::FaceExtractServer::ice_staticId()
+{
+ return ::FaceDetect::FaceExtractServer::ice_staticId();
+}
+
+FaceDetect::FaceDetectServer::~FaceDetectServer()
+{
+}
+
+::Ice::Object* FaceDetect::upCast(::FaceDetect::FaceDetectServer* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_FaceDetect_FaceDetectServer_ids[2] =
+{
+ "::FaceDetect::FaceDetectServer",
+ "::Ice::Object"
+};
+
+}
+
+bool
+FaceDetect::FaceDetectServer::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_FaceDetect_FaceDetectServer_ids, iceC_FaceDetect_FaceDetectServer_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+FaceDetect::FaceDetectServer::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector< ::std::string>(&iceC_FaceDetect_FaceDetectServer_ids[0], &iceC_FaceDetect_FaceDetectServer_ids[2]);
+}
+
+const ::std::string&
+FaceDetect::FaceDetectServer::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+FaceDetect::FaceDetectServer::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+ static const ::std::string typeId = "::FaceDetect::FaceDetectServer";
+ return typeId;
+#else
+ return iceC_FaceDetect_FaceDetectServer_ids[0];
+#endif
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceD_faceDetect(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::Ice::Int iceP_width;
+ ::Ice::Int iceP_height;
+ ::std::string iceP_shareMemory;
+ istr->read(iceP_width);
+ istr->read(iceP_height);
+ istr->read(iceP_shareMemory);
+ inS.endReadParams();
+ ::FaceDetect::Faces ret = this->faceDetect(iceP_width, iceP_height, iceP_shareMemory, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceD_faceProperty(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::Ice::Int iceP_width;
+ ::Ice::Int iceP_height;
+ ::FaceDetect::FacePos iceP_pos;
+ ::std::string iceP_shareMemory;
+ istr->read(iceP_width);
+ istr->read(iceP_height);
+ istr->read(iceP_pos);
+ istr->read(iceP_shareMemory);
+ inS.endReadParams();
+ ::FaceDetect::ThftResult ret = this->faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+namespace
+{
+const ::std::string iceC_FaceDetect_FaceDetectServer_all[] =
+{
+ "faceDetect",
+ "faceProperty",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceDetect_FaceDetectServer_all, iceC_FaceDetect_FaceDetectServer_all + 6, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_FaceDetect_FaceDetectServer_all)
+ {
+ case 0:
+ {
+ return _iceD_faceDetect(in, current);
+ }
+ case 1:
+ {
+ return _iceD_faceProperty(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+FaceDetect::FaceDetectServer::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+ ostr->startSlice(ice_staticId(), -1, true);
+ Ice::StreamWriter< ::FaceDetect::FaceDetectServer, ::Ice::OutputStream>::write(ostr, *this);
+ ostr->endSlice();
+}
+
+void
+FaceDetect::FaceDetectServer::_iceReadImpl(::Ice::InputStream* istr)
+{
+ istr->startSlice();
+ Ice::StreamReader< ::FaceDetect::FaceDetectServer, ::Ice::InputStream>::read(istr, *this);
+ istr->endSlice();
+}
+
+void
+FaceDetect::_icePatchObjectPtr(FaceDetectServerPtr& handle, const ::Ice::ObjectPtr& v)
+{
+ handle = ::FaceDetect::FaceDetectServerPtr::dynamicCast(v);
+ if(v && !handle)
+ {
+ IceInternal::Ex::throwUOE(::FaceDetect::FaceDetectServer::ice_staticId(), v);
+ }
+}
+
+FaceDetect::FaceExtractServer::~FaceExtractServer()
+{
+}
+
+::Ice::Object* FaceDetect::upCast(::FaceDetect::FaceExtractServer* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_FaceDetect_FaceExtractServer_ids[2] =
+{
+ "::FaceDetect::FaceExtractServer",
+ "::Ice::Object"
+};
+
+}
+
+bool
+FaceDetect::FaceExtractServer::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_FaceDetect_FaceExtractServer_ids, iceC_FaceDetect_FaceExtractServer_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+FaceDetect::FaceExtractServer::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector< ::std::string>(&iceC_FaceDetect_FaceExtractServer_ids[0], &iceC_FaceDetect_FaceExtractServer_ids[2]);
+}
+
+const ::std::string&
+FaceDetect::FaceExtractServer::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+FaceDetect::FaceExtractServer::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+ static const ::std::string typeId = "::FaceDetect::FaceExtractServer";
+ return typeId;
+#else
+ return iceC_FaceDetect_FaceExtractServer_ids[0];
+#endif
+}
+
+bool
+FaceDetect::FaceExtractServer::_iceD_faceExtract(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::Ice::Int iceP_width;
+ ::Ice::Int iceP_height;
+ ::FaceDetect::FacePos iceP_pos;
+ ::std::string iceP_shareMemory;
+ istr->read(iceP_width);
+ istr->read(iceP_height);
+ istr->read(iceP_pos);
+ istr->read(iceP_shareMemory);
+ inS.endReadParams();
+ ::FaceDetect::Data ret = this->faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+namespace
+{
+const ::std::string iceC_FaceDetect_FaceExtractServer_all[] =
+{
+ "faceExtract",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+
+}
+
+bool
+FaceDetect::FaceExtractServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceDetect_FaceExtractServer_all, iceC_FaceDetect_FaceExtractServer_all + 5, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_FaceDetect_FaceExtractServer_all)
+ {
+ case 0:
+ {
+ return _iceD_faceExtract(in, current);
+ }
+ case 1:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+FaceDetect::FaceExtractServer::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+ ostr->startSlice(ice_staticId(), -1, true);
+ Ice::StreamWriter< ::FaceDetect::FaceExtractServer, ::Ice::OutputStream>::write(ostr, *this);
+ ostr->endSlice();
+}
+
+void
+FaceDetect::FaceExtractServer::_iceReadImpl(::Ice::InputStream* istr)
+{
+ istr->startSlice();
+ Ice::StreamReader< ::FaceDetect::FaceExtractServer, ::Ice::InputStream>::read(istr, *this);
+ istr->endSlice();
+}
+
+void
+FaceDetect::_icePatchObjectPtr(FaceExtractServerPtr& handle, const ::Ice::ObjectPtr& v)
+{
+ handle = ::FaceDetect::FaceExtractServerPtr::dynamicCast(v);
+ if(v && !handle)
+ {
+ IceInternal::Ex::throwUOE(::FaceDetect::FaceExtractServer::ice_staticId(), v);
+ }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.h b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.h
new file mode 100644
index 0000000..b0752ee
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.h
@@ -0,0 +1,1459 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `FaceServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __FaceServer_h__
+#define __FaceServer_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace FaceDetect
+{
+
+class FaceDetectServer;
+class FaceDetectServerPrx;
+class FaceExtractServer;
+class FaceExtractServerPrx;
+
+}
+
+namespace FaceDetect
+{
+
+struct POINT
+{
+ int x;
+ int y;
+
+ std::tuple<const int&, const int&> ice_tuple() const
+ {
+ return std::tie(x, y);
+ }
+};
+
+struct RECT
+{
+ int left;
+ int top;
+ int right;
+ int bottom;
+
+ std::tuple<const int&, const int&, const int&, const int&> ice_tuple() const
+ {
+ return std::tie(left, top, right, bottom);
+ }
+};
+
+struct FaceAngle
+{
+ int yaw;
+ int pitch;
+ int roll;
+ float confidence;
+
+ std::tuple<const int&, const int&, const int&, const float&> ice_tuple() const
+ {
+ return std::tie(yaw, pitch, roll, confidence);
+ }
+};
+
+struct ThftResult
+{
+ int gender;
+ int age;
+ int race;
+ int beauty_level;
+ int smile_level;
+
+ std::tuple<const int&, const int&, const int&, const int&, const int&> ice_tuple() const
+ {
+ return std::tie(gender, age, race, beauty_level, smile_level);
+ }
+};
+
+using Data = ::std::vector<::Ice::Byte>;
+
+struct FacePos
+{
+ ::FaceDetect::RECT rcFace;
+ ::FaceDetect::POINT ptLeftEye;
+ ::FaceDetect::POINT ptRightEye;
+ ::FaceDetect::POINT ptMouth;
+ ::FaceDetect::POINT ptNose;
+ ::FaceDetect::FaceAngle fAngle;
+ int nQuality;
+ ::FaceDetect::Data pFacialData;
+
+ std::tuple<const ::FaceDetect::RECT&, const ::FaceDetect::POINT&, const ::FaceDetect::POINT&, const ::FaceDetect::POINT&, const ::FaceDetect::POINT&, const ::FaceDetect::FaceAngle&, const int&, const ::FaceDetect::Data&> ice_tuple() const
+ {
+ return std::tie(rcFace, ptLeftEye, ptRightEye, ptMouth, ptNose, fAngle, nQuality, pFacialData);
+ }
+};
+
+using Faces = ::std::vector<::FaceDetect::FacePos>;
+
+using Ice::operator<;
+using Ice::operator<=;
+using Ice::operator>;
+using Ice::operator>=;
+using Ice::operator==;
+using Ice::operator!=;
+
+}
+
+namespace FaceDetect
+{
+
+class FaceDetectServer : public virtual ::Ice::Object
+{
+public:
+
+ using ProxyType = FaceDetectServerPrx;
+
+ virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+ virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+ virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::FaceDetect::Faces faceDetect(int, int, ::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_faceDetect(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::FaceDetect::ThftResult faceProperty(int, int, ::FaceDetect::FacePos, ::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_faceProperty(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+class FaceExtractServer : public virtual ::Ice::Object
+{
+public:
+
+ using ProxyType = FaceExtractServerPrx;
+
+ virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+ virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+ virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::FaceDetect::Data faceExtract(int, int, ::FaceDetect::FacePos, ::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_faceExtract(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace FaceDetect
+{
+
+class FaceDetectServerPrx : public virtual ::Ice::Proxy<FaceDetectServerPrx, ::Ice::ObjectPrx>
+{
+public:
+
+ ::FaceDetect::Faces faceDetect(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::FaceDetect::Faces>(true, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceDetect, iceP_width, iceP_height, iceP_shareMemory, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto faceDetectAsync(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::FaceDetect::Faces>>().get_future())
+ {
+ return _makePromiseOutgoing<::FaceDetect::Faces, P>(false, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceDetect, iceP_width, iceP_height, iceP_shareMemory, context);
+ }
+
+ ::std::function<void()>
+ faceDetectAsync(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory,
+ ::std::function<void(::FaceDetect::Faces)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::FaceDetect::Faces>(response, ex, sent, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceDetect, iceP_width, iceP_height, iceP_shareMemory, context);
+ }
+
+ void _iceI_faceDetect(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::Faces>>&, int, int, const ::std::string&, const ::Ice::Context&);
+
+ ::FaceDetect::ThftResult faceProperty(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::FaceDetect::ThftResult>(true, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceProperty, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto facePropertyAsync(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::FaceDetect::ThftResult>>().get_future())
+ {
+ return _makePromiseOutgoing<::FaceDetect::ThftResult, P>(false, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceProperty, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context);
+ }
+
+ ::std::function<void()>
+ facePropertyAsync(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory,
+ ::std::function<void(::FaceDetect::ThftResult)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::FaceDetect::ThftResult>(response, ex, sent, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceProperty, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context);
+ }
+
+ void _iceI_faceProperty(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::ThftResult>>&, int, int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Context&);
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ FaceDetectServerPrx() = default;
+ friend ::std::shared_ptr<FaceDetectServerPrx> IceInternal::createProxy<FaceDetectServerPrx>();
+
+ virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+class FaceExtractServerPrx : public virtual ::Ice::Proxy<FaceExtractServerPrx, ::Ice::ObjectPrx>
+{
+public:
+
+ ::FaceDetect::Data faceExtract(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::FaceDetect::Data>(true, this, &FaceDetect::FaceExtractServerPrx::_iceI_faceExtract, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto faceExtractAsync(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::FaceDetect::Data>>().get_future())
+ {
+ return _makePromiseOutgoing<::FaceDetect::Data, P>(false, this, &FaceDetect::FaceExtractServerPrx::_iceI_faceExtract, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context);
+ }
+
+ ::std::function<void()>
+ faceExtractAsync(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory,
+ ::std::function<void(::FaceDetect::Data)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::FaceDetect::Data>(response, ex, sent, this, &FaceDetect::FaceExtractServerPrx::_iceI_faceExtract, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context);
+ }
+
+ void _iceI_faceExtract(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::Data>>&, int, int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Context&);
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ FaceExtractServerPrx() = default;
+ friend ::std::shared_ptr<FaceExtractServerPrx> IceInternal::createProxy<FaceExtractServerPrx>();
+
+ virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits<::FaceDetect::POINT>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 8;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::POINT, S>
+{
+ static void read(S* istr, ::FaceDetect::POINT& v)
+ {
+ istr->readAll(v.x, v.y);
+ }
+};
+
+template<>
+struct StreamableTraits<::FaceDetect::RECT>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 16;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::RECT, S>
+{
+ static void read(S* istr, ::FaceDetect::RECT& v)
+ {
+ istr->readAll(v.left, v.top, v.right, v.bottom);
+ }
+};
+
+template<>
+struct StreamableTraits<::FaceDetect::FaceAngle>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 16;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::FaceAngle, S>
+{
+ static void read(S* istr, ::FaceDetect::FaceAngle& v)
+ {
+ istr->readAll(v.yaw, v.pitch, v.roll, v.confidence);
+ }
+};
+
+template<>
+struct StreamableTraits<::FaceDetect::ThftResult>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 20;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::ThftResult, S>
+{
+ static void read(S* istr, ::FaceDetect::ThftResult& v)
+ {
+ istr->readAll(v.gender, v.age, v.race, v.beauty_level, v.smile_level);
+ }
+};
+
+template<>
+struct StreamableTraits<::FaceDetect::FacePos>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 69;
+ static const bool fixedLength = false;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::FacePos, S>
+{
+ static void read(S* istr, ::FaceDetect::FacePos& v)
+ {
+ istr->readAll(v.rcFace, v.ptLeftEye, v.ptRightEye, v.ptMouth, v.ptNose, v.fAngle, v.nQuality, v.pFacialData);
+ }
+};
+
+}
+
+namespace FaceDetect
+{
+
+using FaceDetectServerPtr = ::std::shared_ptr<FaceDetectServer>;
+using FaceDetectServerPrxPtr = ::std::shared_ptr<FaceDetectServerPrx>;
+
+using FaceExtractServerPtr = ::std::shared_ptr<FaceExtractServer>;
+using FaceExtractServerPrxPtr = ::std::shared_ptr<FaceExtractServerPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace FaceDetect
+{
+
+class FaceDetectServer;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceDetectServer>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::FaceDetect::FaceDetectServer*);
+
+class FaceExtractServer;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceExtractServer>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::FaceDetect::FaceExtractServer*);
+
+}
+
+}
+
+namespace FaceDetect
+{
+
+class FaceDetectServer;
+::Ice::Object* upCast(::FaceDetect::FaceDetectServer*);
+typedef ::IceInternal::Handle< ::FaceDetect::FaceDetectServer> FaceDetectServerPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceDetectServer> FaceDetectServerPrx;
+typedef FaceDetectServerPrx FaceDetectServerPrxPtr;
+void _icePatchObjectPtr(FaceDetectServerPtr&, const ::Ice::ObjectPtr&);
+
+class FaceExtractServer;
+::Ice::Object* upCast(::FaceDetect::FaceExtractServer*);
+typedef ::IceInternal::Handle< ::FaceDetect::FaceExtractServer> FaceExtractServerPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceExtractServer> FaceExtractServerPrx;
+typedef FaceExtractServerPrx FaceExtractServerPrxPtr;
+void _icePatchObjectPtr(FaceExtractServerPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace FaceDetect
+{
+
+struct POINT
+{
+ ::Ice::Int x;
+ ::Ice::Int y;
+
+ bool operator==(const POINT& rhs_) const
+ {
+ if(this == &rhs_)
+ {
+ return true;
+ }
+ if(x != rhs_.x)
+ {
+ return false;
+ }
+ if(y != rhs_.y)
+ {
+ return false;
+ }
+ return true;
+ }
+
+ bool operator<(const POINT& rhs_) const
+ {
+ if(this == &rhs_)
+ {
+ return false;
+ }
+ if(x < rhs_.x)
+ {
+ return true;
+ }
+ else if(rhs_.x < x)
+ {
+ return false;
+ }
+ if(y < rhs_.y)
+ {
+ return true;
+ }
+ else if(rhs_.y < y)
+ {
+ return false;
+ }
+ return false;
+ }
+
+ bool operator!=(const POINT& rhs_) const
+ {
+ return !operator==(rhs_);
+ }
+ bool operator<=(const POINT& rhs_) const
+ {
+ return operator<(rhs_) || operator==(rhs_);
+ }
+ bool operator>(const POINT& rhs_) const
+ {
+ return !operator<(rhs_) && !operator==(rhs_);
+ }
+ bool operator>=(const POINT& rhs_) const
+ {
+ return !operator<(rhs_);
+ }
+};
+
+struct RECT
+{
+ ::Ice::Int left;
+ ::Ice::Int top;
+ ::Ice::Int right;
+ ::Ice::Int bottom;
+
+ bool operator==(const RECT& rhs_) const
+ {
+ if(this == &rhs_)
+ {
+ return true;
+ }
+ if(left != rhs_.left)
+ {
+ return false;
+ }
+ if(top != rhs_.top)
+ {
+ return false;
+ }
+ if(right != rhs_.right)
+ {
+ return false;
+ }
+ if(bottom != rhs_.bottom)
+ {
+ return false;
+ }
+ return true;
+ }
+
+ bool operator<(const RECT& rhs_) const
+ {
+ if(this == &rhs_)
+ {
+ return false;
+ }
+ if(left < rhs_.left)
+ {
+ return true;
+ }
+ else if(rhs_.left < left)
+ {
+ return false;
+ }
+ if(top < rhs_.top)
+ {
+ return true;
+ }
+ else if(rhs_.top < top)
+ {
+ return false;
+ }
+ if(right < rhs_.right)
+ {
+ return true;
+ }
+ else if(rhs_.right < right)
+ {
+ return false;
+ }
+ if(bottom < rhs_.bottom)
+ {
+ return true;
+ }
+ else if(rhs_.bottom < bottom)
+ {
+ return false;
+ }
+ return false;
+ }
+
+ bool operator!=(const RECT& rhs_) const
+ {
+ return !operator==(rhs_);
+ }
+ bool operator<=(const RECT& rhs_) const
+ {
+ return operator<(rhs_) || operator==(rhs_);
+ }
+ bool operator>(const RECT& rhs_) const
+ {
+ return !operator<(rhs_) && !operator==(rhs_);
+ }
+ bool operator>=(const RECT& rhs_) const
+ {
+ return !operator<(rhs_);
+ }
+};
+
+struct FaceAngle
+{
+ ::Ice::Int yaw;
+ ::Ice::Int pitch;
+ ::Ice::Int roll;
+ ::Ice::Float confidence;
+};
+
+struct ThftResult
+{
+ ::Ice::Int gender;
+ ::Ice::Int age;
+ ::Ice::Int race;
+ ::Ice::Int beauty_level;
+ ::Ice::Int smile_level;
+
+ bool operator==(const ThftResult& rhs_) const
+ {
+ if(this == &rhs_)
+ {
+ return true;
+ }
+ if(gender != rhs_.gender)
+ {
+ return false;
+ }
+ if(age != rhs_.age)
+ {
+ return false;
+ }
+ if(race != rhs_.race)
+ {
+ return false;
+ }
+ if(beauty_level != rhs_.beauty_level)
+ {
+ return false;
+ }
+ if(smile_level != rhs_.smile_level)
+ {
+ return false;
+ }
+ return true;
+ }
+
+ bool operator<(const ThftResult& rhs_) const
+ {
+ if(this == &rhs_)
+ {
+ return false;
+ }
+ if(gender < rhs_.gender)
+ {
+ return true;
+ }
+ else if(rhs_.gender < gender)
+ {
+ return false;
+ }
+ if(age < rhs_.age)
+ {
+ return true;
+ }
+ else if(rhs_.age < age)
+ {
+ return false;
+ }
+ if(race < rhs_.race)
+ {
+ return true;
+ }
+ else if(rhs_.race < race)
+ {
+ return false;
+ }
+ if(beauty_level < rhs_.beauty_level)
+ {
+ return true;
+ }
+ else if(rhs_.beauty_level < beauty_level)
+ {
+ return false;
+ }
+ if(smile_level < rhs_.smile_level)
+ {
+ return true;
+ }
+ else if(rhs_.smile_level < smile_level)
+ {
+ return false;
+ }
+ return false;
+ }
+
+ bool operator!=(const ThftResult& rhs_) const
+ {
+ return !operator==(rhs_);
+ }
+ bool operator<=(const ThftResult& rhs_) const
+ {
+ return operator<(rhs_) || operator==(rhs_);
+ }
+ bool operator>(const ThftResult& rhs_) const
+ {
+ return !operator<(rhs_) && !operator==(rhs_);
+ }
+ bool operator>=(const ThftResult& rhs_) const
+ {
+ return !operator<(rhs_);
+ }
+};
+
+typedef ::std::vector< ::Ice::Byte> Data;
+
+struct FacePos
+{
+ ::FaceDetect::RECT rcFace;
+ ::FaceDetect::POINT ptLeftEye;
+ ::FaceDetect::POINT ptRightEye;
+ ::FaceDetect::POINT ptMouth;
+ ::FaceDetect::POINT ptNose;
+ ::FaceDetect::FaceAngle fAngle;
+ ::Ice::Int nQuality;
+ ::FaceDetect::Data pFacialData;
+};
+
+typedef ::std::vector< ::FaceDetect::FacePos> Faces;
+
+}
+
+namespace FaceDetect
+{
+
+class Callback_FaceDetectServer_faceDetect_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceDetectServer_faceDetect_Base> Callback_FaceDetectServer_faceDetectPtr;
+
+class Callback_FaceDetectServer_faceProperty_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceDetectServer_faceProperty_Base> Callback_FaceDetectServer_facePropertyPtr;
+
+class Callback_FaceExtractServer_faceExtract_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceExtractServer_faceExtract_Base> Callback_FaceExtractServer_faceExtractPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace FaceDetect
+{
+
+class FaceDetectServer : public virtual ::Ice::Proxy<FaceDetectServer, ::IceProxy::Ice::Object>
+{
+public:
+
+ ::FaceDetect::Faces faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_faceDetect(_iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::FaceDetect::Callback_FaceDetectServer_faceDetectPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::FaceDetect::Callback_FaceDetectServer_faceDetectPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, context, del, cookie);
+ }
+
+ ::FaceDetect::Faces end_faceDetect(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_faceDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ ::FaceDetect::ThftResult faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_faceProperty(_iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::FaceDetect::Callback_FaceDetectServer_facePropertyPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::FaceDetect::Callback_FaceDetectServer_facePropertyPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, del, cookie);
+ }
+
+ ::FaceDetect::ThftResult end_faceProperty(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_faceProperty(::Ice::Int, ::Ice::Int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+class FaceExtractServer : public virtual ::Ice::Proxy<FaceExtractServer, ::IceProxy::Ice::Object>
+{
+public:
+
+ ::FaceDetect::Data faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_faceExtract(_iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::FaceDetect::Callback_FaceExtractServer_faceExtractPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::FaceDetect::Callback_FaceExtractServer_faceExtractPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, del, cookie);
+ }
+
+ ::FaceDetect::Data end_faceExtract(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_faceExtract(::Ice::Int, ::Ice::Int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace FaceDetect
+{
+
+class FaceDetectServer : public virtual ::Ice::Object
+{
+public:
+
+ typedef FaceDetectServerPrx ProxyType;
+ typedef FaceDetectServerPtr PointerType;
+
+ virtual ~FaceDetectServer();
+
+ virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::FaceDetect::Faces faceDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_faceDetect(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::FaceDetect::ThftResult faceProperty(::Ice::Int, ::Ice::Int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_faceProperty(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+ virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+ virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const FaceDetectServer& lhs, const FaceDetectServer& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const FaceDetectServer& lhs, const FaceDetectServer& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+class FaceExtractServer : public virtual ::Ice::Object
+{
+public:
+
+ typedef FaceExtractServerPrx ProxyType;
+ typedef FaceExtractServerPtr PointerType;
+
+ virtual ~FaceExtractServer();
+
+ virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::FaceDetect::Data faceExtract(::Ice::Int, ::Ice::Int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_faceExtract(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+ virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+ virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const FaceExtractServer& lhs, const FaceExtractServer& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const FaceExtractServer& lhs, const FaceExtractServer& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits< ::FaceDetect::POINT>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 8;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::POINT, S>
+{
+ static void write(S* ostr, const ::FaceDetect::POINT& v)
+ {
+ ostr->write(v.x);
+ ostr->write(v.y);
+ }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::POINT, S>
+{
+ static void read(S* istr, ::FaceDetect::POINT& v)
+ {
+ istr->read(v.x);
+ istr->read(v.y);
+ }
+};
+
+template<>
+struct StreamableTraits< ::FaceDetect::RECT>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 16;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::RECT, S>
+{
+ static void write(S* ostr, const ::FaceDetect::RECT& v)
+ {
+ ostr->write(v.left);
+ ostr->write(v.top);
+ ostr->write(v.right);
+ ostr->write(v.bottom);
+ }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::RECT, S>
+{
+ static void read(S* istr, ::FaceDetect::RECT& v)
+ {
+ istr->read(v.left);
+ istr->read(v.top);
+ istr->read(v.right);
+ istr->read(v.bottom);
+ }
+};
+
+template<>
+struct StreamableTraits< ::FaceDetect::FaceAngle>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 16;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::FaceAngle, S>
+{
+ static void write(S* ostr, const ::FaceDetect::FaceAngle& v)
+ {
+ ostr->write(v.yaw);
+ ostr->write(v.pitch);
+ ostr->write(v.roll);
+ ostr->write(v.confidence);
+ }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::FaceAngle, S>
+{
+ static void read(S* istr, ::FaceDetect::FaceAngle& v)
+ {
+ istr->read(v.yaw);
+ istr->read(v.pitch);
+ istr->read(v.roll);
+ istr->read(v.confidence);
+ }
+};
+
+template<>
+struct StreamableTraits< ::FaceDetect::ThftResult>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 20;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::ThftResult, S>
+{
+ static void write(S* ostr, const ::FaceDetect::ThftResult& v)
+ {
+ ostr->write(v.gender);
+ ostr->write(v.age);
+ ostr->write(v.race);
+ ostr->write(v.beauty_level);
+ ostr->write(v.smile_level);
+ }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::ThftResult, S>
+{
+ static void read(S* istr, ::FaceDetect::ThftResult& v)
+ {
+ istr->read(v.gender);
+ istr->read(v.age);
+ istr->read(v.race);
+ istr->read(v.beauty_level);
+ istr->read(v.smile_level);
+ }
+};
+
+template<>
+struct StreamableTraits< ::FaceDetect::FacePos>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 69;
+ static const bool fixedLength = false;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::FacePos, S>
+{
+ static void write(S* ostr, const ::FaceDetect::FacePos& v)
+ {
+ ostr->write(v.rcFace);
+ ostr->write(v.ptLeftEye);
+ ostr->write(v.ptRightEye);
+ ostr->write(v.ptMouth);
+ ostr->write(v.ptNose);
+ ostr->write(v.fAngle);
+ ostr->write(v.nQuality);
+ ostr->write(v.pFacialData);
+ }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::FacePos, S>
+{
+ static void read(S* istr, ::FaceDetect::FacePos& v)
+ {
+ istr->read(v.rcFace);
+ istr->read(v.ptLeftEye);
+ istr->read(v.ptRightEye);
+ istr->read(v.ptMouth);
+ istr->read(v.ptNose);
+ istr->read(v.fAngle);
+ istr->read(v.nQuality);
+ istr->read(v.pFacialData);
+ }
+};
+
+}
+
+namespace FaceDetect
+{
+
+template<class T>
+class CallbackNC_FaceDetectServer_faceDetect : public Callback_FaceDetectServer_faceDetect_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::FaceDetect::Faces&);
+
+ CallbackNC_FaceDetectServer_faceDetect(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceDetect::FaceDetectServerPrx proxy = ::FaceDetect::FaceDetectServerPrx::uncheckedCast(result->getProxy());
+ ::FaceDetect::Faces ret;
+ try
+ {
+ ret = proxy->end_faceDetect(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_FaceDetectServer_faceDetectPtr
+newCallback_FaceDetectServer_faceDetect(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::Faces&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceDetectServer_faceDetect<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceDetectServer_faceDetectPtr
+newCallback_FaceDetectServer_faceDetect(T* instance, void (T::*cb)(const ::FaceDetect::Faces&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceDetectServer_faceDetect<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceDetectServer_faceDetect : public Callback_FaceDetectServer_faceDetect_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::FaceDetect::Faces&, const CT&);
+
+ Callback_FaceDetectServer_faceDetect(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceDetect::FaceDetectServerPrx proxy = ::FaceDetect::FaceDetectServerPrx::uncheckedCast(result->getProxy());
+ ::FaceDetect::Faces ret;
+ try
+ {
+ ret = proxy->end_faceDetect(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_FaceDetectServer_faceDetectPtr
+newCallback_FaceDetectServer_faceDetect(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::Faces&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceDetectServer_faceDetect<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceDetectServer_faceDetectPtr
+newCallback_FaceDetectServer_faceDetect(T* instance, void (T::*cb)(const ::FaceDetect::Faces&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceDetectServer_faceDetect<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_FaceDetectServer_faceProperty : public Callback_FaceDetectServer_faceProperty_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::FaceDetect::ThftResult&);
+
+ CallbackNC_FaceDetectServer_faceProperty(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceDetect::FaceDetectServerPrx proxy = ::FaceDetect::FaceDetectServerPrx::uncheckedCast(result->getProxy());
+ ::FaceDetect::ThftResult ret;
+ try
+ {
+ ret = proxy->end_faceProperty(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_FaceDetectServer_facePropertyPtr
+newCallback_FaceDetectServer_faceProperty(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::ThftResult&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceDetectServer_faceProperty<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceDetectServer_facePropertyPtr
+newCallback_FaceDetectServer_faceProperty(T* instance, void (T::*cb)(const ::FaceDetect::ThftResult&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceDetectServer_faceProperty<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceDetectServer_faceProperty : public Callback_FaceDetectServer_faceProperty_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::FaceDetect::ThftResult&, const CT&);
+
+ Callback_FaceDetectServer_faceProperty(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceDetect::FaceDetectServerPrx proxy = ::FaceDetect::FaceDetectServerPrx::uncheckedCast(result->getProxy());
+ ::FaceDetect::ThftResult ret;
+ try
+ {
+ ret = proxy->end_faceProperty(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_FaceDetectServer_facePropertyPtr
+newCallback_FaceDetectServer_faceProperty(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::ThftResult&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceDetectServer_faceProperty<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceDetectServer_facePropertyPtr
+newCallback_FaceDetectServer_faceProperty(T* instance, void (T::*cb)(const ::FaceDetect::ThftResult&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceDetectServer_faceProperty<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_FaceExtractServer_faceExtract : public Callback_FaceExtractServer_faceExtract_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::FaceDetect::Data&);
+
+ CallbackNC_FaceExtractServer_faceExtract(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceDetect::FaceExtractServerPrx proxy = ::FaceDetect::FaceExtractServerPrx::uncheckedCast(result->getProxy());
+ ::FaceDetect::Data ret;
+ try
+ {
+ ret = proxy->end_faceExtract(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_FaceExtractServer_faceExtractPtr
+newCallback_FaceExtractServer_faceExtract(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::Data&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceExtractServer_faceExtract<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceExtractServer_faceExtractPtr
+newCallback_FaceExtractServer_faceExtract(T* instance, void (T::*cb)(const ::FaceDetect::Data&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceExtractServer_faceExtract<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceExtractServer_faceExtract : public Callback_FaceExtractServer_faceExtract_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::FaceDetect::Data&, const CT&);
+
+ Callback_FaceExtractServer_faceExtract(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceDetect::FaceExtractServerPrx proxy = ::FaceDetect::FaceExtractServerPrx::uncheckedCast(result->getProxy());
+ ::FaceDetect::Data ret;
+ try
+ {
+ ret = proxy->end_faceExtract(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_FaceExtractServer_faceExtractPtr
+newCallback_FaceExtractServer_faceExtract(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::Data&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceExtractServer_faceExtract<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceExtractServer_faceExtractPtr
+newCallback_FaceExtractServer_faceExtract(T* instance, void (T::*cb)(const ::FaceDetect::Data&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceExtractServer_faceExtract<T, CT>(instance, cb, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.ice b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.ice
new file mode 100644
index 0000000..0147bcf
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.ice
@@ -0,0 +1,61 @@
+module FaceDetect
+{
+ struct POINT
+ {
+ int x;
+ int y;
+ }
+
+ struct RECT
+ {
+ int left;
+ int top;
+ int right;
+ int bottom;
+ }
+
+ struct FaceAngle
+ {
+ int yaw;
+ int pitch;
+ int roll;
+ float confidence;
+ }
+
+ struct ThftResult
+ {
+ int gender;//1-male,0-female
+ int age;//range[0-100]
+ int race; //[1-white,2-yellow,3-black]
+ int beauty_level;//range[0-100]
+ int smile_level;//range[0-100]
+ }
+
+ sequence<byte> Data;
+
+ struct FacePos
+ {
+ RECT rcFace;
+ POINT ptLeftEye;
+ POINT ptRightEye;
+ POINT ptMouth;
+ POINT ptNose;
+ FaceAngle fAngle;
+ int nQuality;
+ Data pFacialData;
+ }
+
+ sequence<FacePos> Faces;
+
+ interface FaceDetectServer
+ {
+ Faces faceDetect(int width, int height, string shareMemory);
+ ThftResult faceProperty(int width, int height, FacePos pos, string shareMemory);
+ }
+
+ interface FaceExtractServer
+ {
+ Data faceExtract(int width, int height, FacePos pos, string shareMemory);
+ Data faceExtract(Data jpgImage);
+ }
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp b/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp
new file mode 100644
index 0000000..1fe1b9c
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp
@@ -0,0 +1,198 @@
+//
+// Created by ps on 2/26/18.
+//
+
+#ifndef COMPARETEST_COMPARESERVER_H
+#define COMPARETEST_COMPARESERVER_H
+
+#include <thread>
+#include <set>
+
+#include <basic/debug/Debug.h>
+#include <basic/util/thread/RWLock.hpp>
+#include <basic/util/thread/MultiThread.h>
+#include <basic/util/BASE64/Base64.h>
+
+struct AlarmData {
+ int num;
+ std::string tableName;
+ std::vector<unsigned char> feature;
+ float threshold;
+};
+
+struct FeatureData {
+ long face_id;
+ std::string uuid;
+ //feature
+ std::vector<std::vector<unsigned char>> features;
+ std::string faceUrl;
+ std::string idcard;
+};
+
+static std::vector<std::string> AlarmServerPropertyAnalyseByComma(std::string str_list) {
+ std::vector<std::string> result;
+ char *property_list = const_cast<char *>(str_list.c_str());
+ const char *c_Analyse = ",";
+ char *t_property;
+
+#ifdef linux
+ char *t_save = NULL;
+ t_property = strtok_r(property_list, c_Analyse, &t_save);
+#else
+ t_property = strtok(property_list,c_Analyse);
+#endif
+
+ while (t_property) {
+ std::string str_pro(t_property);
+ result.push_back(str_pro);
+#ifdef linux
+ t_property = strtok_r(t_save, c_Analyse, &t_save);
+#else
+ t_property = strtok(NULL,c_Analyse);
+#endif
+
+ }
+ return result;
+}
+
+#define ParalleFunc std::function<void(std::string&,FeatureData&)>
+enum ParallelForThreardSize {
+ CPU_Number = 1
+};
+
+class AlarmServer {
+
+public:
+ AlarmServer() : m_dbSet(false), m_dbReady(false) {
+
+ }
+
+ ~AlarmServer() {
+ for (auto item : dataMap) {
+ delete &(item.second);
+// item.second = NULL;
+ }
+ dataMap.clear();
+ dataAddBuffer.clear();
+ dataRemoveBuffer.clear();
+ }
+
+ void initDB(std::string str_config) {
+ std::thread thd(loadDBCahce, this, str_config);
+ thd.detach();
+ }
+
+ void removeData(std::string key) {
+ std::lock_guard<std::mutex> guard(dataRemoveBufferMtx);
+ dataRemoveBuffer.insert(key);
+ dataRemoveBufferUpdated = true;
+ }
+
+ void addData(std::string key, FeatureData &value) {
+ std::lock_guard<std::mutex> guard(dataAddBufferMtx);
+ dataAddBuffer[key] = value;
+ dataAddBufferUpdated = true;
+ }
+
+ bool getDBReady() {
+ return m_dbReady;
+ }
+
+ //m_dbReady is false return,true go on
+ //use parallelFor
+ virtual bool compare(std::thread::id key, AlarmData *, int topN) = 0;
+
+private:
+ //init data,this is thread body
+ static void loadDBCahce(AlarmServer *compareServer, std::string str_config) {
+ std::lock_guard<std::mutex> guard(compareServer->dataRemoveBufferMtx);
+ std::lock_guard<std::mutex> guard2(compareServer->dataAddBufferMtx);
+ std::lock_guard<std::mutex> dataGuard(compareServer->dataMtx);
+
+ compareServer->dataRemoveBuffer.clear();
+ compareServer->dataAddBuffer.clear();
+
+ compareServer->m_rwLock.wrlock();
+ compareServer->loadDBData(str_config);
+ compareServer->m_dbReady = true;
+ compareServer->m_rwLock.unlock();
+ INFO("m_dbReady is true");
+ }
+
+ virtual void loadDBData(std::string tableName) = 0;
+
+ bool m_dbSet;
+ bool m_dbReady;
+
+ bool dataAddBufferUpdated;
+ bool dataRemoveBufferUpdated;
+ bool dateResetUpdated;
+
+ RWLock m_rwLock;
+
+ void updateDataRemove() {
+ if (dataRemoveBufferUpdated) {
+ std::lock_guard<std::mutex> dataRemoveGuard(dataRemoveBufferMtx);
+ std::lock_guard<std::mutex> dataGuard(dataMtx);
+ if (!dataRemoveBufferUpdated)return;
+ for (auto key: dataRemoveBuffer) {
+ this->dataMap.erase(key);
+ }
+ dataRemoveBuffer.clear();
+ dataRemoveBufferUpdated = false;
+ }
+ }
+
+ void updateDataAdd() {
+ if (dataAddBufferUpdated) {
+ std::lock_guard<std::mutex> dataRemoveGuard(dataAddBufferMtx);
+ std::lock_guard<std::mutex> dataGuard(dataMtx);
+ if (!dataAddBufferUpdated)return;
+ for (auto addData: dataAddBuffer) {
+ this->dataMap.insert(addData);
+ }
+ dataAddBuffer.clear();
+ dataAddBufferUpdated = false;
+ }
+ }
+
+protected:
+ Base64 base64;
+ //#todo value is vector not is struct
+ std::map<std::string, FeatureData> dataMap;
+ std::map<std::string, FeatureData> dataAddBuffer;
+ std::set<std::string> dataRemoveBuffer;
+ std::mutex dataMtx;
+ std::mutex dataAddBufferMtx;
+ std::mutex dataRemoveBufferMtx;
+ std::mutex dataRestMtx;
+
+ void parallelFor(int threads, ParalleFunc func) {
+ updateDataRemove();
+ updateDataAdd();
+// std::lock_guard<std::mutex> dataGuard(dataMtx);
+ m_rwLock.rdlock();
+ MultiThread mthd(threads, [&func, this](int idx, int num) {
+ int size = dataMap.size();
+ int step = size / num;
+ if (step < 1) {
+ step = 1;
+ if (idx >= size)return;
+ }
+ auto iter = dataMap.begin();
+ for (int i = idx * step; i > 0; i--) {
+ iter++;
+ }
+ for (int i = 0; i < step && iter != dataMap.end(); iter++, i++) {
+ auto &data = iter->second;
+ std::string key = iter->first;
+ func(key, data);
+ }
+ });
+ mthd.join();
+ m_rwLock.unlock();
+ }
+};
+
+
+#endif //COMPARETEST_COMPARESERVER_H
diff --git a/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt b/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt
new file mode 100644
index 0000000..0528f16
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt
@@ -0,0 +1,151 @@
+cmake_minimum_required(VERSION 3.5)
+project(FaceSearchServer)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -DDEBUG_INFO)
+add_definitions(-DGLOG)
+add_compile_options(-fPIC)
+
+SET(LIBS
+ glog
+ Ice
+ opencv_world
+ Qt5Core
+ Qt5Sql
+ THFaceImage
+ THFeature
+ THFaceProperty
+ ei
+ erl_interface_st
+ ei_st
+ erl_interface
+ curl
+ jsoncpp
+ uuid
+ sqlite3
+ rt
+ pthread
+ )
+include_directories(
+ ./rpc
+ ./CasiaFaceWrapper
+
+ #glog
+ ../../BasicPlatForm/libs/glog/include
+ ../LocalDBTool
+ ../../BasicPlatForm
+ ../../BasicPlatForm/libs/crul/include
+ ../../BasicPlatForm/libs/opencv/include
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/ffmpeg/include
+ ../../BasicPlatForm/libs/Casia_Face/FaceSdk/include
+ # ../../BasicPlatForm/libs/erlang/erl_interface/include
+
+
+ ../../BasicPlatForm/libs/jsoncpp/include
+ ../../BasicPlatForm/libs/crul/include
+ ../../BasicPlatForm/libs/libuuid/include/
+ ../../BasicPlatForm/basic/util/curl/
+ ../../BasicPlatForm/basic/util/ShareMemory/
+ ../../BasicPlatForm/basic/db/Elasticsearch/
+ ../../BasicPlatForm/wrapper/casia/include
+ ../../BasicPlatForm/libs/libboost/include
+
+
+ ../../../Erlang/syncDBTool/
+
+ ../../BasicPlatForm/basic/db/sqlite/
+ ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+
+ /usr/include/x86_64-linux-gnu/qt5
+ /usr/include/x86_64-linux-gnu/qt5/QtCore/
+ /usr/include/x86_64-linux-gnu/qt5/QtSql/
+
+ /usr/include/boost/
+)
+
+link_directories(
+ #glog
+ ../../BasicPlatForm/libs/glog/lib
+ /usr/local/cuda/lib64
+ ../../BasicPlatForm/libs/openssl/lib/
+ ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/ffmpeg/lib
+ ../../BasicPlatForm/libs/Casia_Face/FaceSdk/lib/cpu
+ ../../BasicPlatForm/libs/crul/lib
+ ../../BasicPlatForm/libs/jsoncpp/lib
+ ../../BasicPlatForm/libs/libuuid/lib
+ # ../../BasicPlatForm/libs/erlang/erl_interface/libs
+
+ ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+ ../../BasicPlatForm/libs/libuuid/lib
+
+ /usr/lib/erlang/lib/erl_interface-3.8.2/lib/
+)
+
+
+add_executable(${PROJECT_NAME}
+ main.cpp
+ rpc/FaceSearchServer.cpp
+ FaceSearchServerResources.cpp
+ FaceFeatureSearchServerI.cpp
+ FaceFeatureSearchServerI.h
+ CasiaFaceWrapper/CasiaFaceWrapperN.cpp
+ CasiaFaceWrapper/CasiaFaceWrapperN.h
+ CasiaFaceWrapper/FaceData.hpp
+ AlarmServer.hpp
+ FaceDBCompareServer.cpp
+ FaceDBCompareServer.h
+ ../../BasicPlatForm/basic/util/thread/MultiThread.cpp
+ ../../BasicPlatForm/basic/util/thread/MultiThread.h
+ ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+ ../../BasicPlatForm/basic/util/curl/HttpRequestWithCrul.hpp
+ ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.cpp
+ ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.h
+
+
+ ../LocalDBTool/SqliteFaceEncap.cpp
+ ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.cpp
+ ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.h
+
+ # ../../BasicPlatForm/basic/util/ShareMemory/SemTool.cpp
+
+ ../../../Erlang/syncDBTool/ErlangDbTool.cpp
+ # ../../../Erlang/syncDBTool/ShareMemoryTool.hpp
+ # ../../../Erlang/syncDBTool/SyncDB.hpp
+ )
+
+#add_executable(FaceSearchServerResourcesTest
+# FaceSearchServerResourcesTest.cpp
+# )
+
+target_link_libraries(${PROJECT_NAME}
+ ${LIBS}
+ )
+
+#target_link_libraries(FaceSearchServerResourcesTest
+# pthread
+# )
+add_executable(SearchFaceTest
+ Cleint.cpp
+ ./rpc/FaceSearchServer.cpp
+ ./CasiaFaceWrapper/CasiaFaceWrapperN.cpp
+ )
+target_link_libraries(SearchFaceTest
+ opencv_world
+ glog
+ curl
+ IceStorm
+ Ice
+ jsoncpp
+ uuid
+ THFaceImage
+ THFacialPos
+ THFaceProperty
+ THFeature
+ pthread
+ )
+
+add_subdirectory(LoadFeaTool)
diff --git a/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp
new file mode 100644
index 0000000..9b9fe3a
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp
@@ -0,0 +1,145 @@
+//
+// Created by pans on 4/27/18.
+//
+#include <iostream>
+#include <string>
+#include <basic/util/app/AppPreference.hpp>
+#include <atomic>
+
+#include "CasiaFaceWrapperN.h"
+
+using namespace std;
+
+std::atomic_int CasiaFaceWrapperN::instanceCount(0);
+
+CasiaFaceWrapperN::CasiaFaceWrapperN() {
+ threadMax = appPref.getLongData("thread.max");
+// long gpuIndex = appPref.getLongData("gpu.index");
+// for(int i = 0;i<threadMax;i++){
+// resourcesManager.pushResource(i);
+// }
+// if(gpuIndex < 0){
+// THFI_Param* param = new THFI_Param[threadMax];
+//// THFI_Create(threadMax, param);
+// CHKERR(THFI_Create(threadMax, param), threadMax, "THFI_Create return");//old version ,default GPU device ID is 0
+// CHKERR(EF_Init(threadMax), threadMax, "EF_Create return");//old version ,default GPU device ID is 0
+// delete[] param;
+// }else{
+// THFI_Param_Ex* param = new THFI_Param_Ex[threadMax];
+// THFI_Param detParam;
+// EF_Param pParam[threadMax];
+// detParam.nMinFaceSize = 20;
+// detParam.nRollAngle = 60;
+// for(int i = 0;i<threadMax;i++){
+// param[i].tp = detParam;
+// param[i].nDeviceID = gpuIndex;
+// pParam[i].nDeviceID = gpuIndex;//GPU device ID,eg:0,1,2....
+// }
+// THFI_Create_Ex(threadMax, param);
+// CHKERR(EF_Init_Ex(threadMax,pParam), threadMax, "EF_Create return");//old version ,default GPU device ID is 0
+//// EF_Init_Ex(gpuIndexs.size(),pParam);
+// delete[] param;
+// }
+// THFP_Create(threadMax);
+
+ channel = instanceCount;
+ THFI_Param detParam;
+ detParam.nMinFaceSize = 50;
+ detParam.nRollAngle = 60;
+ if(instanceCount++ == 0){
+// if(gpuIndexs.empty()){
+ CHKERR(THFI_Create(threadMax, &detParam), threadMax, "THFI_Create return");//old version ,default GPU device ID is 0
+ CHKERR(EF_Init(threadMax), threadMax, "EF_Create return");//old version ,default GPU device ID is 0
+// }
+// else{
+// THFI_Param_Ex pParamx[gpuIndexs.size()];
+// EF_Param pParam[gpuIndexs.size()];
+// for(int i = 0; i<gpuIndexs.size(); i++){
+// pParamx[i].tp=detParam;
+// pParamx[i].nDeviceID=gpuIndexs[i];//GPU device ID,eg:0,1,2....
+// pParam[i].nDeviceID=gpuIndexs[i];//GPU device ID,eg:0,1,2....
+// }
+// int ret=THFI_Create_Ex(gpuIndexs.size(), pParamx);
+// if(ret !=gpuIndexs.size()){
+// printf("THFI_Create failed!(ret=%d)\n",ret);
+// }
+// ret=EF_Init_Ex(gpuIndexs.size(),pParam);
+// if(ret !=gpuIndexs.size()){
+// printf("EF_Init_Ex failed!(ret=%d)\n",ret);
+// }
+// }
+ }else if(instanceCount> threadMax){
+ channel = -1;
+ ERR("too many channels instanced, channel "<<channel<<" instance faild.");
+ }
+
+}
+
+CasiaFaceWrapperN::~CasiaFaceWrapperN() {
+ //#todo
+ THFI_Release();
+ THFP_Release();
+}
+
+float CasiaFaceWrapperN::compareFeature(std::vector<unsigned char> &feature1, std::vector<unsigned char> &feature2) {
+ if(feature1.size()!= EF_Size()){
+ ERR("feature1 size is not incorrect");
+ return 0;
+ }else if(feature2.size()!= EF_Size()){
+ ERR("feature2 size is not incorrect");
+ return 0;
+ }
+ return EF_Compare(feature1.data(), feature2.data());
+}
+#define COPY(NAME) memcpy(&face.NAME, &pos.NAME, sizeof (pos.NAME));s
+Features CasiaFaceWrapperN::extractFace(FaceImageN img) {
+ Features results;
+ if(channel ==-1){
+ ERR("invalid face channel, face detect faild");
+ return results;
+ }
+ vector<unsigned char> feature;
+ THFI_FacePos facesPos[30];
+// int channel;
+// for(int loop = 0;loop < threadMax;loop++){
+// channel = resourcesManager.getAvilableChannel(to_string(loop));
+// if(channel > 0){
+// cout << channel << endl;
+// break;
+// }
+// }
+ int faceNum = THFI_DetectFace(channel, img.data,24, img.width, img.height, facesPos ,30);
+ if(faceNum>0){
+ if(feature.size()!= EF_Size()*faceNum){
+ feature.resize(EF_Size()*faceNum);
+ }
+ CHKERR(EF_Extract_M(channel, img.data, img.width, img.height, 3, facesPos, feature.data(), faceNum), 1, " return");
+ for(int i = 0; i< faceNum; i++){
+ FaceFeaWithScore result;
+ THFI_FacePos& face = facesPos[i];
+ result.left = face.rcFace.left;
+ result.top = face.rcFace.top;
+ result.width = face.rcFace.right - face.rcFace.left;
+ result.height = face.rcFace.bottom - face.rcFace.top;
+ result.score = face.fAngle.confidence;
+// if(face.fAngle.confidence >= 0.6){
+ if((face.fAngle.pitch >-30 || face.fAngle.pitch <30 ) &&
+ (face.fAngle.roll >-30 || face.fAngle.roll <30 ) &&
+ (face.fAngle.yaw >-30 || face.fAngle.yaw <30 )){
+ result.feature.resize(EF_Size());
+ memcpy(result.feature.data(),feature.data()+i*EF_Size(),EF_Size());
+ results.push_back(result);
+ }
+// }
+ }
+ } else{
+ DBG("faceNum is < 0");
+ }
+ return results;
+}
+
+
+//#todo
+//Features CasiaFaceWrapperN::extractFace(FaceImageN &img, THFI_FacePos& facePos,int faceNum) {
+// return Features();
+//}
diff --git a/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h
new file mode 100644
index 0000000..87ed35e
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h
@@ -0,0 +1,48 @@
+//
+// Created by pans on 4/27/18.
+//
+
+#ifndef VIDEOSTRUCTURE_CASIAFACEWRAPPER_H
+#define VIDEOSTRUCTURE_CASIAFACEWRAPPER_H
+
+#include <THFaceImage_i.h>
+#include <THFaceProperty_i.h>
+#include <THFeature_i.h>
+
+#include <basic/util/resource/ResourcesManager.h>
+#include <libs/opencv/include/opencv2/core/mat.hpp>
+#include <atomic>
+
+#include "FaceData.hpp"
+
+class CasiaFaceWrapperN {
+public:
+ CasiaFaceWrapperN();
+
+ virtual ~CasiaFaceWrapperN();
+
+ float compareFeature(Feature &feature1,Feature &feature2);
+
+ //todo extractFace
+ Features extractFace(FaceImageN img);
+// Features extractFace(FaceImageN &img, THFI_FacePos& facePos,int faceNum);
+
+ //todo detectFace
+
+public:
+
+private:
+
+private:
+ ResourcesManager<int> resourcesManager;
+ long threadMax;
+ int nGPUDeviceID=0;
+ short channel;
+ static std::atomic_int instanceCount;
+// static std::vector<int> gpuIndexs;
+// static int channelMax;
+
+};
+
+
+#endif //VIDEOSTRUCTURE_CASIAFACEWRAPPER_H
diff --git a/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp
new file mode 100644
index 0000000..926dafa
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp
@@ -0,0 +1,135 @@
+//
+// Created by pans on 5/2/18.
+//
+
+#ifndef VIDEOSTRUCTURE_FACEDATA_HPP
+#define VIDEOSTRUCTURE_FACEDATA_HPP
+
+#include <vector>
+
+struct FaceImageN {
+ int width;
+ int height;
+ int stride;
+ unsigned char *data;
+};
+struct FaceFeaWithScore {
+ int left;
+ int top;
+ int width;
+ int height;
+ std::vector<unsigned char> feature;
+ float score;
+};
+
+typedef std::vector<FaceFeaWithScore> Features;
+
+struct FaceResult {
+ long id;
+ std::string uuid;
+ std::string tableName;
+ float confidence;
+ std::string face_img_url;
+ std::string idCard;
+ std::string alarmRet;
+};
+
+struct DbAction {
+ long id;
+ std::string tableName;
+ std::string face_img_url; //#todo 浠ュ浘鎼滃浘澶氬簳搴撴暟鎹悓姝�
+ long actionNo; // 1 add; 2, remove
+};
+
+// sequence<DbAction> DbActions;
+
+typedef std::vector<FaceResult> FaceResults;
+typedef std::map<float, FaceResult, std::greater<float>> mapFaceResults;
+
+
+namespace {
+
+
+ typedef std::vector<unsigned char> Feature;
+ typedef std::vector<unsigned char> Data;
+
+ struct POINT {
+ int x;
+ int y;
+ };
+
+ struct RECT {
+ int left;
+ int top;
+ int right;
+ int bottom;
+ };
+
+ struct FaceAngle {
+ int yaw;
+ int pitch;
+ int roll;
+ float confidence;
+ };
+
+ struct ThftResult {
+ int gender;//1-male,0-female
+ int age;//range[0-100]
+ int race; //[1-white,2-yellow,3-black]
+ int beauty_level;//range[0-100]
+ int smile_level;//range[0-100]
+ };
+
+ struct FacePos {
+ RECT rcFace;
+ POINT ptLeftEye;
+ POINT ptRightEye;
+ POINT ptMouth;
+ POINT ptNose;
+ FaceAngle fAngle;
+ int nQuality;
+ ThftResult property;
+ Data pFacialData;
+ };
+
+ typedef std::vector<FacePos> Faces;
+
+ long getTimeLong() {
+ time_t tt;
+ time(&tt);
+ tt = tt + 8 * 3600; // transform the time zone
+ return tt;
+ }
+}
+
+namespace FaceToolData {
+ enum RectSize {
+ horizontal = 10,
+ vertical = 10
+ };
+
+ class CompareData {
+ public:
+ virtual ~CompareData() {}
+ };
+
+
+ class FeatureData : public CompareData {
+ public:
+ FeatureData(int size) : feature(size) {}
+
+ Feature feature;
+ int num;
+ float threshold;
+ std::string tableNameList;
+ };
+
+ struct CompareResult {
+ std::string id;
+ std::string face_img_url;
+ std::string table_Name;
+ float score;
+ };
+}
+
+#endif //VIDEOSTRUCTURE_FACEDATA_HPP
diff --git a/QiaoJiaSystem/FaceSearchServer/Cleint.cpp b/QiaoJiaSystem/FaceSearchServer/Cleint.cpp
new file mode 100644
index 0000000..7c6a16e
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/Cleint.cpp
@@ -0,0 +1,438 @@
+//
+// Created by pans on 5/4/18.
+//
+
+//
+// Created by ps on 3/1/18.
+//
+
+
+#include <thread>
+#include "opencv2/opencv.hpp"
+#include "basic/util/BASE64/Base64.h"
+#include <basic/util/opencv/CvUtil.h>
+#include <dirent.h>
+#include <THFeature_i.h>
+#include <zconf.h>
+#include <Ice/Ice.h>
+#include <basic/util/app/AppUtil.h>
+#include <FaceData.hpp>
+#include <FaceSearchServer.h>
+#include <CasiaFaceWrapperN.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/rpc/IceRpc.hpp>
+#include <CurlDownloadImg.hpp>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+
+using namespace cv;
+using namespace std;
+
+Base64 base64;
+//void* test(void* arg){
+//#ifdef TestCode
+// IceRpcClient<AlarmServerInterface::AlarmCompareServerPrx> client("FaceDBCompare", "", 10028, "tcp");
+// auto server = client.getServer();
+//#else
+//#endif
+//
+// std::map<int,std::vector<unsigned char>> db_handle;
+// {
+// LoginDB g_dbLogin;
+// g_dbLogin.ip = "192.168.1.81";
+// g_dbLogin.port = 8066;
+// g_dbLogin.dbName = "VIDEO_STRUCTURE";
+// g_dbLogin.userName = "root";
+// g_dbLogin.pwd = "root";
+// MYSQL conn;
+// mysql_init(&conn);
+// bool connectStatus = mysql_real_connect(&conn,g_dbLogin.ip.c_str(),g_dbLogin.userName.c_str()
+// ,g_dbLogin.pwd.c_str(),g_dbLogin.dbName.c_str(),g_dbLogin.port,NULL,CLIENT_FOUND_ROWS);
+// if(connectStatus)
+// {
+// //#todo modify sql
+// string sql = "select drug_id,feature FROM o_t_p_drug_feature where 1=1 and feature is not NULL limit 500";
+// {
+// ClockTimer ct2("mysql_query");
+// int ret=mysql_query(&conn,sql.data());
+// if(ret == 0){
+// printf("OK\n");
+// }else{
+// printf("error::%s\n",mysql_error(&conn));
+// }
+// }
+//
+// //灏嗘煡璇㈠埌鐨勭粨鏋滈泦瀛樻斁鍦ㄤ复鏃跺彉閲忎腑
+// MYSQL_RES *result = NULL;
+// result = mysql_store_result( &conn );
+//
+// //寰楀埌鏌ヨ鍑烘潵鎵�鏈夋暟鎹殑鏉℃暟
+// int row_count = mysql_num_rows(result);
+// if (row_count <= 0) {
+// INFO("not found data!!!")
+// return NULL;
+// }
+// //鏄剧ず琛ㄤ腑鐨勬墍鏈夋暟鎹�
+// {
+// ClockTimer ct2("mysql_fetch_row");
+// int loop = 0;
+//
+// MYSQL_ROW row = NULL;
+// row = mysql_fetch_row( result );
+// while ( NULL != row )
+// {
+// string ft = row[1];
+// string str2;
+// int a = ft.length();
+// str2 = base64.Decode(ft.data(),ft.length());
+//
+// FaceFeature tmp;
+// tmp.resize(str2.length());
+// memset(tmp.data(), 0,str2.length());
+// memcpy(tmp.data(),str2.data(),str2.length());
+// int b = tmp.size();
+// db_handle[atoi(row[0])] = tmp;
+// tmp.clear();
+// row = mysql_fetch_row( result );
+// }
+//
+// mysql_free_result(result);
+// }
+//
+// }else{
+// printf("connectStatus error\n");
+// }
+//
+// {
+// ClockTimer ct3("close");
+// mysql_close(&conn);
+// }
+// }
+//
+// ::AlarmServerInterface::AlarmInformation t_alarmData;
+//
+// t_alarmData.carmera_id = "1";
+// t_alarmData.create_time = "2018-03-25 18:07:53";
+// t_alarmData.alarm_url = "vvvvvadsfasd";
+// t_alarmData.resoure_id = "vvvvvadsfasd";
+// t_alarmData.flag_eq_pf = "aaa";
+// int loop = 0;
+// while(true){
+// for(auto item : db_handle){
+// if(loop++ > 20 ){
+// break;
+// }
+// t_alarmData.faceFeature = item.second;
+// int c = t_alarmData.faceFeature.size();
+// INFO("sumbitData"<<item.first);
+// server->sumbitData(t_alarmData);
+// sleep(1);
+// }
+//// while(loop <= 20)
+//// {
+//// ::AlarmServerInterface::AlarmRule iceP_alarmRule;
+//// ::AlarmServerInterface::PersonAlarmRule m;
+//// iceP_alarmRule.fllow_id = to_string(loop++);
+//// iceP_alarmRule.tableName = "o_t_p_fllow22";
+//// iceP_alarmRule.rule_Type = "0";
+//// server->addRules(iceP_alarmRule);
+//// }
+// loop=0;
+// }
+//}
+//
+
+CvUtil cvutil;
+
+int main(int argc, char *argv[]) {
+ SAVE_APP_ARGS
+
+ ENABLEGLOG("./log/");
+ Ice::CommunicatorHolder ich(argc, argv);
+
+// Ice::ObjectPrx base = ich->stringToProxy("FaceSearchServer");
+ IceRpcClient<FaceSearch::FaceFeatureSearchServerPrx> client("faceCmServer", "", 10004, "tcp");
+ auto server = client.getServer();
+// auto server = FaceSearch::FaceFeatureSearchServerPrx::checkedCast(base);
+
+
+ string str_uuid;
+ uuid_t t_uuid;
+ char str[36];
+ uuid_generate(t_uuid);
+ uuid_unparse(t_uuid, str);
+ str_uuid = str;
+
+ Json::Value t_json;
+ t_json["Id"] = str_uuid; //涓婚敭
+//#todo
+ t_json["FaceFeature"] = "base64";//纭瀵逛笉瀵� 浜鸿劯鐗瑰緛杞垚瀛楃涓诧紒锛侊紒//鏍煎紡杞寲
+
+ t_json["picName"] = "wait todo";
+
+ t_json["personId"] = "wait todo";//鍏宠仈搴曞簱浜哄憳id,浜鸿劯id
+ t_json["BaseName"] = "wait todo";//鍏宠仈搴曞簱琛ㄥ悕
+
+ t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store
+ t_json["likePer"] = "";//浜哄憳鐩镐技搴� Score
+ t_json["likeDate"] = "2018-01-01 01:01:01";//姣旇緝鏃堕棿
+ t_json["picAddress"] = "wait todo";//鎶撴媿鍦板潃
+ t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞
+ t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞
+ t_json["picSmUrl"] = "wait todo";//浜哄憳鎶撳皬鍥�
+ t_json["picDate"] = "2018-01-01 01:01:01";
+ t_json["content"] = "wait todo";
+ t_json["viType"] = "1";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+ t_json["personIsHub"] = "1";//1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡
+
+
+ //faceExtractElement.setProperty("dev_id", str_device_id);
+ //faceExtractElement.setProperty("cg_id", str_ch_id);
+ t_json["videoNum"] = "";//Vide缂栧彿 澶栭敭
+ t_json["videoReqNum"] = "123456";//Video璁惧缂栧彿
+ t_json["ChannlId"] = "33";//閫氶亾id
+ t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+ //浜鸿劯灞炴��
+ t_json["Age"] = "18";//妫�娴嬬殑骞撮緞 搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+ t_json["Gender"] = "1";//妫�娴嬬殑鎬у埆 涓虹┖ 鏃犳娴嬬粨鏋�
+ t_json["BeautyLevel"] = "5";//妫�娴嬬殑缇庡寲姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+ t_json["SimleLevel"] = "25";//妫�娴嬬殑寰瑧姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+ t_json["Race"] = "1";//妫�娴嬬殑绉嶆棌 搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+
+
+ DBG(t_json.toStyledString());
+
+
+// return 0;
+ appPref.setLongData("thread.max", 1);
+ CasiaFaceWrapperN t_CasiaFaceWapper;
+// string test1 = "http://192.168.1.65:8888/group1/M00/04/52/wKgBQVr5J-WAJ4lQAAAObkm3j38169.jpg";
+// string test2 = "http://192.168.1.65:8888/group1/M00/04/52/wKgBQVr5JGOAXmx9AAAK0Xp3QhA271.jpg";
+// CurlDownloadImg curlDownloadImg;
+ {
+// auto curlImg = curlDownloadImg.download_jpeg(const_cast<char *>(test2.c_str()));
+// cout << " image is " << test1 << endl;
+ long t_id = 0;
+// if (curlImg.all > 0) {
+ if (true) {
+ Mat image = imread("/home/bsk/work/development/c++/Qt-test/testFastDfs/build/fastdfs/18.jpg");
+// cvutil.buffer2CvMat(curlImg.buffer, image);
+
+ FaceImageN faceImage2{image.cols, image.rows, image.step, image.data};
+// auto res = t_CasiaFaceWapper.extractFace(faceImage2);
+ auto faceResults = t_CasiaFaceWapper.extractFace(faceImage2);
+
+ DBG("faceResults" << faceResults.size());
+ for (auto item : faceResults) {
+ ::FaceSearch::Data t_fea;
+ t_fea.resize(item.feature.size());
+ memcpy(t_fea.data(), item.feature.data(), item.feature.size());
+ try {
+ std::vector<::std::string> tables{"aaa1", "TestFace2", "TestFace3", "TestFace4"};
+ auto re = server->faceSearchTopN(t_fea, t_json.toStyledString(), 1, 0.8);
+ INFO("faceSearchMax " << re.size());
+ for (auto item : re) {
+ INFO("faceSearchMax id " << (item.uuid));
+ INFO("faceSearchMax confidence " << (item.confidence));
+ INFO("faceSearchMax tableName " << (item.tableName));
+ }
+ // sleep(3);
+// ::std::vector<::std::string> tables2{"aaa1", "TestFace2", "TestFace3", "TestFace4"};
+// auto re2 = server->faceSearchTopN(t_fea, 5, tables2);
+// INFO("faceSearchTopN " << re2.size());
+// for (auto item : re2) {
+// INFO("faceSearchTopN id " << (item.uuid));
+// INFO("faceSearchTopN confidence " << (item.confidence));
+// INFO("faceSearchTopN tableName " << (item.tableName));
+// }
+ } catch (std::exception ex) {
+ ERR(ex.what());
+ }
+ t_fea.clear();
+ }
+ }
+ }
+ return 0;
+}
+
+//void test22333() {
+//
+// int loop = 0;
+////#todo
+// while (1) {
+// string t_path = "./img/";
+// DIR *dp = opendir(t_path.c_str());
+// if (dp != NULL) {
+// struct dirent *ep;
+// int loop = 0;
+// while (
+// ep = readdir(dp)
+// ) {
+// string path(ep->d_name);
+// if (path.find(".jpg") == std::string::npos) {
+// ERR("Couldn't find jpg.");
+// continue;
+// } else {
+// printf("jpg url: %s\n", path.
+//
+// c_str()
+//
+// );
+// }
+//
+// string tName(t_path);
+// tName.
+// append(path);
+// Mat img1 = imread(tName); // ST_PIX_FMT_BGR888
+// if (!img1.data) {
+// printf("read first image file failed. url: %s\n", tName.
+//
+// c_str()
+//
+// );
+// continue;
+// } else {
+// INFO("read img ok!");
+// }
+// FaceImageN faceImage{img1.cols, img1.rows, img1.step, img1.data};
+//// m_casiaFaceWrapper.extractFace(faceImage);
+// auto faceResults = t_CasiaFaceWapper.extractFace(faceImage);
+//
+// DBG("faceResults" << faceResults.size());
+// for (
+// auto item
+// : faceResults) {
+// ::FaceSearch::Data t_fea;
+// t_fea.
+// resize(item
+// .feature.
+//
+// size()
+//
+// );
+// memcpy(t_fea
+// .
+//
+// data(), item
+//
+// .feature.
+//
+// data(), item
+//
+// .feature.
+//
+// size()
+//
+// );
+// try {
+// ::std::vector<::std::string> tables{"o_t_p_escape", "TestFace2", "TestFace3", "TestFace4"};
+// auto re = server->faceSearchMax(t_fea, tables);
+// INFO("faceSearchMax " << re.size());
+// for (
+// auto &item
+// : re) {
+// INFO("faceSearchMax id " << (item.id));
+// INFO("faceSearchMax confidence " << (item.confidence));
+// INFO("faceSearchMax tableName " << (item.tableName));
+// }
+//// sleep(3);
+// ::std::vector<::std::string> tables2{"o_t_p_escape", "TestFace2", "TestFace3", "TestFace4"};
+// auto re2 = server->faceSearchTopN(t_fea, 5, tables2);
+// INFO("faceSearchTopN " << re2.size());
+// for (
+// auto &item
+// : re2) {
+// INFO("faceSearchTopN id " << (item.id));
+// INFO("faceSearchTopN confidence " << (item.confidence));
+// INFO("faceSearchTopN tableName " << (item.tableName));
+// }
+// } catch (
+// std::exception ex
+// ) {
+// ERR(ex.what());
+// }
+// t_fea.
+//
+// clear();
+////#todo if sc add message
+////else nothing
+// }
+//// extractFace(FaceImage image, vector<unsigned char>& feature, int& faceNum);
+//// vector<unsigned char> feature;
+//// vector<unsigned char> feature2;
+//// cvutil.cvMat2Buffer(img1,feature);
+//// auto test = feature.size();
+////// DBG(test)
+//// ::FaceSearch::Data t_fea;
+//// t_fea.resize(feature.size());
+//// memcpy(t_fea.data(),feature.data(),feature.size());
+//// try {
+////// server->addFace(t_fea,"aaa");addFaceWithId
+////// server->addFaceWithId(t_fea,(++loop),"aaa");
+////// sleep(1);
+////// server->addFaceWithId(t_fea,(loop),"bbb");
+//// ::std::vector< ::std::string> tables{"aaa","bbb"};
+//// auto re = server->faceSearchMax(t_fea,tables);
+////
+//// INFO("faceSearchMax " << re.size() );
+//// for (auto& item : re) {
+//// INFO("faceSearchMax id " << ( item.id));
+//// INFO("faceSearchMax confidence " << ( item.confidence));
+//// INFO("faceSearchMax tableName " << ( item.tableName));
+//// }
+//// sleep(3);
+//// }catch (std::exception ex){
+//// ERR(ex.what());
+//// }
+//// feature.clear();
+//// break;
+//// int faceNum;
+//// FaceImageN faceImage {img1.cols, img1.rows, img1.step, img1.data};
+//// //#todo pthread
+//// auto res = t_CasiaFaceWapper.extractFace(faceImage);
+//// for (auto item : res) {
+////// item.feature
+//////addFace(const ::FaceSearch::Data& iceP_jpgData, const ::std::string& iceP_tableName, const ::Ice::Context& context = ::Ice::noExplicitContext)
+//// ::FaceSearch::Data t_fea;
+//// t_fea.resize(item.feature.size());
+//// memcpy(t_fea.data(),item.feature.data(),item.feature.size());
+////
+//// try {
+//// server->addFace(t_fea,"aaa");
+//// INFO("add");
+//// }catch (std::exception ex){
+//// ERR(ex.what());
+//// }
+//// }
+//
+// printf("\n");
+// printf("\n");
+// printf("\n");
+// printf("\n");
+// }
+// closedir(dp);
+// } else {
+// ERR("Couldn't open the directory.");
+// }
+//// break;
+// sleep(10);
+// }
+//
+//
+//
+//
+//// try {
+//// long out;
+//// auto temp = server2->getDbActions(000,out);
+//// cout << temp.size() << endl;
+//// cout << out << endl;
+//// INFO("getDbActions");
+//// }catch (std::exception ex){
+//// ERR(ex.what());
+//// }
+////getchar();
+// return 0;
+//
+//}
+
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
new file mode 100644
index 0000000..4cab786
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
@@ -0,0 +1,265 @@
+//
+// Created by ps on 2/26/18.
+//
+
+#include <cstring>
+#include <THFeature_i.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/ShareMemory/ShareMemoryTool.hpp>
+#include "FaceDBCompareServer.h"
+
+using namespace std;
+
+FaceDBCompareServer::FaceDBCompareServer() : m_erlangDbTool(nullptr), m_sqliteFaceEncap(nullptr) {
+
+}
+
+FaceDBCompareServer::FaceDBCompareServer(ErlangTool::ErlangDbTool *erlangDbTool) : m_erlangDbTool(erlangDbTool),
+ m_sqliteFaceEncap(nullptr) {
+
+}
+
+FaceDBCompareServer::FaceDBCompareServer(SqliteFaceEncap *sqliteFaceEncap) : m_erlangDbTool(nullptr),
+ m_sqliteFaceEncap(sqliteFaceEncap) {
+
+}
+
+//FaceDBCompareServer::FaceDBCompareServer(Ice::CommunicatorHolder& ich) : minThreshold(10) {
+//#ifdef TestCode
+//
+//#else
+// try {
+// base_alarm = ich->stringToProxy("ServerAlarm");
+// }catch(std::exception ex){
+// ERR("ServerAlarm connceticon fail" << ex.what());
+// };
+//#endif
+//}
+
+FaceDBCompareServer::~FaceDBCompareServer() {
+
+}
+
+FaceResults FaceDBCompareServer::getTopResult(std::thread::id key) {
+ if (m_dbRWLocks.find(key) == m_dbRWLocks.end()) {
+ m_dbRWLocks[key] = RWLock();
+ }
+ RWLock &t_rwl = m_dbRWLocks[key];
+ t_rwl.wrlock();
+ FaceResults t_result = topResult[key];
+ topResult.erase(key);
+ t_rwl.unlock();
+ return t_result;
+}
+
+//#todo map 1->2 modify 2->1
+bool FaceDBCompareServer::compare(thread::id key, AlarmData *alarmData, int topN) {
+ if (m_dbRWLocks.find(key) == m_dbRWLocks.end()) {
+ m_dbRWLocks[key] = RWLock();
+ }
+ RWLock &t_rwl = m_dbRWLocks[key];
+// ClockTimer clockTimer("compare ");
+ RWLock t_rwLock;
+
+ m_rwLock.rdlock();
+ mapFaceResults t_compareResults;
+ if (topN > 1) {
+ //topN
+ parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
+ //#todo
+ double sc = 0;
+ for (auto &t_fea : data.features) {
+ double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
+ if (t_sc > sc)
+ sc = t_sc;
+ }
+// FaceResult tface{data.face_id, data.uuid, alarmData->tableName, sc, false};
+ FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
+ t_rwLock.wrlock();
+ //#todo
+ if (sc < t_compareResults.end()->second.confidence) {
+ t_rwLock.unlock();
+ return;
+ }
+ t_compareResults.insert(make_pair(tface.confidence, tface));
+ //#todo 10
+ if (t_compareResults.size() > topN) {
+ t_compareResults.erase((--t_compareResults.end()), t_compareResults.end());
+ }
+ t_rwLock.unlock();
+ });
+ } else {
+ //Max
+ float maxScore = 0;
+ parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
+ //#todo
+ double sc = 0;
+ for (auto &t_fea : data.features) {
+ double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
+ if (t_sc > sc) sc = t_sc;
+ }
+ FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
+ t_rwLock.wrlock();
+ if (sc < maxScore) {
+ t_rwLock.unlock();
+ return;
+ } else {
+ t_compareResults.clear();
+ t_compareResults.insert(make_pair(tface.confidence, tface));
+ maxScore = t_compareResults.begin()->second.confidence;
+ }
+ t_rwLock.unlock();
+ });
+ }
+ m_rwLock.unlock();
+
+ int maxSearchFaces = alarmData->num;
+
+ t_rwl.wrlock();
+ auto &t_topResult = topResult[key];
+ t_topResult.clear();
+ for (auto &item : t_compareResults) {
+ auto &it = item.second;
+ //#todo
+// if (it.confidence <= 0.6) {
+// continue;
+// }
+ FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, it.idCard, it.alarmRet};
+ //cout << __FUNCTION__ << " -> " << __LINE__ << " -> scroe" << it.confidence << endl;
+ t_topResult.push_back(t_CR);
+ }
+ while (topResult.size() > maxSearchFaces)
+ t_topResult.pop_back();
+ t_rwl.unlock();
+ return true;
+}
+
+bool FaceDBCompareServer::compare(std::thread::id key, AlarmData *alarmData) {
+ if (m_dbRWLocks.find(key) == m_dbRWLocks.end()) {
+ m_dbRWLocks[key] = RWLock();
+ }
+ RWLock &t_rwl = m_dbRWLocks[key];
+// ClockTimer clockTimer("compare ");
+ t_rwl.wrlock();
+ RWLock t_rwLock;
+ mapFaceResults t_compareResults;
+ m_rwLock.rdlock();
+ parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
+ double sc = 0;
+ for (auto &t_fea : data.features) {
+ double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
+ if (t_sc > sc)sc = t_sc;
+ }
+ FaceResult tface{data.face_id, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
+// FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl,false};
+ t_rwLock.wrlock();
+ if (sc < alarmData->threshold) {
+ t_rwLock.unlock();
+ DBG("return");
+ return;
+ }
+ if (t_compareResults.size() > alarmData->num) {
+ t_compareResults.erase((--t_compareResults.end()), t_compareResults.end());
+ }
+ t_compareResults.insert(make_pair(tface.confidence, tface));
+ t_rwLock.unlock();
+ });
+ m_rwLock.unlock();
+ int maxSearchFaces = alarmData->num;
+ auto &t_topResult = topResult[key];
+ t_topResult.clear();
+ for (auto &item : t_compareResults) {
+ auto &it = item.second;
+ FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, it.idCard, it.alarmRet};
+// FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, ""};
+ t_topResult.push_back(t_CR);
+ }
+// while (t_topResult.size() > maxSearchFaces)
+// t_topResult.pop_back();
+ return true;
+}
+
+void FaceDBCompareServer::loadDBData(std::string str_config) {
+ string log = "loadDBData " + str_config;
+ ClockTimer clk(log);
+
+ Json::Value t_json;
+ Json::FastWriter writer;
+ Json::Reader reader;
+
+ if (reader.parse(str_config, t_json)) {
+
+ m_rwLock.wrlock();
+ if (t_json["\"syncTpye\""].type() == Json::nullValue) {
+ auto str_tab = t_json["\"tableName\""].asString();
+ m_tableName = str_tab.substr(1, str_tab.length() - 2);//.append("_fea");
+
+ string tet = "./syncDBClient ";
+ string str_json = writer.write(t_json);
+ tet.append("\"" + str_json.substr(0, str_json.length() - 1) + "\" ");
+ INFO(tet);
+ system(tet.c_str());
+ dataMap.clear();
+ try {
+ // init
+ BISTL::BiMapFeaData biMapFeaData(m_tableName);
+ auto mymap = biMapFeaData.getMap();
+ auto size = mymap->size();
+ //#todo
+ for (auto it = mymap->begin(); it != mymap->end(); it++) {
+ string str_uuid(it->second.m_id.data());
+ string ft(it->second.m_feature.data());
+ string imgUrl(it->second.m_imgUrl.data());
+ string strIdCard(it->second.m_idcard.data());
+ string str2;
+ str2 = base64.Decode(ft.data(), ft.length());
+ std::vector<unsigned char> t_fea;
+ t_fea.resize(str2.size());
+ memcpy(t_fea.data(), str2.data(), str2.size());
+ auto &test = dataMap[str_uuid];
+ test.uuid = str_uuid;
+ test.features.push_back(t_fea);
+ test.faceUrl = imgUrl;
+ test.idcard = strIdCard;
+ }
+ } catch (const std::exception &e) {
+ printf("Exception:%s\n", e.what());
+ BISTL::shared_memory_object::remove(m_tableName.c_str());
+ }
+ BISTL::shared_memory_object::remove(m_tableName.c_str());
+ appPref.setIntData(m_tableName, 1);
+ DBG(m_tableName << " size is " << dataMap.size());
+ } else {
+ //#todo get sqlite3 data
+ m_tableName = t_json["tableName"].asCString();
+ auto t_res = m_sqliteFaceEncap->getFacesFromTable(m_tableName);
+ auto t_faceInfoCache = m_sqliteFaceEncap->getFaceInfoFromTable(m_tableName);
+ auto &res = *t_res;
+ //#todo
+ DBG(m_tableName << "clear before size is " << dataMap.size());
+ dataMap.clear();
+ DBG(m_tableName << "clear after size is " << dataMap.size());
+ for (auto &item : res) {
+ auto &t_sen = item.second;
+ std::vector<unsigned char> t_fea;
+ t_fea.resize(t_sen.faceFeature.size());
+ memcpy(t_fea.data(), t_sen.faceFeature.data(), t_sen.faceFeature.size());
+ auto &test = dataMap[t_sen.uuid];
+ test.uuid = t_sen.uuid;
+ test.features.push_back(t_fea);
+ test.faceUrl = t_sen.faceurl;
+ test.idcard = t_faceInfoCache[t_sen.uuid].idCard;
+ }
+ appPref.setIntData(m_tableName, 1);
+ DBG(m_tableName << " size is " << dataMap.size());
+ }
+ m_rwLock.unlock();
+ } else {
+ ERR("json format error :: " << str_config);
+ appPref.setIntData(str_config, 1);
+ }
+
+}
+
+
+
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h
new file mode 100644
index 0000000..7940970
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h
@@ -0,0 +1,64 @@
+//
+// Created by ps on 2/26/18.
+//
+
+#ifndef COMPARETEST_FACEDBCOMPARESERVER_H
+#define COMPARETEST_FACEDBCOMPARESERVER_H
+
+#include <pthread.h>
+
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <FaceSearchServer.h>
+#include "AlarmServer.hpp"
+#include "CasiaFaceWrapper/CasiaFaceWrapperN.h"
+#include <basic/util/thread/RWLock.hpp>
+#include <ErlangDbTool.h>
+#include <SqliteFaceEncap.h>
+
+class FaceDBCompareServer : public AlarmServer {
+
+public:
+ FaceDBCompareServer();
+
+ FaceDBCompareServer(SqliteFaceEncap *);
+
+ FaceDBCompareServer(ErlangTool::ErlangDbTool *);
+
+ ~FaceDBCompareServer();
+
+ virtual bool compare(std::thread::id key, AlarmData *alarmData, int topN);
+
+ bool compare(std::thread::id key, AlarmData *alarmData);
+
+ FaceResults getTopResult(std::thread::id key);
+
+private:
+ virtual void loadDBData(std::string str_config);
+
+protected:
+ CasiaFaceWrapperN m_casiaFaceWapper;
+ std::string m_tableName;
+
+ int fea_size;
+ RWLock m_rwLock;
+ std::mutex topResultMtx;
+ std::map<std::thread::id, FaceResults> topResult;
+ std::map<std::thread::id, RWLock> m_dbRWLocks;
+
+ ErlangTool::ErlangDbTool *m_erlangDbTool;
+ SqliteFaceEncap *m_sqliteFaceEncap;
+
+};
+
+static bool getRet(std::string startTime, std::string endTime) {
+ auto crrentTime = AppUtil::getTimeSecString();
+
+ if (crrentTime.compare(startTime) > 0 && crrentTime.compare(endTime) < 0) {
+ return true;
+ }
+ return false;
+
+}
+
+#endif //COMPARETEST_FACEDBCOMPARESERVER_H
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp
new file mode 100644
index 0000000..3047650
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp
@@ -0,0 +1,463 @@
+//
+// Created by pans on 4/27/18.
+//
+
+#include <iostream>
+
+#include "jsoncpp/json/json.h"
+
+#include <basic/debug/Debug.h>
+#include <basic/util/app/AppPreference.hpp>
+#include "FaceFeatureSearchServerI.h"
+
+using namespace std;
+
+static std::string t_cNodeName = "FaceSearch";
+
+void erlangCallBackFunc(std::string) {
+ DBG("erlangCallBackFunc");
+ pthread_cond_signal(&(func_cond));
+ pthread_mutex_unlock(&(func_cond_mutex));
+}
+
+FaceFeatureSearchServerI::FaceFeatureSearchServerI()
+ : m_erlangDbTool(appConfig.getStringProperty("erlPath"), appConfig.getStringProperty("erlNode"),
+ appConfig.getStringProperty("erlCookie"), t_cNodeName), m_retUpdatePthread(true),
+ pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")), m_sqliteFaceEncap("LocalDataDB") {
+
+ auto erlFatherNode = appConfig.getStringProperty("erlFatherNode");
+ if (m_erlangDbTool.initErlang() == 1) {
+ m_erlangDbTool.startNodeDb(erlFatherNode);
+ }
+
+ m_erlangDbTool.test(&func_cond, &func_cond_mutex);
+
+ loadFeatureData(this);
+}
+
+FaceFeatureSearchServerI::FaceFeatureSearchServerI(Ice::CommunicatorPtr &ich, string nodeName, string cookie)
+ : m_erlangDbTool(nodeName, cookie, t_cNodeName), m_retUpdatePthread(true),
+ pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")),
+ m_sqliteFaceEncap("LocalDataDB") {
+
+// try {
+// std::string identity2 = ich->getProperties()->getProperty("user.FaceData");
+// DBG(identity2);
+// base_FaceMemoryData = ich->stringToProxy(appPref.getStringData("user.FaceData"));
+// } catch (std::exception ex) {
+// ERR("base_FaceMemoryData connceticon fail" << ex.what());
+// };
+
+ loadFeatureData(this);
+}
+
+FaceFeatureSearchServerI::~FaceFeatureSearchServerI() {
+ t_live_ret = false;
+}
+
+//#todo 浼樺寲
+::FaceSearch::FaceResults
+FaceFeatureSearchServerI::faceSearchMax(const ::FaceSearch::Data &feature, const ::std::string &info_json,
+ const ::Ice::Current &) {
+ thread::id key = std::this_thread::get_id();
+ ClockTimer clockTimer("faceSearchMax");
+ ::FaceSearch::FaceResults results;
+ FaceResults t_TableCompareResult;
+ AlarmData featureData;
+ featureData.num = 1;
+ featureData.feature.resize(feature.size());
+ memcpy(featureData.feature.data(), feature.data(), feature.size());
+
+ for (auto &it : m_faceFCMAP) {
+ auto &t_FaceFC = it.second;
+ auto t_tableInfo = m_tableType[it.first];
+ bool ret = getRet(t_tableInfo.startTime, t_tableInfo.endTime);
+ if (ret) {
+ bool alarmRet = atoi(t_tableInfo.bwType.c_str());
+ //#todo 闈炲悓姝ュ簱鏄惁闇�瑕佹瘮杈冿紵
+ t_FaceFC->compare(key, &featureData, 1);
+ auto t_results = t_FaceFC->getTopResult(key);
+ for (auto &t_item : t_results) {
+ t_item.tableName = it.first;
+ //#todo baojing zhuangtai ?
+ t_item.alarmRet = ret;
+ t_TableCompareResult.push_back(t_item);
+ }
+ }
+ }
+
+// DBG("t_TableCompareResult size" << t_TableCompareResult.size());
+ for (auto itor = t_TableCompareResult.begin(); itor != t_TableCompareResult.end(); ++itor) {
+ float new_confidence = itor->confidence;
+ auto rtTR = results.rbegin();
+ if (!results.empty()) {
+ auto temp = rtTR->confidence;
+ while (new_confidence > temp) {
+ ++rtTR;
+ if (rtTR == (results.rend() + 1)) {
+ rtTR--;
+ break;
+ } else {
+// DBG(" sc is "<< new_confidence << " > " << temp);
+ }
+ temp = rtTR->confidence;
+ }
+ } else {
+// INFO("topResult is null");
+ }
+ auto itTR(rtTR.base());
+ ::FaceSearch::FaceResult t_faceCR;
+ t_faceCR.id = itor->id;
+ t_faceCR.uuid = itor->uuid;
+ t_faceCR.tableName = itor->tableName;
+ t_faceCR.confidence = itor->confidence;
+ DBG("compare results tablename is " << t_faceCR.tableName << " id is " << t_faceCR.uuid << " sc is"
+ << t_faceCR.confidence);
+ results.insert(itTR, t_faceCR);
+ }
+
+
+ //#todo send message
+
+ return results;
+}
+
+//#todo 浼樺寲
+::FaceSearch::FaceResults
+FaceFeatureSearchServerI::faceSearchTopN(const ::FaceSearch::Data &feature, const ::std::string &info_json,
+ ::Ice::Int topN, ::Ice::Float score, const ::Ice::Current &) {
+ ClockTimer clockTimer("faceSearchTopN " + to_string(score) + " :");
+ INFO("faceSearchTopN start");
+ thread::id key = std::this_thread::get_id();
+ ::FaceSearch::FaceResults results;
+ FaceResults t_TableCompareResult;
+ AlarmData featureData;
+ featureData.num = topN;
+ featureData.feature.resize(feature.size());
+ memcpy(featureData.feature.data(), feature.data(), feature.size());
+
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(info_json, value)) {
+ //#todo
+
+ m_rwLock.rdlock();
+ std::string feature_base64;
+ feature_base64 = base64.Encode(feature.data(), feature.size());
+ value["FaceFeature"] = feature_base64;
+ DBG("auto &it : m_faceFCMAP start " << m_faceFCMAP.size());
+ //#todo lock
+ for (auto &it : m_faceFCMAP) {
+ auto &t_FaceFC = it.second;
+ auto t_tableInfo = m_tableType[it.first];
+ bool ret = getRet(t_tableInfo.startTime, t_tableInfo.endTime);
+ if (ret) {
+ string t_alarmRet = t_tableInfo.bwType;
+// bool alarmRet = atoi(t_tableInfo.bwType.c_str());
+ //#todo 闈炲悓姝ュ簱鏄惁闇�瑕佹瘮杈冿紵
+
+ DBG("m_faceFCMAP compare start " << it.first);
+ t_FaceFC->compare(key, &featureData, topN);
+ DBG("m_faceFCMAP compare end " << it.first);
+
+ auto t_results = t_FaceFC->getTopResult(key);
+ for (auto &t_item : t_results) {
+ t_item.tableName = it.first;
+ t_item.alarmRet = t_alarmRet;
+ t_TableCompareResult.push_back(t_item);
+ }
+ } else {
+ INFO("m_faceFCMAP ret is false " << it.first);
+ }
+ }
+ m_rwLock.unlock();
+ DBG("auto &it : m_faceFCMAP end");
+
+// DBG("t_TableCompareResult size" << t_TableCompareResult.size());
+ //sort_all_results
+ for (auto itor = t_TableCompareResult.begin(); itor != t_TableCompareResult.end(); ++itor) {
+ float new_confidence = itor->confidence;
+ auto rtTR = results.rbegin();
+ if (!results.empty()) {
+ auto temp = rtTR->confidence;
+ while (new_confidence > temp) {
+ ++rtTR;
+ if (rtTR == (results.rend() + 1)) {
+ rtTR--;
+ break;
+ } else {
+ }
+ temp = rtTR->confidence;
+ }
+ } else {
+ ERR("topResult is null");
+ }
+ auto itTR(rtTR.base());
+ ::FaceSearch::FaceResult t_faceCR;
+ t_faceCR.id = itor->id;
+ t_faceCR.uuid = itor->uuid;
+ t_faceCR.tableName = itor->tableName;
+ t_faceCR.confidence = itor->confidence;
+ //#todo url idcard
+ t_faceCR.imgUrl = itor->face_img_url;
+ t_faceCR.idcard = itor->idCard;
+ t_faceCR.alarmRet = itor->alarmRet;
+// DBG("compare results tablename is " << t_faceCR.tableName << " id is " << t_faceCR.uuid << " sc is"
+// << t_faceCR.confidence);
+ results.insert(itTR, t_faceCR);
+ }
+ bool retface = true;
+// cout << __FUNCTION__ << " -> " << __LINE__ << " -> " << results.size() << endl;
+ //#todo send message
+ if (results.size() > 0) {
+ for (auto &item : results) {
+ //#todo 寰楀垎姣旇緝锛屽簲璇ュ湪compare涓繘琛�
+ if (item.confidence < score) {
+ //#todo test
+ auto str_uuid = value["Id"].asString();
+ value["personIsHub"] = "4";
+ value["likePer"] = 0.0;
+// DBG(value.toStyledString());
+ cout << __FUNCTION__ << " -> " << __LINE__ << " -> " << "value.toStyledString() "
+ << value.toStyledString() << endl;
+ retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
+ str_uuid);
+ break;
+ }
+ value["personId"] = item.uuid.size() > 0 ? item.uuid : "";//鍏宠仈搴曞簱浜哄憳id,浜鸿劯id
+
+// string tmp_tableName = item.tableName;
+// if (tmp_tableName.find("lt_") == 0) {
+// tmp_tableName = tmp_tableName.insert(tmp_tableName.find("lt_") + 3, "::");
+// value["BaseName"] = tmp_tableName;//鍏宠仈搴曞簱琛ㄥ悕
+// } else {
+// value["BaseName"] = item.tableName.size() > 0 ? item.tableName : "";//鍏宠仈搴曞簱琛ㄥ悕
+// }
+
+ value["BaseName"] = item.tableName.size() > 0 ? item.tableName : "";//鍏宠仈搴曞簱琛ㄥ悕
+
+ value["likePer"] = item.confidence > 0 ? item.confidence : 0.0;
+ value["personPicUrl"] = item.imgUrl.size() > 0 ? item.imgUrl : "";//diku tupian
+ value["idcard"] = item.idcard.size() > 0 ? item.idcard : "";//diku tupian
+ //濡傛灉 alarmRet 涓嶄负绌烘妸 浠栫殑鍊� 鏀惧叆 personIsHub,鍚﹀垯涓�4
+ value["personIsHub"] = item.alarmRet.size() > 0 ? item.alarmRet : "4";
+
+ auto str_uuid = value["Id"].asString();
+// DBG(value.toStyledString());
+
+ cout << __FUNCTION__ << " -> " << __LINE__ << " -> " << "value.toStyledString() "
+ << value.toStyledString() << "\n score " << score << endl;
+// DBG("score " << score);
+ retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
+ str_uuid);
+ break;
+ }
+ } else {
+ auto str_uuid = value["Id"].asString();
+ value["personIsHub"] = "4";
+ value["likePer"] = 0.0;
+ DBG(value.toStyledString());
+// cout << __FUNCTION__ << " -> " << __LINE__ << " -> " << "value.toStyledString() "
+// << value.toStyledString() << endl;
+ retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
+ str_uuid);
+ }
+ if (!retface) {
+ ERR("insert error");
+ } else {
+ cout << __FUNCTION__ << " -> " << __LINE__ << " -> " << "retface " << retface << endl;
+ };
+ } else {
+ ERR("json is error" << info_json);
+ }
+
+
+
+
+// for (auto &item : t_tables) {
+// DBG(item);
+// }
+ return results;
+}
+
+bool FaceFeatureSearchServerI::loadFeatureData(FaceFeatureSearchServerI *faceFea) {
+ ErlangTool::map_TabDataCache dataBaseCache = faceFea->m_erlangDbTool.findAllDatabase();
+ if (dataBaseCache.size() < 0 && faceFea->m_retUpdatePthread) {
+ faceFea->m_retUpdatePthread = false;
+ std::thread thd(dataUpdate, faceFea);
+ thd.detach();
+ }
+ auto typeInfoCache = faceFea->m_erlangDbTool.findAllTypeInfo();
+ faceFea->m_tableType.clear();
+ string str_config = faceFea->m_erlangDbTool.getConfigJsonString();
+
+
+ Json::Value t_json;
+ Json::FastWriter writer;
+ Json::Reader reader;
+
+ faceFea->m_rwLock.wrlock();
+ if (reader.parse(str_config, t_json)) {
+ for (auto &item : dataBaseCache) {
+ TableInfo tabInfo;
+ tabInfo.tableName = item.first;
+ tabInfo.startTime = item.second.startTime;
+ tabInfo.endTime = item.second.endTime;
+// tabInfo.bwType = item.second.bwType = typeInfoCache.find(item.first)->second.bwType;
+ tabInfo.bwType = item.second.bwType;//= typeInfoCache.find(item.first)->second.bwType;
+ tabInfo.createBy = item.second.create_by;
+
+ if ((tabInfo.tableName.find("lt_") == 0) && (tabInfo.createBy != appConfig.getStringProperty("erlNode"))) {
+ continue;
+ }
+ string &tableName = item.second.tableName;
+ faceFea->m_tableType[tableName] = tabInfo;
+ appPref.setIntData(tableName, 0);
+ if (faceFea->m_faceFCMAP.find(tableName) == faceFea->m_faceFCMAP.end()) {
+ faceFea->m_faceFCMAP[tableName] = new FaceDBCompareServer(&(faceFea->m_erlangDbTool));
+// usleep(1000);
+ }
+ t_json["\"tableName\""] = "\"" + tableName + "\"";
+ std::string str_json = writer.write(t_json);
+
+ str_json.substr(0, str_json.length() - 1);
+// sleep(1);
+ usleep(1500 * 1000);
+ faceFea->m_faceFCMAP[tableName]->initDB(str_json);
+ DBG("initDB tableName " << tableName);
+ }
+ } else {
+ ERR("json format error :: " << str_config);
+ }
+
+ //#todo get data from sqlite3
+ {
+ //#鏌ヨ浜鸿劯搴曞簱鍒楄〃
+ auto res = faceFea->m_sqliteFaceEncap.getTableInfos();
+ for (auto &item : res) {
+ if (item.tableType == "person") {
+ std::cout << "tableName is " << item.tableName << std::endl;
+
+ {
+ std::string tableName = item.tableName;
+ faceFea->m_tableType[tableName] = item;
+ appPref.setIntData(tableName, 0);
+ if (faceFea->m_faceFCMAP.find(tableName) == faceFea->m_faceFCMAP.end()) {
+ faceFea->m_faceFCMAP[tableName] = new FaceDBCompareServer(&(faceFea->m_sqliteFaceEncap));
+ }
+
+ Json::Value t_json2;
+ t_json2.clear();
+
+ t_json2["\"syncTpye\""] = "local";
+ t_json2["tableName"] = tableName;
+ std::string str_json = writer.write(t_json2);
+
+ str_json.substr(0, str_json.length() - 1);
+ faceFea->m_faceFCMAP[tableName]->initDB(str_json);
+ DBG("initDB tableName " << tableName);
+ }
+
+ }
+ }
+ }
+ faceFea->m_rwLock.unlock();
+
+ INFO("get time");
+ faceFea->m_inTime = getTimeLong();
+ if (faceFea->m_retUpdatePthread) {
+ faceFea->m_retUpdatePthread = false;
+ std::thread thd(dataUpdate, faceFea);
+
+// faceFea->m_erlangDbTool.test(faceFea, erlangCallBackFunc);
+ INFO("start thread");
+ thd.detach();
+ } else {
+ ERR("m_retUpdatePthread is false ");
+ }
+
+ return false;
+}
+
+void FaceFeatureSearchServerI::waitTables(FaceFeatureSearchServerI *faceFea, int loop) {
+ DBG("waitTales");
+ while (t_live_ret) {
+ faceFea->m_rwLock.rdlock();
+ if (faceFea->m_faceFCMAP.size() == 0) {
+ ERR("table size is 0");
+ faceFea->m_rwLock.unlock();
+ return;
+ }
+ bool tmp = true;
+ for (auto &t_face : faceFea->m_faceFCMAP) {
+ auto t_ret = appPref.getIntData(t_face.first);
+ tmp = t_ret & tmp;
+ }
+ if (tmp && faceFea->m_faceFCMAP.size() > 0) {
+ INFO("waitTables ok");
+ faceFea->m_rwLock.unlock();
+ return;
+ } else {
+ ERR("tmp is " << tmp << " faceFea->m_faceFCMAP.size() is " << faceFea->m_faceFCMAP.size());
+ faceFea->m_rwLock.unlock();
+ usleep(1000);
+// if (loop != -1 && loop-- < 1) {
+// ERR("return " << loop);
+// return;
+// }
+ }
+ }
+ return;
+}
+
+
+//void FaceFeatureSearchServerI::erlangCallBackFunc(std::string) {
+// DBG("erlangCallBackFunc");
+// pthread_cond_signal(&(func_cond));
+// pthread_mutex_unlock(&(func_cond_mutex));
+//}
+
+void FaceFeatureSearchServerI::dataUpdate(FaceFeatureSearchServerI *faceFea) {
+ long inTime = faceFea->m_inTime;
+ // modify all db ready start update, <10s
+ faceFea->waitTables(faceFea, 100);
+ int loop = 0;
+ long outTime;
+ //update
+ while (t_live_ret) {
+ DBG(" wait lock?");
+ pthread_mutex_lock(&(func_cond_mutex));
+ DBG(" get lock?");
+ pthread_cond_wait(&(func_cond), &(func_cond_mutex));
+ try {
+// faceFea->m_rwLock.rdlock();
+// if (faceFea->m_faceFCMAP.size() > 0) {
+// faceFea->m_rwLock.unlock();
+// } else {
+// faceFea->m_rwLock.unlock();
+// }
+ DBG("update data sleep before ");
+ int sleepTime = appConfig.getIntProperty("FaceSeachSleepTime");
+ sleepTime = sleepTime > 30 ? sleepTime : 30;
+ DBG("sleepTime is " << sleepTime);
+ sleep(30);
+ inTime = outTime;
+ outTime = 0;
+ cout << " loop is " << loop++ << endl;
+ faceFea->loadFeatureData(faceFea);
+ faceFea->waitTables(faceFea, 100000);
+ pthread_mutex_unlock(&func_cond_mutex);
+ } catch (std::exception ex) {
+ ERR(ex.what());
+ }
+ }
+}
+
+
+bool FaceFeatureSearchServerI::initErlang(std::string nodeName, std::string cookie) {
+ //#todo
+// m_erlangDbTool = ErlangTool::ErlangDbTool(nodeName, cookie);
+ return false;
+}
+
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h
new file mode 100644
index 0000000..7a1c16b
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h
@@ -0,0 +1,85 @@
+//
+// Created by pans on 4/27/18.
+//
+
+#ifndef FACESEARCHSERVER_FACEFEATURESEARCHSERVERI_H
+#define FACESEARCHSERVER_FACEFEATURESEARCHSERVERI_H
+
+#include <FaceSearchServer.h>
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <basic/util/app/AppConfig.h>
+
+#include <ErlangDbTool.h>
+#include <SqliteFaceEncap.h>
+#include "FaceDBCompareServer.h"
+
+//struct TableInfo {
+// std::string tab_name;
+// std::string startTime;
+// std::string endTime;
+// std::string bwType;
+// std::string create_by;
+//};
+
+static bool t_live_ret = true;
+static pthread_cond_t func_cond(PTHREAD_COND_INITIALIZER);
+static pthread_mutex_t func_cond_mutex(PTHREAD_MUTEX_INITIALIZER);
+
+
+void erlangCallBackFunc(std::string);
+
+class FaceFeatureSearchServerI : public FaceSearch::FaceFeatureSearchServer {
+public:
+ FaceFeatureSearchServerI();
+
+ FaceFeatureSearchServerI(Ice::CommunicatorPtr &ich, std::string nodeName, std::string cookie);
+
+ virtual ~FaceFeatureSearchServerI();
+
+public:
+ virtual ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data &, const ::std::string &,
+ const ::Ice::Current & = ::Ice::emptyCurrent);
+
+ virtual ::FaceSearch::FaceResults
+ faceSearchTopN(const ::FaceSearch::Data &, const ::std::string &, ::Ice::Int, ::Ice::Float,
+ const ::Ice::Current & = ::Ice::emptyCurrent);
+
+private:
+ bool initErlang(std::string nodeName, std::string cookie);
+
+ //#todo delete cache
+
+ //#todo loadData
+ static bool loadFeatureData(FaceFeatureSearchServerI *faceFea);
+
+ static void dataUpdate(FaceFeatureSearchServerI *faceFea);
+
+ static void waitTables(FaceFeatureSearchServerI *faceFea, int loop = -1);
+
+// void erlangCallBackFunc(std::string);
+
+private:
+ long m_inTime;
+ std::map<std::string, FaceDBCompareServer *> m_faceFCMAP;
+ std::map<std::string, TableInfo> m_tableType;
+
+ RWLock m_rwLock;
+ ErlangTool::ErlangDbTool m_erlangDbTool;
+ SqliteFaceEncap m_sqliteFaceEncap;
+ std::mutex m_mutex;
+ bool m_retUpdatePthread;
+
+ Base64 base64;
+// Ice::ObjectPrx base_FaceMemoryData;
+// IceRpcClient<::FaceSearch::FaceMemoryDataPrx> m_faceMemoryClient;
+// ::FaceSearch::FaceMemoryDataPrx serverFaceMemoryData;
+
+// func_cond_mutex(PTHREAD_MUTEX_INITIALIZER), func_cond(PTHREAD_COND_INITIALIZER)
+
+ EsDBTool pManagerEsDB;//(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+};
+
+
+#endif //FACESEARCHSERVER_FACEFEATURESEARCHSERVERI_H
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp b/QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp
new file mode 100644
index 0000000..b82cdeb
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp
@@ -0,0 +1,4 @@
+//
+// Created by pans on 4/27/18.
+//
+
diff --git a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt
new file mode 100644
index 0000000..a96a094
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt
@@ -0,0 +1,74 @@
+cmake_minimum_required(VERSION 3.5)
+project(LoadDBClient)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../../build)
+
+add_definitions(-DGLOG)
+set(CMAKE_CXX_STANDARD 11)
+
+include_directories(
+ /home/ps/boost_1_68_0
+ /usr/include/
+ ../../../BasicPlatForm/libs/glog/include
+ ../../../BasicPlatForm/libs/jsoncpp/include
+ ../../../BasicPlatForm/basic/util/ShareMemory/
+ ../../../../Erlang/syncDBTool
+)
+
+link_directories(
+ /usr/lib/erlang/lib/erl_interface-3.8.2/lib/
+ ../../../BasicPlatForm/libs/glog/lib
+ ../../../BasicPlatForm/libs/jsoncpp/lib
+)
+
+
+add_executable(syncDBClient
+ main.cpp
+
+ ../../../../Erlang/syncDBTool/ErlangDbTool.cpp
+ # ../../../BasicPlatForm/basic/util/ShareMemory/SemTool.cpp
+ )
+
+target_link_libraries(
+ syncDBClient
+ glog
+ ei
+ erl_interface_st
+ ei_st
+ erl_interface
+ rt
+ jsoncpp
+ pthread
+)
+
+add_executable(TestCilent
+ Client.cpp
+ # ../../../BasicPlatForm/basic/util/ShareMemory/SemTool.cpp
+
+ )
+
+target_link_libraries(TestCilent
+ pthread
+ jsoncpp
+ rt
+ )
+
+
+#include_directories(
+# /usr/include/x86_64-linux-gnu/qt5
+# /usr/include/x86_64-linux-gnu/qt5/QtCore/
+# /usr/include/x86_64-linux-gnu/qt5/QtSql/
+#)
+#add_executable(demoTime
+# demoTime.cpp
+# # ../../../BasicPlatForm/basic/util/ShareMemory/SemTool.cpp
+# )
+#
+#target_link_libraries(demoTime
+# pthread
+# Qt5Core
+# Qt5Sql
+# )
+
+
+#./syncDBClient "{"\"cookie\"":"\"12121\"","\"nodeName\"":"\"wp1@192.168.1.103\"","\"path\"":"\"/opt/erlang/wp1\"","\"tableName\"":"\"娴嬭瘯涓枃\""}" > tl1 & \
+#./syncDBClient "{"\"cookie\"":"\"12121\"","\"nodeName\"":"\"wp1@192.168.1.103\"","\"path\"":"\"/opt/erlang/wp1\"","\"tableName\"":"\"娴嬭瘯涓枃2\""}" > tl2
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/Client.cpp b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/Client.cpp
new file mode 100644
index 0000000..560e08e
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/Client.cpp
@@ -0,0 +1,112 @@
+//
+// Created by ps on 8/9/18.
+//
+
+
+#include "ShareMemoryTool.hpp"
+#include <jsoncpp/json/json.h>
+#include <SemTool.h>
+
+
+using namespace std;
+
+static std::string getTimeSecString() {
+ char buf[128] = {0};
+ time_t t = time(nullptr);
+ timeval time{0};
+ gettimeofday(&time, nullptr);
+ tm *local = localtime(&t); //杞负鏈湴鏃堕棿
+ strftime(buf, 64, "%Y-%m-%d %H:%M:%S", local);
+ return std::string(buf);
+}
+
+int main() {
+
+// string str_json = "{\"path\":\"/opt/erlang/sub1/\",\"nodeName\":\"sub1@192.168.1.186\",\"cookie\":\"abc\",\"tableName\":\"test\"}";
+
+// int key = 1234;
+// SemTool semTool(key);
+// semTool.set_semvalue();
+
+ auto str = getTimeSecString();
+
+ cout << str.substr(0, 10) << endl;
+
+
+ srand(time(0));
+
+ bool ret = true;
+ if (rand() % 2) {
+ for (int i = 0; i < 10; ++i) {
+ int loop = 3;
+ cout << loop << " " << loop % 2 << endl;
+ ret &= loop % 2;
+ }
+ } else {
+ ret = false;
+ }
+
+ if (ret) {
+ cout << "true" << endl;
+ } else {
+ cout << "false" << endl;
+ }
+
+ return 0;
+
+ Json::Value t_json;
+ Json::FastWriter writer;
+
+ t_json["\"path\""] = "\"/opt/erlang/sub1/\"";
+ t_json["\"nodeName\""] = "\"sub1@192.168.1.186\"";
+ t_json["\"cookie\""] = "\"abc\"";
+ t_json["\"tableName\""] = "\"test\"";
+// t_json["\"key\""] = "\""+to_string(key)+"\"";
+ string tet = "./syncDBClient ";
+ string str_json = writer.write(t_json);
+
+ tet.append("\"" + str_json.substr(0, str_json.length() - 1) + "\" ");
+ cout << tet << endl;
+ system(tet.c_str());
+// return 0;
+// sleep(2);
+
+// semTool.semaphore_p();
+
+ try {
+// BISTL::shared_memory_object
+ // init
+// BISTL::managed_shared_memory segment(BISTL::open_only, "aaa8" );
+ BISTL::BiMapFeaData biMapFeaData("test");
+
+// const BISTL::void_allocator alloc_inst (segment.get_segment_manager());
+
+// BISTL::bi_map_Feature_Info * mymap =
+// segment.construct<BISTL::bi_map_Feature_Info>("MyMap")(std::less<BISTL::char_string>(),alloc_inst);
+// BISTL::bi_map_Feature_Info *mymap =
+// segment.find_or_construct<BISTL::bi_map_Feature_Info>("aaa8")(std::less<BISTL::char_string>(), alloc_inst);
+
+ auto mymap = biMapFeaData.getMap();
+ auto size = mymap->size();
+ for (auto it = mymap->begin(); it != mymap->end(); it++) {
+// printf("%s \n", it->second.id.c_str());
+// printf("%d \n", it->second.id);
+ string a = string(it->second.m_id.data());
+ string b = string(it->second.m_feature.data());
+ std::cout << "id " << a << std::endl;
+ std::cout << "feature " << b << std::endl;
+// it->second.id;
+ }
+ printf("\n");
+
+// BISTL::shared_memory_object::remove("SharedMemory");
+ }
+ catch (const std::exception &e) {
+ printf("Exception:%s\n", e.what());
+ BISTL::shared_memory_object::remove("test");
+ }
+ getchar();
+ BISTL::shared_memory_object::remove("test");
+
+ return 0;
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/demoTime.cpp b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/demoTime.cpp
new file mode 100644
index 0000000..6efa814
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/demoTime.cpp
@@ -0,0 +1,118 @@
+//
+// Created by ps on 18-9-30.
+//
+
+#include<QDateTime>
+#include <iostream>
+
+using namespace std;
+
+typedef struct {
+ int Year;
+ int Month;
+ int Day;
+ int Hour;
+ int Minute;
+ int Second;
+} TimeSt, *pTimeSt;
+
+void DownLoad(QDateTime startTime, QDateTime endTime) {
+ cout << __FUNCTION__ << " " << startTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+ cout << __FUNCTION__ << " " << endTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+
+
+ cout << "\n\n\n" << endl;
+}
+
+void testFunc(QDateTime startTime, QDateTime endTime);
+
+void testFunc(QDateTime startTime, QDateTime endTime) {
+
+ int loop = 0;
+
+ QDateTime tmp_EndTime = startTime.addSecs(1 * 60 * 15);
+ if (tmp_EndTime < endTime) {
+ DownLoad(startTime, tmp_EndTime);
+ testFunc(tmp_EndTime, endTime);
+ } else {
+ DownLoad(startTime, endTime);
+ return;
+ }
+
+
+}
+
+
+int main() {
+
+
+ QDateTime startTime = QDateTime::fromString("2018-10-08 13:03:07", "yyyy-MM-dd hh:mm:ss");
+// QDateTime startTime = QDateTime::currentDateTime();//鍗冲皢涓嬭浇鐨勬枃浠剁殑寮�濮嬫椂闂�
+ QDateTime endTime;//璁板綍鏇存柊鏃堕棿
+
+ int nDuration = 2;
+ endTime = startTime.addSecs(nDuration * 60 * 59);
+
+ cout << __LINE__ << " " << startTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+ cout << __LINE__ << " " << endTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+
+
+ //task_time Start
+ TimeSt stTimeSt;
+ stTimeSt.Year = startTime.date().year();
+ stTimeSt.Month = startTime.date().month();
+ stTimeSt.Day = startTime.date().day();
+ stTimeSt.Hour = startTime.time().hour();
+ stTimeSt.Minute = startTime.time().minute();
+ stTimeSt.Second = startTime.time().second();
+
+
+ char ch_StringStartTime[128];
+ sprintf(ch_StringStartTime, "%04d-%02d-%02d %02d:%02d:%02d", stTimeSt.Year, stTimeSt.Month, stTimeSt.Day,
+ stTimeSt.Hour,
+ stTimeSt.Minute, stTimeSt.Second);
+ string str_StringStartTime(ch_StringStartTime);
+// string str_StringStartTime(
+// to_string(stTimeSt.Year) + "-" + to_string(stTimeSt.Month) + "-" + to_string(stTimeSt.Day) + " "
+// + to_string(stTimeSt.Hour) + ":" + to_string(stTimeSt.Minute) + ":" +
+// to_string(stTimeSt.Second));
+
+ cout << "str_____" << str_StringStartTime << endl;
+ QDateTime
+ taskStartTime = QDateTime::fromString(QString::fromStdString(str_StringStartTime), "yyyy-MM-dd hh:mm:ss");
+ cout << taskStartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+ //task_time Start -------------------------------------------------
+
+ //task_time end
+ TimeSt endTimeSt;
+ endTimeSt.Year = endTime.date().year();
+ endTimeSt.Month = endTime.date().month();
+ endTimeSt.Day = endTime.date().day();
+ endTimeSt.Hour = endTime.time().hour();
+ endTimeSt.Minute = endTime.time().minute();
+ endTimeSt.Second = endTime.time().second();
+
+ char ch_StringEndTime[128];
+ sprintf(ch_StringEndTime, "%04d-%02d-%02d %02d:%02d:%02d", endTimeSt.Year, endTimeSt.Month, endTimeSt.Day,
+ endTimeSt.Hour, endTimeSt.Minute, endTimeSt.Second);
+ string str_StringEndTime(ch_StringEndTime);
+
+// string str_StringEndTime(
+// to_string(endTimeSt.Year) + "-" + to_string(endTimeSt.Month) + "-" + to_string(endTimeSt.Day) + " "
+// + to_string(endTimeSt.Hour) + ":" + to_string(endTimeSt.Minute) + ":" +
+// to_string(endTimeSt.Second));
+
+ cout << "str_____" << str_StringEndTime << endl;
+ QDateTime
+ taskEndTime = QDateTime::fromString(QString::fromStdString(str_StringEndTime), "yyyy-MM-dd hh:mm:ss");
+ cout << taskEndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+ //task_time end -------------------------------------------------
+
+
+ cout << "\n\n\n" << endl;
+
+ testFunc(taskStartTime, taskEndTime);
+
+ return 0;
+
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/main.cpp b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/main.cpp
new file mode 100644
index 0000000..621a55f
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/main.cpp
@@ -0,0 +1,100 @@
+#include <iostream>
+#include <unistd.h>
+#include <sys/time.h>
+#include <vector>
+#include <boost/interprocess/shared_memory_object.hpp>
+#include <boost/interprocess/mapped_region.hpp>
+
+#include <jsoncpp/json/json.h>
+#include <SemTool.h>
+#include <basic/util/app/AppConfig.h>
+#include <basic/debug/Debug.h>
+
+#include "ErlangDbTool.h"
+#include "ShareMemoryTool.hpp"
+
+using namespace std;
+
+//#erl -name b@192.168.1.164 -setcookie abc -mnesia dir '"/home/firefly/erlang"' -detached -noshell
+int main(int argc, char **argv) {
+ std::cout << "Hello, World!" << std::endl;
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+
+ if (argc <= 1) {
+ ERR("argc size is err");
+ exit(-1);
+ }
+
+ string str_json(argv[1]);
+// cout << str_json << endl;
+// string str_json = "{\"path\":\"/opt/erlang/sub1/\",\"nodeName\":\"sub1@192.168.1.186\",\"cookie\":\"abc\",\"tableName\":\"test\"}";
+
+ Json::Value t_json;
+ Json::Reader reader;
+
+ if (!reader.parse(str_json, t_json)) {
+ ERR("json format error :: " << str_json);
+ return -1;
+ }
+
+ int loop = 0;
+
+ std::string path = t_json["path"].asString();//"/opt/erlang/za/";
+ std::string nodeName = t_json["nodeName"].asString();//"za@192.168.188.128";
+ std::string cookie = t_json["cookie"].asString();//"abc";
+ std::string tableName = t_json["tableName"].asString();
+
+// SemTool semTool(t_json["key"].asInt());
+//
+// semTool.semaphore_p();
+
+
+ /***
+ * jiazai renlian
+ */
+// struct timeval t1, t2;
+// gettimeofday(&t1, NULL);
+
+
+ std::string str_node("testNode");
+ str_node.append(to_string((int) getpid()));
+ ErlangTool::ErlangDbTool erlangDbTool(nodeName, cookie, str_node);
+ while (1) {
+ /***
+ * load fea
+ */
+
+ auto cache = erlangDbTool.loadFaceFeaData(tableName);
+
+// gettimeofday(&t2, NULL);
+ //閭d箞鍑芥暟f杩愯鎵�鑺辩殑鏃堕棿涓�
+// auto deltaT = (t2.tv_sec - t1.tv_sec) * 1000000 + t2.tv_usec - t1.tv_usec;
+// DBG(" loadData " << deltaT << "us")
+// DBG(tableName << "size is " << cache.size() << " " << loop);
+ if (cache.size() <= 0 && loop++ <= 10) {
+ usleep(100);
+ continue;
+ }
+ auto size = sizeof(cache[0]) * cache.size();
+ try {
+ BISTL::shared_memory_object::remove(tableName.c_str());
+ BISTL::BiMapFeaData biMapFeaData(tableName, size);
+ for (auto &item :cache) {
+ biMapFeaData.saveKeyOrValue(item.second.id, item.second.feature, item.second.img, item.second.idcard,
+ item.second.create_by, item.second.create_time, item.second.update_time);
+ }
+ auto mymap = biMapFeaData.getMap();
+// for (auto it = mymap->begin(); it != mymap->end(); it++) {
+// std::cout << "feature " << it->second.m_feature << std::endl;
+// }
+ DBG("load ok " << tableName << "mymap size is " << mymap->size());
+ }
+ catch (const std::exception &e) {
+ printf("Exception:%s\n", e.what());
+ BISTL::shared_memory_object::remove(tableName.c_str());
+ }
+ break;
+ }
+
+ return 0;
+}
diff --git a/QiaoJiaSystem/FaceSearchServer/main.cpp b/QiaoJiaSystem/FaceSearchServer/main.cpp
new file mode 100644
index 0000000..90f7577
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/main.cpp
@@ -0,0 +1,37 @@
+//
+// Created by pans on 4/27/18.
+//
+#include <iostream>
+#include <Ice/Ice.h>
+#include <thread>
+
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/util/app/AppPreference.hpp>
+#include "FaceFeatureSearchServerI.h"
+#include <basic/util/app/AppConfig.h>
+#include <basic/debug/Debug.h>
+
+using namespace std;
+
+int main(int argc, char **argv) {
+
+ SAVE_APP_ARGS;
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+ auto ich = Ice::initialize(argc, argv);
+
+ DBG("\n\n\nstart\n\n");
+
+ appPref.setLongData("thread.max", 32);
+ //#todo
+
+// appPref.setStringData("ipAdd", "192.168.1.185");
+// appPref.setIntData("ipPort", 9200);
+ appPref.setStringData("ipAdd", appConfig.getStringProperty("ES_IP"));
+ appPref.setIntData("ipPort", appConfig.getIntProperty("ES_PORT"));
+
+ IceRpcServer<FaceFeatureSearchServerI> server("faceCmServer", 10004, "tcp");
+ server.setMessageSizeMax(1024 * 1024 * 50);
+ server.setPoolInitSize(10);
+ server.setPoolMaxSize(32);
+ server.runWaitShutDown();
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.cpp b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.cpp
new file mode 100644
index 0000000..19fec76
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.cpp
@@ -0,0 +1,515 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `FaceSearchServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <FaceSearchServer.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+# pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+# pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_ids[2] =
+{
+ "::FaceSearch::FaceFeatureSearchServer",
+ "::Ice::Object"
+};
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_ops[] =
+{
+ "faceSearchMax",
+ "faceSearchTopN",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name = "faceSearchMax";
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name = "faceSearchTopN";
+
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_FaceSearch_FaceFeatureSearchServer_ids, iceC_FaceSearch_FaceFeatureSearchServer_ids + 2, s);
+}
+
+::std::vector<::std::string>
+FaceSearch::FaceFeatureSearchServer::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector<::std::string>(&iceC_FaceSearch_FaceFeatureSearchServer_ids[0], &iceC_FaceSearch_FaceFeatureSearchServer_ids[2]);
+}
+
+::std::string
+FaceSearch::FaceFeatureSearchServer::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+FaceSearch::FaceFeatureSearchServer::ice_staticId()
+{
+ static const ::std::string typeId = "::FaceSearch::FaceFeatureSearchServer";
+ return typeId;
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceD_faceSearchMax(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ ::FaceSearch::Data iceP_feature;
+ ::std::string iceP_info;
+ istr->readAll(iceP_feature, iceP_info);
+ inS.endReadParams();
+ ::FaceSearch::FaceResults ret = this->faceSearchMax(::std::move(iceP_feature), ::std::move(iceP_info), current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceD_faceSearchTopN(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ ::FaceSearch::Data iceP_feature;
+ ::std::string iceP_info;
+ int iceP_topN;
+ float iceP_score;
+ istr->readAll(iceP_feature, iceP_info, iceP_topN, iceP_score);
+ inS.endReadParams();
+ ::FaceSearch::FaceResults ret = this->faceSearchTopN(::std::move(iceP_feature), ::std::move(iceP_info), iceP_topN, iceP_score, current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceSearch_FaceFeatureSearchServer_ops, iceC_FaceSearch_FaceFeatureSearchServer_ops + 6, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_FaceSearch_FaceFeatureSearchServer_ops)
+ {
+ case 0:
+ {
+ return _iceD_faceSearchMax(in, current);
+ }
+ case 1:
+ {
+ return _iceD_faceSearchTopN(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchMax(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceSearch::FaceResults>>& outAsync, const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name);
+ outAsync->invoke(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_feature, iceP_info);
+ },
+ nullptr);
+}
+
+void
+FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchTopN(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceSearch::FaceResults>>& outAsync, const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, int iceP_topN, float iceP_score, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name);
+ outAsync->invoke(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_feature, iceP_info, iceP_topN, iceP_score);
+ },
+ nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+FaceSearch::FaceFeatureSearchServerPrx::_newInstance() const
+{
+ return ::IceInternal::createProxy<FaceFeatureSearchServerPrx>();
+}
+
+const ::std::string&
+FaceSearch::FaceFeatureSearchServerPrx::ice_staticId()
+{
+ return FaceSearch::FaceFeatureSearchServer::ice_staticId();
+}
+
+namespace Ice
+{
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name = "faceSearchMax";
+
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name = "faceSearchTopN";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::FaceSearch::upCast(::IceProxy::FaceSearch::FaceFeatureSearchServer* p) { return p; }
+
+void
+::IceProxy::FaceSearch::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::FaceSearch::FaceFeatureSearchServer>& v)
+{
+ ::Ice::ObjectPrx proxy;
+ istr->read(proxy);
+ if(!proxy)
+ {
+ v = 0;
+ }
+ else
+ {
+ v = new ::IceProxy::FaceSearch::FaceFeatureSearchServer;
+ v->_copyFrom(proxy);
+ }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceSearch::FaceFeatureSearchServer::_iceI_begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_feature);
+ ostr->write(iceP_info);
+ result->endWriteParams();
+ result->invoke(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::FaceSearch::FaceResults
+IceProxy::FaceSearch::FaceFeatureSearchServer::end_faceSearchMax(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name);
+ ::FaceSearch::FaceResults ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceSearch::FaceFeatureSearchServer::_iceI_begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_feature);
+ ostr->write(iceP_info);
+ ostr->write(iceP_topN);
+ ostr->write(iceP_score);
+ result->endWriteParams();
+ result->invoke(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::FaceSearch::FaceResults
+IceProxy::FaceSearch::FaceFeatureSearchServer::end_faceSearchTopN(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name);
+ ::FaceSearch::FaceResults ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::FaceSearch::FaceFeatureSearchServer::_newInstance() const
+{
+ return new FaceFeatureSearchServer;
+}
+
+const ::std::string&
+IceProxy::FaceSearch::FaceFeatureSearchServer::ice_staticId()
+{
+ return ::FaceSearch::FaceFeatureSearchServer::ice_staticId();
+}
+
+FaceSearch::FaceFeatureSearchServer::~FaceFeatureSearchServer()
+{
+}
+
+::Ice::Object* FaceSearch::upCast(::FaceSearch::FaceFeatureSearchServer* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_ids[2] =
+{
+ "::FaceSearch::FaceFeatureSearchServer",
+ "::Ice::Object"
+};
+
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_FaceSearch_FaceFeatureSearchServer_ids, iceC_FaceSearch_FaceFeatureSearchServer_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+FaceSearch::FaceFeatureSearchServer::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector< ::std::string>(&iceC_FaceSearch_FaceFeatureSearchServer_ids[0], &iceC_FaceSearch_FaceFeatureSearchServer_ids[2]);
+}
+
+const ::std::string&
+FaceSearch::FaceFeatureSearchServer::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+FaceSearch::FaceFeatureSearchServer::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+ static const ::std::string typeId = "::FaceSearch::FaceFeatureSearchServer";
+ return typeId;
+#else
+ return iceC_FaceSearch_FaceFeatureSearchServer_ids[0];
+#endif
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceD_faceSearchMax(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::FaceSearch::Data iceP_feature;
+ ::std::string iceP_info;
+ istr->read(iceP_feature);
+ istr->read(iceP_info);
+ inS.endReadParams();
+ ::FaceSearch::FaceResults ret = this->faceSearchMax(iceP_feature, iceP_info, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceD_faceSearchTopN(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::FaceSearch::Data iceP_feature;
+ ::std::string iceP_info;
+ ::Ice::Int iceP_topN;
+ ::Ice::Float iceP_score;
+ istr->read(iceP_feature);
+ istr->read(iceP_info);
+ istr->read(iceP_topN);
+ istr->read(iceP_score);
+ inS.endReadParams();
+ ::FaceSearch::FaceResults ret = this->faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+namespace
+{
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_all[] =
+{
+ "faceSearchMax",
+ "faceSearchTopN",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceSearch_FaceFeatureSearchServer_all, iceC_FaceSearch_FaceFeatureSearchServer_all + 6, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_FaceSearch_FaceFeatureSearchServer_all)
+ {
+ case 0:
+ {
+ return _iceD_faceSearchMax(in, current);
+ }
+ case 1:
+ {
+ return _iceD_faceSearchTopN(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+FaceSearch::FaceFeatureSearchServer::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+ ostr->startSlice(ice_staticId(), -1, true);
+ Ice::StreamWriter< ::FaceSearch::FaceFeatureSearchServer, ::Ice::OutputStream>::write(ostr, *this);
+ ostr->endSlice();
+}
+
+void
+FaceSearch::FaceFeatureSearchServer::_iceReadImpl(::Ice::InputStream* istr)
+{
+ istr->startSlice();
+ Ice::StreamReader< ::FaceSearch::FaceFeatureSearchServer, ::Ice::InputStream>::read(istr, *this);
+ istr->endSlice();
+}
+
+void
+FaceSearch::_icePatchObjectPtr(FaceFeatureSearchServerPtr& handle, const ::Ice::ObjectPtr& v)
+{
+ handle = ::FaceSearch::FaceFeatureSearchServerPtr::dynamicCast(v);
+ if(v && !handle)
+ {
+ IceInternal::Ex::throwUOE(::FaceSearch::FaceFeatureSearchServer::ice_staticId(), v);
+ }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.h b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.h
new file mode 100644
index 0000000..8233434
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.h
@@ -0,0 +1,678 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `FaceSearchServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __FaceSearchServer_h__
+#define __FaceSearchServer_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer;
+class FaceFeatureSearchServerPrx;
+
+}
+
+namespace FaceSearch
+{
+
+using Data = ::std::vector<::Ice::Byte>;
+
+struct FaceResult
+{
+ long long int id;
+ ::std::string uuid;
+ ::std::string tableName;
+ float confidence;
+ ::std::string imgUrl;
+ ::std::string idcard;
+ ::std::string alarmRet;
+
+ std::tuple<const long long int&, const ::std::string&, const ::std::string&, const float&, const ::std::string&, const ::std::string&, const ::std::string&> ice_tuple() const
+ {
+ return std::tie(id, uuid, tableName, confidence, imgUrl, idcard, alarmRet);
+ }
+};
+
+using FaceResults = ::std::vector<::FaceSearch::FaceResult>;
+
+using Ice::operator<;
+using Ice::operator<=;
+using Ice::operator>;
+using Ice::operator>=;
+using Ice::operator==;
+using Ice::operator!=;
+
+}
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer : public virtual ::Ice::Object
+{
+public:
+
+ using ProxyType = FaceFeatureSearchServerPrx;
+
+ virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+ virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+ virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::FaceSearch::FaceResults faceSearchMax(::FaceSearch::Data, ::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_faceSearchMax(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::FaceSearch::FaceResults faceSearchTopN(::FaceSearch::Data, ::std::string, int, float, const ::Ice::Current&) = 0;
+ bool _iceD_faceSearchTopN(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServerPrx : public virtual ::Ice::Proxy<FaceFeatureSearchServerPrx, ::Ice::ObjectPrx>
+{
+public:
+
+ ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::FaceSearch::FaceResults>(true, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchMax, iceP_feature, iceP_info, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto faceSearchMaxAsync(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::FaceSearch::FaceResults>>().get_future())
+ {
+ return _makePromiseOutgoing<::FaceSearch::FaceResults, P>(false, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchMax, iceP_feature, iceP_info, context);
+ }
+
+ ::std::function<void()>
+ faceSearchMaxAsync(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info,
+ ::std::function<void(::FaceSearch::FaceResults)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::FaceSearch::FaceResults>(response, ex, sent, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchMax, iceP_feature, iceP_info, context);
+ }
+
+ void _iceI_faceSearchMax(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceSearch::FaceResults>>&, const ::FaceSearch::Data&, const ::std::string&, const ::Ice::Context&);
+
+ ::FaceSearch::FaceResults faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, int iceP_topN, float iceP_score, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::FaceSearch::FaceResults>(true, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchTopN, iceP_feature, iceP_info, iceP_topN, iceP_score, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto faceSearchTopNAsync(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, int iceP_topN, float iceP_score, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::FaceSearch::FaceResults>>().get_future())
+ {
+ return _makePromiseOutgoing<::FaceSearch::FaceResults, P>(false, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchTopN, iceP_feature, iceP_info, iceP_topN, iceP_score, context);
+ }
+
+ ::std::function<void()>
+ faceSearchTopNAsync(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, int iceP_topN, float iceP_score,
+ ::std::function<void(::FaceSearch::FaceResults)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::FaceSearch::FaceResults>(response, ex, sent, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchTopN, iceP_feature, iceP_info, iceP_topN, iceP_score, context);
+ }
+
+ void _iceI_faceSearchTopN(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceSearch::FaceResults>>&, const ::FaceSearch::Data&, const ::std::string&, int, float, const ::Ice::Context&);
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ FaceFeatureSearchServerPrx() = default;
+ friend ::std::shared_ptr<FaceFeatureSearchServerPrx> IceInternal::createProxy<FaceFeatureSearchServerPrx>();
+
+ virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits<::FaceSearch::FaceResult>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 17;
+ static const bool fixedLength = false;
+};
+
+template<typename S>
+struct StreamReader<::FaceSearch::FaceResult, S>
+{
+ static void read(S* istr, ::FaceSearch::FaceResult& v)
+ {
+ istr->readAll(v.id, v.uuid, v.tableName, v.confidence, v.imgUrl, v.idcard, v.alarmRet);
+ }
+};
+
+}
+
+namespace FaceSearch
+{
+
+using FaceFeatureSearchServerPtr = ::std::shared_ptr<FaceFeatureSearchServer>;
+using FaceFeatureSearchServerPrxPtr = ::std::shared_ptr<FaceFeatureSearchServerPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::FaceSearch::FaceFeatureSearchServer>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::FaceSearch::FaceFeatureSearchServer*);
+
+}
+
+}
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer;
+::Ice::Object* upCast(::FaceSearch::FaceFeatureSearchServer*);
+typedef ::IceInternal::Handle< ::FaceSearch::FaceFeatureSearchServer> FaceFeatureSearchServerPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::FaceSearch::FaceFeatureSearchServer> FaceFeatureSearchServerPrx;
+typedef FaceFeatureSearchServerPrx FaceFeatureSearchServerPrxPtr;
+void _icePatchObjectPtr(FaceFeatureSearchServerPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace FaceSearch
+{
+
+typedef ::std::vector< ::Ice::Byte> Data;
+
+struct FaceResult
+{
+ ::Ice::Long id;
+ ::std::string uuid;
+ ::std::string tableName;
+ ::Ice::Float confidence;
+ ::std::string imgUrl;
+ ::std::string idcard;
+ ::std::string alarmRet;
+};
+
+typedef ::std::vector< ::FaceSearch::FaceResult> FaceResults;
+
+}
+
+namespace FaceSearch
+{
+
+class Callback_FaceFeatureSearchServer_faceSearchMax_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceFeatureSearchServer_faceSearchMax_Base> Callback_FaceFeatureSearchServer_faceSearchMaxPtr;
+
+class Callback_FaceFeatureSearchServer_faceSearchTopN_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceFeatureSearchServer_faceSearchTopN_Base> Callback_FaceFeatureSearchServer_faceSearchTopNPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer : public virtual ::Ice::Proxy<FaceFeatureSearchServer, ::IceProxy::Ice::Object>
+{
+public:
+
+ ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_faceSearchMax(_iceI_begin_faceSearchMax(iceP_feature, iceP_info, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::FaceSearch::Callback_FaceFeatureSearchServer_faceSearchMaxPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context, const ::FaceSearch::Callback_FaceFeatureSearchServer_faceSearchMaxPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, context, del, cookie);
+ }
+
+ ::FaceSearch::FaceResults end_faceSearchMax(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_faceSearchMax(const ::FaceSearch::Data&, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ ::FaceSearch::FaceResults faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_faceSearchTopN(_iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::FaceSearch::Callback_FaceFeatureSearchServer_faceSearchTopNPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context, const ::FaceSearch::Callback_FaceFeatureSearchServer_faceSearchTopNPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, context, del, cookie);
+ }
+
+ ::FaceSearch::FaceResults end_faceSearchTopN(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_faceSearchTopN(const ::FaceSearch::Data&, const ::std::string&, ::Ice::Int, ::Ice::Float, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer : public virtual ::Ice::Object
+{
+public:
+
+ typedef FaceFeatureSearchServerPrx ProxyType;
+ typedef FaceFeatureSearchServerPtr PointerType;
+
+ virtual ~FaceFeatureSearchServer();
+
+ virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data&, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_faceSearchMax(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::FaceSearch::FaceResults faceSearchTopN(const ::FaceSearch::Data&, const ::std::string&, ::Ice::Int, ::Ice::Float, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_faceSearchTopN(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+ virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+ virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const FaceFeatureSearchServer& lhs, const FaceFeatureSearchServer& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const FaceFeatureSearchServer& lhs, const FaceFeatureSearchServer& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits< ::FaceSearch::FaceResult>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 17;
+ static const bool fixedLength = false;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceSearch::FaceResult, S>
+{
+ static void write(S* ostr, const ::FaceSearch::FaceResult& v)
+ {
+ ostr->write(v.id);
+ ostr->write(v.uuid);
+ ostr->write(v.tableName);
+ ostr->write(v.confidence);
+ ostr->write(v.imgUrl);
+ ostr->write(v.idcard);
+ ostr->write(v.alarmRet);
+ }
+};
+
+template<typename S>
+struct StreamReader< ::FaceSearch::FaceResult, S>
+{
+ static void read(S* istr, ::FaceSearch::FaceResult& v)
+ {
+ istr->read(v.id);
+ istr->read(v.uuid);
+ istr->read(v.tableName);
+ istr->read(v.confidence);
+ istr->read(v.imgUrl);
+ istr->read(v.idcard);
+ istr->read(v.alarmRet);
+ }
+};
+
+}
+
+namespace FaceSearch
+{
+
+template<class T>
+class CallbackNC_FaceFeatureSearchServer_faceSearchMax : public Callback_FaceFeatureSearchServer_faceSearchMax_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::FaceSearch::FaceResults&);
+
+ CallbackNC_FaceFeatureSearchServer_faceSearchMax(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceSearch::FaceFeatureSearchServerPrx proxy = ::FaceSearch::FaceFeatureSearchServerPrx::uncheckedCast(result->getProxy());
+ ::FaceSearch::FaceResults ret;
+ try
+ {
+ ret = proxy->end_faceSearchMax(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_FaceFeatureSearchServer_faceSearchMaxPtr
+newCallback_FaceFeatureSearchServer_faceSearchMax(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceSearch::FaceResults&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceFeatureSearchServer_faceSearchMax<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceFeatureSearchServer_faceSearchMaxPtr
+newCallback_FaceFeatureSearchServer_faceSearchMax(T* instance, void (T::*cb)(const ::FaceSearch::FaceResults&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceFeatureSearchServer_faceSearchMax<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceFeatureSearchServer_faceSearchMax : public Callback_FaceFeatureSearchServer_faceSearchMax_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::FaceSearch::FaceResults&, const CT&);
+
+ Callback_FaceFeatureSearchServer_faceSearchMax(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceSearch::FaceFeatureSearchServerPrx proxy = ::FaceSearch::FaceFeatureSearchServerPrx::uncheckedCast(result->getProxy());
+ ::FaceSearch::FaceResults ret;
+ try
+ {
+ ret = proxy->end_faceSearchMax(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_FaceFeatureSearchServer_faceSearchMaxPtr
+newCallback_FaceFeatureSearchServer_faceSearchMax(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceSearch::FaceResults&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceFeatureSearchServer_faceSearchMax<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceFeatureSearchServer_faceSearchMaxPtr
+newCallback_FaceFeatureSearchServer_faceSearchMax(T* instance, void (T::*cb)(const ::FaceSearch::FaceResults&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceFeatureSearchServer_faceSearchMax<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_FaceFeatureSearchServer_faceSearchTopN : public Callback_FaceFeatureSearchServer_faceSearchTopN_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::FaceSearch::FaceResults&);
+
+ CallbackNC_FaceFeatureSearchServer_faceSearchTopN(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceSearch::FaceFeatureSearchServerPrx proxy = ::FaceSearch::FaceFeatureSearchServerPrx::uncheckedCast(result->getProxy());
+ ::FaceSearch::FaceResults ret;
+ try
+ {
+ ret = proxy->end_faceSearchTopN(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_FaceFeatureSearchServer_faceSearchTopNPtr
+newCallback_FaceFeatureSearchServer_faceSearchTopN(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceSearch::FaceResults&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceFeatureSearchServer_faceSearchTopN<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceFeatureSearchServer_faceSearchTopNPtr
+newCallback_FaceFeatureSearchServer_faceSearchTopN(T* instance, void (T::*cb)(const ::FaceSearch::FaceResults&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_FaceFeatureSearchServer_faceSearchTopN<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceFeatureSearchServer_faceSearchTopN : public Callback_FaceFeatureSearchServer_faceSearchTopN_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::FaceSearch::FaceResults&, const CT&);
+
+ Callback_FaceFeatureSearchServer_faceSearchTopN(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::FaceSearch::FaceFeatureSearchServerPrx proxy = ::FaceSearch::FaceFeatureSearchServerPrx::uncheckedCast(result->getProxy());
+ ::FaceSearch::FaceResults ret;
+ try
+ {
+ ret = proxy->end_faceSearchTopN(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_FaceFeatureSearchServer_faceSearchTopNPtr
+newCallback_FaceFeatureSearchServer_faceSearchTopN(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceSearch::FaceResults&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceFeatureSearchServer_faceSearchTopN<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceFeatureSearchServer_faceSearchTopNPtr
+newCallback_FaceFeatureSearchServer_faceSearchTopN(T* instance, void (T::*cb)(const ::FaceSearch::FaceResults&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_FaceFeatureSearchServer_faceSearchTopN<T, CT>(instance, cb, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.ice b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.ice
new file mode 100644
index 0000000..13cc9c3
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.ice
@@ -0,0 +1,24 @@
+module FaceSearch
+{
+ sequence<byte> Data;
+
+ struct FaceResult
+ {
+ long id;
+ string uuid;
+ string tableName;
+ float confidence;
+ string imgUrl;
+ string idcard;
+ string alarmRet;
+ }
+
+ sequence<FaceResult> FaceResults;
+
+ interface FaceFeatureSearchServer
+ {
+ FaceResults faceSearchMax(Data feature,string info);
+ FaceResults faceSearchTopN(Data feature,string info, int topN,float score);
+ }
+
+}
diff --git a/QiaoJiaSystem/FaceSearchServer/rpc/gen.sh b/QiaoJiaSystem/FaceSearchServer/rpc/gen.sh
new file mode 100644
index 0000000..5e04a07
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/rpc/gen.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/bsk/development/c++/Qt/BasicPlatForm/libs/Ice-3.7.0/lib64/
+./../../../BasicPlatForm/libs/Ice-3.7.0/bin/slice2cpp FaceSearchServer.ice
diff --git a/QiaoJiaSystem/LocalDBTool/CMakeLists.txt b/QiaoJiaSystem/LocalDBTool/CMakeLists.txt
new file mode 100644
index 0000000..e2c9cef
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/CMakeLists.txt
@@ -0,0 +1,59 @@
+cmake_minimum_required(VERSION 3.5)
+project(LocalDBTool)
+
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+
+set(CMAKE_CXX_STANDARD 11)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive)
+add_definitions(-DGLOG)
+
+set(CMAKE_BUILD_TYPE debug)
+
+include_directories(
+ ./
+
+ ../../BasicPlatForm
+
+ ../../BasicPlatForm/basic/util/app
+
+ ../../BasicPlatForm/basic/db/sqlite/
+ ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+
+ ../../BasicPlatForm/libs/libuuid/include
+ ../../BasicPlatForm/libs/glog/include
+ ../../BasicPlatForm/libs/jsoncpp/include
+
+ /usr/include/x86_64-linux-gnu/qt5
+ /usr/include/x86_64-linux-gnu/qt5/QtCore/
+ /usr/include/x86_64-linux-gnu/qt5/QtSql/
+
+)
+
+link_directories(
+ ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+ ../../BasicPlatForm/libs/libuuid/lib
+ ../../BasicPlatForm/libs/glog/lib
+ ../../BasicPlatForm/libs/jsoncpp/lib
+
+)
+
+add_executable(${PROJECT_NAME}
+ main.cpp
+ # SqliteFaceEncap.cpp
+ #
+ # ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.cpp
+ # ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.h
+ # GetUUId.cpp GetUUId.h
+ )
+
+target_link_libraries(${PROJECT_NAME}
+ glog
+ pthread
+ Qt5Core
+ Qt5Sql
+ uuid
+ jsoncpp
+ sqlite3
+ dl
+ )
diff --git a/QiaoJiaSystem/LocalDBTool/GetUUId.cpp b/QiaoJiaSystem/LocalDBTool/GetUUId.cpp
new file mode 100644
index 0000000..c14a346
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/GetUUId.cpp
@@ -0,0 +1,6 @@
+//
+// Created by ps on 18-11-9.
+//
+
+#include "GetUUId.h"
+
diff --git a/QiaoJiaSystem/LocalDBTool/GetUUId.h b/QiaoJiaSystem/LocalDBTool/GetUUId.h
new file mode 100644
index 0000000..c840c59
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/GetUUId.h
@@ -0,0 +1,27 @@
+//
+// Created by ps on 18-11-9.
+//
+
+#ifndef DB_CON_GETUUID_H
+#define DB_CON_GETUUID_H
+
+
+#include <string>
+#include <uuid/uuid.h>
+
+class GetUUId {
+public:
+ static std::string getUUID() {
+ std::string str_uuid;
+ uuid_t t_uuid;
+ char str[36];
+ uuid_generate(t_uuid);
+ uuid_unparse(t_uuid, str);
+ str_uuid = str;
+ return str_uuid;
+ }
+
+};
+
+
+#endif //DB_CON_GETUUID_H
diff --git a/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp
new file mode 100644
index 0000000..2ae3d1e
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp
@@ -0,0 +1,406 @@
+//
+// Created by pans on 4/28/18.
+//
+#include <iostream>
+
+#include <QtSql/QSql>
+#include <QtSql/QSqlDatabase>
+#include <QtSql/QSqlError>
+#include <QtSql/QSqlQuery>
+#include <QtCore/QString>
+#include <QtCore/QDebug>
+#include <QtCore/QVariantList>
+#include <basic/debug/Debug.h>
+
+#include "SqliteFaceEncap.h"
+
+using namespace std;
+
+
+static QSqlDatabase g_db = QSqlDatabase::addDatabase("QSQLITE", "GBond");
+
+SqliteFaceEncap::SqliteFaceEncap(std::string t_string) : sqliteEncapsulation(t_string.c_str()) {
+ /* Open database */
+ int rc;
+ string sql;
+ bool initRet = false;
+ bool *test = &initRet;
+ //--------------init db-------------------
+ rc = sqlite3_open(t_string.c_str(), &db);
+ string initRetSql = "select count(*) from sqlite_master where type='table' and name = '" + g_tableName + "';";
+ rc = sqlite3_exec(db, initRetSql.c_str(), isExist, (void *) test, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg);
+ ERR(initRetSql);
+ sqlite3_free(zErrMsg);
+ } else {
+ if (!initRet) {
+ /* Create SQL statement */
+ sql = getInitDBSql();
+ /* Execute SQL statement */
+ rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg);
+ ERR(sql);
+ sqlite3_free(zErrMsg);
+ } else {
+ fprintf(stdout, "sys_o_tables created successfully\n");
+ }
+ fprintf(stdout, "Operation done successfully\n");
+ }
+ }
+ //--------------init db-------------------
+ g_db.setDatabaseName(t_string.c_str());
+ g_db.open();
+
+}
+
+//#todo
+bool SqliteFaceEncap::createTable(std::string t_tableName, FieldValues &fieldValues) {
+ int rc;
+ //--------------create table-------------------
+ /* Create SQL statement */
+ string sql = getCreateFaceTableSql(t_tableName);
+
+ /* Execute SQL statement */
+// cout << sql << endl;
+ rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg);
+ ERR(sql);
+ sqlite3_free(zErrMsg);
+ return false;
+ } else {
+ fprintf(stdout, "Table created successfully\n");
+// INSERT INTO sys_o_tables(name,people_name,type,color,table_name,table_type,is_self,is_long_control)
+// VALUES ('鍦ㄩ�冨簱','鍦ㄩ�冧汉鍛�','浜�','red','taseee',2,0,0);
+// FieldValues fieldValues;
+// fieldValues.insert(std::make_pair("name","鍦ㄩ�冨簱"));
+// fieldValues.insert(std::make_pair("people_name","鍦ㄩ�冧汉鍛�"));
+// fieldValues.insert(std::make_pair("type","浜�"));
+// fieldValues.insert(std::make_pair("color","red"));
+// fieldValues.insert(std::make_pair("table_name",t_tableName));
+// fieldValues.insert(std::make_pair("table_type","2"));
+// fieldValues.insert(std::make_pair("is_self","0"));
+// fieldValues.insert(std::make_pair("is_long_control","0"));
+ string insertSql = getInsertSql("sys_o_tables", fieldValues);
+ /* Execute SQL statement */
+ rc = sqlite3_exec(db, insertSql.c_str(), NULL, 0, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg);
+ ERR(insertSql);
+ sqlite3_free(zErrMsg);
+ //#todo throw exp
+// throw exception("insert fail");
+ } else {
+ fprintf(stdout, " insert data successfully\n");
+ }
+ }
+ //--------------create table-------------------
+ return true;
+}
+
+
+bool SqliteFaceEncap::updateTable(std::string t_tableName, FieldValues &fieldValues) {
+ int rc;
+ //--------------create table-------------------
+ /* Create SQL statement */
+ //#todo
+ string sql = getUpdateFaceTableSql(t_tableName, fieldValues);
+
+ //#todo create facefea
+
+ /* Execute SQL statement */
+// cout << sql << endl;
+ rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg);
+ ERR(sql);
+ sqlite3_free(zErrMsg);
+ return false;
+ } else {
+ fprintf(stdout, "updateTable successfully\n");
+ }
+ //--------------create table-------------------
+ return true;
+}
+
+//#todo backup data?
+bool SqliteFaceEncap::deleteTable(std::string t_tableName) {
+ string delTableSql = getDeleteFaceTableSql(t_tableName);
+ int rc = sqlite3_exec(db, delTableSql.c_str(), NULL, 0, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg);
+ ERR(delTableSql);
+ sqlite3_free(zErrMsg);
+ return false;
+ } else {
+ fprintf(stdout, "Table deleted successfully\n");
+ FieldValues fieldValues;
+ fieldValues.insert(std::make_pair("tableName", t_tableName));
+ string deleteSql = getDeleteSql("sys_o_tables", fieldValues);
+// cout << deleteSql << endl;
+ /* Execute SQL statement */
+ rc = sqlite3_exec(db, deleteSql.c_str(), NULL, 0, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg);
+ ERR(deleteSql);
+ sqlite3_free(zErrMsg);
+ //#todo throw exp
+// throw exception("insert fail");
+ } else {
+ fprintf(stdout, " delete data successfully\n");
+ }
+ }
+ return true;
+}
+
+
+bool SqliteFaceEncap::updateFace(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues) {
+
+// updateFaceData
+ bool ret = updateFaceData(t_tableName + "_fea", faceData);
+ updateFaceInfo(t_tableName, fieldValues);
+ return ret;
+}
+
+bool SqliteFaceEncap::updateFaceData(std::string t_tableName, AddFaceData &faceData) {
+
+ QByteArray qFea((char *) faceData.feature.data(), faceData.feature.size());
+ QSqlQuery query(g_db);
+ QString strSql = "update ";
+ strSql.append(t_tableName.c_str());
+ if (faceData.feature.size() > 0 || faceData.faceUrl.size() > 0) {
+ strSql.append(" set ");
+
+ if (faceData.feature.size() > 0) {
+ strSql.append(" feature = :feature ,");
+ }
+ if (faceData.faceUrl.size() > 0) {
+ strSql.append(" faceUrl = :faceUrl ,");
+ }
+
+ //#todo
+ strSql.append(" update_time = '2010-01-03 01:01:00' ");
+
+ strSql.append(" where del_flag = 0 and uuid = '" + QString::fromStdString(faceData.uuid) + "';");
+ query.prepare(strSql);
+// query.addBindValue(QString::fromStdString(faceData.uuid));
+ if (faceData.feature.size() > 0) {
+ query.addBindValue(qFea);
+ }
+ if (faceData.faceUrl.size() > 0) {
+ query.addBindValue(QString::fromStdString(faceData.faceUrl));
+ }
+
+ if (!query.exec()) {
+ ERR("updateFaceData fail");
+ qDebug() << "updateFaceData" << __FILE__ << __LINE__ <<
+ query.lastQuery() << " " << query.lastError();
+ } else {
+ DBG("鏇存柊璁板綍鎴愬姛 " << faceData.uuid);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+//#wait todo
+bool SqliteFaceEncap::updateFaceInfo(std::string t_tableName, FieldValues &fieldValues) {
+ std::string sql = getUpdateFaceTableSql(t_tableName, fieldValues);
+ int rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg)
+ sqlite3_free(zErrMsg);
+ return false;
+ } else {
+ fprintf(stdout, "addFaceInfo successfully\n");
+ }
+ return true;
+}//#todo
+
+std::string SqliteFaceEncap::addFace(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues) {
+ std::string uuid = addFaceData(t_tableName + "_fea", faceData);
+ if (uuid.size() > 0) {
+ fieldValues["uuid"] = uuid;
+ addFaceInfo(t_tableName, fieldValues);
+ }
+ return uuid;
+}
+
+//INSERT INTO aaaFace (id, feature, del_flag ) VALUES (12,'sdfasdfasdfasdf',0);
+std::string SqliteFaceEncap::addFaceData(std::string t_tableName, AddFaceData &faceData) {
+
+ QByteArray qFea((char *) faceData.feature.data(), faceData.feature.size());
+ QSqlQuery query(g_db);
+ QString strSql = "INSERT INTO ";
+ strSql.append(t_tableName.c_str());
+
+ strSql.append("(uuid,feature,faceUrl) VALUES (:uuid,:feature,:faceUrl);");
+ query.prepare(strSql);
+ query.addBindValue(QString::fromStdString(faceData.uuid));
+ query.addBindValue(qFea);
+// cout << faceData.faceUrl << endl;
+ query.addBindValue(QString::fromStdString(faceData.faceUrl));
+
+ if (!query.exec()) {
+ ERR("addFaceData fail");
+ qDebug() << "addFaceData" << __FILE__ << __LINE__ << query.lastError();
+ return "";
+ } else {
+ DBG("鎻掑叆璁板綍鎴愬姛 " << faceData.uuid);
+ }
+ return faceData.uuid;
+}
+
+bool SqliteFaceEncap::addFaceInfo(std::string t_tableName, FieldValues &fieldValues) {
+ std::string sql = getInsertSql(t_tableName, fieldValues);
+ int rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg)
+ sqlite3_free(zErrMsg);
+ return false;
+ } else {
+ fprintf(stdout, "addFaceInfo successfully\n");
+ }
+ return true;
+}
+
+bool SqliteFaceEncap::deleteFace(std::string t_tableName, std::string uuid) {
+ deleteFaceData(t_tableName, uuid);
+ std::string t_tmp(t_tableName);
+ t_tmp.append("_fea");
+ bool ret = deleteFaceData(t_tmp.c_str(), uuid);
+
+ return ret;
+}
+
+//DELETE FROM aaaFace where 1=1 and id = 122
+//#todo update del_flag ?
+bool SqliteFaceEncap::deleteFaceData(std::string t_tableName, std::string uuid) {
+// FieldValues fieldValues;
+// fieldValues.insert(std::make_pair("uuid", uuid));
+// string deleteSql = getDeleteSql(t_tableName, fieldValues);
+ string deleteSql = "update ";
+ deleteSql.append(t_tableName + " set del_flag = 1 ,update_time = '" + AppUtil::getTimeSecString() + "' ");
+ deleteSql.append(" where uuid = '" + uuid + "' ");
+// cout << deleteSql << endl;
+ /* Execute SQL statement */
+ int rc = sqlite3_exec(db, deleteSql.c_str(), NULL, 0, &zErrMsg);
+ if (rc != SQLITE_OK) {
+ SQLERR(zErrMsg)
+ sqlite3_free(zErrMsg);
+ //#todo throw exp
+// throw exception("insert fail");
+ return false;
+ } else {
+ fprintf(stdout, " delete data successfully\n");
+ }
+ return true;
+}
+
+std::vector<string> SqliteFaceEncap::getTableNameList(std::string type) {
+ std::vector<string> tables;
+ QString sql = QString::fromStdString(getTableListSqlWithType(type));
+ QSqlQuery query(g_db);
+// qDebug() << strSql;
+ query.prepare(sql);
+ if (!query.exec()) {
+ qDebug() << "getTableNameList" << __FILE__ << __LINE__ << query.lastError();
+ } else {
+ while (query.next()) {
+ string tableName = query.value(0).toString().toStdString();
+ tables.push_back(tableName);
+ }
+ }
+ return tables;
+}
+
+FeatureDBWithUrlCache *SqliteFaceEncap::getFacesFromTable(std::string tableName) {
+ ClockTimer clk("loading " + tableName);
+ FeatureDBWithUrlCache &t_db = m_dbCache[tableName];
+ QString sql = QString::fromStdString(getFacesFromTableSql(tableName));
+ QSqlQuery query(g_db);
+ query.prepare(sql);
+ if (!query.exec()) {
+ qDebug() << "getFacesFromTable" << __FILE__ << __LINE__ << query.lastError();
+ } else {
+ while (query.next()) {
+ int del_flag = query.value(4).toInt();
+ std::string uuid = query.value(0).toString().toStdString();
+ if (del_flag) {
+ t_db.erase(uuid);
+ } else {
+ FaceFeatureWithUrl &t_feas = t_db[uuid];
+ t_feas.uuid = uuid;
+ QByteArray t_fea = query.value(1).toByteArray();
+// std::cout << t_fea.size() << std::endl;
+ t_feas.faceFeature.resize(t_fea.size());
+ memcpy(t_feas.faceFeature.data(), t_fea.data(), t_fea.size());
+// string create_time = query.value(2).toString().toStdString();
+ t_feas.faceurl = query.value(3).toString().toStdString();
+ }
+ }
+ }
+ return &t_db;
+}
+
+
+FeatureDBWithUrlCache SqliteFaceEncap::getFacesFromTableWhereDate(std::string tableName, std::string date) {
+ //#todo not used del_flag
+
+ return FeatureDBWithUrlCache();
+}
+
+TableInfos SqliteFaceEncap::getTableInfos() {
+ TableInfos tableInfos;
+ QString sql = QString::fromStdString(getTableInfosSql());
+ qDebug() << sql;
+ QSqlQuery query(g_db);
+ query.prepare(sql);
+ if (!query.exec()) {
+ qDebug() << "getTableInfos" << __FILE__ << __LINE__ << query.lastError() << " " << query.lastQuery();
+ } else {
+ while (query.next()) {
+ TableInfo tableInfo;
+ tableInfo.uuid = query.value(0).toString().toStdString();
+ tableInfo.tableName = query.value(1).toString().toStdString();
+ tableInfo.tableType = query.value(2).toString().toStdString();
+ tableInfo.bwType = query.value(3).toString().toStdString();
+ tableInfo.startTime = query.value(4).toString().toStdString();
+ tableInfo.endTime = query.value(5).toString().toStdString();
+ tableInfos.push_back(tableInfo);
+ }
+ }
+ return tableInfos;
+}
+
+FaceInfosCache SqliteFaceEncap::getFaceInfoFromTable(std::string tableName) {
+ FaceInfosCache faceInfosCache;
+ QString sql = QString::fromStdString(getTableInfosSql(tableName));
+ std::lock_guard<std::mutex> dataGuard(dataMtx);
+ QSqlQuery query(g_db);
+ query.prepare(sql);
+ if (!query.exec()) {
+ qDebug() << "getTableNameList" << __FILE__ << __LINE__ << query.lastError();
+ } else {
+ while (query.next()) {
+ int del_falg = query.value(9).toInt();
+ if (del_falg == 1) {
+ continue;
+ }
+ FaceInfo tableInfo;
+ tableInfo.uuid = query.value(0).toString().toStdString();
+ tableInfo.personName = query.value(1).toString().toStdString();
+ tableInfo.age = query.value(2).toString().toStdString();
+ tableInfo.sex = query.value(3).toString().toStdString();
+ tableInfo.idCard = query.value(4).toString().toStdString();
+ tableInfo.phoneNum = query.value(5).toString().toStdString();
+ faceInfosCache.insert(std::make_pair(tableInfo.uuid, tableInfo));
+ }
+ }
+ return faceInfosCache;
+}
+
+
diff --git a/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.h b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.h
new file mode 100644
index 0000000..7928ddf
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.h
@@ -0,0 +1,85 @@
+//
+// Created by pans on 4/28/18.
+//
+
+#ifndef TESTSQLITE_SQLITEFACEENCAP_H
+#define TESTSQLITE_SQLITEFACEENCAP_H
+
+#include "sqliteEncapsulation.h"
+
+#include "SqliteToolkit.hpp"
+
+/**
+ * #todo sqlite -> Qt.sqlite
+ */
+
+class SqliteFaceEncap : public sqliteEncapsulation {
+public:
+ explicit SqliteFaceEncap(std::string t_string);
+
+ bool createTable(std::string t_tableName, FieldValues &fieldValues);
+
+ bool updateTable(std::string t_tableName, FieldValues &fieldValues);
+
+ bool deleteTable(std::string t_tableName);
+
+ /***
+ * 鏍规嵁搴曞簱绫诲瀷鑾峰彇搴曞簱鍒楄〃
+ * @param type 搴曞簱绫诲瀷
+ * @return 搴曞簱鍒楄〃
+ */
+ std::vector<std::string> getTableNameList(std::string type);
+
+ TableInfos getTableInfos();
+
+public:
+
+ std::string addFace(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues);
+
+ bool updateFace(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues);
+
+ std::string addFaceData(std::string t_tableName, AddFaceData &faceData);
+
+ //#todo
+ bool addFaceInfo(std::string t_tableName, FieldValues &fieldValues);
+
+ bool updateFaceData(std::string t_tableName, AddFaceData &faceData);
+
+ bool updateFaceInfo(std::string t_tableName, FieldValues &fieldValues);
+
+ bool deleteFace(std::string t_tableName, std::string uuid);
+
+private:
+ bool deleteFaceData(std::string t_tableName, std::string uuid);
+
+public:
+ /***
+ * 鏍规嵁浜鸿劯琛ㄥ悕绉拌幏鍙栦汉鑴哥壒寰佸垪琛�
+ * @param tableName 琛ㄩ潰
+ * @return 浜鸿劯鐗瑰緛闆嗗悎
+ */
+ FeatureDBWithUrlCache *getFacesFromTable(std::string tableName);
+
+ FaceInfosCache getFaceInfoFromTable(std::string tableName);
+
+ FeatureDBWithUrlCache getFacesFromTableWhereDate(std::string tableName, std::string date);
+
+
+private:
+
+ void initDB(const char *t_string) const;
+
+private:
+ sqlite3 *db;
+ char *zErrMsg = 0;
+ std::mutex dataMtx;
+
+
+
+// FeatureDBCache m_db;
+
+ std::map<std::string, FeatureDBWithUrlCache> m_dbCache;
+};
+
+
+#endif //TESTSQLITE_SQLITEFACEENCAP_H
diff --git a/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp b/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
new file mode 100644
index 0000000..06dfd59
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
@@ -0,0 +1,312 @@
+//
+// Created by pans on 4/28/18.
+//
+
+#ifndef TESTSQLITE_SQLITETOOLKIT_HPP
+#define TESTSQLITE_SQLITETOOLKIT_HPP
+
+#include <iostream>
+#include <map>
+#include <vector>
+#include <string>
+#include <cstring>
+#include <sstream>
+#include <basic/util/app/AppUtil.h>
+
+/**
+ * 瀛楁鐨勯泦鍚�
+ * @key FieldName
+ * @value Value
+ */
+typedef std::map<std::string, std::string> FieldValues;
+/***
+ * 浜鸿劯鐗瑰緛
+ */
+typedef std::vector<unsigned char> FaceFeature;
+
+struct AddFaceData {
+ std::string uuid;
+ FaceFeature feature;
+ std::string faceUrl;
+};
+
+struct FaceInfo {
+ std::string uuid;
+ std::string personName;
+ std::string age;
+ std::string sex;
+ std::string idCard;
+ std::string phoneNum;
+};
+typedef std::vector<FaceInfo> FaceInfos;
+typedef std::map<std::string, FaceInfo> FaceInfosCache;
+
+struct TableInfo {
+ std::string uuid;
+ std::string tableName;
+ std::string tableType;
+ std::string bwType;
+ std::string startTime;
+ std::string endTime;
+ std::string createBy;
+};
+typedef std::vector<TableInfo> TableInfos;
+typedef std::map<std::string, TableInfo> TableInfosCache;
+
+//typedef std::vector<FaceFeature> FaceFeatures;
+
+//typedef std::map<std::string, FaceFeatures> FeatureDBCache;
+
+struct FaceFeatureWithUrl {
+ std::string uuid;
+ std::string faceurl;
+ FaceFeature faceFeature;
+};
+
+typedef std::map<std::string, FaceFeatureWithUrl> FeatureDBWithUrlCache;
+
+namespace {
+
+#define INITCOPY(_DEST, _SRC) _DEST.resize(_SRC.size());memcpy(_DEST.data(),_SRC.data(), _SRC.size());
+#define COPY(NAME1, NAME2) memcpy(&NAME1.data(), &NAME2.data(), NAME2.size);
+#define SQLERR(message) fprintf(stderr, "%s->%d-> SQLite error: %s\n",__FILE__,__LINE__, message);
+
+
+ //#todo 鏁版嵁搴搘enjian鍚嶇О
+ static std::string file_dbName = "TestFaceDB.db";
+ //#todo 鏁版嵁搴撳悕绉�
+ static std::string g_dbName = "main";
+ //#todo 绠$悊琛ㄧ殑琛ㄥ悕
+ static std::string g_tableName = "sys_o_tables";
+
+ //
+ std::string getFacesFromTableSql(std::string tableName) {
+ std::string sql =
+ "select uuid,feature,create_time,faceUrl,del_flag from " + tableName +
+ "_fea where feature is not null ";
+ return sql;
+ }
+
+ std::string getTableListSqlWithType(std::string type) {
+ std::string sql = "select tableName,del_flag from " + g_tableName + " where del_flag = 0";
+ if (type.size() > 0) {
+ sql.append(" and tableType = '" + type + "'");
+ }
+ return sql;
+ }
+
+ std::string getTableInfosSql(std::string tableName) {
+ std::string sql = "select * from " + tableName;// + " where del_flag = 0";
+ return sql;
+ }
+
+
+ std::string getTableInfosSql() {
+ //uuid,tableName,tableDesc,tableType,bwType,startTime,endTime
+ std::string sql = "select uuid,tableName,tableType,bwType,startTime,endTime from " + g_tableName +
+ " where del_flag = 0";
+ return sql;
+ }
+
+ /**
+ * not used have bug
+ * @param tableName
+ * @param id
+ * @param feature
+ * @return
+ */
+ char *getAddFaceDataSql(std::string tableName, int id, FaceFeature &feature) {
+ if (tableName.size() == 0 || feature.size() == 0) {
+ //#todo errInfo
+ return "tableName or FaceFeature is NULL";
+ }
+ std::string str_fea;
+ str_fea.assign(feature.begin(), feature.end());
+
+ std::stringstream sql;//= ;
+ sql << "INSERT INTO " << tableName << " (";
+ //std::string sqlTemp = sql;
+ std::string sql2 = ") VALUES(\"";
+ if (id >= 0) {
+ sql << "id,";
+ sql2.append(std::to_string(id) + "\",\"");
+ }
+ sql << "feature " << sql2 << str_fea << "\")";
+
+ //sql1 delete ,
+ //sql2 delete 2 ,' add )
+ return const_cast<char *>(str_fea.c_str());
+ }
+
+ /**
+ * 鍒犻櫎鏁版嵁
+ * @param tableName 琛ㄥ悕
+ * @param fieldValues 鍒犻櫎鐨勬潯浠剁粍鍚�
+ * @return
+ */
+ std::string getDeleteSql(std::string tableName, FieldValues &fieldValues) {
+ if (tableName.size() == 0 || fieldValues.size() == 0) {
+ //#todo errInfo
+ return "tableName or fieldValues is NULL";
+ }
+ std::string sql = "DELETE from " + tableName + " where 1 = 1 ";
+ for (auto item : fieldValues) {
+ if (item.first.size() != 0) {
+ sql.append("and " + item.first + " = '" + item.second + "' ");
+ }
+ }
+ return sql;
+ }
+
+ /**
+ * 娣诲姞鏁版嵁 || 鍒涘缓浜鸿劯琛ㄤ箣鍚庯紝灏嗚璁板綍鎻掑叆绠$悊琛�
+ * @param tableName 琛ㄥ悕
+ * @param fieldValues 灏嗚鎻掑叆瀛楁鐨勯泦鍚�
+ * @return
+ */
+ std::string getInsertSql(std::string tableName, FieldValues &fieldValues) {
+ if (tableName.size() == 0 || fieldValues.size() == 0) {
+ //#todo errInfo
+ return "tableName or fieldValues is NULL";
+ }
+ std::string sql = "INSERT INTO " + tableName + " (";
+ std::string sqlTemp = sql;
+ std::string sql2 = ") VALUES('";
+ for (auto item : fieldValues) {
+ if (item.first.size() != 0) {
+ sql.append(item.first + ",");
+ sql2.append(item.second + "','");
+ }
+ }
+ //sql1 delete ,
+ sql = sql.substr(0, sql.length() - 1);
+ //sql2 delete 2 ,' add )
+ sql2 = sql2.substr(0, sql2.length() - 2);
+ sql2.append(" )");
+ sql.append(sql2);
+ return sql;
+ }
+
+ /**
+ * 鍒涘缓绠$悊琛ㄧ殑sql璇彞
+ *
+ * @return sql
+ */
+ std::string getInitDBSql() {
+ std::string sql = "CREATE TABLE \"main\".\"sys_o_tables\" (";
+ sql.append(" uuid varchar(255) PRIMARY KEY, ");
+// sql.append(" ClusterName varchar(255) DEFAULT NULL,");//鏈湴搴撲笉闇�瑕�
+ sql.append(" tableName varchar(255) UNIQUE,");
+ sql.append(" tableDesc varchar(255) DEFAULT NULL,");
+ sql.append(" tableType varchar(255) DEFAULT NULL,");
+ sql.append(" bwType varchar(255) DEFAULT NULL,");
+ sql.append(" startTime varchar(255) DEFAULT NULL,");
+ sql.append(" endTime varchar(255) DEFAULT NULL,");
+ sql.append(" create_time BLOB default (datetime('now', 'localtime')),");
+ sql.append(" update_time varchar(255) DEFAULT NULL,");
+ sql.append(" create_by varchar(255) DEFAULT NULL,");
+ sql.append(" del_flag varchar(255) DEFAULT 0");
+ sql.append(");");
+ return sql;
+ }
+
+
+ /**
+ * 鍒涘缓浜鸿劯琛ㄧ殑sql璇彞
+ * @param tableName 鎯宠鍒涘缓鐨勮〃鍚�
+ * @return
+ */
+ std::string getCreateFaceTableSql(std::string tableName) {
+ if (tableName.size() == 0) {
+ //#todo errInfo
+ return "tableName is NULL";
+ }
+ // 浜哄憳淇℃伅琛�
+ std::string sql = "CREATE TABLE " + g_dbName + ".";
+ sql.append(tableName);
+ sql.append(" ( uuid varchar(255) PRIMARY KEY,");
+ sql.append("personName varchar(255) DEFAULT NULL,");
+ sql.append("age varchar(255) DEFAULT NULL,");
+ sql.append("sex varchar(255) DEFAULT NULL,");
+ sql.append("idCard varchar(255) DEFAULT NULL,");
+ sql.append("phoneNum varchar(255) DEFAULT NULL,");
+ sql.append("create_time BLOB DEFAULT (datetime('now', 'localtime')),");
+ sql.append("update_time DATETIME DEFAULT NULL,");
+ sql.append("create_by varchar(255) DEFAULT NULL,");
+ sql.append("del_flag INTEGER DEFAULT 0");
+ sql.append(");");
+ // 浜鸿劯鐗瑰緛琛�
+ sql.append("CREATE TABLE " + g_dbName + ".");
+ sql.append(tableName + "_fea");
+ sql.append(" ( uuid varchar(255) PRIMARY KEY,");
+ sql.append(" feature BLOB NOT NULL,");
+ sql.append(" faceUrl BLOB NOT NULL,");
+ sql.append(" create_time BLOB default (datetime('now', 'localtime')),");
+ sql.append(" update_time varchar(255) DEFAULT NULL,");
+ sql.append(" create_by varchar(255) DEFAULT NULL,");
+ sql.append(" del_flag INTEGER DEFAULT 0");
+ sql.append(");");
+ return sql;
+ }
+
+
+ std::string getUpdateFaceTableSql(std::string tableName, FieldValues &fieldValues) {
+ if (tableName.size() == 0) {
+ //#todo errInfo
+ return "tableName is NULL";
+ }
+ std::string uuid = fieldValues["uuid"];
+ if (uuid.size() <= 0) {
+ SQLERR("uuid size is error");
+ return "";
+ }
+ fieldValues.erase("uuid");
+ if (fieldValues.size() <= 0) {
+ SQLERR("fieldValues size is error");
+ return "";
+ }
+ std::string sql = "update ";
+ sql.append(tableName + " set ");
+ for (auto &item :fieldValues) {
+ sql.append(item.first + " = '" + item.second + "',");
+ }
+ sql.append(" update_time ='" + AppUtil::getTimeSecString() + "'");
+ sql.append(" where uuid ='" + uuid + "'");
+ return sql;
+ }
+
+
+ //#TODO 浜鸿劯琛ㄩ渶瑕佸垹闄や袱涓�
+ std::string getDeleteFaceTableSql(std::string tableName) {
+ if (tableName.size() == 0) {
+ //#todo errInfo
+ return "tableName is NULL";
+ }
+ std::string sql = "DROP TABLE " + g_dbName + "." + tableName + ";";
+ sql.append("DROP TABLE " + g_dbName + "." + tableName + "_fea;");
+ return sql;
+ }
+
+ /**
+ * 鏍规嵁琛ㄥ悕鍒ゆ柇鏁版嵁琛ㄦ槸鍚﹀瓨鍦�
+ * @param existRet true is exist.
+ * @param nCount 瀛楁鏁伴噺
+ * @param pValue 瀛楁鍊兼暟缁�
+ * @param azColName 瀛楁鍚嶇О鏁扮粍
+ * @return
+ */
+ static int isExist(void *existRet, int nCount, char **pValue, char **azColName) {
+ bool *testRet = (bool *) existRet;
+ int num = atoi(pValue[0]);
+ if (num > 0) {
+ *testRet = true;
+ } else {
+ *testRet = false;
+ }
+ return 0;
+ }
+
+}
+
+
+#endif //TESTSQLITE_SQLITETOOLKIT_HPP
diff --git a/QiaoJiaSystem/LocalDBTool/main.cpp b/QiaoJiaSystem/LocalDBTool/main.cpp
new file mode 100644
index 0000000..8f3d590
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/main.cpp
@@ -0,0 +1,273 @@
+//
+// Created by pans on 5/2/18.
+//
+#include <iostream>
+#include <thread>
+
+//#include <basic/util/app/AppPreference.hpp>
+#include <zconf.h>
+#include <basic/debug/Debug.h>
+//#include <QtCore/QString>
+//#include "SqliteFaceEncap.h"
+//#include "SqliteToolkit.hpp"
+#include "GetUUId.h"
+
+using namespace std;
+
+/***
+ * 鍒濆鍖栧垱寤鸿〃 :
+ * 1.搴曞簱绠$悊琛�
+ * uuid, tableName, tableDesc, tableType, bwType, create_time, update_time, create_by, del_flag, startTime, endTime
+ * sql ok
+ *
+ * 2.涓枃鍜寀uid瀵瑰簲琛�
+ * uuid, name, tableName(uuid)
+ * sql ok code not ok
+ *
+ *
+ * 搴曞簱鐗瑰緛琛� id鏄痷uid
+ * uuid, feature, img_url, create_time, update_time, create_by
+ * sql ok
+ *
+ * 浜哄憳淇℃伅琛�
+ * uuid, personName, age, sex, idCard, phoneNum, create_time, update_time, create_by
+ * sql ok
+ *
+ * car #todo
+ *
+ *
+ *
+ */
+
+/***
+
+ drop table "main"."sys_o_tables";
+ CREATE TABLE "main"."sys_o_tables" (
+ uuid varchar(255) PRIMARY KEY,
+ ClusterName varchar(255) DEFAULT NULL,
+ tableName varchar(255) DEFAULT NULL,
+ tableDesc varchar(255) DEFAULT NULL,
+ tableType varchar(255) DEFAULT NULL,
+ bwType varchar(255) DEFAULT NULL,
+ startTime varchar(255) DEFAULT NULL,
+ endTime varchar(255) DEFAULT NULL,
+ create_time BLOB DEFAULT (datetime('now', 'localtime')),
+ update_time varchar(255) DEFAULT NULL,
+ create_by varchar(255) DEFAULT NULL,
+ del_flag varchar(255) DEFAULT 0
+);
+
+drop table "main"."TN2TID";
+CREATE TABLE "main"."TN2TID" (
+ uuid varchar(255) PRIMARY KEY,
+ TableName varchar(255) NOT NULL,
+ tableID varchar(255) NOT NULL,
+ create_time BLOB DEFAULT (datetime('now', 'localtime')),
+ update_time varchar(255) DEFAULT NULL,
+ del_flag INTEGER DEFAULT 0
+);
+
+drop table "main"."person_info";
+CREATE TABLE "main"."person_info" (
+ uuid varchar(255) PRIMARY KEY,
+ personName varchar(255) DEFAULT NULL,
+ age varchar(255) DEFAULT NULL,
+ sex varchar(255) DEFAULT NULL,
+ idCard varchar(255) DEFAULT NULL,
+ phoneNum varchar(255) DEFAULT NULL,
+ create_time BLOB DEFAULT (datetime('now', 'localtime')),
+ update_time DATETIME DEFAULT NULL,
+ create_by varchar(255) DEFAULT NULL,
+ del_flag INTEGER DEFAULT 0
+);
+
+drop table "main"."person_info_feature";
+CREATE TABLE "main"."person_info_feature" (
+ uuid varchar(255) PRIMARY KEY,
+ feature BLOB NOT NULL,
+ faceUrl BLOB NOT NULL,
+ create_time BLOB DEFAULT (datetime('now', 'localtime')),
+ update_time varchar(255) DEFAULT NULL,
+ create_by varchar(255) DEFAULT NULL,
+ del_flag INTEGER DEFAULT 0
+);
+
+ */
+
+
+//struct FaceFeaWithScore {
+// int left;
+// int top;
+// int width;
+// int height;
+// std::vector<unsigned char> feature;
+// float score;
+//};
+//typedef std::vector<FaceFeaWithScore> Features;
+
+
+/***
+ *
+ * @param argc
+ * @param argv
+ * @return
+ */
+/*
+int main2(int argc, char **argv) {
+
+ SAVE_APP_ARGS;
+
+// cout << getInitDBSql();
+
+ SqliteFaceEncap sqliteFaceEncap("testRR");
+
+ {
+ //#鍒犻櫎搴曞簱
+// sqliteFaceEncap.deleteTable("test1");
+ }
+
+ {
+ FieldValues fieldValues;
+ fieldValues.insert(std::make_pair("uuid", GetUUId::getUUID()));
+ fieldValues.insert(std::make_pair("tableName", "test2"));
+ fieldValues.insert(std::make_pair("tableDesc", "ceshi"));
+ fieldValues.insert(std::make_pair("tableType", "person"));
+ fieldValues.insert(std::make_pair("bwType", "1"));
+ fieldValues.insert(std::make_pair("startTime", "2018-01-01 02:02:02"));
+ fieldValues.insert(std::make_pair("endTime", "2018-12-01 02:02:02"));
+ fieldValues.insert(std::make_pair("create_by", "who"));
+
+ //#鍒涘缓搴曞簱
+// sqliteFaceEncap.createTable("test2", fieldValues);
+ }
+
+ {
+ //#鏌ヨ浜鸿劯搴曞簱鍒楄〃
+ auto res = sqliteFaceEncap.getTableNameList("person");
+ for (auto &item : res) {
+ std::cout << "tableName is " << item << std::endl;
+ }
+ }
+
+ {
+ //#鏇存柊搴曞簱绠$悊琛�
+ FieldValues fieldValues;
+ fieldValues.insert(std::make_pair("uuid", "c4e27077-59a3-458e-aedf-4b5d4def649b"));
+ fieldValues.insert(std::make_pair("tableName", "test4"));
+ fieldValues.insert(std::make_pair("tableDesc", "ceshi2"));
+ fieldValues.insert(std::make_pair("tableType", "car"));
+ fieldValues.insert(std::make_pair("bwType", "0"));
+ fieldValues.insert(std::make_pair("startTime", "2018-01-01 02:02:02"));
+ fieldValues.insert(std::make_pair("endTime", "2018-12-01 02:02:02"));
+ fieldValues.insert(std::make_pair("create_by", "who"));
+// sqliteFaceEncap.updateTable("sys_o_tables", fieldValues);
+ }
+
+ {
+ Features faceResults;
+ for (int i = 0; i < 10; i++) {
+ FaceFeaWithScore faceFeaWithScore;
+ faceFeaWithScore.feature.resize(100);
+ memset(faceFeaWithScore.feature.data(), 1, faceFeaWithScore.feature.size());
+
+ faceResults.push_back(faceFeaWithScore);
+ }
+ //#娣诲姞浜鸿劯鏁版嵁 TODO test
+ //#涓ゅ紶琛�
+ int lpp = 0;
+ FieldValues fieldValues;
+ for (auto item : faceResults) {
+ AddFaceData addFaceData;
+ addFaceData.feature.resize(item.feature.size());
+ memcpy(addFaceData.feature.data(), item.feature.data(), item.feature.size());
+ addFaceData.uuid = GetUUId::getUUID();
+ addFaceData.faceUrl = "null";
+ auto t_id = sqliteFaceEncap.addFace("test1", addFaceData, fieldValues);
+ }
+ }
+
+ {
+ //#鏇存柊浜鸿劯鏁版嵁
+ //#todo 涓ゅ紶琛�
+ FieldValues fieldValues;
+ FaceFeaWithScore faceFeaWithScore;
+ faceFeaWithScore.feature.resize(100);
+ memset(faceFeaWithScore.feature.data(), 1, faceFeaWithScore.feature.size());
+
+
+ AddFaceData addFaceData;
+ addFaceData.feature.resize(faceFeaWithScore.feature.size());
+ memcpy(addFaceData.feature.data(), faceFeaWithScore.feature.data(), faceFeaWithScore.feature.size());
+// addFaceData.uuid = "ac8b30cf-8476-4dcf-a476-96907bb9a01f";
+ addFaceData.faceUrl = "ttttttttt";
+// auto ret = sqliteFaceEncap.updateFace("test1", addFaceData, fieldValues);
+// if (ret) {
+// DBG("true");
+// } else {
+// DBG("false");
+// }
+ }
+
+ {
+ //#鍒犻櫎浜鸿劯鏁版嵁
+ sqliteFaceEncap.deleteFace("test1", "e04ad3bc-5126-4fe5-b01f-f461dd30e104");
+ }
+
+
+ {
+ //#鏌ヨ浜鸿劯鏁版嵁
+ auto res = sqliteFaceEncap.getFacesFromTable("test1");
+ auto &res_t = *res;
+ for (auto &item : res_t) {
+// std::cout << item.first << std::endl;
+ std::cout << item.second.uuid << std::endl;
+ std::cout << item.second.faceurl << std::endl;
+ std::cout << item.second.faceFeature.size() << std::endl;
+ }
+ }
+
+ {
+ auto res = sqliteFaceEncap.getTableInfos();
+ for (auto &item : res) {
+ std::cout << item.uuid << std::endl;
+ }
+ }
+
+ return 0;
+}
+*/
+//#define STRIP_LOG 0
+#include <AppConfig.h>
+
+int main(int argc, char **argv) {
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+
+ std::string m = "test";
+ DBG(m << " DBG");
+ DBG(m << " DBG");
+ LOG(INFO) << "hello glog"; // 鎵撳嵃log锛氣�渉ello glog. 绫讳技浜嶤++ stream銆�
+ SYSLOG(INFO) << "test log";
+// DLOG(INFO, m);
+// RAW_DLOG(WARNING, "test");
+
+
+ CHKMSG(1, 1, m << " CHKMSG");
+ CHKMSG(1, 2, m << " CHKMSG");
+ MSG(m << " MSG");
+
+ CHKERR(1, 1, m << " CHKERR");
+ CHKERR(1, 2, m << " CHKERR");
+
+ ERR(m << " ERR");
+
+ CHKINFO(1, 1, m << " CHKINFO");
+ CHKINFO(1, 2, m << " CHKINFO");
+ INFO(m << " INFO");
+
+ CHKDBG(1, 1, m << " CHKDBG");
+ CHKDBG(1, 2, m << " CHKDBG");
+
+ DBG(m << " DBG");
+
+ getchar();
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/LocalDBTool/new_file b/QiaoJiaSystem/LocalDBTool/new_file
new file mode 100644
index 0000000..ca06b05
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/new_file
Binary files differ
diff --git a/QiaoJiaSystem/PerimeterAlarm/AppPaController.cpp b/QiaoJiaSystem/PerimeterAlarm/AppPaController.cpp
new file mode 100644
index 0000000..de80896
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/AppPaController.cpp
@@ -0,0 +1,363 @@
+#include "AppPaController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppUtil.h>
+#include <algorithm>
+#include <basic/util/app/AppConfig.h>
+#include <QtCore/QDateTime>
+#include <QtCore/QtGlobal>
+#include <net_config.h>
+
+
+AppPaController:: AppPaController(int index, const ControllerConfig& cfg ):
+ videoCaptureElement(cfg.camInfo.strRtsp, 25, 3000, appPref.getLongData("gpu.index"), true),
+ m_index(index),
+ fdfsClient(nullptr),
+ yoloRpcElement(to_string(index) + "yoloRpc"),
+ triggerElement(cfg.paAlarmInfo.nTriggerDelay, cfg.paAlarmInfo.nAlarmDelay),
+ recordVideoElement(index, cfg.camInfo.strRtsp),
+ m_cfg(cfg)
+ {
+
+ init();
+ }
+
+AppPaController::~AppPaController() {
+
+}
+
+
+
+bool AppPaController::getRunning() {
+ return videoCaptureElement.isRunning();
+}
+
+
+
+void AppPaController::init() {
+
+ unsigned char ip_old[15] = {0};
+ std::string net_ifname = appConfig.getStringProperty("netIfName");
+// if (!(GetIpAddress(net_ifname.c_str(), ip_old))) {
+// ERR("couldn't get ip");
+// }
+
+ bUp = false;
+
+ yoloRpcElement.setProperty("str_addr", m_cfg.camInfo.strAdrr);
+ yoloRpcElement.setProperty("local_ip", std::string((char *) ip_old));
+ // yoloRpcElement.setMask(QString::fromStdString(m_cfg.paAlarmInfo.strMaskPath));
+ yoloRpcElement.SetRuleCfg(&m_cfg);
+ yoloRpcElement.setProperty("dev_id", m_cfg.camInfo.strCamId);
+ m_json_Record["rtsp"] = m_cfg.camInfo.strRtsp;
+
+
+
+ videoCaptureElement.registerConnector([&] {
+
+ auto i_t = videoCaptureElement.getChangeLevel();
+ if (i_t > 80)
+ {
+// cout << __FUNCTION__ << " -> " << __LINE__ << " -> " << i_t << endl;
+ triggerElement.setState(true);
+ }
+ else if (i_t < 50)
+ {
+// cout << __FUNCTION__ << " -> " << __LINE__ << " -> " << i_t << endl;
+ triggerElement.setState(false);
+ }
+
+ triggerElement.triggerOnce();
+
+ int test_sub = triggerElement.getState() ? 1 : 5;//
+
+ videoCaptureElement.setOutPutInterval(test_sub);
+
+ if (triggerElement.getTriggerState()) {
+ if (!bUp) {
+
+ string t_FilePath = "";
+ m_json_Record["path"] = t_FilePath;
+ std::string t_recJsonStr = m_fastWriter.write(m_json_Record);
+ t_FilePath = recordVideoElement.startRecord(t_recJsonStr);
+ INFO(m_cfg.camInfo.strCamId << "file keey is ::" << t_FilePath);
+ yoloRpcElement.setProperty("path", t_FilePath);
+ bUp = true;
+
+ std::thread timerFunc([&] {
+ //褰曞埗鏃堕棿瓒呰繃鐢ㄦ埛璁惧畾鐨勬椂闂村悗鎴柇锛岄噸鏂板綍鍒�
+ long startTime = AppUtil::getCurrentMs();
+ int cut_max_duration = appPref.getIntData("n_cut_max_duration");
+ long triggerTime = cut_max_duration == -1 ? 2 * 60 * 1000 : cut_max_duration * 1000;
+ while (bUp) {
+ if (AppUtil::getCurrentMs() - startTime > triggerTime) {
+// if (bUp) {
+ bUp = false;
+// }
+ break;
+ } else {
+ usleep(5000);
+ }
+ }
+ });
+ timerFunc.detach();
+ } else {
+ recordVideoElement.feedDog();
+ }
+ } else {
+ if (bUp) {
+ bUp = false;
+ //DBG(m_camId << "endRecord");
+ recordVideoElement.endRecord();
+ }
+// return;
+ }
+
+
+
+ std::string strNewTime;
+ if (m_cfg.camInfo.strCamId.size() > 0) {
+ strNewTime = AppUtil::getTimeSecString();
+ } else {
+ //#todo 璁$畻褰撳墠鏂囦欢鏃堕棿
+ //#TODO 杈撳嚭闂撮殧鐢ㄤ簬璁$畻鏃堕棿
+ // 鐜颁负姣忎笁甯ц绠椾竴娆★紝瀵艰嚧璁$畻鐨勬椂闂撮暱浜庢枃浠剁殑瀹為檯鏃堕棿
+ auto opit = 25;// videoCaptureElement.getOutPutInterval();
+ auto opidx = videoCaptureElement.getoutPutIndex();
+ int second = opidx / opit;
+ qint64 newTime = m_dt.toMSecsSinceEpoch() + second * 1000;
+ QDateTime newDt = QDateTime::fromMSecsSinceEpoch(newTime);
+ strNewTime = newDt.toString("yyyy-MM-dd hh:mm:ss").toStdString();
+
+ }
+// DBG(strNewTime);
+
+
+
+ if (!yoloRpcElement.isBusy()) {
+// yoloRpcElement.setProperty("uuid", uuid);
+ //#todo
+ yoloRpcElement.setProperty("time", strNewTime);
+ yoloRpcElement.setImage(videoCaptureElement.getImage());
+ yoloRpcElement.submit();
+ }
+
+ if (!imageDrawElement.isBusy()) {
+ imageDrawElement.setImage(videoCaptureElement.getImage());
+ imageDrawElement.submit();
+ }
+
+
+ });
+
+
+ triggerElement.registerConnector([&] {
+
+// std::string strImgPath,strVideoPath,strCurTime;
+// makePath(strImgPath,strVideoPath,strCurTime);
+ if(yoloRpcElement.getRealNum()<m_cfg.paAlarmInfo.nAssembleCount)
+ return;
+ switch (triggerElement.getTriggerType()) {
+ case UP:
+ INFO("UP:sendVideoAlarm(true) num="<<yoloRpcElement.getRealNum());
+ // this->sendVideoAlarm(true);
+ //this->openSoundAlarm();
+ //if(isSaveResult()) alarmResultSaveToDB(strImgPath,strVideoPath,strCurTime);
+ //if(isSaveVideo()) recordVideoElement.startRecord()strVideoPath.c_str());
+ break;
+ case DOWN:
+
+ INFO("UP:sendVideoAlarm(false) num="<<yoloRpcElement.getRealNum());
+ // this->sendVideoAlarm(false);
+ // this->closeSoundAlarm();
+ //if(isSaveVideo()) recordVideoElement.endRecord();
+ break;
+ default:
+ break;
+ };
+// if(isSaveImage() &&triggerElement.getTriggerType()==UP)
+// {
+
+// std::vector<cv::Rect> rects ;
+// std::vector<ScoredRect> scoredRects=yoloRpcElement.getLastScoreRects();
+// for(auto scoreRect:scoredRects)
+// {
+// rects.push_back(scoreRect.rect);
+// }
+
+// cv::Mat img = this->videoCaptureElement.getImage();
+// AppPaController::saveRectsImage(rects,img,strImgPath.c_str());
+// }
+
+ });
+ yoloRpcElement.registerConnector([&] {
+ imageDrawElement.setYoloObjects(yoloRpcElement.getLastScoreRects());
+ triggerElement.setState(yoloRpcElement.getRealNum()>=m_cfg.paAlarmInfo.nAssembleCount);
+
+ });
+
+
+ imageDrawElement.registerConnector([&] {
+ if (appPref.getIntData("show.image") == 1) {
+ ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
+ }
+ });
+
+ registerElement(videoCaptureElement);
+
+ registerElement(yoloRpcElement);
+
+
+ registerElement(imageDrawElement);
+
+ registerElement(triggerElement);
+
+ videoCaptureElement.setOutPutInterval(3);
+
+}
+
+
+
+void AppPaController::setfdfsClient(FastFdsWithLock *p_fdfsClient) {
+ fdfsClient = p_fdfsClient;
+ yoloRpcElement.setFdfs(fdfsClient);
+}
+
+std::string AppPaController::getRtmp() {
+ std::string ret = "";// = videoPublishElement.getPath();
+ size_t pos = ret.find(".flv");
+ ret = ret.substr(0, pos);
+ INFO(ret);
+ return ret;
+}
+//void AppPaController::sendVideoAlarm(bool value)
+//{
+// ::Alarm::AlarmInfo alarmInfo;
+// alarmInfo.bAlarm = value;
+// alarmInfo.strRtsp = m_cfg.camInfo.strRtsp;
+// alarmInfo.wallNo = m_cfg.paAlarmInfo.nWallNum;
+// alarmInfo.subWallNo = m_cfg.paAlarmInfo.nWallSubNum;
+// alarmInfo.windowNo = m_cfg.paAlarmInfo.nWindowNum;
+// try {
+// auto server = alarmRpc.getServer();
+// if(server){
+// server->AlarmSingle(alarmInfo);
+// }else{
+// ERR("sendVideoAlarm falid; server is null");
+// }
+// } catch (std::exception& e) {
+// ERR(e.what());
+// }
+//}
+
+void AppPaController::openSoundAlarm()
+{
+ try {
+// auto server = alarmRpc.getServer();
+// if(server){
+// server->AlarmSound(appPref.getStringData("pa.identity"),true);
+// }else{
+// ERR("openSoundAlarm falid; server is null");
+// }
+ } catch (std::exception& e) {
+ ERR(e.what());
+ }
+}
+
+void AppPaController::closeSoundAlarm()
+{
+ try {
+// auto server = alarmRpc.getServer();
+// if(server){
+// server->AlarmSound(appPref.getStringData("pa.identity"),false);
+// }else{
+// ERR("closeSoundAlarm falid; server is null");
+// }
+ } catch (std::exception& e) {
+ ERR(e.what());
+ }
+}
+
+void AppPaController::playSound()
+{
+ try {
+// auto server = soundRpc.getServer();
+// if(server){
+
+// server->SoundPlay(m_index,soundInfos);
+// }else{
+// ERR("playSound falid; server is null");
+// }
+ } catch (std::exception& e) {
+ ERR(e.what());
+ }
+}
+
+void AppPaController::stopSound()
+{
+ try {
+// auto server = soundRpc.getServer();
+// if(server){
+// server->SoundStop(m_index);
+// }else{
+// ERR("stopSound falid; server is null");
+// }
+ } catch (std::exception& e) {
+ ERR(e.what());
+ }
+}
+
+
+
+
+//void AppPaController::alarmResultSaveToDB(std::string& imgPath,std::string& videoPath,std::string& curTime)
+//{
+// try {
+// auto server = m_SaveAlarmRpc.getServer();
+// if(server){
+// ::SaveModule::AlarmInfo iceAlarmInfo;
+// iceAlarmInfo.nCamID = index;
+// iceAlarmInfo.nStatus = 0;
+// iceAlarmInfo.strAlarmDescribe = "invade";
+// size_t pos = imgPath.find("/static");
+// iceAlarmInfo.strAlarmImgPath = imgPath.substr(pos,imgPath.length()-pos);
+// pos = videoPath.find("/static");
+// iceAlarmInfo.strAlarmVideoPath = videoPath.substr(pos,videoPath.length()-pos);
+// iceAlarmInfo.strCreateTime = curTime;
+// server->saveAlarmInfo(iceAlarmInfo);
+// }else{
+// ERR("ice alarmSaveToDB falid; server is null");
+// }
+// }catch (std::exception& e) {
+// ERR(e.what());
+// }
+//}
+
+static int AppPaController::saveRectsImage(const vector<cv::Rect2f> &rects, const cv::Mat &img, const char *path)
+{
+ if(img.rows==0||img.cols==0)return -1;
+ cv::Mat image = img.clone();
+ for(auto& rectf:rects){
+ cv::Rect rect(rectf.x*image.cols,rectf.y*image.rows,rectf.width*image.cols,rectf.height*image.rows);
+ cv::rectangle(image, rect,cv::Scalar(0,0,255),4);
+ }
+ return cv::imwrite(path,image);
+
+}
+
+bool AppPaController::isSaveVideo()
+{
+ return appPref.getIntData("video.save") != 0;
+}
+
+bool AppPaController::isSaveResult()
+{
+ return appPref.getIntData("alarmresult.save") != 0;
+}
+
+bool AppPaController::isSaveImage()
+{
+ return appPref.getIntData("image.save") != 0;
+}
+
+
+
diff --git a/QiaoJiaSystem/PerimeterAlarm/AppPaController.h b/QiaoJiaSystem/PerimeterAlarm/AppPaController.h
new file mode 100644
index 0000000..4c5a8c2
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/AppPaController.h
@@ -0,0 +1,168 @@
+#ifndef APPPACONTROLLER_H
+#define APPPACONTROLLER_H
+
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ffmpeg/FfmpegElement.h>
+#include <basic/pipe_element/ImageShowElement.h>
+#include <basic/util/curl/HttpRequestWithCrul.hpp>
+#include "PaImageDrawElement.h"
+#include "../StructureApp/RecordVideoElement.h"
+#include "PaYoloRpcElement.h"
+#include <TriggerElement.h>
+#include <QtCore/QDateTime>
+#include <jsoncpp/json/json.h>
+//#include <basic/rpc/IceRpc.hpp>
+//#include "../Alarm/rpc/Alarm.h"
+//#include "../netsoundbox/rpc/NetSoundBox.h"
+//#include <QtCore/QVector>
+//缃戠粶闊崇閰嶇疆
+struct SoundPlayInfo
+{
+ SoundPlayInfo():nSoundDuration(-1)
+ {}
+ //int nID;
+ std::string strIP;//闊崇IP
+ int nSoundDuration;//澹伴煶闂撮殧鏃堕棿
+ std::string strPath;//澹伴煶璺緞
+};
+//鎽勫儚澶翠俊鎭�
+struct CamInfo
+{
+ int nFps;//甯х巼
+ std::string strCamId;
+ std::string strAdrr;
+ std::string strRtsp;//RTSP鍦板潃
+};
+
+//鎶ヨ淇℃伅
+struct PaAlarmInfo
+{
+// int nWallNum;//澧欏彿
+// int nWallSubNum;//瀛愬鍙�
+// int nWindowNum;//绐楀彛鍙�
+ int nTriggerDelay;//鎶ヨ寮�濮嬪欢鏃舵椂闂撮棿闅�
+ int nAlarmDelay;//鎶ヨ缁撴潫寤舵椂鏃堕棿闂撮殧
+ QString strMaskPath; //alarm maskPath瑙g爜鍣ㄦ姤璀︾殑ROI鍖哄煙灏忓浘璺緞
+ float fSensitivity;//alarm sensitivity鎶ヨ鐨勬娴嬮槇鍊�
+ int nAssembleCount;//鑱氶泦鐨勪汉鏁�
+};
+
+//鑱氶泦淇℃伅
+struct AssembleInfo
+{
+ int nAssembleCount;//鑱氶泦鐨勪汉鏁�
+ float fSensitivity;//AssembleInfo sensitivity鑱氶泦鐨勬娴嬮槇鍊�
+ //std::string strProxy;
+ std::string strMaskPath;// AssembleInfo maskPath鑱氶泦鐨凴OI鍖哄煙灏忓浘璺緞
+ std::vector<SoundPlayInfo> sounds;//缃戠粶闊崇鎾斁淇℃伅
+};
+
+struct RuleWeekInfo
+{
+ RuleWeekInfo()
+ {
+ m_nType = 1;
+ m_strBegin = "";
+ m_strEnd = "";
+ }
+
+ int m_nType; //鍛ㄥ嚑
+ QString m_strBegin;//00:00
+ QString m_strEnd;
+};
+//addcamera閰嶇疆椤�
+struct ControllerConfig
+{
+
+ //NONE neither alarm nor assemble
+ //ALARM alarm
+ //ASSEMBLE Assemble
+
+ //camInfo
+ CamInfo camInfo;//鎽勫儚澶翠俊鎭�
+
+ //alarmInfo
+ PaAlarmInfo paAlarmInfo;//鎶ヨ淇℃伅
+
+ //AssembleInfo
+ // AssembleInfo assembleInfo;//鑱氶泦淇℃伅
+
+ QVector<RuleWeekInfo> ruleWeekInfoVec;
+
+};
+
+class AppPaController : public PipeController {
+public:
+ /***
+ * 鐢ㄤ簬蹇�熻棰戠粨鏋勫寲
+ * @param folderPath 浠诲姟鏍圭洰褰曪紝鐢ㄤ簬鍋氬叡浜唴瀛榠d
+ * @param json 鍙傛暟涓簉tsp娴佸湴鍧� sdk鏄惁鍚敤鐨勬爣璇�
+ */
+
+ AppPaController(int index, const ControllerConfig& cfg);
+
+ virtual ~AppPaController();
+
+ void sendVideoAlarm(bool value);
+ //閫氱煡鎶ヨ鏈嶅姟鎶ヨ
+ void openSoundAlarm();
+ //閫氱煡鎶ヨ鏈嶅姟鍏抽棴鎶ヨ
+ void closeSoundAlarm();
+ //閫氱煡缃戠粶闊崇鎾斁闊充箰
+ void playSound();
+ //閫氱煡缃戠粶闊崇鍋滄鎾斁闊充箰
+ void stopSound();
+
+ //void alarmResultSaveToDB(std::string&,std::string&,std::string&);
+
+ //淇濆瓨浜轰綋瑁佸壀鍥�
+ static int saveRectsImage(const vector<cv::Rect2f>& rects,const cv::Mat& img,const char* path);
+
+
+ bool isSaveVideo();
+
+ bool isSaveResult();
+
+ bool isSaveImage();
+
+
+ bool getRunning();
+
+ std::string getRtmp();
+
+ void setfdfsClient(FastFdsWithLock *p_fdfsClient);
+
+private:
+ void init();
+
+private:
+ ffmpeg::VideoCaptureElement videoCaptureElement;
+ PaYoloRpcElement yoloRpcElement;
+ PaImageDrawElement imageDrawElement;
+ RecordVideoElement recordVideoElement;
+// VideoPublishElement videoPublishElement;
+
+ int m_index;
+ std::string m_folderPath;
+ Json::Value m_json_Record;
+
+ Json::FastWriter m_fastWriter;
+ FastFdsWithLock *fdfsClient;
+
+
+ TriggerElement triggerElement;
+ std::atomic<bool> bUp;
+
+ QDateTime m_dt;
+
+
+ const ControllerConfig m_cfg;
+
+ // NetSoundBox::SoundInfos soundInfos;
+// IceRpcClient<Alarm::AlarmInterfacePrx> alarmRpc;
+// IceRpcClient<NetSoundBox::SoundInterfacePrxPtr> soundRpc;
+ // IceRpcClient<SaveModule::SaveAlarmPrx> m_SaveAlarmRpc;
+
+};
+
+#endif // APPPIPECONTROLLER_H
diff --git a/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt b/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt
new file mode 100644
index 0000000..126891b
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt
@@ -0,0 +1,121 @@
+cmake_minimum_required(VERSION 3.5)
+project(PerimeterAlarm)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -DTESTCODE -fpermissive)
+
+SET(SOURCES
+# TrackingTrigger.cpp
+ PaYoloRpcElement.cpp
+ PaImageDrawElement.cpp
+
+# rpc/StructureApp.cpp
+ AppPaController.cpp
+ ../YoloServer/rpc/YoloServer.cpp
+ ../RecordVideo/rpc/RecordVideo.cpp
+ ../RapidStructureApp/TriggerElement.cpp
+ ../StructureApp/TrackingTrigger.cpp
+ ../StructureApp/RecordVideoElement.cpp
+# ../Alarm/rpc/Alarm.cpp
+ # ../netsoundbox/rpc/NetSoundBox.cpp
+
+
+
+# rpc/AlarmInfo.cpp
+
+
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
+ ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+ ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+ ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+ ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+ ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.cpp
+ ../../BasicPlatForm/basic/util/curl/HttpRequestWithCrul.hpp
+ ../../BasicPlatForm/basic/util/net_config/net_config.cpp
+ )
+
+SET(LIBS
+ Ice
+ crypto
+ opencv_world
+ avformat
+ avcodec
+ swresample
+ swscale
+ avutil
+ bz2 dl z
+ Qt5Core
+ pthread
+ jsoncpp
+ cuda
+ cudart
+ cublas
+ curand
+
+ glog
+
+ uuid
+ curl
+ fastcommon
+ fdfsclient
+ Qt5Gui
+ )
+
+include_directories(
+# ./rpc
+ ../YoloServer/rpc
+ ../RecordVideo/rpc
+ ../RapidStructureApp/
+
+# ../netsoundbox/rpc/
+# ../Alarm/rpc
+
+
+ ../../BasicPlatForm
+ ../../BasicPlatForm/libs/opencv/include
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/ffmpeg/include
+ ../../BasicPlatForm/libs/jsoncpp/include
+
+ ../../BasicPlatForm/basic/util/net_config/
+ ../../BasicPlatForm/basic/util/fastdfs/
+ ../../BasicPlatForm/libs/FastDFS/include
+ ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+ ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+
+ ../../BasicPlatForm/basic/pipe/
+ ../../BasicPlatForm/libs/crul/include
+ ../../BasicPlatForm/basic/util/curl/
+ ../../BasicPlatForm/libs/libuuid/include
+ ../../BasicPlatForm/libs/glog/include
+ /usr/include/x86_64-linux-gnu/qt5
+)
+
+link_directories(
+ /usr/local/cuda/lib64
+ ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+ ../../BasicPlatForm/libs/openssl/lib
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/ffmpeg/lib
+ ../../BasicPlatForm/libs/jsoncpp/lib
+ ../../BasicPlatForm/libs/FastDFS/lib
+ ../../BasicPlatForm/libs/libuuid/lib
+
+ ../../BasicPlatForm/libs/glog/lib
+ ../../BasicPlatForm/libs/crul/lib
+)
+
+add_executable(${PROJECT_NAME}
+ main.cpp
+ ${SOURCES}
+ )
+
+
+target_link_libraries(${PROJECT_NAME}
+ ${LIBS}
+ )
+
+
diff --git a/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt.user b/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt.user
new file mode 100644
index 0000000..f16a61e
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt.user
@@ -0,0 +1,484 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 4.5.1, 2018-11-26T18:16:49. -->
+<qtcreator>
+ <data>
+ <variable>EnvironmentId</variable>
+ <value type="QByteArray">{e1ca3822-a9f7-41c4-8b27-ed35006d2304}</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.ActiveTarget</variable>
+ <value type="int">0</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.EditorSettings</variable>
+ <valuemap type="QVariantMap">
+ <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+ <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+ <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+ <value type="QString" key="language">Cpp</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+ </valuemap>
+ </valuemap>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+ <value type="QString" key="language">QmlJS</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+ </valuemap>
+ </valuemap>
+ <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+ <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+ <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+ <value type="int" key="EditorConfiguration.IndentSize">4</value>
+ <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+ <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+ <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+ <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+ <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+ <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+ <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+ <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+ <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
+ <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+ <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+ <value type="int" key="EditorConfiguration.TabSize">8</value>
+ <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+ <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+ <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+ <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+ <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+ <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.PluginSettings</variable>
+ <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Target.0</variable>
+ <valuemap type="QVariantMap">
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">妗岄潰</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">妗岄潰</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{9141802c-62f7-4eed-b036-21940bb88d33}</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">2</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+ <valuelist type="QVariantList" key="CMake.Configuration"/>
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Default</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">all</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">clean</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Default</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Default</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+ <valuelist type="QVariantList" key="CMake.Configuration">
+ <value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
+ </valuelist>
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Debug</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">all</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">clean</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
+ <valuelist type="QVariantList" key="CMake.Configuration">
+ <value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
+ </valuelist>
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Release</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">all</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">clean</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
+ <valuelist type="QVariantList" key="CMake.Configuration">
+ <value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
+ </valuelist>
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Release with Debug Information</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">all</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">clean</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release with Debug Information</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release with Debug Information</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.4">
+ <valuelist type="QVariantList" key="CMake.Configuration">
+ <value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
+ </valuelist>
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Minimum Size Release</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">all</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+ <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+ <value type="QString">clean</value>
+ </valuelist>
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Minimum Size Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Minimum Size Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">5</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+ <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+ <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+ <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+ <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+ <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+ <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+ <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+ <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+ <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+ <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+ <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+ <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+ <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+ <value type="int">0</value>
+ <value type="int">1</value>
+ <value type="int">2</value>
+ <value type="int">3</value>
+ <value type="int">4</value>
+ <value type="int">5</value>
+ <value type="int">6</value>
+ <value type="int">7</value>
+ <value type="int">8</value>
+ <value type="int">9</value>
+ <value type="int">10</value>
+ <value type="int">11</value>
+ <value type="int">12</value>
+ <value type="int">13</value>
+ <value type="int">14</value>
+ </valuelist>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">StructureApp</value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory.default">/home/basic/c++/Qt/QiaoJiaSystem/build</value>
+ <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">StructureApp</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.StructureApp</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
+ <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+ <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+ <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+ <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+ <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+ <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+ <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+ <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+ <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+ <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+ <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+ <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+ <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+ <value type="int">0</value>
+ <value type="int">1</value>
+ <value type="int">2</value>
+ <value type="int">3</value>
+ <value type="int">4</value>
+ <value type="int">5</value>
+ <value type="int">6</value>
+ <value type="int">7</value>
+ <value type="int">8</value>
+ <value type="int">9</value>
+ <value type="int">10</value>
+ <value type="int">11</value>
+ <value type="int">12</value>
+ <value type="int">13</value>
+ <value type="int">14</value>
+ </valuelist>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">AppPipeControllerTest</value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory.default">/home/basic/c++/Qt/QiaoJiaSystem/build</value>
+ <value type="int" key="PE.EnvironmentAspect.Base">-1</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">AppPipeControllerTest</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.AppPipeControllerTest</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.2">
+ <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+ <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+ <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+ <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+ <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+ <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+ <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+ <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+ <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+ <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+ <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+ <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+ <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+ <value type="int">0</value>
+ <value type="int">1</value>
+ <value type="int">2</value>
+ <value type="int">3</value>
+ <value type="int">4</value>
+ <value type="int">5</value>
+ <value type="int">6</value>
+ <value type="int">7</value>
+ <value type="int">8</value>
+ <value type="int">9</value>
+ <value type="int">10</value>
+ <value type="int">11</value>
+ <value type="int">12</value>
+ <value type="int">13</value>
+ <value type="int">14</value>
+ </valuelist>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">PerimeterAlarm</value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
+ <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory.default">/home/basic/c++/Qt/QiaoJiaSystem/build</value>
+ <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">PerimeterAlarm</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.PerimeterAlarm</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">3</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.TargetCount</variable>
+ <value type="int">1</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+ <value type="int">18</value>
+ </data>
+ <data>
+ <variable>Version</variable>
+ <value type="int">18</value>
+ </data>
+</qtcreator>
diff --git a/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.cpp b/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.cpp
new file mode 100644
index 0000000..c466a20
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.cpp
@@ -0,0 +1,55 @@
+#include "PaImageDrawElement.h"
+#include <basic/util/opencv/CvUtil.h>
+
+PaImageDrawElement::PaImageDrawElement() {
+
+}
+
+void PaImageDrawElement::darwProperty(cv::Mat &image, string key, string value, int x, int y) {
+ cv::putText(image, key + ": " + value, cv::Point(x, y), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1.5,
+ cv::Scalar(255, 255, 0), 2);
+}
+
+void PaImageDrawElement::processImage(cv::Mat &image) {
+
+ auto yoloObjectsData = yoloObjects.getData();
+
+ // {\"x\":4,\"y\":6},{\"x\":4,\"y\":537},{\"x\":955,\"y\":536},{\"x\":951,\"y\":9},{\"x\":4,\"y\":6}]
+ CvPoint spoint1[5] = {{4,6},{4,537},{955,536},{951,9},{4,6}};
+
+ cv::Rect rect(100,6,1700,1200);
+ cv::rectangle(image, rect, cv::Scalar(0, 0, 255), 2);
+ for (auto yoloObj: yoloObjectsData) {
+ auto rect = CvUtil::zoomRect(yoloObj.rect, 1, 1);
+ // Scalar scalar;
+ if(yoloObj.id>=0)
+ {
+ if(yoloObj.isMask)
+ {
+ //scalar=cv::Scalar(0, 0, 255);
+ cv::rectangle(image, rect, cv::Scalar(0, 0, 255), 2);
+ }
+ else
+ {
+ //scalar=cv::Scalar(255, 0, 0);
+ cv::rectangle(image, rect, cv::Scalar(255, 0, 0), 2);
+ }
+ }
+ else
+ {
+ // scalar=cv::Scalar(0, 255, 255);
+ cv::rectangle(image, rect, cv::Scalar(0, 255, 255), 2);
+ }
+ //cv::rectangle(image, rect, scalar, 2);
+ int i = 0;
+ for (auto &property:yoloObj.properties) {
+ darwProperty(image, property.first, property.second, rect.x + rect.width, rect.y + 40 * i++);
+ }
+ }
+}
+
+
+
+void PaImageDrawElement::setYoloObjects(std::vector<ScoredRect> value) {
+ yoloObjects = value;
+}
diff --git a/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.h b/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.h
new file mode 100644
index 0000000..0a7e51c
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.h
@@ -0,0 +1,28 @@
+#ifndef PAIMAGEDRAWELEMENT_H
+#define PAIMAGEDRAWELEMENT_H
+
+#include <YoloServer.h>
+#include <basic/pipe_element/ImageFactoryElement.h>
+#include <basic/core/DoubleBufferedData.h>
+#include "../StructureApp/TrackingTrigger.h"
+
+class PaImageDrawElement : public ImageFactoryElement {
+public:
+ PaImageDrawElement();
+
+ // ImageFactoryElement interface
+
+
+ void setYoloObjects(std::vector<ScoredRect> value);
+
+private:
+ virtual void processImage(cv::Mat &) override;
+
+ void darwProperty(cv::Mat &image, string key, string value, int x, int y);
+
+private:
+ DoubleBufferedData<std::vector<ScoredRect>> yoloObjects;
+};
+
+
+#endif // IMAGEDRAWELEMENT_H
diff --git a/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.cpp b/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.cpp
new file mode 100644
index 0000000..d1e5bc8
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.cpp
@@ -0,0 +1,276 @@
+#include "PaYoloRpcElement.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QSharedMemory>
+#include <QtCore/QString>
+#include <basic/timer_counter/Clocktimer.h>
+#include <basic/util/opencv/CvUtil.h>
+
+#include "AppPaController.h"
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+
+#include <basic/db/ES/es/ManagerEsDB.h>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+
+
+PaYoloRpcElement::PaYoloRpcElement(string shareMemoryName) :
+ rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"),
+ appPref.getIntData("yolo.port"), "tcp"), fdfsClient(nullptr), sharedMemory(nullptr),
+ mRealNum(0),mCfg(nullptr),
+ trackingTrigger(nullptr) {
+ sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
+// DBG(shareMemoryName);
+ //1520 x 2688 1080 x 1920 //2560 * 1440 * 4
+ if (!sharedMemory->create(4608 * 2592 * 4)) {
+ sharedMemory->attach();
+ }
+ trackingTrigger = new TrackingTrigger(0.5);
+ try {
+ auto server = rpcClient.getServer();
+ cocoData = server->getCocoData();
+ }
+ catch (std::exception &e) {
+ ERR(e.what())
+ }
+}
+
+PaYoloRpcElement::~PaYoloRpcElement() {
+ if (sharedMemory) {
+ delete sharedMemory;
+ }
+ if (trackingTrigger) {
+ delete trackingTrigger;
+ }
+ if (mCfg)
+ {
+ delete mCfg;
+ mCfg=nullptr;
+ }
+ mPolygon.clear();
+}
+
+void PaYoloRpcElement::threadFunc() {
+// ClockTimer ct("YoloRpcElement::threadFunc");.
+ triggerMats.clear();
+ int num=0;
+ bool bInWeekTime=false;
+ if(mCfg==nullptr)
+ {
+ return;
+ }
+
+ try {
+ auto server = rpcClient.getServer();
+ if (!server) {
+ ERR("server is null");
+ return;
+ }
+ objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO
+ if (objs.size() <= 0) {
+ trackingTrigger->triggerLine();
+ return;
+ }
+ string t_camIdex = getProperty("dev_id") + getProperty("ch_id");
+// float t_det_sc =
+// appPref.getFloatData(t_camIdex + "yolo.det") == -1 ? 0.75 : appPref.getFloatData(t_camIdex + "yolo.det");
+
+ bInWeekTime=isInWeekRuleTime();
+
+ for (auto &obj: objs) {
+ if (obj.type != 0)
+ continue;
+ if(obj.prob < ((1-mCfg->paAlarmInfo.fSensitivity)/2+0.5))continue;
+
+
+ ScoredRect scoredRect;
+
+ int x = obj.rcObj.left * image.cols;
+ int y = obj.rcObj.top * image.rows;
+ int w = (obj.rcObj.right - obj.rcObj.left) * image.cols;
+ int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows;
+ scoredRect.rect = cv::Rect(x, y, w, h);
+ QRect rect(x,y,w,h);
+ QPoint center = rect.center();
+ scoredRect.score = scoredRect.rect.area() > 0 ? obj.prob : 0;
+
+ if(mPolygon.containsPoint(center,Qt::OddEvenFill))
+ {
+ scoredRect.isMask=true;
+ if(bInWeekTime)
+ num++;
+ }
+
+ if ( trackingTrigger->triggerOnce(scoredRect)) {
+
+ DBG("x="<<center.x()<<"y="<<center.y());
+ trackingTrigger->getLastRect().isMask= scoredRect.isMask;
+ trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id);
+ trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type];
+ auto t_image = image(scoredRect.rect & cv::Rect(0, 0, image.cols, image.rows)).clone();
+ triggerMats.push_back(t_image);
+
+ std::string strImgUrl = "http://";
+ if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
+ fdfsClient->rwLock.rdlock();
+ std::vector<unsigned char> buffer;
+ CvUtil::cvMat2Buffer(t_image, buffer);
+ std::string strImgUrlTmp = "";
+ fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
+ strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
+ fdfsClient->rwLock.unlock();
+ }
+
+ //浣跨敤鐨勬椂鍊欏皢false鏀逛负ture
+ if(0)
+ {
+ //#todo
+ EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+
+ string str_uuid;
+ uuid_t t_uuid;
+ char str[36];
+ uuid_generate(t_uuid);
+ uuid_unparse(t_uuid, str);
+ str_uuid = str;
+
+// jsonyolo.insert("HardCamId","");//纭洏鎽勫儚鏈篿d 锛燂紵锛熸嬁涓嶅埌
+// jsonyolo.insert("ChannlId","");//閫氶亾id 锛燂紵锛� 鎷夸笉鍒�
+// jsonyolo.insert("Time","");//鏃堕棿 鍙互鑾峰彇褰撳墠鏃堕棿 鏄庣‘鏃堕棿鏄幏鍙栧綋鍓嶇殑杩樻槸浼犺繃鏉ョ殑 锛燂紵锛� 鎷夸笉鍒�
+// jsonyolo.insert("ImgUrl","");//鍥惧儚img璺緞 锛燂紵锛� 鎷夸笉鍒�
+// jsonyolo.insert("Image","");//蹇収 锛燂紵锛� 鎷夸笉鍒�
+// jsonyolo.insert("DataType",obj.type);//妫�娴嬬殑绫诲瀷
+// jsonyolo.insert("Score",obj.prob);//妫�娴嬬殑寰楀垎
+
+ Json::Value t_json;
+ t_json["Id"] = str_uuid; //涓婚敭
+//#todo
+
+ t_json["picName"] = "wait todo";
+ t_json["DataType"] = cocoData[obj.type];
+ t_json["Score"] = obj.prob;
+
+ t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store
+ t_json["likeDate"] = AppUtil::getTimeSecString();//姣旇緝鏃堕棿
+ t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
+ t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞
+ t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞
+ t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥�
+
+// faceRpcElement.setProperty("frame_number", frame_number);
+ t_json["picDate"] = getProperty("time");
+ t_json["content"] = "wait todo";
+ t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+ t_json["personIsHub"] = "4";//1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡
+ t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
+
+
+ t_json["videoNum"] = getProperty("path");//Vide缂栧彿 澶栭敭
+ t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
+ t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
+ t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+ t_json["indeviceid"] = appPref.getStringData("fxDevID");
+ t_json["indevicename"] = appPref.getStringData("fxDevNAME");
+
+ DBG(t_json.toStyledString());
+ bool retface = false;
+ retface = pManagerEsDB.insertData("yolodet", "info", t_json.toStyledString(), str_uuid);
+ if (retface) {
+ INFO("facedb success");
+ } else {
+ ERR("facedb fail");
+ }
+ }
+ }
+ }
+ mRealNum=num;
+ trackingTrigger->triggerLine();
+ if (triggerMats.size() > 0)fireConnectors("YoloTrigger");
+ fireConnectors();
+ } catch (std::exception &e) {
+ ERR(e.what())
+ }
+}
+
+::YoloDetect::ObjInfos PaYoloRpcElement::getObjects() const {
+ return objs;
+}
+
+std::vector<cv::Mat> PaYoloRpcElement::getTriggerMats() {
+ return triggerMats;
+}
+
+std::vector<ScoredRect> PaYoloRpcElement::getLastScoreRects() const {
+ return trackingTrigger->getLastScoreRects();
+}
+
+void PaYoloRpcElement::setImage(const cv::Mat &value) {
+ if (value.size != image.size) {
+ image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
+ }
+ value.copyTo(image);
+}
+
+
+bool PaYoloRpcElement::isInWeekRuleTime()
+{
+
+ int nWeek = QDate::currentDate().dayOfWeek();
+ //QString strWeek = getWeekString(nWeek);
+ int size=mCfg->ruleWeekInfoVec.size();
+ for(int i = 0;i < size;++i)
+ {
+ if(mCfg->ruleWeekInfoVec[i].m_nType == nWeek)
+ {
+ QString strCurrent = QDateTime::currentDateTime().toString("hh:mm");
+ if(strCurrent >= mCfg->ruleWeekInfoVec[i].m_strBegin && strCurrent <= mCfg->ruleWeekInfoVec[i].m_strEnd)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+QJsonArray PaYoloRpcElement::getJsonArrayFromQString(const QString strJson)
+{
+ QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit());
+ if( jsonDocument.isNull() ){
+ //DBG("please check the string"<< strJson.toLocal8Bit());
+ return QJsonArray();
+ }
+ QJsonArray jsonArray = jsonDocument.array();
+ return jsonArray;
+}
+
+ void PaYoloRpcElement::SetRuleCfg(const ControllerConfig* cfg)
+ {
+ mCfg=cfg;
+ if(mCfg)
+ {
+
+ QJsonArray arrayAreas = getJsonArrayFromQString(mCfg->paAlarmInfo.strMaskPath);
+ if(arrayAreas.isEmpty())
+ {
+ return;//do not detect
+ }
+ for(int i = 0;i < arrayAreas.size();++i)
+ {
+ QJsonValue jsonValue = arrayAreas[i];
+ QJsonObject obj = jsonValue.toObject();
+ int x = obj.value("x").toInt();
+ int y = obj.value("y").toInt();
+ mPolygon<<(QPoint(x,y));
+
+ }
+
+ }
+
+
+ }
+ int PaYoloRpcElement::getRealNum() const
+ {
+ return mRealNum;
+ }
diff --git a/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.h b/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.h
new file mode 100644
index 0000000..fe666d3
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.h
@@ -0,0 +1,59 @@
+#ifndef PAYOLORPCELEMENT_H
+#define PAYOLORPCELEMENT_H
+
+#include <YoloServer.h>
+#include <basic/pipe/PipeElement.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <opencv2/opencv.hpp>
+#include <basic/util/fastdfs/FastFds.hpp>
+#include "../StructureApp/TrackingTrigger.h"
+#include <QtCore/QVector>
+#include <QtCore/QJsonArray>
+#include <QtGui/qpolygon.h>
+class QSharedMemory;
+class ControllerConfig;
+class PaYoloRpcElement : public basic::PipeElement {
+public:
+ PaYoloRpcElement(string);
+
+ ~PaYoloRpcElement();
+
+ void setImage(const cv::Mat &value);
+
+ int getRealNum() const;
+ void SetRuleCfg(const ControllerConfig* cfg);
+
+ ::YoloDetect::ObjInfos getObjects() const;
+
+ std::vector<cv::Mat> getTriggerMats();
+
+ std::vector<ScoredRect> getLastScoreRects() const;
+
+
+
+ void setFdfs(FastFdsWithLock *p_fdfsClient) {
+ fdfsClient = p_fdfsClient;
+ }
+
+private:
+ virtual void threadFunc() override;
+ bool isInWeekRuleTime();
+ QJsonArray getJsonArrayFromQString(const QString strJson);
+private:
+ IceRpcClient<YoloDetect::YoloDetectServerPrx> rpcClient;
+ cv::Mat image;
+ QSharedMemory *sharedMemory;
+ ::YoloDetect::ObjInfos objs;
+ TrackingTrigger *trackingTrigger;
+ std::vector<cv::Mat> triggerMats;
+ ::YoloDetect::stringData cocoData;
+ FastFdsWithLock *fdfsClient;
+ cv::Mat mask,numMask;
+ QString mStrArea;
+ QPolygon mPolygon;
+ int mRealNum;
+ ControllerConfig* mCfg;
+
+};
+
+#endif // YOLORPCELEMENT_H
diff --git a/QiaoJiaSystem/PerimeterAlarm/main.cpp b/QiaoJiaSystem/PerimeterAlarm/main.cpp
new file mode 100644
index 0000000..d54f890
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/main.cpp
@@ -0,0 +1,113 @@
+#include <thread>
+#include "AppPaController.h"
+#include <basic/util/file/FileUtil.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/debug/Debug.h>
+#include <basic/util/app/AppConfig.h>
+using namespace std;
+
+
+int main(int argc, char **argv) {
+ SAVE_APP_ARGS;
+
+#ifdef GLOG
+ ENABLEGLOG("./log/");
+#endif
+
+// std::string src_path = "/home/bsk/development/c++/Qt/QiaoJiaSystem/build/cut/123456/34/201808/28/123456-34-201808-20180828090100";
+ std::string src_path = "/home/basic/瑙嗛/test";
+
+
+ appPref.setLongData("gpu.index", 0);
+ appPref.setIntData("show.image", 1);
+
+ //yolo server
+ appPref.setStringData("yolo.proxy", "yoloServer");
+ //#todo
+ appPref.setStringData("yolo.ip", "");
+ appPref.setIntData("yolo.port", 10003);
+
+
+
+
+
+
+
+ //loopRecord server
+ appPref.setStringData("loopRecord.proxy", "LoopRecordVideoServer");
+ //#todo
+ appPref.setStringData("loopRecord.ip", "");
+ appPref.setIntData("loopRecord.port", 10010);
+//rpcClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"), appPref.getLongData("loopRecord.port"),"tcp"),
+
+ appPref.setStringData("ipAdd", "192.168.1.185");
+ appPref.setIntData("ipPort", 9200);
+ Json::Value json;
+
+ //split sdks enable
+ //#todo other sdk
+
+ // json["face.enable"] = "1";
+ json["yolo.enable"] = "1";
+ json["rtsp"] = "rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+// json["rtsp"] = "rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+// json["rtsp"] = "/home/bsk/test/realtime/test123/201809/27/test123-2018092717/2018-09-27 17:20:57.mp4";
+
+
+ FastFdsWithLock fdfsClient;
+// fdfsClient.fastFds = new FastFds;
+
+ //#todo from path get file list
+ file_filter_type filter = [](const char *dirName, const char *dirent) {
+ return (strstr(dirent, ".mp4") != nullptr);// add format
+ };
+ std::vector<std::string> vec = for_each_file(src_path, filter);
+// while (true) {
+ auto size = vec.size();
+// int size = 1;
+ int pos = 0;
+
+ QVector<RuleWeekInfo> ruleWeekVec;
+ for(int i=1;i<=7;++i)
+ {
+ RuleWeekInfo info;
+ info.m_nType=i;
+ info.m_strBegin="00:00";
+ info.m_strEnd="23.59";
+ ruleWeekVec.push_back(info);
+ }
+
+ ControllerConfig cfg;
+ cfg.ruleWeekInfoVec.swap(ruleWeekVec);
+ cfg.camInfo.strRtsp="rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+ cfg.camInfo.strCamId="1";
+ cfg.paAlarmInfo.nTriggerDelay=25;
+ cfg.paAlarmInfo.nAlarmDelay=5;
+ // cfg.paAlarmInfo.strMaskPath="/home/basic/aaa/1.png";
+ cfg.paAlarmInfo.strMaskPath="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
+ cfg.paAlarmInfo.fSensitivity=0.5;
+ cfg.paAlarmInfo.nAssembleCount=2;
+
+
+
+ AppPaController _AppPaController(1, cfg);
+// AppPipeController _AppPipeController(src_path, json);
+ _AppPaController.setfdfsClient(&fdfsClient);
+// for (; pos < size;) {
+//
+// //#todo
+// _AppPipeController.resetVideoCapturePath(vec[pos++]);
+// _AppPipeController.resetVideoCapturePath(
+// "/home/basic/work/qiaojia/cut/DS-7808N-SN0820161208AARR691369356WCVU/34/201810/11/DS-7808N-SN0820161208AARR691369356WCVU-34-20181011090000/2018-10-11 09:48:05.mp4");
+ _AppPaController.start();
+ while (_AppPaController.getRunning()) {
+ usleep(40000);
+ }
+ _AppPaController.stop();
+ _AppPaController.wait();
+ DBG("finish file");
+
+ getchar();
+
+ return 0;
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/AppController.cpp b/QiaoJiaSystem/RapidStructureApp/AppController.cpp
new file mode 100644
index 0000000..90760e3
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/AppController.cpp
@@ -0,0 +1,132 @@
+#include "AppController.h"
+#include <basic/util/file/FileUtil.h>
+
+#define VECSIZE 1
+
+AppController::AppController(std::string path, int interval) : TimerElement(interval), m_path(path),
+ func_cond_mutex(PTHREAD_MUTEX_INITIALIZER),
+ func_cond(PTHREAD_COND_INITIALIZER) {
+ file_filter_type filter = [](const char *dirName, const char *dirent) {
+ return (strstr(dirent, ".mp4") != nullptr);// add format
+ };
+
+ std::string tmp = path;
+ m_pathOut = tmp.replace(tmp.begin() + tmp.find("/load"), tmp.begin() + tmp.find("/load") + 5, "/cut");
+// DBG("m_pathOut is " << m_pathOut);
+
+ std::vector<std::string> vec = for_each_file(m_path, filter);
+
+ INFO(path << " vec size : " << vec.size());
+
+ for (int i = 0; i < vec.size(); ++i) {
+ m_que.push(vec[i]);
+ }
+
+ if (vec.size() >= VECSIZE) {
+ m_vec.resize(VECSIZE);
+ } else {
+ m_vec.resize(vec.size());
+ }
+
+ for (int i = 0; i < m_vec.size(); ++i) {
+ m_vec[i] = nullptr;
+ }
+}
+
+RapidAppPipeController *AppController::addController() {
+ RapidAppPipeController *p = nullptr;
+ std::lock_guard<std::mutex> lg(mtx);
+ std::string strPath;
+ Json::Value value;
+ if (!m_que.empty()) {
+ strPath = m_que.front();
+ value["rtsp"] = strPath;
+ m_que.pop();
+ p = new RapidAppPipeController(m_nIndex, value, m_pathOut);
+ p->start();
+ m_nIndex++;
+ }
+ return p;
+}
+
+std::string AppController::startController() {
+ start();
+ pthread_mutex_lock(&func_cond_mutex);
+// INFO("before wait" << m_path);
+ pthread_cond_wait(&func_cond, &func_cond_mutex);
+ int m_t_size = m_vec.size();
+ for (int i = 0; i < m_vec.size(); ++i) {
+ if (m_vec[i] == nullptr) {
+ continue;
+ }
+ while (m_vec[i]->getIsRunning()) {
+ usleep(40000);
+ }
+ m_vec[i]->stop();
+ m_vec[i]->wait();
+ delete m_vec[i];
+ m_vec[i] = nullptr;
+ m_t_size--;
+ }
+// INFO("after wait" << m_path);
+ pthread_mutex_unlock(&func_cond_mutex);
+ wait();
+// DBG("cut ok ;m_pathOut is " << m_pathOut);
+ return m_pathOut;
+}
+
+void AppController::timerFunc() {
+ if (m_que.empty()) {
+// INFO("before signal " << m_path);
+ stop();
+ pthread_cond_signal(&func_cond);
+// INFO("after signal" << m_path);
+ return;
+ }
+
+ for (int i = 0; i < m_vec.size(); ++i) {
+ if (m_vec[i] == nullptr) {
+ m_vec[i] = addController();
+ continue;
+ }
+
+ if (!m_vec[i]->getIsRunning()) {
+
+ m_vec[i]->stop();
+ m_vec[i]->wait();
+
+ delete m_vec[i];
+// std::string cmd = "rm -rf \"";
+// cmd.append(m_vec[i]->getPath()).append("\" & ");
+// system(cmd.c_str());
+ m_vec[i] = nullptr;
+
+ m_vec[i] = addController();
+ continue;
+ }
+ }
+}
+
+//if (!m_que.empty())
+//{
+// strPath = m_que.pop();
+//}else
+//{
+// return;
+//}
+//value["rtsp"] = strPath;
+
+//std::string strPath;
+//Json::Value value;
+
+//m_vec[i] = new RapidAppPipeController(m_nIndex,strPath);
+//m_vec[i]->start();
+
+//m_vec[i]->stop();
+//m_vec[i]->wait();
+
+//delete m_vec[i];
+//m_vec[i] = nullptr;
+
+//m_vec[i] = new RapidAppPipeController(m_nIndex,strPath);
+//m_vec[i]->start();
diff --git a/QiaoJiaSystem/RapidStructureApp/AppController.h b/QiaoJiaSystem/RapidStructureApp/AppController.h
new file mode 100644
index 0000000..e0ab782
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/AppController.h
@@ -0,0 +1,37 @@
+#ifndef APPCONTROLLER_H
+#define APPCONTROLLER_H
+
+#include <basic/pipe/TimerElement.h>
+#include <queue>
+#include "RapidAppPipeController.h"
+#include <condition_variable>
+#include <mutex>
+
+class AppController : public TimerElement {
+public:
+ AppController(std::string path, int interval);
+
+ RapidAppPipeController *addController();
+
+ std::string startController();
+
+private:
+ virtual void timerFunc() override;
+
+private:
+ std::string m_path;
+ std::string m_pathOut;
+ std::queue<std::string> m_que;
+ std::vector<RapidAppPipeController *> m_vec;
+
+ bool m_state;
+
+ int m_nIndex;
+ std::mutex mtx;
+
+ pthread_cond_t func_cond;
+ pthread_mutex_t func_cond_mutex;
+
+};
+
+#endif // APPCONTROLLER_H
diff --git a/QiaoJiaSystem/RapidStructureApp/CMakeLists.txt b/QiaoJiaSystem/RapidStructureApp/CMakeLists.txt
new file mode 100644
index 0000000..a96af7a
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/CMakeLists.txt
@@ -0,0 +1,74 @@
+cmake_minimum_required(VERSION 3.5)
+project(RapidStructureApp)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+#set(CMAKE_BUILD_TYPE debug)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+
+SET(SOURCES
+ RapidAppPipeController.cpp
+ VideoMoveCaptureElement.cpp
+ VideoChangeScore.cpp
+ TriggerElement.cpp
+ AppController.cpp
+ ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+ ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+ ../../BasicPlatForm/basic/util/file/FileUtil.cpp
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/ffmpegRecoder/FileRecorder.cpp
+ )
+
+SET(LIBS
+ Ice
+ opencv_world
+ avformat
+ avcodec
+ swresample
+ swscale
+ avutil
+ bz2 dl z
+ Qt5Core
+ pthread
+ jsoncpp
+ )
+
+include_directories(
+ ../VptServer/rpc
+ ../YoloServer/rpc
+ ../FaceDetectServer/rpc
+ ../StructureApp
+ ../../BasicPlatForm
+ ../../BasicPlatForm/libs/opencv/include
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/ffmpeg/include
+ ../../BasicPlatForm/libs/jsoncpp/include
+ ../../BasicPlatForm/basic/pipe/
+ /usr/include/x86_64-linux-gnu/qt5
+)
+
+link_directories(
+ ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+ ../../BasicPlatForm/libs/openssl/lib
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/ffmpeg/lib
+ ../../BasicPlatForm/libs/jsoncpp/lib
+)
+
+add_executable(${PROJECT_NAME}
+ main.cpp
+ ${SOURCES}
+ )
+
+target_link_libraries(${PROJECT_NAME}
+ ${LIBS}
+ )
+
+
+add_executable(${PROJECT_NAME}Rtsp
+ mainRtsp.cpp
+ ${SOURCES}
+ )
+
+target_link_libraries(${PROJECT_NAME}Rtsp
+ ${LIBS}
+ )
\ No newline at end of file
diff --git a/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.cpp b/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.cpp
new file mode 100644
index 0000000..599012f
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.cpp
@@ -0,0 +1,86 @@
+#include "RapidAppPipeController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppUtil.h>
+
+//#include <sstream>
+#include <algorithm>
+
+RapidAppPipeController::RapidAppPipeController(int index, const Json::Value &json, const std::string &outPath) :
+ videoCaptureElement(json["rtsp"].asString(), outPath, 25, -1, 0),//appPref.getLongData("gpu.index")
+ index(index), bUp(false), m_json(json),
+ /*yoloRpcElement(to_string(index)+"yoloRpc"),*/triggerElement(0, 3) {
+ videoCaptureElement.registerConnector([&] {
+ if (videoCaptureElement.getChangeLevel() > 40) {
+ triggerElement.setState(true);
+ } else if (videoCaptureElement.getChangeLevel() < 20) {
+ triggerElement.setState(false);
+ }
+
+ triggerElement.triggerOnce();
+
+ if (triggerElement.getState()) {
+ videoCaptureElement.setOutPutInterval(1);
+ } else {
+ videoCaptureElement.setOutPutInterval(25);
+ }
+
+ if (triggerElement.getTriggerState()) {
+ if (!bUp) {
+ bUp = true;
+// DBG(videoCaptureElement.getOutPutIndex());
+ videoCaptureElement.startRecord(videoCaptureElement.getOutPutIndex());
+ } else {
+ //#TODO
+ auto it = (videoCaptureElement.getOutPutIndex() - videoCaptureElement.getM_nFrame()) / 25;
+// DBG("tes t " << it);
+ if (it > (60 * 5)) {
+// DBG("test");
+ bUp = false;
+ videoCaptureElement.endRecord(videoCaptureElement.getOutPutIndex());
+ }
+
+ }
+ } else {
+ if (bUp) {
+ bUp = false;
+// DBG(videoCaptureElement.getOutPutIndex());
+ videoCaptureElement.endRecord(videoCaptureElement.getOutPutIndex());
+ }
+ }
+ });
+
+ triggerElement.registerConnector([&] {
+ switch (triggerElement.getTriggerType()) {
+ case UP:
+// DBG("UP");
+ break;
+ case DOWN:
+// DBG("DOWN");
+ break;
+ default:
+ break;
+ }
+ });
+
+ registerElement(videoCaptureElement);
+// if(appPref.getStringData("yolo.enable")=="1"){
+// registerElement(yoloRpcElement);
+// }
+ //registerElement(yoloRpcElement);
+ //registerElement(imageDrawElement);
+ registerElement(triggerElement);
+
+ videoCaptureElement.setOutPutInterval(1);
+}
+
+bool RapidAppPipeController::getIsRunning() const {
+ return videoCaptureElement.isRunning();
+}
+
+RapidAppPipeController::~RapidAppPipeController() {
+
+}
+
+std::string RapidAppPipeController::getPath() {
+ return m_json["rtsp"].asString();
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.h b/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.h
new file mode 100644
index 0000000..da59590
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.h
@@ -0,0 +1,28 @@
+#ifndef RAPIDAPPPIPECONTROLLER_H
+#define RAPIDAPPPIPECONTROLLER_H
+
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ImageShowElement.h>
+#include "VideoMoveCaptureElement.h"
+#include "TriggerElement.h"
+#include <jsoncpp/json/json.h>
+
+class RapidAppPipeController : public PipeController {
+public:
+ RapidAppPipeController(int index, const Json::Value &json, const std::string &outPath);
+
+ virtual ~RapidAppPipeController();
+
+ bool getIsRunning() const;
+
+ std::string getPath();
+
+private:
+ VideoMoveCaptureElement videoCaptureElement;
+ TriggerElement triggerElement;
+ int index;
+ bool bUp;
+ Json::Value m_json;
+};
+
+#endif // RAPIDAPPPIPECONTROLLER_H
diff --git a/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp b/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp
new file mode 100644
index 0000000..6f0272d
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp
@@ -0,0 +1,89 @@
+#include "TriggerElement.h"
+
+TriggerElement::TriggerElement(long tolerance, long delay) :
+ state(false),
+// TimerElement(1),
+ triggerState(false),
+ tolerance(tolerance), delay(delay),
+ triggerType(DOWN), triggerTimes(0),lastDown(0),lastUp(0) {
+
+}
+
+TriggerElement::~TriggerElement() {
+
+}
+
+bool TriggerElement::getState() const {
+ return state;
+}
+
+void TriggerElement::setState(bool value) {
+ state = value;
+}
+
+TriggerType TriggerElement::getTriggerType() const {
+ return triggerType;
+}
+
+void TriggerElement::triggerOnce() {
+ triggerTimes++;
+ if (state) {
+ lastUp = triggerTimes;
+ if (!triggerState) {
+ if (triggerTimes - lastDown > tolerance) {
+ triggerType = UP;
+ triggerState = true;
+ fireConnectors();
+ }
+ }
+ } else {
+ lastDown = triggerTimes;
+ if (triggerState) {
+ if (triggerTimes - lastUp > delay) {
+ triggerType = DOWN;
+ triggerState = false;
+ fireConnectors();
+ }
+ }
+ }
+}
+
+void TriggerElement::triggerOnce(bool ret_notused) {
+ triggerTimes++;
+ if (state) {
+ lastUp = triggerTimes;
+ if (!triggerState) {
+ if (triggerTimes - lastDown > tolerance) {
+ triggerType = UP;
+ triggerState = true;
+ }
+ }
+ } else {
+ lastDown = triggerTimes;
+ if (triggerState) {
+ if (triggerTimes - lastUp > delay) {
+ triggerType = DOWN;
+ triggerState = false;
+ }
+ }
+ }
+}
+
+bool TriggerElement::getTriggerState() const {
+ return triggerState;
+}
+
+void TriggerElement::threadInitial() {
+ lastUp = 0;
+ lastDown = 0;
+ triggerType = DOWN;
+}
+
+
+void TriggerElement::timerFunc() {
+
+}
+
+void TriggerElement::threadClosing() {
+
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/TriggerElement.h b/QiaoJiaSystem/RapidStructureApp/TriggerElement.h
new file mode 100644
index 0000000..ce6e32d
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/TriggerElement.h
@@ -0,0 +1,51 @@
+#ifndef TRIGGERELEMENT_H
+#define TRIGGERELEMENT_H
+
+#include <mutex>
+#include <opencv2/opencv.hpp>
+#include <basic/pipe/TimerElement.h>
+#include <atomic>
+
+enum TriggerType {
+ UP = 0, DOWN
+};
+
+class TriggerElement : public basic::PipeElement {
+
+public:
+ TriggerElement(long tolerance = 0, long delay = 0);
+
+ virtual ~TriggerElement();
+
+ bool getState() const;
+
+ void setState(bool value);
+
+ TriggerType getTriggerType() const;
+
+ void triggerOnce();
+
+ void triggerOnce(bool);
+
+ bool getTriggerState() const;
+
+private:
+ bool state;
+ bool triggerState;
+ long tolerance;
+ long delay;
+ long lastDown;
+ long lastUp;
+ long triggerTimes;
+ TriggerType triggerType;
+
+private:
+
+ virtual void threadInitial() override;
+
+ virtual void timerFunc();
+
+ virtual void threadClosing() override;
+};
+
+#endif // TRIGGERELEMENT_H
diff --git a/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.cpp b/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.cpp
new file mode 100644
index 0000000..8e6250a
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.cpp
@@ -0,0 +1,28 @@
+#include "VideoChangeScore.h"
+
+VideoChangeScore::VideoChangeScore() {
+
+}
+
+int VideoChangeScore::EvalChange(cv::Mat &image) {
+ if (image.empty())return 0;
+
+ cv::blur(image, image, cv::Size(16, 9));
+ if (backGround.empty()) {
+ image.copyTo(backGround);
+ } else {
+ backGround = image * 0.1 + backGround * 0.9;
+ }
+ cv::absdiff(image, backGround, change);
+ double min, max;
+ cv::minMaxLoc(change, &min, &max);
+ return max;
+}
+
+cv::Mat VideoChangeScore::getBackGround() const {
+ return backGround;
+}
+
+cv::Mat VideoChangeScore::getChange() const {
+ return change;
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.h b/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.h
new file mode 100644
index 0000000..a0d07f1
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.h
@@ -0,0 +1,22 @@
+#ifndef VIDEOCHANGESCORE_H
+#define VIDEOCHANGESCORE_H
+
+#include <opencv2/opencv.hpp>
+
+class VideoChangeScore {
+public:
+ VideoChangeScore();
+
+ int EvalChange(cv::Mat &image);
+
+ cv::Mat getBackGround() const;
+
+ cv::Mat getChange() const;
+
+private:
+ cv::Mat change;
+ cv::Mat temp;
+ cv::Mat backGround;
+};
+
+#endif // VIDEOCHANGESCORE_H
diff --git a/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.cpp b/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.cpp
new file mode 100644
index 0000000..4b85cc8
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.cpp
@@ -0,0 +1,145 @@
+#include "VideoMoveCaptureElement.h"
+//#include <basic/pipe_element/ffmpeg/cap_ffmpeg_impl.hpp>
+//#todo
+#include <basic/pipe_element/ffmpeg/FfmpegElement.cpp>
+#include <QtCore/QStringList>
+#include <QtCore/QDateTime>
+#include <unistd.h>
+#include <basic/pipe_element/ffmpeg/ffmpegRecoder/FileRecorder.h>
+
+VideoMoveCaptureElement::VideoMoveCaptureElement(const std::string &path, const std::string &outPath,
+ int fps, int reOpenTime, int gpuIndex) :
+ basic::PipeElement(false), path(path), m_pathOut(outPath), gpuIndex(gpuIndex),
+ reopenTime(reOpenTime), outPutInterval(25), outPutIndex(0), bYoloDetect(false) //TODO25
+{
+
+}
+
+void VideoMoveCaptureElement::threadFunc() {
+// _timer.reset();
+ usleep(1);
+ u_char *data;
+ int width = 0, height = 0, step = 0, cn = 0;
+ bool ret = capture->grabFrame();
+ if (!ret) {
+ if (reopenTime < 0) {
+ stop();
+ INFO("grabFrame faild, element stopping" << path);
+ //INFO(_timerTotal.tell_ms());
+ return;
+ } else {
+ usleep(reopenTime * 1000);
+ INFO("grabFrame faild, try reopen video: " << path);
+ openVideo();
+ ret = capture->grabFrame();
+ if (!ret)return;
+ }
+ }
+
+// DBG(_timer.tell_ns());
+ if (outPutInterval > 0 && (outPutIndex++ % outPutInterval != 0)) {
+ return;
+ }
+
+ capture->retrieveFrame(0, &data, &step, &width, &height, &cn);
+ try {
+ cv::Mat img(height, width, CV_8UC3, data, step);
+ cv::resize(img, image, cv::Size(192, 108), 0, 0, cv::INTER_LINEAR);
+ nChangeLevel = videoChangeScore.EvalChange(image);
+ } catch (std::exception ex) {
+ ERR("ex is " << ex.what());
+ }
+
+
+
+// DBG(nChangeLevel);
+
+ fireConnectors();
+
+}
+
+int VideoMoveCaptureElement::getOutPutInterval() const {
+ return outPutInterval;
+}
+
+void VideoMoveCaptureElement::setOutPutInterval(int value) {
+ outPutInterval = value;
+}
+
+cv::Mat VideoMoveCaptureElement::getImage() const {
+ return image;
+}
+
+void VideoMoveCaptureElement::openVideo() {
+ if (gpuIndex >= 0) {
+ setenv("CUDA_VISIBLE_DEVICES", std::to_string(gpuIndex).c_str(), 0);
+ }
+ capture->open(path.c_str(), gpuIndex >= 0);
+}
+
+int VideoMoveCaptureElement::getOutPutIndex() const {
+ return outPutIndex;
+}
+
+void VideoMoveCaptureElement::startRecord(int startFrame) {
+ m_nFrame = startFrame;
+}
+
+void VideoMoveCaptureElement::endRecord(int endFrame) {
+ int startSec = m_nFrame / outPutInterval;
+ int endSec = endFrame / outPutInterval;
+
+ std::string start = std::to_string(startSec);
+ std::string end = std::to_string(endSec);
+
+ QString strPath = QString::fromStdString(path);
+ QStringList list = strPath.split("/");
+ QString fileName;
+ QString time;
+ QString strNewTime;
+ if (list.size() != 0) {
+ fileName = list.last();
+ time = fileName.split(".").first();
+ //#todo
+// time = fileName.split("_").first();
+ } else {
+ ERR("list.size() == 0)");
+ }
+
+ if (!time.isEmpty()) {
+ QDateTime dt = QDateTime::fromString(time, "yyyy-MM-dd hh:mm:ss");
+ int second = m_nFrame / outPutInterval;
+ qint64 newTime = dt.toMSecsSinceEpoch() + second * 1000;
+ QDateTime newDt = QDateTime::fromMSecsSinceEpoch(newTime);
+ strNewTime = newDt.toString("yyyy-MM-dd hh:mm:ss");
+ }
+
+ //#todo m_pathOut + /
+ QString strNewPath = QString(m_pathOut.c_str()) + "/" + strNewTime + QString(".mp4");
+
+ fileRecord(path.c_str(), start.c_str(), endSec - startSec, strNewPath.toStdString().c_str());
+}
+
+bool VideoMoveCaptureElement::getBYoloDetect() const {
+ return bYoloDetect;
+}
+
+int VideoMoveCaptureElement::getChangeLevel() const {
+ return nChangeLevel;
+}
+
+void VideoMoveCaptureElement::threadInitial() {
+ capture = new CvCapture_FFMPEG;
+ openVideo();
+ //_timerTotal.reset();
+}
+
+void VideoMoveCaptureElement::threadClosing() {
+ capture->close();
+ delete capture;
+ capture = nullptr;
+}
+
+int VideoMoveCaptureElement::getM_nFrame() const {
+ return m_nFrame;
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.h b/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.h
new file mode 100644
index 0000000..b2becf8
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.h
@@ -0,0 +1,67 @@
+#ifndef VIDEOMOVECAPTUREELEMENT_H
+#define VIDEOMOVECAPTUREELEMENT_H
+
+#include <basic/pipe/TimerElement.h>
+#include <opencv2/opencv.hpp>
+#include "VideoChangeScore.h"
+
+//#include <basic/pipe/my_timer.hpp>
+
+struct CvCapture_FFMPEG;
+struct CvVideoWriter_FFMPEG;
+
+class VideoMoveCaptureElement : public basic::PipeElement {
+public:
+ VideoMoveCaptureElement(const std::string &path, const std::string &outPath,
+ int fps = 30, int reOpenTime = -1, int gpuIndex = -1
+ );
+
+ cv::Mat getImage() const;
+
+ int getOutPutInterval() const;
+
+ void setOutPutInterval(int value);
+
+ int getChangeLevel() const;
+
+ bool getBYoloDetect() const;
+
+ int getOutPutIndex() const;
+
+ void startRecord(int startFrame);//too large?no int?
+
+ void endRecord(int endFrame);
+
+private:
+ void threadFunc();
+
+ void threadInitial();
+
+ void threadClosing();
+
+ void openVideo();
+
+private:
+ CvCapture_FFMPEG *capture;
+ std::string path;
+ std::string m_pathOut;
+ cv::Mat image;
+ int gpuIndex;
+ int outPutIndex;
+ int outPutInterval;
+ int reopenTime;
+
+ VideoChangeScore videoChangeScore;
+ int nChangeLevel;
+
+ bool bYoloDetect;
+
+ int m_nFrame;
+public:
+ int getM_nFrame() const;
+
+// my_module_space::Timer _timer;
+// my_module_space::Timer _timerTotal;
+};
+
+#endif // VIDEOMOVECAPTUREELEMENT_H
diff --git a/QiaoJiaSystem/RapidStructureApp/main.cpp b/QiaoJiaSystem/RapidStructureApp/main.cpp
new file mode 100644
index 0000000..d4192b9
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/main.cpp
@@ -0,0 +1,36 @@
+#include <iostream>
+#include "AppController.h"
+
+
+using namespace std;
+
+int main(int argc, char **argv) {
+
+ vector<string> vec;
+ vec.push_back("/home/bsk/test/1/load/");
+// vec.push_back("/home/bsk/2/load/");
+
+// while (true) {
+
+ for (int i = 0; i < vec.size(); ++i) {
+ AppController _AppController(vec[i], 5000);
+ auto str_Path = _AppController.startController();
+ }
+// }
+
+
+// appController->wait();
+ return 0;
+}
+
+
+
+// value["rtsp"] = "rtsp://admin:a1234567@192.168.1.202:554/h264/ch1/main/av_stream";
+
+// cv::VideoCapture capture;
+// int frameCount =0;
+// capture.open("/home/basic/瑙嗛/output.mp4");
+// while (capture.grab()) {
+// frameCount++;
+// }
+// cout << "total time: "<<frameCount/25<<"s"<<endl;
diff --git a/QiaoJiaSystem/RapidStructureApp/mainRtsp.cpp b/QiaoJiaSystem/RapidStructureApp/mainRtsp.cpp
new file mode 100644
index 0000000..b3079d5
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/mainRtsp.cpp
@@ -0,0 +1,26 @@
+#include <iostream>
+#include "AppController.h"
+
+#include <basic/util/file/FileUtil.h>
+
+using namespace std;
+
+int main(int argc, char **argv) {
+
+ std::string strOutPath = "/home/bsk/test/";
+ std::string strPath = "rtsp://admin:a1234567@192.168.1.201:554/h264/ch1/main/av_stream";;
+ Json::Value value;
+ value["rtsp"] = strPath;
+ RapidAppPipeController p(0, value, strOutPath);
+ p.start();
+// getchar();
+
+ while (p.getIsRunning()) {
+ usleep(40000);
+ }
+ p.stop();
+ p.wait();
+ return 0;
+}
+
+
diff --git a/QiaoJiaSystem/RecordVideo/CMakeLists.txt b/QiaoJiaSystem/RecordVideo/CMakeLists.txt
new file mode 100644
index 0000000..5aa4879
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/CMakeLists.txt
@@ -0,0 +1,88 @@
+cmake_minimum_required(VERSION 3.5)
+project(RecordVideo)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+find_package(Qt5Core)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+add_definitions(-DGLOG)
+add_compile_options(-fPIC)
+
+SET(SOURCES
+ rpc/RecordVideo.cpp
+ RecordVideoI.cpp
+ ImageGrabberI.cpp
+ LoopRecordVideoI.cpp
+ LoopVideoRecorder.cpp
+ ../VideoServer/QiaoJia/DB/LDBTool.cpp
+ ./VideoRecorder.cpp
+ ./CommonFFmpegFunc.hpp
+ ../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
+ ../../BasicPlatForm/basic/util/app/AppConfig.h
+ ../../BasicPlatForm/basic/util/app/AppPreference.hpp
+ ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+ ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+ )
+
+SET(LIBS
+ glog
+ Ice
+ opencv_world
+ avformat
+ avcodec
+ swresample
+ swscale
+ avutil
+ bz2 dl z
+ Qt5Core
+ pthread
+ fastcommon
+ fdfsclient
+ jsoncpp
+ Qt5Core
+ Qt5Sql
+ uuid
+ )
+
+include_directories(
+ ./rpc
+ ../../BasicPlatForm
+ ../../BasicPlatForm/libs/opencv/include
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/ffmpeg/include
+ ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+ ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/ffmpegRecoder
+ ../../BasicPlatForm/basic/pipe
+ ../../BasicPlatForm/libs/jsoncpp/include
+ ../../BasicPlatForm/libs/glog/include
+ ../../BasicPlatForm/libs/libuuid/include
+
+ /usr/include/x86_64-linux-gnu/qt5
+ /usr/include/x86_64-linux-gnu/qt5/QtCore/
+ /usr/include/x86_64-linux-gnu/qt5/QtSql/
+ #glog
+ ../../BasicPlatForm/libs/glog/include
+)
+
+link_directories(
+ #glog
+ ../../BasicPlatForm/libs/glog/lib
+ ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/ffmpeg/lib
+ ../../BasicPlatForm/libs/FastDFS/lib
+ ../../BasicPlatForm/libs/openssl/lib
+ ../../BasicPlatForm/libs/jsoncpp/lib
+ ../../BasicPlatForm/libs/libuuid/lib
+)
+
+
+add_executable(${PROJECT_NAME}
+ main.cpp
+ ${SOURCES}
+ )
+
+target_link_libraries(${PROJECT_NAME}
+ ${LIBS}
+ )
diff --git a/QiaoJiaSystem/RecordVideo/CommonFFmpegFunc.hpp b/QiaoJiaSystem/RecordVideo/CommonFFmpegFunc.hpp
new file mode 100644
index 0000000..9e4e825
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/CommonFFmpegFunc.hpp
@@ -0,0 +1,264 @@
+#ifndef COMMONFFMPEGFUNC_HPP
+#define COMMONFFMPEGFUNC_HPP
+
+#include <basic/debug/Debug.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <libavcodec/avcodec.h>
+#include <libavdevice/avdevice.h>
+#include <libavformat/avformat.h>
+#include <libavfilter/avfilter.h>
+#include <libavutil/avutil.h>
+#include <libswscale/swscale.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+
+#ifdef __cplusplus
+}
+#endif
+
+class CommonFFmpeg
+{
+public:
+ CommonFFmpeg():m_pInFmtCtx(nullptr),m_pInVideoStream(nullptr),m_pDict(nullptr){}
+ ~CommonFFmpeg(){}
+
+public:
+ void init()
+ {
+ av_register_all();
+ avformat_network_init();
+ }
+ int rtspInputOpen(const char* rtsp)
+ {
+ av_dict_set(&m_pDict, "rtsp_transport", "tcp", 0);
+ int ret = avformat_open_input(&m_pInFmtCtx, rtsp, NULL, &m_pDict);
+ if (ret!=0)
+ {
+ fprintf(stderr, "could not open input file, ret: %d,info: %x\n",ret,AVERROR(ret));
+ return ret;
+ }
+ ret = avformat_find_stream_info(m_pInFmtCtx, NULL);
+ if (ret<0)
+ {
+ fprintf(stderr, "could not find stream info\n");
+ return ret;
+ }
+
+ /* find first video stream */
+ for (unsigned i=0; i<m_pInFmtCtx->nb_streams; i++)
+ {
+ if (m_pInFmtCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
+ {
+ m_pInVideoStream = m_pInFmtCtx->streams[i];
+ break;
+ }
+ }
+ if (m_pInVideoStream == NULL)
+ {
+ fprintf(stderr, "didn't find any video stream\n");
+ return -1;
+ }
+ return 0;
+ }
+ void rtspInputClose()
+ {
+ if(m_pInFmtCtx!=nullptr)
+ avformat_close_input(&m_pInFmtCtx);
+ if(m_pDict!=nullptr)
+ av_dict_free(&m_pDict);
+ }
+
+ void* rtspCreatePkg()
+ {
+ //g_pkg.lock();
+ mutex().lock();
+ AVPacket* pkt = nullptr;
+ try{pkt=new AVPacket();av_init_packet(pkt);}
+ catch (...){if(pkt!=nullptr){delete pkt;pkt=nullptr;}}
+ //g_pkg.unlock();
+ mutex().unlock();
+ return pkt;
+ }
+ void rtspDestroyPkg(void* packet)
+ {
+ mutex().lock();
+ if(packet!=nullptr)
+ {
+ AVPacket* pkg = static_cast<AVPacket*>(packet);
+ av_free_packet(pkg);
+ delete pkg;
+ pkg = nullptr;
+ }
+ mutex().unlock();
+ }
+
+ int rtspReadPkg(void* packet)
+ {
+ mutex().lock();
+ int ret = -1;
+ if(packet!=nullptr)
+ {
+ AVPacket* pkg = static_cast<AVPacket*>(packet);
+ ret = av_read_frame(m_pInFmtCtx, pkg);
+ }
+ mutex().unlock();
+ return ret;
+ }
+
+ void* getRtspStream()
+ {
+ return (void*)m_pInVideoStream;
+ }
+
+ int fileOutOpen(const char* filename,void* inStream)
+ {
+ AVStream* pInstream = (AVStream*)inStream;
+ if(pInstream==nullptr)
+ {DBG("instream is null");return -1;}
+ int ret = avformat_alloc_output_context2(&m_pOutFmtCtx, NULL, NULL, filename);
+ if(ret<0)
+ {
+ fprintf(stderr, "avformat_alloc_output_context2 failed, errorCode: %d\n",AVERROR(ret));
+ return -1;
+ }
+ /*
+ * since all input files are supposed to be identical (framerate, dimension, color format, ...)
+ * we can safely set output codec values from first input file
+ */
+ m_pOutVideo_stream = avformat_new_stream(m_pOutFmtCtx, NULL);
+ {
+ AVCodecContext *c;
+ c = m_pOutVideo_stream->codec;
+ c->bit_rate = 400000;
+ c->codec_id = pInstream->codec->codec_id;
+ c->codec_type = pInstream->codec->codec_type;
+ c->time_base.num = pInstream->time_base.num;
+ c->time_base.den = pInstream->time_base.den;
+ fprintf(stderr, "time_base.num = %d time_base.den = %d\n", c->time_base.num, c->time_base.den);
+ c->width = pInstream->codec->width;
+ c->height = pInstream->codec->height;
+ c->pix_fmt = pInstream->codec->pix_fmt;
+ printf("%d %d %d", c->width, c->height, c->pix_fmt);
+ c->flags = pInstream->codec->flags;
+ c->flags |= CODEC_FLAG_GLOBAL_HEADER;
+ c->me_range = pInstream->codec->me_range;
+ c->max_qdiff = pInstream->codec->max_qdiff;
+
+ c->qmin = pInstream->codec->qmin;
+ c->qmax = pInstream->codec->qmax;
+
+ c->qcompress = pInstream->codec->qcompress;
+ }
+ ret =avio_open(&m_pOutFmtCtx->pb, filename, AVIO_FLAG_WRITE);
+ if(ret<0)
+ {
+ fprintf(stderr, "could not find stream info, errorCode: %d\n",AVERROR(ret));
+ return -1;
+ }
+
+ avformat_write_header(m_pOutFmtCtx, NULL);
+ }
+
+ void fileOutClose()
+ {
+ av_write_trailer(m_pOutFmtCtx);
+ avio_close(m_pOutFmtCtx->pb);
+ avcodec_close(m_pOutFmtCtx->streams[0]->codec);
+ av_freep(&m_pOutFmtCtx->streams[0]->codec);
+ av_freep(&m_pOutFmtCtx->streams[0]);
+
+ av_free(m_pOutFmtCtx);
+ m_pOutFmtCtx = nullptr;
+ }
+
+ int fileWritePkg(void* packet)
+ {
+ mutex().lock();
+ int ret = -1;
+ if(packet!=nullptr)
+ {
+ AVPacket* pkg = static_cast<AVPacket*>(packet);
+ //av_interleaved_write_frame(thisPtr->m_pOutFmtCtx, &i_pkt);
+ ret = av_write_frame(m_pOutFmtCtx, pkg);
+ }
+ mutex().unlock();
+ return ret;
+ }
+
+ bool isKeyFrame(void* packet)
+ {
+ bool ret = false;
+ if(packet!=nullptr)
+ {
+ AVPacket* pkg = static_cast<AVPacket*>(packet);
+ if(pkg->flags&AV_PKT_FLAG_KEY) ret = true;
+ }
+ return ret;
+ }
+
+ long int getPkgDts(void* packet)
+ {
+ long int ret = 0;
+ if(packet!=nullptr)
+ {
+ AVPacket* pkg = static_cast<AVPacket*>(packet);
+ ret = pkg->dts;
+ }
+ return ret;
+ }
+ long int getPkgPts(void* packet)
+ {
+ long int ret = 0;
+ if(packet!=nullptr)
+ {
+ AVPacket* pkg = static_cast<AVPacket*>(packet);
+ ret = pkg->pts;
+ }
+ return ret;
+ }
+
+ void conversion(void* packet,const long int& firstKeyPts,const long int& firstKeyDts,void* inVideoStream)
+ {
+ mutex().lock();
+ if((packet!=nullptr)&&(inVideoStream!=nullptr))
+ {
+ AVStream* inStream = (AVStream*)inVideoStream;
+ AVPacket* pkg = static_cast<AVPacket*>(packet);
+ pkg->pts -= firstKeyPts;
+ pkg->dts -= firstKeyDts;
+ pkg->pts = av_rescale_q_rnd(pkg->pts, inStream->time_base,
+ m_pOutVideo_stream->time_base,
+ (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));
+ pkg->dts = av_rescale_q_rnd(pkg->dts, inStream->time_base,
+ m_pOutVideo_stream->time_base,
+ (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));
+ pkg->duration = av_rescale_q(pkg->duration, inStream->time_base,
+ m_pOutVideo_stream->time_base);
+ pkg->pos = -1;
+ }
+ mutex().unlock();
+ }
+
+private:
+ AVFormatContext * m_pInFmtCtx;
+ AVStream *m_pInVideoStream;
+ AVDictionary *m_pDict;
+
+ AVFormatContext *m_pOutFmtCtx;
+ AVStream *m_pOutVideo_stream;
+ //static std::mutex g_pkg;
+ inline static int& n() { static int tn = 0; return tn;}
+
+ inline static std::mutex& mutex(){static std::mutex mtx;return mtx;}
+
+};
+#endif
+//std::mutex CommonFFmpeg::g_pkg;
diff --git a/QiaoJiaSystem/RecordVideo/ImageGrabberI.cpp b/QiaoJiaSystem/RecordVideo/ImageGrabberI.cpp
new file mode 100644
index 0000000..59fe9f2
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/ImageGrabberI.cpp
@@ -0,0 +1,117 @@
+#include "ImageGrabberI.h"
+#include <functional>
+#include <algorithm>
+#include <dirent.h>
+#include <basic/debug/Debug.h>
+#include <cstring>
+#include <opencv2/opencv.hpp>
+#include <QtCore/QDateTime>
+#include <basic/util/opencv/CvUtil.h>
+#include <basic/util/app/AppPreference.hpp>
+
+//鑾峰彇鐩綍涓嬫墍鏈夋枃浠剁殑鍚嶇О
+std::vector<std::string> forEachFile(const std::string &dir_name) {
+ std::vector<std::string> v;
+ auto dir = opendir(dir_name.data());
+ struct dirent *ent;
+ int len = 0;
+ if (dir) {
+ while ((ent = readdir(dir)) != NULL) {
+ std::string p = std::string(ent->d_name);
+ len = strlen(p.data());
+ if (len == 25) {
+ v.emplace_back(p);
+ }
+ }
+ closedir(dir);
+ }
+ return v;
+}
+
+//灏嗚棰戜腑鐨勬寚瀹氬抚瀛樹负鍥剧墖
+cv::Mat Video2Imag(std::string VideoName, int msec) {
+ cv::VideoCapture m;
+ cv::Mat img = cv::Mat();
+
+ m.open(VideoName);
+ m.set(CV_CAP_PROP_POS_MSEC, msec);
+ if (!m.isOpened()) {
+ ERR("瑙嗛璇诲叆閿欒");
+ return img;
+ }
+
+ m >> img;
+
+ return img;
+}
+
+ImageGrabberI::ImageGrabberI() : fdfsClient("./client.conf") {
+
+}
+
+RecordVideo::ByteSequence
+ImageGrabberI::grabImage(const Ice::Int index, const std::string &time, const Ice::Current &) {
+ ::RecordVideo::ByteSequence buffer;
+ QDateTime dt = QDateTime::fromString(time.data(), "yyyy-MM-dd hh:mm:ss");
+ QDateTime dtCurrent = QDateTime::currentDateTime();
+ qint64 diff = dtCurrent.toMSecsSinceEpoch() - dt.toMSecsSinceEpoch();
+ if (diff > appPref.getLongData("user.timeout") || diff < appPref.getLongData("user.interval.duration")) {
+ return buffer;
+ }
+ std::string path = appPref.getStringData("user.loop.absolute.path");
+ std::string absPath;
+
+ if (path.empty()) {
+ ERR("璺緞涓虹┖!");
+ return buffer;
+ }
+
+ char last = path.back();
+ if (last != '/') {
+ absPath = path + "/";
+ } else {
+ absPath = path;
+ }
+
+ std::string definitePath = absPath + QString::number(index).toStdString() + "/";
+
+ vec.clear();
+ vec = forEachFile(definitePath);
+ std::sort(vec.begin(), vec.end());
+
+ if (vec.empty()) {
+ ERR("娌℃湁鎵惧埌褰曞埗瑙嗛");
+ return buffer;
+ }
+
+ for (std::string &s : vec) {
+ std::string temp;
+ temp = s.substr(0, 21);
+
+ QDateTime dtFile = QDateTime::fromString(temp.data(), "yyyyMMdd_hh:mm:ss:zzz");
+ qint64 sub = dt.toMSecsSinceEpoch() - dtFile.toMSecsSinceEpoch();
+ if (sub <= appPref.getLongData("user.interval.duration") && sub > 0) {
+ std::string fullPath = definitePath + s;
+ cv::Mat img = Video2Imag(fullPath, sub);
+ CvUtil::cvMat2Buffer(img, buffer);
+ return buffer;
+ }
+ }
+
+ ERR("娌℃湁璇ユ椂娈电殑褰曞埗瑙嗛");
+ return buffer;
+}
+
+std::string ImageGrabberI::grabImageUrl(const Ice::Int index, const std::string &time, const Ice::Current &) {
+ std::string strHttpImgUrl;
+ ::RecordVideo::ByteSequence buffer = grabImage(index, time);
+
+ if (buffer.empty()) {
+ return strHttpImgUrl;
+ }
+
+ std::string strImgUrl;
+ fdfsClient.uploadFile(buffer, strImgUrl, "jpg");
+ strHttpImgUrl = appPref.getStringData("user.ip.port") + "/" + strImgUrl;
+ return strHttpImgUrl;
+}
diff --git a/QiaoJiaSystem/RecordVideo/ImageGrabberI.h b/QiaoJiaSystem/RecordVideo/ImageGrabberI.h
new file mode 100644
index 0000000..3a8be4e
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/ImageGrabberI.h
@@ -0,0 +1,21 @@
+#ifndef IMAGEGRABBERI_H
+#define IMAGEGRABBERI_H
+
+#include "RecordVideo.h"
+#include <iostream>
+#include <basic/util/fastdfs/FastdfsClient.h>
+
+class ImageGrabberI :public ::RecordVideo::ImageGrabber
+{
+public:
+ ImageGrabberI();
+
+ virtual ::RecordVideo::ByteSequence grabImage(const ::Ice::Int index,const ::std::string&time, const ::Ice::Current& = ::Ice::emptyCurrent);
+ virtual ::std::string grabImageUrl(const ::Ice::Int index,const ::std::string&time, const ::Ice::Current& = ::Ice::emptyCurrent);
+
+private:
+ std::vector<std::string> vec;
+ FastdfsClient fdfsClient;
+};
+
+#endif // IMAGEGRABBERI_H
diff --git a/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.cpp b/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.cpp
new file mode 100644
index 0000000..89082bb
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.cpp
@@ -0,0 +1,105 @@
+#include "LoopRecordVideoI.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QDateTime>
+#include <uuid/uuid.h>
+#include "jsoncpp/json/json.h"
+
+LoopRecordVideoI::LoopRecordVideoI(int interval) : TimerElement(interval),db_c(nullptr){
+ start();
+
+}
+
+LoopRecordVideoI::~LoopRecordVideoI() {
+ qDeleteAll(m_mapRecorders);
+ if(db_c)
+ {
+ delete db_c;
+ db_c=nullptr;
+ }
+}
+
+::std::string
+LoopRecordVideoI::addCamera(const ::std::string &index, const std::string &t_str_json, const Ice::Current &) {
+ DBG(t_str_json);
+ Json::Reader reader;
+ Json::Value value;
+//"192.168.1.188/group1/M00/04/6C/wKgBvFuWLgeAJrdNAACdFDKB-U8853.jpg"
+ if (reader.parse(t_str_json, value)) {
+ // std::string filePathName = value["path"].asString();
+ // appPref.setStringData("user.loop.absolute.path", filePathName);
+ std::string t_rtsp = value["rtsp"].asString();
+
+ if (m_mapRecorders.find(index) == m_mapRecorders.end()) {
+ INFO("addCamera << " << index << " time " << AppUtil::getTimeSecString());
+ uuid_t t_uuid;
+ uuid_generate(t_uuid);
+ char str[36] = {0};
+ uuid_unparse(t_uuid, str);
+ if(db_c==nullptr )
+ {
+ db_c=new LDBTool;
+ }
+ LoopVideoRecorder *pRecorder = new LoopVideoRecorder(appPref.getLongData("user.interval.duration"), index,
+ t_rtsp,std::string(str),db_c);
+ //da yin luzhi wenjian ming
+ std::lock_guard<std::mutex> lock(m_map_mutex);
+ m_mapRecorders[index] = pRecorder;
+ return std::string(str);
+ } else {
+ INFO("re addCamera << " << index);
+ removeCamera(index);
+ return addCamera(index, t_str_json);
+ }
+
+ } else {
+ ERR("Json error :: " << t_str_json);
+
+ }
+ return "";
+}
+
+void LoopRecordVideoI::removeCamera(const ::std::string &index, const Ice::Current &) {
+ if (m_mapRecorders.find(index) != m_mapRecorders.end()) {
+ INFO("removeCamera << " << index);
+ m_mapRecorders[index]->stopTimer();
+ std::lock_guard<std::mutex> lock(m_map_mutex);
+ if (m_mapRecorders[index] != NULL) {
+ delete m_mapRecorders.value(index);
+ }
+ m_mapRecorders[index] = NULL;
+ m_mapRecorders.remove(index);
+ }
+}
+
+void LoopRecordVideoI::clearCamera(const Ice::Current &) {
+ auto iter = m_mapRecorders.begin();
+ while (iter != m_mapRecorders.end()) {
+ iter.value()->stopTimer();
+ delete iter.value();
+ iter.value() = NULL;
+ m_mapRecorders.remove(iter.key());
+ ++iter;
+ }
+}
+
+void LoopRecordVideoI::feedDog(const ::std::string &index, const Ice::Current &) {
+// INFO("feedDog");
+ std::lock_guard<std::mutex> lock(m_mutex);
+ m_mapFeedDogTime[index] = QDateTime::currentDateTime();
+}
+
+void LoopRecordVideoI::timerFunc() {
+ m_mutex.lock();
+ auto mapFeedDogTime = m_mapFeedDogTime;
+ m_mutex.unlock();
+ auto iter = mapFeedDogTime.begin();
+ while (iter != mapFeedDogTime.end()) {
+ qint64 current = QDateTime::currentDateTime().toMSecsSinceEpoch();
+ qint64 feedDog = iter.value().toMSecsSinceEpoch();
+ qint64 sub = current - feedDog;
+ if (sub > 3000) {
+ removeCamera(iter.key());
+ }
+ ++iter;
+ }
+}
diff --git a/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.h b/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.h
new file mode 100644
index 0000000..b4c4b50
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.h
@@ -0,0 +1,37 @@
+#ifndef LOOPRECORDVIDEOI_H
+#define LOOPRECORDVIDEOI_H
+
+#include "RecordVideo.h"
+#include <iostream>
+#include <thread>
+#include <QtCore/QMap>
+#include "LoopVideoRecorder.h"
+#include "TimerElement.h"
+#include <mutex>
+#include "../VideoServer/QiaoJia/DB/LDBTool.h"
+class LoopRecordVideoI : public ::RecordVideo::LoopRecorder, TimerElement {
+public:
+ LoopRecordVideoI(int interval = 10000);
+
+ ~LoopRecordVideoI();
+
+ ::std::string addCamera(const ::std::string &index, const ::std::string &t_rtsp, const ::Ice::Current & = ::Ice::emptyCurrent);
+
+ void removeCamera(const ::std::string &index, const ::Ice::Current & = ::Ice::emptyCurrent);
+
+ void clearCamera(const ::Ice::Current & = ::Ice::emptyCurrent);
+
+ void feedDog(const ::std::string &index, const ::Ice::Current & = ::Ice::emptyCurrent);
+
+ void timerFunc();
+
+private:
+
+ QMap<std::string, LoopVideoRecorder *> m_mapRecorders;
+ QMap<std::string, QDateTime> m_mapFeedDogTime;
+ std::mutex m_mutex;
+ std::mutex m_map_mutex;
+ LDBTool* db_c;
+};
+
+#endif // LOOPRECORDVIDEOI_H
diff --git a/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.cpp b/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.cpp
new file mode 100644
index 0000000..3c196d0
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.cpp
@@ -0,0 +1,98 @@
+#include "LoopVideoRecorder.h"
+#include <functional>
+#include <algorithm>
+#include <dirent.h>
+#include <cstdio>
+#include <QtCore/QDateTime>
+#include <basic/util/app/AppPreference.hpp>
+//#include <sys/stat.h>
+extern std::vector<std::string> forEachFile(const std::string &dir_name);
+
+//loop record video
+void LoopVideoRecorder::loopRecordVideo() {
+ std::cout << "File " << __FILE__ << "FUNC " << __FUNCTION__ << " line " << __LINE__ << std::endl;
+
+ if (m_strRtsp.empty()) {
+ ERR("rtsp涓虹┖!");
+ return;
+ }
+
+ //#todo get Path
+
+ // std::string loopAbsPath = appPref.getStringData("user.loop.absolute.path");
+ // std::cout << "File " << __FILE__ << "FUNC " << __FUNCTION__ << " line " << __LINE__ << std::endl;
+ // std::string loopAbsPath = getFullFileName();
+// if (loopAbsPath.empty()) {
+// ERR("absolute.path涓虹┖");
+// return ;
+// }
+
+// char last = loopAbsPath.back();
+// if (last != '/') {
+// loopAbsPath = loopAbsPath + "/";
+// }
+
+
+
+ // QString CmdMkdir = QString("cd %1 ; mkdir -p %2").arg(QString::fromStdString(loopAbsPath)).arg(QString::fromStdString(m_nIndex));
+ // system(CmdMkdir.toLatin1().data());
+
+ std::string fullPath = getFullFileName();
+ // std::string cmd="mkdir -p "+fullPath;
+ // system(cmd.c_str());
+ //mkdir(fullPath.c_str(),S_IRWXU);
+ if(fullPath.empty())
+ {
+ ERR("LoopVideoRecorder::getFullFileName() is empty");
+ return ;
+ }
+ m_pVideoRcd = new VideoRecorder(fullPath,m_pathId, m_strRtsp, m_nInterval,m_db);
+
+
+}
+
+void LoopVideoRecorder::stopTimer() {
+ stop();
+ wait();
+}
+
+void LoopVideoRecorder::timerFunc() {
+// loopRecordVideo();
+}
+
+LoopVideoRecorder::LoopVideoRecorder(int interval, std::string index, std::string rtsp,std::string pathId,LDBTool* db_c)
+ : TimerElement(interval), m_nInterval(interval), m_nIndex(index), m_strRtsp(rtsp),m_pathId(pathId),m_db(db_c){
+// start();
+// std::cout << "File " << __FILE__ << "FUNC " << __FUNCTION__ << " line " << __LINE__ << std::endl;
+
+ loopRecordVideo();
+}
+
+LoopVideoRecorder::~LoopVideoRecorder() {
+ delete m_pVideoRcd;
+}
+std::string LoopVideoRecorder::getFullFileName() {
+
+ //# ./camIndex/YYYYMM/DD/camIndex-YYYYMMDDHHMMSS/
+ std::string t_FilePath = appPref.getStringData("user.loop.absolute.path");
+
+ if (t_FilePath.back() != '/') {
+ t_FilePath.push_back('/');
+ }
+ char buf[24];
+
+ time_t t=time(nullptr);
+ // 20180901113048 2018-09-01 11:30:48
+ strftime(buf,24,"%Y%m%d%H%M%S",localtime(&t));
+ std::string t_strTime(buf);
+ //# ./camIndex/YYYYMM/DD/
+ t_FilePath.append(m_nIndex + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/");
+ //camIndex-YYYYMMDDHH/camIndex-YYYYMMDDHH/
+ t_FilePath.append(m_nIndex + "-" + t_strTime.substr(0,10) + "/");
+ std::string t_cmd = "mkdir -p '";
+ t_cmd.append(t_FilePath + "'");
+ //#get path mkdir path
+ system(t_cmd.c_str());
+
+ return t_FilePath;
+}
diff --git a/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.h b/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.h
new file mode 100644
index 0000000..ffbfd27
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.h
@@ -0,0 +1,38 @@
+#ifndef LOOPVIDEORECORDER_H
+#define LOOPVIDEORECORDER_H
+
+#include <iostream>
+#include <thread>
+#include <functional>
+#include <unistd.h>
+#include "VideoRecorder.h"
+#include <QtCore/QObject>
+#include "TimerElement.h"
+#include <queue>
+
+class LoopVideoRecorder : public TimerElement {
+
+public:
+ explicit LoopVideoRecorder(int interval, std::string index, std::string rtsp,std::string pathId,LDBTool* db_c);
+
+ ~LoopVideoRecorder();
+
+ void loopRecordVideo();
+
+ void stopTimer();
+
+private:
+ virtual void timerFunc() override;
+ std::string getFullFileName();
+
+private:
+ std::string m_nIndex;
+ std::string m_strRtsp;
+ std::string m_pathId;
+ int m_nInterval;
+ VideoRecorder *m_pVideoRcd;
+ std::queue<VideoRecorder *> m_queManager;
+ LDBTool* m_db;
+};
+
+#endif // LOOPVIDEORECORDER_H
diff --git a/QiaoJiaSystem/RecordVideo/RecordVideoI.cpp b/QiaoJiaSystem/RecordVideo/RecordVideoI.cpp
new file mode 100644
index 0000000..82e8be7
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/RecordVideoI.cpp
@@ -0,0 +1,38 @@
+#include "RecordVideoI.h"
+#include <QtCore/QDateTime>
+#include <basic/util/app/AppPreference.hpp>
+
+RecordVideoI::RecordVideoI()
+{
+
+}
+
+std::string RecordVideoI::recordVideo(const std::string &rtsp, Ice::Long ms, const Ice::Current &)
+{
+ QString rtspUrl = QString::fromStdString(rtsp);
+
+ int ss = 1000;
+ int mi = ss * 60;
+ int hh = mi * 60;
+
+ long hour = ms / hh;
+ long minute = (ms - hour * hh) / mi;
+ long second = (ms - hour * hh - minute * mi) / ss;
+
+ QString strHour = QString("%1").arg(hour,2,10,QChar('0'));
+ QString strMinute = QString("%1").arg(minute,2,10,QChar('0'));
+ QString strSecond = QString("%1").arg(second,2,10,QChar('0'));
+
+ QString currentTime = QDateTime::currentDateTime().toString("yyyyMMdd_hh:mm:ss:zzz");
+ QString fileName = currentTime + ".mp4";
+ QString CmdTouch = QString("touch %1").arg(fileName);
+ QString CmdOrder = QString("LD_LIBRARY_PATH=/usr/local/cuda/lib64 ffmpeg -y -i %1 -vcodec copy -acodec copy -t %2:%3:%4 %5/%6 &")
+ .arg(rtspUrl).arg(strHour).arg(strMinute)
+ .arg(strSecond).arg(QString::fromStdString(appPref.getStringData("user.absolute.path")))
+ .arg(fileName);
+
+ system(CmdTouch.toLatin1().data());
+ system(CmdOrder.toLatin1().data());
+
+ return fileName.toStdString();
+}
diff --git a/QiaoJiaSystem/RecordVideo/RecordVideoI.h b/QiaoJiaSystem/RecordVideo/RecordVideoI.h
new file mode 100644
index 0000000..950f097
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/RecordVideoI.h
@@ -0,0 +1,14 @@
+#ifndef RECORDVIDEOI_H
+#define RECORDVIDEOI_H
+
+#include "RecordVideo.h"
+
+class RecordVideoI : public::RecordVideo::Recorder
+{
+public:
+ RecordVideoI();
+
+ virtual ::std::string recordVideo(const ::std::string& rtsp, ::Ice::Long ms, const ::Ice::Current& = ::Ice::emptyCurrent);
+};
+
+#endif // RECORDVIDEOI_H
diff --git a/QiaoJiaSystem/RecordVideo/VideoRecorder.cpp b/QiaoJiaSystem/RecordVideo/VideoRecorder.cpp
new file mode 100644
index 0000000..ae66290
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/VideoRecorder.cpp
@@ -0,0 +1,146 @@
+#include "VideoRecorder.h"
+#include <unistd.h>
+#include <QString>
+
+
+VideoRecorder::VideoRecorder(const std::string &fullPath,const std::string &uuid, const std::string &strRtsp, const int mseconds,LDBTool* db)
+ : m_pInFmtCtx(nullptr), m_pInVideoStream(nullptr), m_pOutFmtCtx(nullptr),
+ m_pDict(nullptr), m_pOutVideo_stream(nullptr), m_bStatus(true),/*m_thd(recodeFunc,this),*/
+ m_bStart(false), m_mseconds(mseconds), m_strfileName(""), m_uuid(uuid), m_bSave(false),
+ m_fullPath(fullPath),db_c(db){
+ m_CommonFFmpeg.init();
+ for (int i = 0; i < 3; i++) {
+ if (m_CommonFFmpeg.rtspInputOpen(strRtsp.c_str()) >= 0) {
+ m_thd = new std::thread(recodeFunc, this);
+ return;
+ }
+ usleep(20000);
+ }
+}
+
+VideoRecorder::~VideoRecorder() {
+
+ m_bSave = false;
+ m_bStatus = false;
+ m_thd->join();
+ delete m_thd;
+ m_thd = nullptr;
+ m_CommonFFmpeg.rtspInputClose();
+}
+
+void VideoRecorder::thisRecodeFunc() {
+ while (m_bStatus) {
+ // std::string strDate;
+ //#todo get FilePath FileName
+
+ ///#todo shengcheng luzhi wenjian ming
+
+
+
+ long lDate = getCurrentUs();
+ bool bFirstKeyFrame = true;
+ long int nFirstKeyPts = 0;
+ long int nFirstKeyDts = 0;
+
+ if (m_strfileName.empty() && !m_bSave) {
+ GetFileName(m_strfileName);
+
+ DBG("srtPath" << m_strfileName << "m_uuid" << m_uuid);
+ } else{
+ DBG("m_strfileName:" << m_strfileName);
+ DBG("m_bSave:" << m_bSave);
+ }
+
+
+ m_CommonFFmpeg.fileOutOpen(m_strfileName.c_str(), m_CommonFFmpeg.getRtspStream());
+ //#todo
+ while (m_bStatus && ((getCurrentUs() - lDate) < m_mseconds * 1000)) {
+ void *handle = m_CommonFFmpeg.rtspCreatePkg();
+ if (m_CommonFFmpeg.rtspReadPkg(handle) < 0) {
+ if(bFirstKeyFrame){
+ ERR("rtspReadPkg m_strfileName:" << m_strfileName.c_str() << "getRtspStream:"
+ << m_CommonFFmpeg.getRtspStream());
+ usleep(20000);//20ms
+ m_bSave = false;
+ m_strfileName.clear();
+ break;
+ } else{
+ continue;
+ }
+
+ }
+
+ if (bFirstKeyFrame) {
+
+ if (m_CommonFFmpeg.isKeyFrame(handle)) {
+ DBG("I");
+ nFirstKeyPts = m_CommonFFmpeg.getPkgPts(handle);
+ nFirstKeyDts = m_CommonFFmpeg.getPkgDts(handle);
+ bFirstKeyFrame = false;
+
+ if (!m_bSave && db_c) {
+ if (db_c->insertRecordVedioPath(QString::fromStdString(m_uuid),
+ QString::fromStdString(m_strfileName))) {
+ m_bSave = true;
+ } else {
+ ERR("insertRecordVedioPath DB ERR m_uuid=" << m_uuid.c_str() << "m_strfileName="
+ << m_strfileName.c_str());
+ }
+ }
+ } else {
+ // DBG("slice");
+ m_CommonFFmpeg.rtspDestroyPkg(handle);
+ continue;
+ DBG("srtPath" << m_strfileName << "m_uuid" << m_uuid);
+ }
+ }
+ m_CommonFFmpeg.conversion(handle, nFirstKeyPts, nFirstKeyDts,
+ m_CommonFFmpeg.getRtspStream());
+
+ m_CommonFFmpeg.fileWritePkg(handle);
+
+ m_CommonFFmpeg.rtspDestroyPkg(handle);
+ }
+ m_CommonFFmpeg.fileOutClose();
+
+ }
+}
+
+long VideoRecorder::getCurrentUs() {
+ timeval time;
+ gettimeofday(&time, nullptr);
+ return time.tv_sec * 1000000 + time.tv_usec;
+}
+
+long VideoRecorder::getCurrentUs(std::string &strDateTime) {
+ timeval time;
+ gettimeofday(&time, nullptr);
+ __time_t sec = time.tv_sec;
+ char buf[128] = {0};
+ strftime(buf, 64, "%Y%m%d_%H:%M:%S", localtime(&sec));
+ char szDateTime[128] = {0};
+ sprintf(szDateTime, "%s/%s:%ld.mp4", m_strfileName.c_str(), buf, time.tv_usec / 1000);
+ strDateTime = szDateTime;
+ return time.tv_sec * 1000000 + time.tv_usec;
+}
+
+void VideoRecorder::recodeFunc(void *arg) {
+
+ VideoRecorder *thisPtr = (VideoRecorder *) arg;
+ thisPtr->thisRecodeFunc();
+}
+
+void VideoRecorder::GetFileName(std::string &fileName) {
+ //std::string tem="/home/basic/work_src/test_Rec/1";
+// timeval time;
+// gettimeofday(&time, nullptr);
+ time_t t = time(nullptr);
+
+ char buf[128] = {0};
+ strftime(buf, 64, "%Y-%m-%d %H:%M:%S", localtime(&t));
+ char szDateTime[256] = {0};
+ sprintf(szDateTime, "%s%s.mp4", m_fullPath.c_str(), buf);
+
+ fileName = szDateTime;
+ //std::cout << "File path " << fileName.c_str() << "FUNC " << __FUNCTION__ << " line " << __LINE__ << std::endl;
+}
diff --git a/QiaoJiaSystem/RecordVideo/VideoRecorder.h b/QiaoJiaSystem/RecordVideo/VideoRecorder.h
new file mode 100644
index 0000000..cefbed1
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/VideoRecorder.h
@@ -0,0 +1,56 @@
+#ifndef VIDEORECORDER_H
+#define VIDEORECORDER_H
+
+#include<thread>
+#include <basic/util/app/AppPreference.hpp>
+#include "CommonFFmpegFunc.hpp"
+#include "../VideoServer/QiaoJia/DB/LDBTool.h"
+
+struct AVStream;
+struct AVDictionary;
+struct AVFormatContext;
+struct AVPacket;
+
+void ffmpegInit();
+
+class VideoRecorder {
+public:
+ VideoRecorder(const std::string& fullPath,const std::string &uuid, const std::string &strRtsp, const int mseconds,LDBTool* db);
+
+ virtual ~VideoRecorder();
+
+private:
+ AVFormatContext *m_pInFmtCtx;
+ AVStream *m_pInVideoStream;
+
+ AVFormatContext *m_pOutFmtCtx;
+ AVStream *m_pOutVideo_stream;
+ AVDictionary *m_pDict;
+ bool m_bStatus;
+
+ bool m_bStart;
+
+ std::thread *m_thd;
+
+ CommonFFmpeg m_CommonFFmpeg;
+
+ int m_mseconds;
+
+ std::string m_strfileName;
+ std::string m_uuid;
+ std::string m_fullPath;
+ LDBTool* db_c;
+ bool m_bSave;
+private:
+ void thisRecodeFunc();
+
+ long getCurrentUs();
+
+ long getCurrentUs(std::string &strDateTime);
+
+ void GetFileName(std::string &fileName);
+
+ static void recodeFunc(void *);
+};
+
+#endif
diff --git a/QiaoJiaSystem/RecordVideo/VideoRecorderManager.cpp b/QiaoJiaSystem/RecordVideo/VideoRecorderManager.cpp
new file mode 100644
index 0000000..413d939
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/VideoRecorderManager.cpp
@@ -0,0 +1,54 @@
+#include "VideoRecorderManager.h"
+
+VideoRecorderManager::VideoRecorderManager(int interval, std::string rtsp, std::string path, std::string fileName)
+ :TimerElement(interval),m_strPath(path),m_strFileName(fileName)
+{
+ ClockTimer ct("VideoRecorderManager::VideoRecorderManager()");
+ int nCount = 0;
+ while(nCount++ < 10)
+ {
+ if (m_videoRcd.start(rtsp,path+fileName) >= 0)
+ {
+ break;
+ }
+ usleep(10000);//10ms
+ }
+
+ if (nCount >= 10)
+ {
+ ERR("open rtsp "<< rtsp <<" failed!");
+ }else
+ {
+ m_dtRecordTime = QDateTime::currentDateTime();
+ start();
+ }
+}
+
+double VideoRecorderManager::getLastUs()
+{
+ return getCurrentUs();
+}
+
+void VideoRecorderManager::threadInitial()
+{
+ lastUs = getLastUs();
+}
+
+void VideoRecorderManager::timerFunc()
+{
+ ClockTimer ct("VideoRecorderManager::timerFunc()");
+ m_videoRcd.stop();
+ if (access((m_strPath+m_strFileName).c_str(),F_OK) != 0)
+ {
+ ERR("file not exist!");
+ stop();
+ return;
+ }
+ QString strMvCmd = QString("cd %1 ; mv %2 %3")
+ .arg(QString::fromStdString(m_strPath))
+ .arg(QString::fromStdString(m_strFileName))
+ .arg(m_dtRecordTime.toString("yyyyMMdd_hh:mm:ss:zzz")+".mp4");
+ system(strMvCmd.toLatin1().data());
+
+ stop();
+}
diff --git a/QiaoJiaSystem/RecordVideo/VideoRecorderManager.h b/QiaoJiaSystem/RecordVideo/VideoRecorderManager.h
new file mode 100644
index 0000000..c28f2c1
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/VideoRecorderManager.h
@@ -0,0 +1,25 @@
+#ifndef VIDEORECORDERMANAGER_H
+#define VIDEORECORDERMANAGER_H
+
+#include "TimerElement.h"
+#include "VideoRecorder.h"
+#include <QtCore/QDateTime>
+
+class VideoRecorderManager : public TimerElement
+{
+public:
+ VideoRecorderManager(int interval,std::string rtsp,std::string path,std::string fileName);
+
+ virtual double getLastUs() override;
+private:
+ virtual void timerFunc() override;
+ virtual void threadInitial() override;
+private:
+ VideoRecorder m_videoRcd;
+ std::string m_strPath;
+ std::string m_strFileName;
+ QDateTime m_dtRecordTime;
+
+};
+
+#endif // VIDEORECORDERMANAGER_H
diff --git a/QiaoJiaSystem/RecordVideo/config.cfg b/QiaoJiaSystem/RecordVideo/config.cfg
new file mode 100644
index 0000000..f9cb22e
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/config.cfg
@@ -0,0 +1 @@
+Ice.Default.Locator=StructureAppRegistry/Locator:default -p 4062
\ No newline at end of file
diff --git a/QiaoJiaSystem/RecordVideo/main.cpp b/QiaoJiaSystem/RecordVideo/main.cpp
new file mode 100644
index 0000000..78d3b33
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/main.cpp
@@ -0,0 +1,93 @@
+#include <iostream>
+#include <QtCore/QDebug>
+#include <Ice/Ice.h>
+#include <IceUtil/IceUtil.h>
+#include "RecordVideoI.h"
+#include "ImageGrabberI.h"
+#include "LoopRecordVideoI.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/util/app/AppConfig.h>
+#include <basic/debug/Debug.h>
+
+
+using namespace std;
+
+int main2(int argc, char **argv) {
+ SAVE_APP_ARGS;
+ ENABLEGLOG("~/work/log/");
+ auto ich = Ice::initialize(argc, argv);
+
+ std::string identity = ich->getProperties()->getProperty("user.record.video.identity");
+ std::string identityCapture = ich->getProperties()->getProperty("user.capture.image.identity");
+ std::string identityLoop = ich->getProperties()->getProperty("user.loop.record.video.identity");
+ std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+ std::string absolutePath = ich->getProperties()->getProperty("user.absolute.path");
+ std::string loopAbsolutePath = ich->getProperties()->getProperty("user.loop.absolute.path");
+ std::string intervalDuration = ich->getProperties()->getProperty("user.interval.duration");
+ std::string ipPort = ich->getProperties()->getProperty("user.ip.port");
+ std::string timeOut = ich->getProperties()->getProperty("user.timeout");
+
+ appPref.setStringData("user.absolute.path", absolutePath);
+ appPref.setStringData("user.loop.absolute.path", loopAbsolutePath);
+ appPref.setLongData("user.interval.duration", atol(intervalDuration.c_str()));
+ appPref.setStringData("user.ip.port", ipPort);
+ appPref.setLongData("user.timeout", atol(timeOut.c_str()));
+
+ auto adapter = ich->createObjectAdapter(adapterName);
+ adapter->add(new RecordVideoI(), Ice::stringToIdentity(identity));
+ adapter->add(new ImageGrabberI(), Ice::stringToIdentity(identityCapture));
+ adapter->add(new LoopRecordVideoI(), Ice::stringToIdentity(identityLoop));
+ adapter->activate();
+ ich->waitForShutdown();
+
+ return 0;
+}
+
+#include "jsoncpp/json/json.h"
+
+int main(int argc, char **argv) {
+
+ SAVE_APP_ARGS;
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+ auto ich = Ice::initialize(argc, argv);
+
+ std::string identity = "RecordVideoServer";
+ std::string identityCapture = "CaptureVideoImgServer";
+ std::string identityLoop = "LoopRecordVideoServer";
+ std::string adapterName = "RecordVideoServerAdapter";
+ std::string absolutePath = "build";
+ // std::string loopAbsolutePath = "/home/bsk/test/";
+ std::string loopAbsolutePath = appConfig.getStringProperty("cutPath");
+ std::string intervalDuration = "600000";
+ std::string ipPort = "192.168.1.65:8888";
+ std::string timeOut = "6000000";
+
+ appPref.setStringData("user.absolute.path", absolutePath);
+ appPref.setStringData("user.loop.absolute.path", loopAbsolutePath);
+ appPref.setLongData("user.interval.duration", atol(intervalDuration.c_str()));
+ appPref.setStringData("user.ip.port", ipPort);
+ appPref.setLongData("user.timeout", atol(timeOut.c_str()));
+
+// auto adapter = ich->createObjectAdapter(adapterName);
+// adapter->add(new RecordVideoI(), Ice::stringToIdentity(identity));
+// adapter->add(new ImageGrabberI(), Ice::stringToIdentity(identityCapture));
+// adapter->add(new LoopRecordVideoI(), Ice::stringToIdentity(identityLoop));
+// adapter->activate();
+// ich->waitForShutdown();
+
+// Ice::ObjectAdapterPtr adapter = ich->createObjectAdapterWithEndpoints(identityLoop + "Adapter",
+// " tcp -p " + std::to_string(10010));
+//
+// adapter->add(new LoopRecordVideoI, Ice::stringToIdentity(identityLoop));
+// adapter->activate();
+// ich->waitForShutdown();
+
+ IceRpcServer<LoopRecordVideoI> server("LoopRecordVideoServer", 10010, "tcp");
+ server.setMessageSizeMax(1024 * 1024 * 50);
+ server.setPoolInitSize(5);
+ server.setPoolMaxSize(32);
+ server.runWaitShutDown();
+
+ return 0;
+}
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.cpp b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.cpp
new file mode 100644
index 0000000..ab59d89
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.cpp
@@ -0,0 +1,1385 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `RecordVideo.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <RecordVideo.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+# pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+# pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_RecordVideo_Recorder_ids[2] =
+{
+ "::Ice::Object",
+ "::RecordVideo::Recorder"
+};
+const ::std::string iceC_RecordVideo_Recorder_ops[] =
+{
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping",
+ "recordVideo"
+};
+const ::std::string iceC_RecordVideo_Recorder_recordVideo_name = "recordVideo";
+
+const ::std::string iceC_RecordVideo_ImageGrabber_ids[2] =
+{
+ "::Ice::Object",
+ "::RecordVideo::ImageGrabber"
+};
+const ::std::string iceC_RecordVideo_ImageGrabber_ops[] =
+{
+ "grabImage",
+ "grabImageUrl",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+const ::std::string iceC_RecordVideo_ImageGrabber_grabImage_name = "grabImage";
+const ::std::string iceC_RecordVideo_ImageGrabber_grabImageUrl_name = "grabImageUrl";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_ids[2] =
+{
+ "::Ice::Object",
+ "::RecordVideo::LoopRecorder"
+};
+const ::std::string iceC_RecordVideo_LoopRecorder_ops[] =
+{
+ "addCamera",
+ "clearCamera",
+ "feedDog",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping",
+ "removeCamera"
+};
+const ::std::string iceC_RecordVideo_LoopRecorder_addCamera_name = "addCamera";
+const ::std::string iceC_RecordVideo_LoopRecorder_removeCamera_name = "removeCamera";
+const ::std::string iceC_RecordVideo_LoopRecorder_clearCamera_name = "clearCamera";
+const ::std::string iceC_RecordVideo_LoopRecorder_feedDog_name = "feedDog";
+
+}
+
+bool
+RecordVideo::Recorder::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_RecordVideo_Recorder_ids, iceC_RecordVideo_Recorder_ids + 2, s);
+}
+
+::std::vector<::std::string>
+RecordVideo::Recorder::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector<::std::string>(&iceC_RecordVideo_Recorder_ids[0], &iceC_RecordVideo_Recorder_ids[2]);
+}
+
+::std::string
+RecordVideo::Recorder::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::Recorder::ice_staticId()
+{
+ static const ::std::string typeId = "::RecordVideo::Recorder";
+ return typeId;
+}
+
+bool
+RecordVideo::Recorder::_iceD_recordVideo(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ ::std::string iceP_rtsp;
+ long long int iceP_ms;
+ istr->readAll(iceP_rtsp, iceP_ms);
+ inS.endReadParams();
+ ::std::string ret = this->recordVideo(::std::move(iceP_rtsp), iceP_ms, current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+RecordVideo::Recorder::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_Recorder_ops, iceC_RecordVideo_Recorder_ops + 5, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_RecordVideo_Recorder_ops)
+ {
+ case 0:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 1:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ case 4:
+ {
+ return _iceD_recordVideo(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+bool
+RecordVideo::ImageGrabber::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_RecordVideo_ImageGrabber_ids, iceC_RecordVideo_ImageGrabber_ids + 2, s);
+}
+
+::std::vector<::std::string>
+RecordVideo::ImageGrabber::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector<::std::string>(&iceC_RecordVideo_ImageGrabber_ids[0], &iceC_RecordVideo_ImageGrabber_ids[2]);
+}
+
+::std::string
+RecordVideo::ImageGrabber::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::ImageGrabber::ice_staticId()
+{
+ static const ::std::string typeId = "::RecordVideo::ImageGrabber";
+ return typeId;
+}
+
+bool
+RecordVideo::ImageGrabber::_iceD_grabImage(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ int iceP_index;
+ ::std::string iceP_time;
+ istr->readAll(iceP_index, iceP_time);
+ inS.endReadParams();
+ ::RecordVideo::ByteSequence ret = this->grabImage(iceP_index, ::std::move(iceP_time), current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+RecordVideo::ImageGrabber::_iceD_grabImageUrl(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ int iceP_index;
+ ::std::string iceP_time;
+ istr->readAll(iceP_index, iceP_time);
+ inS.endReadParams();
+ ::std::string ret = this->grabImageUrl(iceP_index, ::std::move(iceP_time), current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+RecordVideo::ImageGrabber::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_ImageGrabber_ops, iceC_RecordVideo_ImageGrabber_ops + 6, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_RecordVideo_ImageGrabber_ops)
+ {
+ case 0:
+ {
+ return _iceD_grabImage(in, current);
+ }
+ case 1:
+ {
+ return _iceD_grabImageUrl(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+bool
+RecordVideo::LoopRecorder::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_RecordVideo_LoopRecorder_ids, iceC_RecordVideo_LoopRecorder_ids + 2, s);
+}
+
+::std::vector<::std::string>
+RecordVideo::LoopRecorder::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector<::std::string>(&iceC_RecordVideo_LoopRecorder_ids[0], &iceC_RecordVideo_LoopRecorder_ids[2]);
+}
+
+::std::string
+RecordVideo::LoopRecorder::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::LoopRecorder::ice_staticId()
+{
+ static const ::std::string typeId = "::RecordVideo::LoopRecorder";
+ return typeId;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_addCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ ::std::string iceP_index;
+ ::std::string iceP_rtsp;
+ istr->readAll(iceP_index, iceP_rtsp);
+ inS.endReadParams();
+ ::std::string ret = this->addCamera(::std::move(iceP_index), ::std::move(iceP_rtsp), current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_removeCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ ::std::string iceP_index;
+ istr->readAll(iceP_index);
+ inS.endReadParams();
+ this->removeCamera(::std::move(iceP_index), current);
+ inS.writeEmptyParams();
+ return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_clearCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ inS.readEmptyParams();
+ this->clearCamera(current);
+ inS.writeEmptyParams();
+ return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_feedDog(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ ::std::string iceP_index;
+ istr->readAll(iceP_index);
+ inS.endReadParams();
+ this->feedDog(::std::move(iceP_index), current);
+ inS.writeEmptyParams();
+ return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_LoopRecorder_ops, iceC_RecordVideo_LoopRecorder_ops + 8, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_RecordVideo_LoopRecorder_ops)
+ {
+ case 0:
+ {
+ return _iceD_addCamera(in, current);
+ }
+ case 1:
+ {
+ return _iceD_clearCamera(in, current);
+ }
+ case 2:
+ {
+ return _iceD_feedDog(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 6:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ case 7:
+ {
+ return _iceD_removeCamera(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+RecordVideo::RecorderPrx::_iceI_recordVideo(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>& outAsync, const ::std::string& iceP_rtsp, long long int iceP_ms, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_RecordVideo_Recorder_recordVideo_name);
+ outAsync->invoke(iceC_RecordVideo_Recorder_recordVideo_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_rtsp, iceP_ms);
+ },
+ nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+RecordVideo::RecorderPrx::_newInstance() const
+{
+ return ::IceInternal::createProxy<RecorderPrx>();
+}
+
+const ::std::string&
+RecordVideo::RecorderPrx::ice_staticId()
+{
+ return RecordVideo::Recorder::ice_staticId();
+}
+
+void
+RecordVideo::ImageGrabberPrx::_iceI_grabImage(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::RecordVideo::ByteSequence>>& outAsync, int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_RecordVideo_ImageGrabber_grabImage_name);
+ outAsync->invoke(iceC_RecordVideo_ImageGrabber_grabImage_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_index, iceP_time);
+ },
+ nullptr);
+}
+
+void
+RecordVideo::ImageGrabberPrx::_iceI_grabImageUrl(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>& outAsync, int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_RecordVideo_ImageGrabber_grabImageUrl_name);
+ outAsync->invoke(iceC_RecordVideo_ImageGrabber_grabImageUrl_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_index, iceP_time);
+ },
+ nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+RecordVideo::ImageGrabberPrx::_newInstance() const
+{
+ return ::IceInternal::createProxy<ImageGrabberPrx>();
+}
+
+const ::std::string&
+RecordVideo::ImageGrabberPrx::ice_staticId()
+{
+ return RecordVideo::ImageGrabber::ice_staticId();
+}
+
+void
+RecordVideo::LoopRecorderPrx::_iceI_addCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>& outAsync, const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_RecordVideo_LoopRecorder_addCamera_name);
+ outAsync->invoke(iceC_RecordVideo_LoopRecorder_addCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_index, iceP_rtsp);
+ },
+ nullptr);
+}
+
+void
+RecordVideo::LoopRecorderPrx::_iceI_removeCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>& outAsync, const ::std::string& iceP_index, const ::Ice::Context& context)
+{
+ outAsync->invoke(iceC_RecordVideo_LoopRecorder_removeCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_index);
+ },
+ nullptr);
+}
+
+void
+RecordVideo::LoopRecorderPrx::_iceI_clearCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>& outAsync, const ::Ice::Context& context)
+{
+ outAsync->invoke(iceC_RecordVideo_LoopRecorder_clearCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ nullptr,
+ nullptr);
+}
+
+void
+RecordVideo::LoopRecorderPrx::_iceI_feedDog(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>& outAsync, const ::std::string& iceP_index, const ::Ice::Context& context)
+{
+ outAsync->invoke(iceC_RecordVideo_LoopRecorder_feedDog_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_index);
+ },
+ nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+RecordVideo::LoopRecorderPrx::_newInstance() const
+{
+ return ::IceInternal::createProxy<LoopRecorderPrx>();
+}
+
+const ::std::string&
+RecordVideo::LoopRecorderPrx::ice_staticId()
+{
+ return RecordVideo::LoopRecorder::ice_staticId();
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_RecordVideo_Recorder_recordVideo_name = "recordVideo";
+
+const ::std::string iceC_RecordVideo_ImageGrabber_grabImage_name = "grabImage";
+
+const ::std::string iceC_RecordVideo_ImageGrabber_grabImageUrl_name = "grabImageUrl";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_addCamera_name = "addCamera";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_removeCamera_name = "removeCamera";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_clearCamera_name = "clearCamera";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_feedDog_name = "feedDog";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::RecordVideo::upCast(::IceProxy::RecordVideo::Recorder* p) { return p; }
+
+void
+::IceProxy::RecordVideo::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::Recorder>& v)
+{
+ ::Ice::ObjectPrx proxy;
+ istr->read(proxy);
+ if(!proxy)
+ {
+ v = 0;
+ }
+ else
+ {
+ v = new ::IceProxy::RecordVideo::Recorder;
+ v->_copyFrom(proxy);
+ }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::Recorder::_iceI_begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_RecordVideo_Recorder_recordVideo_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_Recorder_recordVideo_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_RecordVideo_Recorder_recordVideo_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_rtsp);
+ ostr->write(iceP_ms);
+ result->endWriteParams();
+ result->invoke(iceC_RecordVideo_Recorder_recordVideo_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::std::string
+IceProxy::RecordVideo::Recorder::end_recordVideo(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_RecordVideo_Recorder_recordVideo_name);
+ ::std::string ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::RecordVideo::Recorder::_newInstance() const
+{
+ return new Recorder;
+}
+
+const ::std::string&
+IceProxy::RecordVideo::Recorder::ice_staticId()
+{
+ return ::RecordVideo::Recorder::ice_staticId();
+}
+::IceProxy::Ice::Object* ::IceProxy::RecordVideo::upCast(::IceProxy::RecordVideo::ImageGrabber* p) { return p; }
+
+void
+::IceProxy::RecordVideo::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::ImageGrabber>& v)
+{
+ ::Ice::ObjectPrx proxy;
+ istr->read(proxy);
+ if(!proxy)
+ {
+ v = 0;
+ }
+ else
+ {
+ v = new ::IceProxy::RecordVideo::ImageGrabber;
+ v->_copyFrom(proxy);
+ }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::ImageGrabber::_iceI_begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_RecordVideo_ImageGrabber_grabImage_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_ImageGrabber_grabImage_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_RecordVideo_ImageGrabber_grabImage_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_index);
+ ostr->write(iceP_time);
+ result->endWriteParams();
+ result->invoke(iceC_RecordVideo_ImageGrabber_grabImage_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::RecordVideo::ByteSequence
+IceProxy::RecordVideo::ImageGrabber::end_grabImage(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_RecordVideo_ImageGrabber_grabImage_name);
+ ::RecordVideo::ByteSequence ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::ImageGrabber::_iceI_begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_RecordVideo_ImageGrabber_grabImageUrl_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_ImageGrabber_grabImageUrl_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_RecordVideo_ImageGrabber_grabImageUrl_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_index);
+ ostr->write(iceP_time);
+ result->endWriteParams();
+ result->invoke(iceC_RecordVideo_ImageGrabber_grabImageUrl_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::std::string
+IceProxy::RecordVideo::ImageGrabber::end_grabImageUrl(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_RecordVideo_ImageGrabber_grabImageUrl_name);
+ ::std::string ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::RecordVideo::ImageGrabber::_newInstance() const
+{
+ return new ImageGrabber;
+}
+
+const ::std::string&
+IceProxy::RecordVideo::ImageGrabber::ice_staticId()
+{
+ return ::RecordVideo::ImageGrabber::ice_staticId();
+}
+::IceProxy::Ice::Object* ::IceProxy::RecordVideo::upCast(::IceProxy::RecordVideo::LoopRecorder* p) { return p; }
+
+void
+::IceProxy::RecordVideo::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::LoopRecorder>& v)
+{
+ ::Ice::ObjectPrx proxy;
+ istr->read(proxy);
+ if(!proxy)
+ {
+ v = 0;
+ }
+ else
+ {
+ v = new ::IceProxy::RecordVideo::LoopRecorder;
+ v->_copyFrom(proxy);
+ }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::LoopRecorder::_iceI_begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_RecordVideo_LoopRecorder_addCamera_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_LoopRecorder_addCamera_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_RecordVideo_LoopRecorder_addCamera_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_index);
+ ostr->write(iceP_rtsp);
+ result->endWriteParams();
+ result->invoke(iceC_RecordVideo_LoopRecorder_addCamera_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::std::string
+IceProxy::RecordVideo::LoopRecorder::end_addCamera(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_RecordVideo_LoopRecorder_addCamera_name);
+ ::std::string ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::LoopRecorder::_iceI_begin_removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_LoopRecorder_removeCamera_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_RecordVideo_LoopRecorder_removeCamera_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_index);
+ result->endWriteParams();
+ result->invoke(iceC_RecordVideo_LoopRecorder_removeCamera_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+void
+IceProxy::RecordVideo::LoopRecorder::end_removeCamera(const ::Ice::AsyncResultPtr& result)
+{
+ _end(result, iceC_RecordVideo_LoopRecorder_removeCamera_name);
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::LoopRecorder::_iceI_begin_clearCamera(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_LoopRecorder_clearCamera_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_RecordVideo_LoopRecorder_clearCamera_name, ::Ice::Normal, context);
+ result->writeEmptyParams();
+ result->invoke(iceC_RecordVideo_LoopRecorder_clearCamera_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+void
+IceProxy::RecordVideo::LoopRecorder::end_clearCamera(const ::Ice::AsyncResultPtr& result)
+{
+ _end(result, iceC_RecordVideo_LoopRecorder_clearCamera_name);
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::LoopRecorder::_iceI_begin_feedDog(const ::std::string& iceP_index, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_LoopRecorder_feedDog_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_RecordVideo_LoopRecorder_feedDog_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_index);
+ result->endWriteParams();
+ result->invoke(iceC_RecordVideo_LoopRecorder_feedDog_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+void
+IceProxy::RecordVideo::LoopRecorder::end_feedDog(const ::Ice::AsyncResultPtr& result)
+{
+ _end(result, iceC_RecordVideo_LoopRecorder_feedDog_name);
+}
+
+::IceProxy::Ice::Object*
+IceProxy::RecordVideo::LoopRecorder::_newInstance() const
+{
+ return new LoopRecorder;
+}
+
+const ::std::string&
+IceProxy::RecordVideo::LoopRecorder::ice_staticId()
+{
+ return ::RecordVideo::LoopRecorder::ice_staticId();
+}
+
+RecordVideo::Recorder::~Recorder()
+{
+}
+
+::Ice::Object* RecordVideo::upCast(::RecordVideo::Recorder* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_RecordVideo_Recorder_ids[2] =
+{
+ "::Ice::Object",
+ "::RecordVideo::Recorder"
+};
+
+}
+
+bool
+RecordVideo::Recorder::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_RecordVideo_Recorder_ids, iceC_RecordVideo_Recorder_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+RecordVideo::Recorder::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector< ::std::string>(&iceC_RecordVideo_Recorder_ids[0], &iceC_RecordVideo_Recorder_ids[2]);
+}
+
+const ::std::string&
+RecordVideo::Recorder::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::Recorder::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+ static const ::std::string typeId = "::RecordVideo::Recorder";
+ return typeId;
+#else
+ return iceC_RecordVideo_Recorder_ids[1];
+#endif
+}
+
+bool
+RecordVideo::Recorder::_iceD_recordVideo(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::std::string iceP_rtsp;
+ ::Ice::Long iceP_ms;
+ istr->read(iceP_rtsp);
+ istr->read(iceP_ms);
+ inS.endReadParams();
+ ::std::string ret = this->recordVideo(iceP_rtsp, iceP_ms, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+namespace
+{
+const ::std::string iceC_RecordVideo_Recorder_all[] =
+{
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping",
+ "recordVideo"
+};
+
+}
+
+bool
+RecordVideo::Recorder::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_Recorder_all, iceC_RecordVideo_Recorder_all + 5, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_RecordVideo_Recorder_all)
+ {
+ case 0:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 1:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ case 4:
+ {
+ return _iceD_recordVideo(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+RecordVideo::Recorder::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+ ostr->startSlice(ice_staticId(), -1, true);
+ Ice::StreamWriter< ::RecordVideo::Recorder, ::Ice::OutputStream>::write(ostr, *this);
+ ostr->endSlice();
+}
+
+void
+RecordVideo::Recorder::_iceReadImpl(::Ice::InputStream* istr)
+{
+ istr->startSlice();
+ Ice::StreamReader< ::RecordVideo::Recorder, ::Ice::InputStream>::read(istr, *this);
+ istr->endSlice();
+}
+
+void
+RecordVideo::_icePatchObjectPtr(RecorderPtr& handle, const ::Ice::ObjectPtr& v)
+{
+ handle = ::RecordVideo::RecorderPtr::dynamicCast(v);
+ if(v && !handle)
+ {
+ IceInternal::Ex::throwUOE(::RecordVideo::Recorder::ice_staticId(), v);
+ }
+}
+
+RecordVideo::ImageGrabber::~ImageGrabber()
+{
+}
+
+::Ice::Object* RecordVideo::upCast(::RecordVideo::ImageGrabber* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_RecordVideo_ImageGrabber_ids[2] =
+{
+ "::Ice::Object",
+ "::RecordVideo::ImageGrabber"
+};
+
+}
+
+bool
+RecordVideo::ImageGrabber::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_RecordVideo_ImageGrabber_ids, iceC_RecordVideo_ImageGrabber_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+RecordVideo::ImageGrabber::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector< ::std::string>(&iceC_RecordVideo_ImageGrabber_ids[0], &iceC_RecordVideo_ImageGrabber_ids[2]);
+}
+
+const ::std::string&
+RecordVideo::ImageGrabber::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::ImageGrabber::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+ static const ::std::string typeId = "::RecordVideo::ImageGrabber";
+ return typeId;
+#else
+ return iceC_RecordVideo_ImageGrabber_ids[1];
+#endif
+}
+
+bool
+RecordVideo::ImageGrabber::_iceD_grabImage(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::Ice::Int iceP_index;
+ ::std::string iceP_time;
+ istr->read(iceP_index);
+ istr->read(iceP_time);
+ inS.endReadParams();
+ ::RecordVideo::ByteSequence ret = this->grabImage(iceP_index, iceP_time, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+RecordVideo::ImageGrabber::_iceD_grabImageUrl(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::Ice::Int iceP_index;
+ ::std::string iceP_time;
+ istr->read(iceP_index);
+ istr->read(iceP_time);
+ inS.endReadParams();
+ ::std::string ret = this->grabImageUrl(iceP_index, iceP_time, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+namespace
+{
+const ::std::string iceC_RecordVideo_ImageGrabber_all[] =
+{
+ "grabImage",
+ "grabImageUrl",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+
+}
+
+bool
+RecordVideo::ImageGrabber::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_ImageGrabber_all, iceC_RecordVideo_ImageGrabber_all + 6, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_RecordVideo_ImageGrabber_all)
+ {
+ case 0:
+ {
+ return _iceD_grabImage(in, current);
+ }
+ case 1:
+ {
+ return _iceD_grabImageUrl(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+RecordVideo::ImageGrabber::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+ ostr->startSlice(ice_staticId(), -1, true);
+ Ice::StreamWriter< ::RecordVideo::ImageGrabber, ::Ice::OutputStream>::write(ostr, *this);
+ ostr->endSlice();
+}
+
+void
+RecordVideo::ImageGrabber::_iceReadImpl(::Ice::InputStream* istr)
+{
+ istr->startSlice();
+ Ice::StreamReader< ::RecordVideo::ImageGrabber, ::Ice::InputStream>::read(istr, *this);
+ istr->endSlice();
+}
+
+void
+RecordVideo::_icePatchObjectPtr(ImageGrabberPtr& handle, const ::Ice::ObjectPtr& v)
+{
+ handle = ::RecordVideo::ImageGrabberPtr::dynamicCast(v);
+ if(v && !handle)
+ {
+ IceInternal::Ex::throwUOE(::RecordVideo::ImageGrabber::ice_staticId(), v);
+ }
+}
+
+RecordVideo::LoopRecorder::~LoopRecorder()
+{
+}
+
+::Ice::Object* RecordVideo::upCast(::RecordVideo::LoopRecorder* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_RecordVideo_LoopRecorder_ids[2] =
+{
+ "::Ice::Object",
+ "::RecordVideo::LoopRecorder"
+};
+
+}
+
+bool
+RecordVideo::LoopRecorder::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_RecordVideo_LoopRecorder_ids, iceC_RecordVideo_LoopRecorder_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+RecordVideo::LoopRecorder::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector< ::std::string>(&iceC_RecordVideo_LoopRecorder_ids[0], &iceC_RecordVideo_LoopRecorder_ids[2]);
+}
+
+const ::std::string&
+RecordVideo::LoopRecorder::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::LoopRecorder::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+ static const ::std::string typeId = "::RecordVideo::LoopRecorder";
+ return typeId;
+#else
+ return iceC_RecordVideo_LoopRecorder_ids[1];
+#endif
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_addCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::std::string iceP_index;
+ ::std::string iceP_rtsp;
+ istr->read(iceP_index);
+ istr->read(iceP_rtsp);
+ inS.endReadParams();
+ ::std::string ret = this->addCamera(iceP_index, iceP_rtsp, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_removeCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::std::string iceP_index;
+ istr->read(iceP_index);
+ inS.endReadParams();
+ this->removeCamera(iceP_index, current);
+ inS.writeEmptyParams();
+ return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_clearCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ inS.readEmptyParams();
+ this->clearCamera(current);
+ inS.writeEmptyParams();
+ return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_feedDog(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::std::string iceP_index;
+ istr->read(iceP_index);
+ inS.endReadParams();
+ this->feedDog(iceP_index, current);
+ inS.writeEmptyParams();
+ return true;
+}
+
+namespace
+{
+const ::std::string iceC_RecordVideo_LoopRecorder_all[] =
+{
+ "addCamera",
+ "clearCamera",
+ "feedDog",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping",
+ "removeCamera"
+};
+
+}
+
+bool
+RecordVideo::LoopRecorder::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_LoopRecorder_all, iceC_RecordVideo_LoopRecorder_all + 8, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_RecordVideo_LoopRecorder_all)
+ {
+ case 0:
+ {
+ return _iceD_addCamera(in, current);
+ }
+ case 1:
+ {
+ return _iceD_clearCamera(in, current);
+ }
+ case 2:
+ {
+ return _iceD_feedDog(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 6:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ case 7:
+ {
+ return _iceD_removeCamera(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+RecordVideo::LoopRecorder::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+ ostr->startSlice(ice_staticId(), -1, true);
+ Ice::StreamWriter< ::RecordVideo::LoopRecorder, ::Ice::OutputStream>::write(ostr, *this);
+ ostr->endSlice();
+}
+
+void
+RecordVideo::LoopRecorder::_iceReadImpl(::Ice::InputStream* istr)
+{
+ istr->startSlice();
+ Ice::StreamReader< ::RecordVideo::LoopRecorder, ::Ice::InputStream>::read(istr, *this);
+ istr->endSlice();
+}
+
+void
+RecordVideo::_icePatchObjectPtr(LoopRecorderPtr& handle, const ::Ice::ObjectPtr& v)
+{
+ handle = ::RecordVideo::LoopRecorderPtr::dynamicCast(v);
+ if(v && !handle)
+ {
+ IceInternal::Ex::throwUOE(::RecordVideo::LoopRecorder::ice_staticId(), v);
+ }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.h b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.h
new file mode 100644
index 0000000..b6c1647
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.h
@@ -0,0 +1,1571 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `RecordVideo.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __RecordVideo_h__
+#define __RecordVideo_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace RecordVideo
+{
+
+class Recorder;
+class RecorderPrx;
+class ImageGrabber;
+class ImageGrabberPrx;
+class LoopRecorder;
+class LoopRecorderPrx;
+
+}
+
+namespace RecordVideo
+{
+
+using ByteSequence = ::std::vector<::Ice::Byte>;
+
+}
+
+namespace RecordVideo
+{
+
+class Recorder : public virtual ::Ice::Object
+{
+public:
+
+ using ProxyType = RecorderPrx;
+
+ virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+ virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+ virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::std::string recordVideo(::std::string, long long int, const ::Ice::Current&) = 0;
+ bool _iceD_recordVideo(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+class ImageGrabber : public virtual ::Ice::Object
+{
+public:
+
+ using ProxyType = ImageGrabberPrx;
+
+ virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+ virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+ virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::RecordVideo::ByteSequence grabImage(int, ::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_grabImage(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::std::string grabImageUrl(int, ::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_grabImageUrl(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+class LoopRecorder : public virtual ::Ice::Object
+{
+public:
+
+ using ProxyType = LoopRecorderPrx;
+
+ virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+ virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+ virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::std::string addCamera(::std::string, ::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_addCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual void removeCamera(::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_removeCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual void clearCamera(const ::Ice::Current&) = 0;
+ bool _iceD_clearCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual void feedDog(::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_feedDog(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace RecordVideo
+{
+
+class RecorderPrx : public virtual ::Ice::Proxy<RecorderPrx, ::Ice::ObjectPrx>
+{
+public:
+
+ ::std::string recordVideo(const ::std::string& iceP_rtsp, long long int iceP_ms, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::std::string>(true, this, &RecordVideo::RecorderPrx::_iceI_recordVideo, iceP_rtsp, iceP_ms, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto recordVideoAsync(const ::std::string& iceP_rtsp, long long int iceP_ms, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::std::string>>().get_future())
+ {
+ return _makePromiseOutgoing<::std::string, P>(false, this, &RecordVideo::RecorderPrx::_iceI_recordVideo, iceP_rtsp, iceP_ms, context);
+ }
+
+ ::std::function<void()>
+ recordVideoAsync(const ::std::string& iceP_rtsp, long long int iceP_ms,
+ ::std::function<void(::std::string)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::std::string>(response, ex, sent, this, &RecordVideo::RecorderPrx::_iceI_recordVideo, iceP_rtsp, iceP_ms, context);
+ }
+
+ void _iceI_recordVideo(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>&, const ::std::string&, long long int, const ::Ice::Context&);
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ RecorderPrx() = default;
+ friend ::std::shared_ptr<RecorderPrx> IceInternal::createProxy<RecorderPrx>();
+
+ virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+class ImageGrabberPrx : public virtual ::Ice::Proxy<ImageGrabberPrx, ::Ice::ObjectPrx>
+{
+public:
+
+ ::RecordVideo::ByteSequence grabImage(int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::RecordVideo::ByteSequence>(true, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImage, iceP_index, iceP_time, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto grabImageAsync(int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::RecordVideo::ByteSequence>>().get_future())
+ {
+ return _makePromiseOutgoing<::RecordVideo::ByteSequence, P>(false, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImage, iceP_index, iceP_time, context);
+ }
+
+ ::std::function<void()>
+ grabImageAsync(int iceP_index, const ::std::string& iceP_time,
+ ::std::function<void(::RecordVideo::ByteSequence)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::RecordVideo::ByteSequence>(response, ex, sent, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImage, iceP_index, iceP_time, context);
+ }
+
+ void _iceI_grabImage(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::RecordVideo::ByteSequence>>&, int, const ::std::string&, const ::Ice::Context&);
+
+ ::std::string grabImageUrl(int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::std::string>(true, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImageUrl, iceP_index, iceP_time, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto grabImageUrlAsync(int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::std::string>>().get_future())
+ {
+ return _makePromiseOutgoing<::std::string, P>(false, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImageUrl, iceP_index, iceP_time, context);
+ }
+
+ ::std::function<void()>
+ grabImageUrlAsync(int iceP_index, const ::std::string& iceP_time,
+ ::std::function<void(::std::string)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::std::string>(response, ex, sent, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImageUrl, iceP_index, iceP_time, context);
+ }
+
+ void _iceI_grabImageUrl(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>&, int, const ::std::string&, const ::Ice::Context&);
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ ImageGrabberPrx() = default;
+ friend ::std::shared_ptr<ImageGrabberPrx> IceInternal::createProxy<ImageGrabberPrx>();
+
+ virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+class LoopRecorderPrx : public virtual ::Ice::Proxy<LoopRecorderPrx, ::Ice::ObjectPrx>
+{
+public:
+
+ ::std::string addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::std::string>(true, this, &RecordVideo::LoopRecorderPrx::_iceI_addCamera, iceP_index, iceP_rtsp, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto addCameraAsync(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::std::string>>().get_future())
+ {
+ return _makePromiseOutgoing<::std::string, P>(false, this, &RecordVideo::LoopRecorderPrx::_iceI_addCamera, iceP_index, iceP_rtsp, context);
+ }
+
+ ::std::function<void()>
+ addCameraAsync(const ::std::string& iceP_index, const ::std::string& iceP_rtsp,
+ ::std::function<void(::std::string)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::std::string>(response, ex, sent, this, &RecordVideo::LoopRecorderPrx::_iceI_addCamera, iceP_index, iceP_rtsp, context);
+ }
+
+ void _iceI_addCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>&, const ::std::string&, const ::std::string&, const ::Ice::Context&);
+
+ void removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ _makePromiseOutgoing<void>(true, this, &RecordVideo::LoopRecorderPrx::_iceI_removeCamera, iceP_index, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto removeCameraAsync(const ::std::string& iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<void>>().get_future())
+ {
+ return _makePromiseOutgoing<void, P>(false, this, &RecordVideo::LoopRecorderPrx::_iceI_removeCamera, iceP_index, context);
+ }
+
+ ::std::function<void()>
+ removeCameraAsync(const ::std::string& iceP_index,
+ ::std::function<void()> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<void>(response, ex, sent, this, &RecordVideo::LoopRecorderPrx::_iceI_removeCamera, iceP_index, context);
+ }
+
+ void _iceI_removeCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>&, const ::std::string&, const ::Ice::Context&);
+
+ void clearCamera(const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ _makePromiseOutgoing<void>(true, this, &RecordVideo::LoopRecorderPrx::_iceI_clearCamera, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto clearCameraAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<void>>().get_future())
+ {
+ return _makePromiseOutgoing<void, P>(false, this, &RecordVideo::LoopRecorderPrx::_iceI_clearCamera, context);
+ }
+
+ ::std::function<void()>
+ clearCameraAsync(::std::function<void()> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<void>(response, ex, sent, this, &RecordVideo::LoopRecorderPrx::_iceI_clearCamera, context);
+ }
+
+ void _iceI_clearCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>&, const ::Ice::Context&);
+
+ void feedDog(const ::std::string& iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ _makePromiseOutgoing<void>(true, this, &RecordVideo::LoopRecorderPrx::_iceI_feedDog, iceP_index, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto feedDogAsync(const ::std::string& iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<void>>().get_future())
+ {
+ return _makePromiseOutgoing<void, P>(false, this, &RecordVideo::LoopRecorderPrx::_iceI_feedDog, iceP_index, context);
+ }
+
+ ::std::function<void()>
+ feedDogAsync(const ::std::string& iceP_index,
+ ::std::function<void()> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<void>(response, ex, sent, this, &RecordVideo::LoopRecorderPrx::_iceI_feedDog, iceP_index, context);
+ }
+
+ void _iceI_feedDog(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>&, const ::std::string&, const ::Ice::Context&);
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ LoopRecorderPrx() = default;
+ friend ::std::shared_ptr<LoopRecorderPrx> IceInternal::createProxy<LoopRecorderPrx>();
+
+ virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+}
+
+namespace RecordVideo
+{
+
+using RecorderPtr = ::std::shared_ptr<Recorder>;
+using RecorderPrxPtr = ::std::shared_ptr<RecorderPrx>;
+
+using ImageGrabberPtr = ::std::shared_ptr<ImageGrabber>;
+using ImageGrabberPrxPtr = ::std::shared_ptr<ImageGrabberPrx>;
+
+using LoopRecorderPtr = ::std::shared_ptr<LoopRecorder>;
+using LoopRecorderPrxPtr = ::std::shared_ptr<LoopRecorderPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace RecordVideo
+{
+
+class Recorder;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::Recorder>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::RecordVideo::Recorder*);
+
+class ImageGrabber;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::ImageGrabber>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::RecordVideo::ImageGrabber*);
+
+class LoopRecorder;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::LoopRecorder>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::RecordVideo::LoopRecorder*);
+
+}
+
+}
+
+namespace RecordVideo
+{
+
+class Recorder;
+::Ice::Object* upCast(::RecordVideo::Recorder*);
+typedef ::IceInternal::Handle< ::RecordVideo::Recorder> RecorderPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::Recorder> RecorderPrx;
+typedef RecorderPrx RecorderPrxPtr;
+void _icePatchObjectPtr(RecorderPtr&, const ::Ice::ObjectPtr&);
+
+class ImageGrabber;
+::Ice::Object* upCast(::RecordVideo::ImageGrabber*);
+typedef ::IceInternal::Handle< ::RecordVideo::ImageGrabber> ImageGrabberPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::ImageGrabber> ImageGrabberPrx;
+typedef ImageGrabberPrx ImageGrabberPrxPtr;
+void _icePatchObjectPtr(ImageGrabberPtr&, const ::Ice::ObjectPtr&);
+
+class LoopRecorder;
+::Ice::Object* upCast(::RecordVideo::LoopRecorder*);
+typedef ::IceInternal::Handle< ::RecordVideo::LoopRecorder> LoopRecorderPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::LoopRecorder> LoopRecorderPrx;
+typedef LoopRecorderPrx LoopRecorderPrxPtr;
+void _icePatchObjectPtr(LoopRecorderPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace RecordVideo
+{
+
+typedef ::std::vector< ::Ice::Byte> ByteSequence;
+
+}
+
+namespace RecordVideo
+{
+
+class Callback_Recorder_recordVideo_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_Recorder_recordVideo_Base> Callback_Recorder_recordVideoPtr;
+
+class Callback_ImageGrabber_grabImage_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_ImageGrabber_grabImage_Base> Callback_ImageGrabber_grabImagePtr;
+
+class Callback_ImageGrabber_grabImageUrl_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_ImageGrabber_grabImageUrl_Base> Callback_ImageGrabber_grabImageUrlPtr;
+
+class Callback_LoopRecorder_addCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_LoopRecorder_addCamera_Base> Callback_LoopRecorder_addCameraPtr;
+
+class Callback_LoopRecorder_removeCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_LoopRecorder_removeCamera_Base> Callback_LoopRecorder_removeCameraPtr;
+
+class Callback_LoopRecorder_clearCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_LoopRecorder_clearCamera_Base> Callback_LoopRecorder_clearCameraPtr;
+
+class Callback_LoopRecorder_feedDog_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_LoopRecorder_feedDog_Base> Callback_LoopRecorder_feedDogPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace RecordVideo
+{
+
+class Recorder : public virtual ::Ice::Proxy<Recorder, ::IceProxy::Ice::Object>
+{
+public:
+
+ ::std::string recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_recordVideo(_iceI_begin_recordVideo(iceP_rtsp, iceP_ms, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::RecordVideo::Callback_Recorder_recordVideoPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context, const ::RecordVideo::Callback_Recorder_recordVideoPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, context, del, cookie);
+ }
+
+ ::std::string end_recordVideo(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_recordVideo(const ::std::string&, ::Ice::Long, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+class ImageGrabber : public virtual ::Ice::Proxy<ImageGrabber, ::IceProxy::Ice::Object>
+{
+public:
+
+ ::RecordVideo::ByteSequence grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_grabImage(_iceI_begin_grabImage(iceP_index, iceP_time, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_grabImage(iceP_index, iceP_time, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_grabImage(iceP_index, iceP_time, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_grabImage(iceP_index, iceP_time, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::RecordVideo::Callback_ImageGrabber_grabImagePtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_grabImage(iceP_index, iceP_time, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::RecordVideo::Callback_ImageGrabber_grabImagePtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_grabImage(iceP_index, iceP_time, context, del, cookie);
+ }
+
+ ::RecordVideo::ByteSequence end_grabImage(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_grabImage(::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ ::std::string grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_grabImageUrl(_iceI_begin_grabImageUrl(iceP_index, iceP_time, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_grabImageUrl(iceP_index, iceP_time, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_grabImageUrl(iceP_index, iceP_time, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_grabImageUrl(iceP_index, iceP_time, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::RecordVideo::Callback_ImageGrabber_grabImageUrlPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_grabImageUrl(iceP_index, iceP_time, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::RecordVideo::Callback_ImageGrabber_grabImageUrlPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_grabImageUrl(iceP_index, iceP_time, context, del, cookie);
+ }
+
+ ::std::string end_grabImageUrl(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_grabImageUrl(::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+class LoopRecorder : public virtual ::Ice::Proxy<LoopRecorder, ::IceProxy::Ice::Object>
+{
+public:
+
+ ::std::string addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_addCamera(_iceI_begin_addCamera(iceP_index, iceP_rtsp, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_rtsp, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_rtsp, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_rtsp, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::RecordVideo::Callback_LoopRecorder_addCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_rtsp, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context, const ::RecordVideo::Callback_LoopRecorder_addCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_rtsp, context, del, cookie);
+ }
+
+ ::std::string end_addCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_addCamera(const ::std::string&, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ void removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ end_removeCamera(_iceI_begin_removeCamera(iceP_index, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_removeCamera(iceP_index, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeCamera(iceP_index, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeCamera(iceP_index, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::RecordVideo::Callback_LoopRecorder_removeCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeCamera(iceP_index, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context, const ::RecordVideo::Callback_LoopRecorder_removeCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeCamera(iceP_index, context, del, cookie);
+ }
+
+ void end_removeCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_removeCamera(const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ void clearCamera(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ end_clearCamera(_iceI_begin_clearCamera(context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_clearCamera(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_clearCamera(context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_clearCamera(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_clearCamera(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_clearCamera(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_clearCamera(context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_clearCamera(const ::RecordVideo::Callback_LoopRecorder_clearCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_clearCamera(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_clearCamera(const ::Ice::Context& context, const ::RecordVideo::Callback_LoopRecorder_clearCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_clearCamera(context, del, cookie);
+ }
+
+ void end_clearCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_clearCamera(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ void feedDog(const ::std::string& iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ end_feedDog(_iceI_begin_feedDog(iceP_index, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_feedDog(iceP_index, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_feedDog(iceP_index, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_feedDog(iceP_index, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::RecordVideo::Callback_LoopRecorder_feedDogPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_feedDog(iceP_index, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::Ice::Context& context, const ::RecordVideo::Callback_LoopRecorder_feedDogPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_feedDog(iceP_index, context, del, cookie);
+ }
+
+ void end_feedDog(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_feedDog(const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace RecordVideo
+{
+
+class Recorder : public virtual ::Ice::Object
+{
+public:
+
+ typedef RecorderPrx ProxyType;
+ typedef RecorderPtr PointerType;
+
+ virtual ~Recorder();
+
+ virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::std::string recordVideo(const ::std::string&, ::Ice::Long, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_recordVideo(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+ virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+ virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const Recorder& lhs, const Recorder& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const Recorder& lhs, const Recorder& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+class ImageGrabber : public virtual ::Ice::Object
+{
+public:
+
+ typedef ImageGrabberPrx ProxyType;
+ typedef ImageGrabberPtr PointerType;
+
+ virtual ~ImageGrabber();
+
+ virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::RecordVideo::ByteSequence grabImage(::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_grabImage(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::std::string grabImageUrl(::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_grabImageUrl(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+ virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+ virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const ImageGrabber& lhs, const ImageGrabber& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const ImageGrabber& lhs, const ImageGrabber& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+class LoopRecorder : public virtual ::Ice::Object
+{
+public:
+
+ typedef LoopRecorderPrx ProxyType;
+ typedef LoopRecorderPtr PointerType;
+
+ virtual ~LoopRecorder();
+
+ virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::std::string addCamera(const ::std::string&, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_addCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual void removeCamera(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_removeCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual void clearCamera(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_clearCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual void feedDog(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_feedDog(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+ virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+ virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const LoopRecorder& lhs, const LoopRecorder& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const LoopRecorder& lhs, const LoopRecorder& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+}
+
+namespace RecordVideo
+{
+
+template<class T>
+class CallbackNC_Recorder_recordVideo : public Callback_Recorder_recordVideo_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::std::string&);
+
+ CallbackNC_Recorder_recordVideo(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::RecordVideo::RecorderPrx proxy = ::RecordVideo::RecorderPrx::uncheckedCast(result->getProxy());
+ ::std::string ret;
+ try
+ {
+ ret = proxy->end_recordVideo(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_Recorder_recordVideoPtr
+newCallback_Recorder_recordVideo(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_Recorder_recordVideo<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_Recorder_recordVideoPtr
+newCallback_Recorder_recordVideo(T* instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_Recorder_recordVideo<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_Recorder_recordVideo : public Callback_Recorder_recordVideo_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::std::string&, const CT&);
+
+ Callback_Recorder_recordVideo(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::RecordVideo::RecorderPrx proxy = ::RecordVideo::RecorderPrx::uncheckedCast(result->getProxy());
+ ::std::string ret;
+ try
+ {
+ ret = proxy->end_recordVideo(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_Recorder_recordVideoPtr
+newCallback_Recorder_recordVideo(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_Recorder_recordVideo<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_Recorder_recordVideoPtr
+newCallback_Recorder_recordVideo(T* instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_Recorder_recordVideo<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_ImageGrabber_grabImage : public Callback_ImageGrabber_grabImage_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::RecordVideo::ByteSequence&);
+
+ CallbackNC_ImageGrabber_grabImage(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::RecordVideo::ImageGrabberPrx proxy = ::RecordVideo::ImageGrabberPrx::uncheckedCast(result->getProxy());
+ ::RecordVideo::ByteSequence ret;
+ try
+ {
+ ret = proxy->end_grabImage(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_ImageGrabber_grabImagePtr
+newCallback_ImageGrabber_grabImage(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::RecordVideo::ByteSequence&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_ImageGrabber_grabImage<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_ImageGrabber_grabImagePtr
+newCallback_ImageGrabber_grabImage(T* instance, void (T::*cb)(const ::RecordVideo::ByteSequence&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_ImageGrabber_grabImage<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_ImageGrabber_grabImage : public Callback_ImageGrabber_grabImage_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::RecordVideo::ByteSequence&, const CT&);
+
+ Callback_ImageGrabber_grabImage(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::RecordVideo::ImageGrabberPrx proxy = ::RecordVideo::ImageGrabberPrx::uncheckedCast(result->getProxy());
+ ::RecordVideo::ByteSequence ret;
+ try
+ {
+ ret = proxy->end_grabImage(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_ImageGrabber_grabImagePtr
+newCallback_ImageGrabber_grabImage(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::RecordVideo::ByteSequence&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_ImageGrabber_grabImage<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_ImageGrabber_grabImagePtr
+newCallback_ImageGrabber_grabImage(T* instance, void (T::*cb)(const ::RecordVideo::ByteSequence&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_ImageGrabber_grabImage<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_ImageGrabber_grabImageUrl : public Callback_ImageGrabber_grabImageUrl_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::std::string&);
+
+ CallbackNC_ImageGrabber_grabImageUrl(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::RecordVideo::ImageGrabberPrx proxy = ::RecordVideo::ImageGrabberPrx::uncheckedCast(result->getProxy());
+ ::std::string ret;
+ try
+ {
+ ret = proxy->end_grabImageUrl(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_ImageGrabber_grabImageUrlPtr
+newCallback_ImageGrabber_grabImageUrl(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_ImageGrabber_grabImageUrl<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_ImageGrabber_grabImageUrlPtr
+newCallback_ImageGrabber_grabImageUrl(T* instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_ImageGrabber_grabImageUrl<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_ImageGrabber_grabImageUrl : public Callback_ImageGrabber_grabImageUrl_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::std::string&, const CT&);
+
+ Callback_ImageGrabber_grabImageUrl(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::RecordVideo::ImageGrabberPrx proxy = ::RecordVideo::ImageGrabberPrx::uncheckedCast(result->getProxy());
+ ::std::string ret;
+ try
+ {
+ ret = proxy->end_grabImageUrl(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_ImageGrabber_grabImageUrlPtr
+newCallback_ImageGrabber_grabImageUrl(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_ImageGrabber_grabImageUrl<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_ImageGrabber_grabImageUrlPtr
+newCallback_ImageGrabber_grabImageUrl(T* instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_ImageGrabber_grabImageUrl<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_LoopRecorder_addCamera : public Callback_LoopRecorder_addCamera_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::std::string&);
+
+ CallbackNC_LoopRecorder_addCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::RecordVideo::LoopRecorderPrx proxy = ::RecordVideo::LoopRecorderPrx::uncheckedCast(result->getProxy());
+ ::std::string ret;
+ try
+ {
+ ret = proxy->end_addCamera(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_LoopRecorder_addCameraPtr
+newCallback_LoopRecorder_addCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_addCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_addCameraPtr
+newCallback_LoopRecorder_addCamera(T* instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_addCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_LoopRecorder_addCamera : public Callback_LoopRecorder_addCamera_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::std::string&, const CT&);
+
+ Callback_LoopRecorder_addCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::RecordVideo::LoopRecorderPrx proxy = ::RecordVideo::LoopRecorderPrx::uncheckedCast(result->getProxy());
+ ::std::string ret;
+ try
+ {
+ ret = proxy->end_addCamera(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_LoopRecorder_addCameraPtr
+newCallback_LoopRecorder_addCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_addCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_addCameraPtr
+newCallback_LoopRecorder_addCamera(T* instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_addCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_LoopRecorder_removeCamera : public Callback_LoopRecorder_removeCamera_Base, public ::IceInternal::OnewayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)();
+
+ CallbackNC_LoopRecorder_removeCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::OnewayCallbackNC<T>(obj, cb, excb, sentcb)
+ {
+ }
+};
+
+template<class T> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_removeCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_removeCamera<T>(instance, 0, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(T* instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_removeCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(T* instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_removeCamera<T>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_LoopRecorder_removeCamera : public Callback_LoopRecorder_removeCamera_Base, public ::IceInternal::OnewayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const CT&);
+
+ Callback_LoopRecorder_removeCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::OnewayCallback<T, CT>(obj, cb, excb, sentcb)
+ {
+ }
+};
+
+template<class T, typename CT> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_removeCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_removeCamera<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(T* instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_removeCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(T* instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_removeCamera<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_LoopRecorder_clearCamera : public Callback_LoopRecorder_clearCamera_Base, public ::IceInternal::OnewayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)();
+
+ CallbackNC_LoopRecorder_clearCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::OnewayCallbackNC<T>(obj, cb, excb, sentcb)
+ {
+ }
+};
+
+template<class T> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_clearCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_clearCamera<T>(instance, 0, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(T* instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_clearCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(T* instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_clearCamera<T>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_LoopRecorder_clearCamera : public Callback_LoopRecorder_clearCamera_Base, public ::IceInternal::OnewayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const CT&);
+
+ Callback_LoopRecorder_clearCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::OnewayCallback<T, CT>(obj, cb, excb, sentcb)
+ {
+ }
+};
+
+template<class T, typename CT> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_clearCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_clearCamera<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(T* instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_clearCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(T* instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_clearCamera<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_LoopRecorder_feedDog : public Callback_LoopRecorder_feedDog_Base, public ::IceInternal::OnewayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)();
+
+ CallbackNC_LoopRecorder_feedDog(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::OnewayCallbackNC<T>(obj, cb, excb, sentcb)
+ {
+ }
+};
+
+template<class T> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(const IceUtil::Handle<T>& instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_feedDog<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_feedDog<T>(instance, 0, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(T* instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_feedDog<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(T* instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_LoopRecorder_feedDog<T>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_LoopRecorder_feedDog : public Callback_LoopRecorder_feedDog_Base, public ::IceInternal::OnewayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const CT&);
+
+ Callback_LoopRecorder_feedDog(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::OnewayCallback<T, CT>(obj, cb, excb, sentcb)
+ {
+ }
+};
+
+template<class T, typename CT> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(const IceUtil::Handle<T>& instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_feedDog<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_feedDog<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(T* instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_feedDog<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(T* instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_LoopRecorder_feedDog<T, CT>(instance, 0, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.ice b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.ice
new file mode 100644
index 0000000..5ed64ab
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.ice
@@ -0,0 +1,24 @@
+module RecordVideo
+{
+ sequence<byte> ByteSequence;
+
+ interface Recorder
+ {
+ string recordVideo(string rtsp,long ms);
+ }
+
+ interface ImageGrabber
+ {
+ ByteSequence grabImage(int index,string time);
+ string grabImageUrl(int index,string time);
+ }
+
+ interface LoopRecorder
+ {
+ string addCamera(string index,string rtsp);
+ void removeCamera(string index);
+ void clearCamera();
+ void feedDog(string index);
+ }
+
+}
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo/__init__.py b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo/__init__.py
new file mode 100644
index 0000000..b937f10
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo/__init__.py
@@ -0,0 +1,10 @@
+# Generated by slice2py - DO NOT EDIT!
+#
+
+import Ice
+Ice.updateModule("RecordVideo")
+
+# Modules:
+import RecordVideo_ice
+
+# Submodules:
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo_ice.py b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo_ice.py
new file mode 100644
index 0000000..ba8a7ab
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo_ice.py
@@ -0,0 +1,285 @@
+# -*- coding: utf-8 -*-
+# **********************************************************************
+#
+# Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+#
+# Ice version 3.7.0
+#
+# <auto-generated>
+#
+# Generated from file `RecordVideo.ice'
+#
+# Warning: do not edit this file.
+#
+# </auto-generated>
+#
+
+from sys import version_info as _version_info_
+import Ice, IcePy
+
+# Start of module RecordVideo
+_M_RecordVideo = Ice.openModule('RecordVideo')
+__name__ = 'RecordVideo'
+
+if '_t_ByteSequence' not in _M_RecordVideo.__dict__:
+ _M_RecordVideo._t_ByteSequence = IcePy.defineSequence('::RecordVideo::ByteSequence', (), IcePy._t_byte)
+
+_M_RecordVideo._t_Recorder = IcePy.defineValue('::RecordVideo::Recorder', Ice.Value, -1, (), False, True, None, ())
+
+if 'RecorderPrx' not in _M_RecordVideo.__dict__:
+ _M_RecordVideo.RecorderPrx = Ice.createTempClass()
+ class RecorderPrx(Ice.ObjectPrx):
+
+ def recordVideo(self, rtsp, ms, context=None):
+ return _M_RecordVideo.Recorder._op_recordVideo.invoke(self, ((rtsp, ms), context))
+
+ def recordVideoAsync(self, rtsp, ms, context=None):
+ return _M_RecordVideo.Recorder._op_recordVideo.invokeAsync(self, ((rtsp, ms), context))
+
+ def begin_recordVideo(self, rtsp, ms, _response=None, _ex=None, _sent=None, context=None):
+ return _M_RecordVideo.Recorder._op_recordVideo.begin(self, ((rtsp, ms), _response, _ex, _sent, context))
+
+ def end_recordVideo(self, _r):
+ return _M_RecordVideo.Recorder._op_recordVideo.end(self, _r)
+
+ @staticmethod
+ def checkedCast(proxy, facetOrContext=None, context=None):
+ return _M_RecordVideo.RecorderPrx.ice_checkedCast(proxy, '::RecordVideo::Recorder', facetOrContext, context)
+
+ @staticmethod
+ def uncheckedCast(proxy, facet=None):
+ return _M_RecordVideo.RecorderPrx.ice_uncheckedCast(proxy, facet)
+
+ @staticmethod
+ def ice_staticId():
+ return '::RecordVideo::Recorder'
+ _M_RecordVideo._t_RecorderPrx = IcePy.defineProxy('::RecordVideo::Recorder', RecorderPrx)
+
+ _M_RecordVideo.RecorderPrx = RecorderPrx
+ del RecorderPrx
+
+ _M_RecordVideo.Recorder = Ice.createTempClass()
+ class Recorder(Ice.Object):
+
+ def ice_ids(self, current=None):
+ return ('::Ice::Object', '::RecordVideo::Recorder')
+
+ def ice_id(self, current=None):
+ return '::RecordVideo::Recorder'
+
+ @staticmethod
+ def ice_staticId():
+ return '::RecordVideo::Recorder'
+
+ def recordVideo(self, rtsp, ms, current=None):
+ raise NotImplementedError("servant method 'recordVideo' not implemented")
+
+ def __str__(self):
+ return IcePy.stringify(self, _M_RecordVideo._t_RecorderDisp)
+
+ __repr__ = __str__
+
+ _M_RecordVideo._t_RecorderDisp = IcePy.defineClass('::RecordVideo::Recorder', Recorder, (), None, ())
+ Recorder._ice_type = _M_RecordVideo._t_RecorderDisp
+
+ Recorder._op_recordVideo = IcePy.Operation('recordVideo', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_string, False, 0), ((), IcePy._t_long, False, 0)), (), ((), IcePy._t_string, False, 0), ())
+
+ _M_RecordVideo.Recorder = Recorder
+ del Recorder
+
+_M_RecordVideo._t_ImageGrabber = IcePy.defineValue('::RecordVideo::ImageGrabber', Ice.Value, -1, (), False, True, None, ())
+
+if 'ImageGrabberPrx' not in _M_RecordVideo.__dict__:
+ _M_RecordVideo.ImageGrabberPrx = Ice.createTempClass()
+ class ImageGrabberPrx(Ice.ObjectPrx):
+
+ def grabImage(self, index, time, context=None):
+ return _M_RecordVideo.ImageGrabber._op_grabImage.invoke(self, ((index, time), context))
+
+ def grabImageAsync(self, index, time, context=None):
+ return _M_RecordVideo.ImageGrabber._op_grabImage.invokeAsync(self, ((index, time), context))
+
+ def begin_grabImage(self, index, time, _response=None, _ex=None, _sent=None, context=None):
+ return _M_RecordVideo.ImageGrabber._op_grabImage.begin(self, ((index, time), _response, _ex, _sent, context))
+
+ def end_grabImage(self, _r):
+ return _M_RecordVideo.ImageGrabber._op_grabImage.end(self, _r)
+
+ def grabImageUrl(self, index, time, context=None):
+ return _M_RecordVideo.ImageGrabber._op_grabImageUrl.invoke(self, ((index, time), context))
+
+ def grabImageUrlAsync(self, index, time, context=None):
+ return _M_RecordVideo.ImageGrabber._op_grabImageUrl.invokeAsync(self, ((index, time), context))
+
+ def begin_grabImageUrl(self, index, time, _response=None, _ex=None, _sent=None, context=None):
+ return _M_RecordVideo.ImageGrabber._op_grabImageUrl.begin(self, ((index, time), _response, _ex, _sent, context))
+
+ def end_grabImageUrl(self, _r):
+ return _M_RecordVideo.ImageGrabber._op_grabImageUrl.end(self, _r)
+
+ @staticmethod
+ def checkedCast(proxy, facetOrContext=None, context=None):
+ return _M_RecordVideo.ImageGrabberPrx.ice_checkedCast(proxy, '::RecordVideo::ImageGrabber', facetOrContext, context)
+
+ @staticmethod
+ def uncheckedCast(proxy, facet=None):
+ return _M_RecordVideo.ImageGrabberPrx.ice_uncheckedCast(proxy, facet)
+
+ @staticmethod
+ def ice_staticId():
+ return '::RecordVideo::ImageGrabber'
+ _M_RecordVideo._t_ImageGrabberPrx = IcePy.defineProxy('::RecordVideo::ImageGrabber', ImageGrabberPrx)
+
+ _M_RecordVideo.ImageGrabberPrx = ImageGrabberPrx
+ del ImageGrabberPrx
+
+ _M_RecordVideo.ImageGrabber = Ice.createTempClass()
+ class ImageGrabber(Ice.Object):
+
+ def ice_ids(self, current=None):
+ return ('::Ice::Object', '::RecordVideo::ImageGrabber')
+
+ def ice_id(self, current=None):
+ return '::RecordVideo::ImageGrabber'
+
+ @staticmethod
+ def ice_staticId():
+ return '::RecordVideo::ImageGrabber'
+
+ def grabImage(self, index, time, current=None):
+ raise NotImplementedError("servant method 'grabImage' not implemented")
+
+ def grabImageUrl(self, index, time, current=None):
+ raise NotImplementedError("servant method 'grabImageUrl' not implemented")
+
+ def __str__(self):
+ return IcePy.stringify(self, _M_RecordVideo._t_ImageGrabberDisp)
+
+ __repr__ = __str__
+
+ _M_RecordVideo._t_ImageGrabberDisp = IcePy.defineClass('::RecordVideo::ImageGrabber', ImageGrabber, (), None, ())
+ ImageGrabber._ice_type = _M_RecordVideo._t_ImageGrabberDisp
+
+ ImageGrabber._op_grabImage = IcePy.Operation('grabImage', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0), ((), IcePy._t_string, False, 0)), (), ((), _M_RecordVideo._t_ByteSequence, False, 0), ())
+ ImageGrabber._op_grabImageUrl = IcePy.Operation('grabImageUrl', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0), ((), IcePy._t_string, False, 0)), (), ((), IcePy._t_string, False, 0), ())
+
+ _M_RecordVideo.ImageGrabber = ImageGrabber
+ del ImageGrabber
+
+_M_RecordVideo._t_LoopRecorder = IcePy.defineValue('::RecordVideo::LoopRecorder', Ice.Value, -1, (), False, True, None, ())
+
+if 'LoopRecorderPrx' not in _M_RecordVideo.__dict__:
+ _M_RecordVideo.LoopRecorderPrx = Ice.createTempClass()
+ class LoopRecorderPrx(Ice.ObjectPrx):
+
+ def addCamera(self, index, rtsp, context=None):
+ return _M_RecordVideo.LoopRecorder._op_addCamera.invoke(self, ((index, rtsp), context))
+
+ def addCameraAsync(self, index, rtsp, context=None):
+ return _M_RecordVideo.LoopRecorder._op_addCamera.invokeAsync(self, ((index, rtsp), context))
+
+ def begin_addCamera(self, index, rtsp, _response=None, _ex=None, _sent=None, context=None):
+ return _M_RecordVideo.LoopRecorder._op_addCamera.begin(self, ((index, rtsp), _response, _ex, _sent, context))
+
+ def end_addCamera(self, _r):
+ return _M_RecordVideo.LoopRecorder._op_addCamera.end(self, _r)
+
+ def removeCamera(self, index, context=None):
+ return _M_RecordVideo.LoopRecorder._op_removeCamera.invoke(self, ((index, ), context))
+
+ def removeCameraAsync(self, index, context=None):
+ return _M_RecordVideo.LoopRecorder._op_removeCamera.invokeAsync(self, ((index, ), context))
+
+ def begin_removeCamera(self, index, _response=None, _ex=None, _sent=None, context=None):
+ return _M_RecordVideo.LoopRecorder._op_removeCamera.begin(self, ((index, ), _response, _ex, _sent, context))
+
+ def end_removeCamera(self, _r):
+ return _M_RecordVideo.LoopRecorder._op_removeCamera.end(self, _r)
+
+ def clearCamera(self, context=None):
+ return _M_RecordVideo.LoopRecorder._op_clearCamera.invoke(self, ((), context))
+
+ def clearCameraAsync(self, context=None):
+ return _M_RecordVideo.LoopRecorder._op_clearCamera.invokeAsync(self, ((), context))
+
+ def begin_clearCamera(self, _response=None, _ex=None, _sent=None, context=None):
+ return _M_RecordVideo.LoopRecorder._op_clearCamera.begin(self, ((), _response, _ex, _sent, context))
+
+ def end_clearCamera(self, _r):
+ return _M_RecordVideo.LoopRecorder._op_clearCamera.end(self, _r)
+
+ def feedDog(self, index, context=None):
+ return _M_RecordVideo.LoopRecorder._op_feedDog.invoke(self, ((index, ), context))
+
+ def feedDogAsync(self, index, context=None):
+ return _M_RecordVideo.LoopRecorder._op_feedDog.invokeAsync(self, ((index, ), context))
+
+ def begin_feedDog(self, index, _response=None, _ex=None, _sent=None, context=None):
+ return _M_RecordVideo.LoopRecorder._op_feedDog.begin(self, ((index, ), _response, _ex, _sent, context))
+
+ def end_feedDog(self, _r):
+ return _M_RecordVideo.LoopRecorder._op_feedDog.end(self, _r)
+
+ @staticmethod
+ def checkedCast(proxy, facetOrContext=None, context=None):
+ return _M_RecordVideo.LoopRecorderPrx.ice_checkedCast(proxy, '::RecordVideo::LoopRecorder', facetOrContext, context)
+
+ @staticmethod
+ def uncheckedCast(proxy, facet=None):
+ return _M_RecordVideo.LoopRecorderPrx.ice_uncheckedCast(proxy, facet)
+
+ @staticmethod
+ def ice_staticId():
+ return '::RecordVideo::LoopRecorder'
+ _M_RecordVideo._t_LoopRecorderPrx = IcePy.defineProxy('::RecordVideo::LoopRecorder', LoopRecorderPrx)
+
+ _M_RecordVideo.LoopRecorderPrx = LoopRecorderPrx
+ del LoopRecorderPrx
+
+ _M_RecordVideo.LoopRecorder = Ice.createTempClass()
+ class LoopRecorder(Ice.Object):
+
+ def ice_ids(self, current=None):
+ return ('::Ice::Object', '::RecordVideo::LoopRecorder')
+
+ def ice_id(self, current=None):
+ return '::RecordVideo::LoopRecorder'
+
+ @staticmethod
+ def ice_staticId():
+ return '::RecordVideo::LoopRecorder'
+
+ def addCamera(self, index, rtsp, current=None):
+ raise NotImplementedError("servant method 'addCamera' not implemented")
+
+ def removeCamera(self, index, current=None):
+ raise NotImplementedError("servant method 'removeCamera' not implemented")
+
+ def clearCamera(self, current=None):
+ raise NotImplementedError("servant method 'clearCamera' not implemented")
+
+ def feedDog(self, index, current=None):
+ raise NotImplementedError("servant method 'feedDog' not implemented")
+
+ def __str__(self):
+ return IcePy.stringify(self, _M_RecordVideo._t_LoopRecorderDisp)
+
+ __repr__ = __str__
+
+ _M_RecordVideo._t_LoopRecorderDisp = IcePy.defineClass('::RecordVideo::LoopRecorder', LoopRecorder, (), None, ())
+ LoopRecorder._ice_type = _M_RecordVideo._t_LoopRecorderDisp
+
+ LoopRecorder._op_addCamera = IcePy.Operation('addCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_string, False, 0), ((), IcePy._t_string, False, 0)), (), ((), IcePy._t_string, False, 0), ())
+ LoopRecorder._op_removeCamera = IcePy.Operation('removeCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_string, False, 0),), (), None, ())
+ LoopRecorder._op_clearCamera = IcePy.Operation('clearCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (), (), None, ())
+ LoopRecorder._op_feedDog = IcePy.Operation('feedDog', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_string, False, 0),), (), None, ())
+
+ _M_RecordVideo.LoopRecorder = LoopRecorder
+ del LoopRecorder
+
+# End of module RecordVideo
diff --git a/QiaoJiaSystem/RecordVideo/rpc/test2.py b/QiaoJiaSystem/RecordVideo/rpc/test2.py
new file mode 100644
index 0000000..241a545
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/test2.py
@@ -0,0 +1,70 @@
+import time
+
+import Ice
+import sys
+import traceback
+
+import RecordVideo
+
+status = 0
+ic = None
+try:
+
+ # 鍒濆鍖栬繍琛岀幆澧�
+ ic = Ice.initialize(sys.argv)
+
+ # 鑾峰彇杩滅▼printer鏈嶅姟鐨勪唬鐞�
+ base = ic.stringToProxy("LoopRecordVideoServer:default -h 192.168.1.185 -p 11010")
+
+ # 璇锋眰鏈嶅姟绔‘璁わ細鈥濊繖鏄笉鏄� Demo::Printer鐨勪唬鐞嗘帴鍙o紵鈥�
+ printer = RecordVideo.LoopRecorderPrx.checkedCast(base)
+ if not printer:
+ raise RuntimeError("Invalid proxy")
+
+ str_json = "{\"rtsp\":\"rtsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream\"," \
+ "\"path\":\"/home/basic/work/qiaojia/realtime/21/"
+
+ # 杩滅▼璋冪敤锛岀湅璧锋潵鍍忔湰鍦扮殑鏈嶅姟涓�鏍�
+ # ti = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+ # str1 = str_json + ti + ".mp4\"}"
+ # print(str1)
+ # printer.addCamera("2", "test")
+
+ time.sleep(2)
+ ti1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+ str2 = str_json + ti1 + ".mp4\"}"
+ print(str2)
+ printer.addCamera("21", str2)
+
+ # time.sleep(2)
+ # ti1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+ # str2 = str_json + ti1 + ".mp4\"}"
+ # print(str2)
+ # printer.addCamera("2", str2)
+
+ # printer.addCamera("2", "test")
+ # time.sleep(2)
+ # ti3 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+ # str3 = str_json + ti3 + ".mp4\"}"
+ # print(str2)
+ # printer.addCamera("3", str3)
+
+ # printer.removeCamera("2")
+
+ while True:
+ printer.feedDog("21")
+ time.sleep(1)
+
+except:
+ traceback.print_exc()
+ status = 1
+
+if ic:
+ # Clean up
+ try:
+ ic.destroy()
+ except:
+ traceback.print_exc()
+ status = 1
+
+sys.exit(status)
diff --git a/QiaoJiaSystem/RecordVideo/rpc/testClient.py b/QiaoJiaSystem/RecordVideo/rpc/testClient.py
new file mode 100644
index 0000000..16189ce
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/testClient.py
@@ -0,0 +1,74 @@
+import time
+
+import Ice
+import sys
+import traceback
+
+import RecordVideo
+
+status = 0
+ic = None
+try:
+
+ # 鍒濆鍖栬繍琛岀幆澧�
+ ic = Ice.initialize(sys.argv)
+
+ # 鑾峰彇杩滅▼printer鏈嶅姟鐨勪唬鐞�
+ base = ic.stringToProxy("LoopRecordVideoServer:default -p 10010")
+
+ # 璇锋眰鏈嶅姟绔‘璁わ細鈥濊繖鏄笉鏄� Demo::Printer鐨勪唬鐞嗘帴鍙o紵鈥�
+ printer = RecordVideo.LoopRecorderPrx.checkedCast(base)
+ if not printer:
+ raise RuntimeError("Invalid proxy")
+
+ str_json = "{\"rtsp\":\"rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream\"," \
+ "\"path\":\"/home/bsk/test/2/"
+
+ # 杩滅▼璋冪敤锛岀湅璧锋潵鍍忔湰鍦扮殑鏈嶅姟涓�鏍�
+ # ti = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+ # str1 = str_json + ti + ".mp4\"}"
+ # print(str1)
+ # printer.addCamera("2", "test")
+
+ time.sleep(2)
+ ti1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+ str2 = str_json + ti1 + ".mp4\"}"
+ print(str2)
+ str_key = printer.addCamera("2", str2)
+
+ print(str_key)
+
+ # time.sleep(2)
+ # ti1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+ # str2 = str_json + ti1 + ".mp4\"}"
+ # print(str2)
+ # printer.addCamera("2", str2)
+
+ # printer.addCamera("2", "test")
+ # time.sleep(2)
+ # ti3 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+ # str3 = str_json + ti3 + ".mp4\"}"
+ # print(str2)
+ # printer.addCamera("3", str3)
+ #
+ # printer.removeCamera("2")
+ #
+ # printer.removeCamera("2")
+
+ while True:
+ printer.feedDog("2")
+ time.sleep(1)
+
+except:
+ traceback.print_exc()
+ status = 1
+
+if ic:
+ # Clean up
+ try:
+ ic.destroy()
+ except:
+ traceback.print_exc()
+ status = 1
+
+sys.exit(status)
diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
new file mode 100644
index 0000000..2a0062d
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
@@ -0,0 +1,508 @@
+#include "AppPipeController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppUtil.h>
+#include <algorithm>
+#include <basic/util/app/AppConfig.h>
+#include <QtCore/QDateTime>
+#include <QtCore/QtGlobal>
+#include <net_config.h>
+
+AppPipeController::AppPipeController(std::string folderPath, const Json::Value &json) :
+ videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")), m_index(0),
+ m_folderPath(folderPath),
+ m_json(json), fdfsClient(nullptr), yoloRpcElement(folderPath + "yoloRpc"), faceRpcElement(folderPath + "faceRpc"),
+ faceExtractElement(folderPath + "faceExtract"), triggerElement(25, 10),
+ recordVideoElement(-1, json["rtsp"].asString()), bRecordVideoEnable(false) {
+
+ init();
+
+}
+
+AppPipeController::AppPipeController(int index, const Json::Value &json, bool RecordVideoEnable) :
+ videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index"), RecordVideoEnable),
+ m_index(index), fdfsClient(nullptr), yoloRpcElement(to_string(index) + "yoloRpc"),
+ faceRpcElement(to_string(index) + "faceRpc"), m_json(json), faceExtractElement(to_string(index) + "faceExtract"),
+ triggerElement(25, 4), recordVideoElement(index, json["rtsp"].asString()), bRecordVideoEnable(RecordVideoEnable) {
+ init();
+}
+
+
+AppPipeController::AppPipeController(std::string camId, const Json::Value &json, bool RecordVideoEnable) :
+ videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index")),
+ m_index(0),
+ m_camId(camId),
+ fdfsClient(nullptr),
+ yoloRpcElement(camId + "yoloRpc"),
+ faceRpcElement(camId + "faceRpc"),
+ m_json(json),
+ faceExtractElement(camId + "faceExtract"),
+ // peTriggerElement(json["perimeter.tolerance"].asInt(), json["perimeter.delay"].asInt()),
+// leftTriggerElement(json["keepRight.tolerance"].asInt(), json["keepRight.delay"].asInt()),
+// rightTriggerElement(json["keepRight.tolerance"].asInt(), json["keepRight.delay"].asInt()),
+ // crowdTriggerElement(json["crowd.tolerance"].asInt(), json["crowd.delay"].asInt()),
+ triggerElement(25, 4),
+ recordVideoElement(camId, json["rtsp"].asString()),
+ newRecordVideoElement(camId),
+ perimeterElement(1),
+ crowdElement(json["crowd.num"].asInt()),
+ bRecordVideoEnable(RecordVideoEnable)
+{
+ init();
+ initPerimeter();
+ initCrowd();
+ intKeepRight();
+}
+
+AppPipeController::~AppPipeController() {
+ if(recordStatus==RECORD_DOING)
+ {
+ newRecordVideoElement.endRecord();
+ }
+}
+
+//************************************
+// Method: string_replace
+// FullName: string_replace
+// Access: public
+// Returns: void
+// Qualifier: 鎶婂瓧绗︿覆鐨剆trsrc鏇挎崲鎴恠trdst
+// Parameter: std::string & strBig
+// Parameter: const std::string & strsrc
+// Parameter: const std::string & strdst
+//************************************
+static void string_replace(std::string &strBig, const std::string &strsrc, const std::string &strdst) {
+ std::string::size_type pos = 0;
+ std::string::size_type srclen = strsrc.size();
+ std::string::size_type dstlen = strdst.size();
+
+ while ((pos = strBig.find(strsrc, pos)) != std::string::npos) {
+ strBig.replace(pos, srclen, strdst);
+ pos += dstlen;
+ }
+}
+
+bool AppPipeController::resetVideoCapturePath(std::string path) {
+// videoCaptureElement.stop();
+// videoCaptureElement.wait();
+
+ string_replace(path, "//", "/");
+
+ videoCaptureElement.setVideoPath(path);
+ auto dev_pos = path.find("/cut/") + 5;
+ auto ch_pos = path.find("/", dev_pos) + 1;
+ auto str_device_id = path.substr(dev_pos, ch_pos - dev_pos - 1);
+ auto str_ch_id = path.substr(ch_pos, path.find("/", ch_pos) - ch_pos);
+ faceExtractElement.setProperty("dev_id", str_device_id);
+ faceExtractElement.setProperty("ch_id", str_ch_id);
+ faceExtractElement.setProperty("path", path);
+ yoloRpcElement.setProperty("dev_id", str_device_id);
+ yoloRpcElement.setProperty("ch_id", str_ch_id);
+ yoloRpcElement.setProperty("path", path);
+
+ //淇敼鏃堕棿涓哄疄闄呭彂鐢熸椂闂�
+ QString strPath = QString::fromStdString(path);
+ QStringList list = strPath.split("/");
+ QString fileName;
+ QString time;
+ QString strNewTime;
+ if (list.size() != 0) {
+ fileName = list.last();
+ time = fileName.split(".").first();
+ //#todo
+// time = fileName.split("_").first();
+ } else {
+ ERR("list.size() == 0)");
+ }
+
+ if (!time.isEmpty()) {
+ m_dt = QDateTime::fromString(time, "yyyy-MM-dd hh:mm:ss");
+ } else {
+ m_dt = QDateTime::currentDateTime();
+ }
+
+// deciceId
+// chenle
+
+}
+
+bool AppPipeController::getRunning() {
+ return videoCaptureElement.isRunning();
+}
+
+string test_str;
+
+void AppPipeController::init() {
+
+ unsigned char ip_old[15] = {0};
+ std::string net_ifname = appConfig.getStringProperty("netIfName");
+ if (!(GetIpAddress(net_ifname.c_str(), ip_old))) {
+ ERR("couldn't get ip");
+ }
+
+ bUp = false;
+
+ yoloRpcElement.setProperty("str_addr", m_json["addr"].asString());
+ yoloRpcElement.setProperty("local_ip", std::string((char *) ip_old));
+
+ faceExtractElement.setProperty("str_addr", m_json["addr"].asString());
+ faceExtractElement.setProperty("local_ip", std::string((char *) ip_old));
+
+
+ if (bRecordVideoEnable) {
+ faceExtractElement.setProperty("dev_id", m_camId);
+ yoloRpcElement.setProperty("dev_id", m_camId);
+ m_json_Record["rtsp"] = m_json["rtsp"].asString();
+ }
+
+
+ //#todo
+ // int max=appPref.getIntData("n_cut_max_duration");
+ recordInit(20,100);
+ videoCaptureElement.registerConnector([&] {
+
+
+
+ std::string strNewTime;
+ if (m_camId.size() > 0) {
+ strNewTime = AppUtil::getTimeUSecString();
+
+ if(bRecordVideoEnable)
+ {
+ newRecordVideoElement.pushImgBuf(strNewTime,videoCaptureElement.getImage());
+ setSdkTrigger();
+
+ doRecord();
+ }
+
+ } else {
+ //#todo 璁$畻褰撳墠鏂囦欢鏃堕棿
+ //#TODO 杈撳嚭闂撮殧鐢ㄤ簬璁$畻鏃堕棿
+ // 鐜颁负姣忎笁甯ц绠椾竴娆★紝瀵艰嚧璁$畻鐨勬椂闂撮暱浜庢枃浠剁殑瀹為檯鏃堕棿
+ auto opit = 25;// videoCaptureElement.getOutPutInterval();
+ auto opidx = videoCaptureElement.getoutPutIndex();
+ int second = opidx / opit;
+ qint64 newTime = m_dt.toMSecsSinceEpoch() + second * 1000;
+ QDateTime newDt = QDateTime::fromMSecsSinceEpoch(newTime);
+ strNewTime = newDt.toString("yyyy-MM-dd hh:mm:ss").toStdString();
+
+ }
+// DBG(strNewTime);
+
+ if (!faceRpcElement.isBusy()) {
+// faceRpcElement.setProperty("uuid", uuid);
+ //#todo
+ faceRpcElement.setProperty("time", strNewTime);
+// faceRpcElement.setProperty("time", uuid);
+ faceRpcElement.setImage(videoCaptureElement.getImage());
+ faceRpcElement.submit();
+ }
+
+ if (!yoloRpcElement.isBusy()) {
+// yoloRpcElement.setProperty("uuid", uuid);
+ //#todo
+ yoloRpcElement.setProperty("time", strNewTime);
+ yoloRpcElement.setImage(videoCaptureElement.getImage());
+ yoloRpcElement.submit();
+ }
+
+ if (!imageDrawElement.isBusy()) {
+ imageDrawElement.setImage(videoCaptureElement.getImage());
+ imageDrawElement.submit();
+ }
+
+ if (bRecordVideoEnable) {
+ registerElement(triggerElement);
+ }
+ });
+
+
+ yoloRpcElement.registerConnector([&] {
+ imageDrawElement.setYoloObjects(yoloRpcElement.getLastScoreRects());
+ });
+
+ faceRpcElement.registerConnector([&] {
+ imageDrawElement.setFaces(faceRpcElement.getLastScoreRects());
+ });
+
+ yoloRpcElement.registerConnector("YoloTrigger", [&] {
+// auto images = yoloRpcElement.getTriggerMats();
+ });
+
+ faceRpcElement.registerConnector("FaceTrigger", [&] {
+// auto images = faceRpcElement.getTriggerMats();
+ faceExtractElement.submitFaceExtract({faceRpcElement.getProperty("uuid"),
+ AppUtil::getTimeString(),
+ faceRpcElement.getImage().clone(),
+ faceRpcElement.getTriggerFaces(),
+ faceRpcElement.getTriggerScoreRects(),
+ faceRpcElement.getTriggerMats()});
+ });
+
+ imageDrawElement.registerConnector([&] {
+ if (appPref.getIntData("show.image") == 1) {
+ ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
+ }
+ });
+
+ registerElement(videoCaptureElement);
+ if (m_json["yolo.enable"].asString() == "1") {
+ registerElement(yoloRpcElement);
+ }
+ if (m_json["face.enable"].asString() == "1") {
+ registerElement(faceRpcElement);
+ registerElement(faceExtractElement);
+ }
+ registerElement(imageDrawElement);
+
+ videoCaptureElement.setOutPutInterval(3);
+ faceExtractElement.setProperty("index", to_string(m_index));
+ //#todo setProperty
+// faceExtractElement.setProperty("index", to_string(m_index));
+// faceExtractElement.setProperty("index", to_string(m_index));
+}
+
+std::string AppPipeController::getFullFileName() {
+ string tmppath = appConfig.getStringProperty("cutPath");
+ auto findCutSize = tmppath.begin() + tmppath.find("/cut");
+ if (tmppath.back() != '/') {
+ tmppath.push_back('/');
+ }
+ string t_FilePath = tmppath;
+// string t_FilePath = tmppath.replace(findCutSize, findCutSize + 4, "/realtime/");
+
+ //# ./camIndex/YYYYMM/DD/camIndex-YYYYMMDDHHMMSS/
+ //# ./camIndex/YYYYMM/DD/
+ string t_strTime = AppUtil::getTimeSecString();
+ // 2018-09-01 11:30:48.mp4
+ t_FilePath.append(
+ m_camId + "/" + t_strTime.substr(0, 4) + t_strTime.substr(5, 2) + "/" +
+ t_strTime.substr(8, 2) + "/");
+ //camIndex-YYYYMMDDHH/
+ string tt = t_strTime;
+ //2018-09-27 14:26:58
+ //#todo 浼樺寲
+ tt.erase(16, 1);
+ tt.erase(13, 1);
+ tt.erase(10, 1);
+ tt.erase(7, 1);
+ tt.erase(4, 1);
+ //20180927142658
+ t_FilePath.append(m_camId + "-" + tt.substr(0, 10) + "/");
+ string t_cmd = "mkdir -p '";
+ t_cmd.append(t_FilePath + "'");
+ //#get path mkdir path
+ system(t_cmd.c_str());
+ //#get time and file name
+ t_FilePath.append(t_strTime + ".mp4");
+ return t_FilePath;
+}
+
+void AppPipeController::setfdfsClient(FastFdsWithLock *p_fdfsClient) {
+ fdfsClient = p_fdfsClient;
+ faceExtractElement.setFdfs(fdfsClient);
+ yoloRpcElement.setFdfs(fdfsClient);
+}
+
+std::string AppPipeController::getRtmp() {
+ std::string ret = "";// = videoPublishElement.getPath();
+ size_t pos = ret.find(".flv");
+ ret = ret.substr(0, pos);
+ INFO(ret);
+ return ret;
+}
+
+void AppPipeController::initPerimeter() {
+ if (!m_json["perimeter.enable"] == "1") {
+ return;
+ }
+ std::string area = m_json["perimeter.area"].asString();
+ //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
+ perimeterElement.setMask(area);
+ perimeterElement.setFdfs(fdfsClient);
+ perimeterElement.setProperty("sdkType","perimeter");
+ yoloRpcElement.registerConnector([&] {
+ if (!perimeterElement.isBusy()) {
+
+ perimeterElement.setObjsResults(yoloRpcElement.getObjects());
+ perimeterElement.submit();
+ }
+ });
+// perimeterElement.registerConnector([&] {
+
+// peTriggerElement.setState(perimeterElement.getRealNum() > 0);
+// peTriggerElement.triggerOnce();
+// });
+// peTriggerElement.registerConnector([&] {
+
+// switch (peTriggerElement.getTriggerType()) {
+// case UP: DBG("peTriggerElement Up");
+// // startRecord(SdkType_Perimeter);
+// break;
+// case DOWN: DBG("peTriggerElement Down");
+// // endRecord(SdkType_Perimeter);
+// default:
+// break;
+// }
+// });
+ registerElement(perimeterElement);
+// registerElement(peTriggerElement);
+}
+
+void AppPipeController::initCrowd() {
+ if (m_json["crowd.enable"] != "1") {
+ return;
+ }
+ std::string area = m_json["crowd.area"].asString();
+ //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
+ crowdElement.setMask(area);
+ crowdElement.setFdfs(fdfsClient);
+ crowdElement.setProperty("sdkType","crowd");
+ yoloRpcElement.registerConnector([&] {
+ if (!crowdElement.isBusy()) {
+ crowdElement.setObjsResults(yoloRpcElement.getObjects());
+ crowdElement.submit();
+ }
+ });
+// crowdElement.registerConnector([&] {
+// crowdTriggerElement.setState(crowdElement.getRealNum() >= m_json["crowd.num"].asInt());
+// crowdTriggerElement.triggerOnce();
+// });
+// crowdTriggerElement.registerConnector([&] {
+
+// switch (crowdTriggerElement.getTriggerType()) {
+// case UP:
+// //reqRecordMap[SdkType_Perimeter]=true;
+// // startRecord(SdkType_Perimeter);
+// DBG("crowdTriggerElement UP");
+// break;
+// case DOWN:
+// // reqRecordMap[SdkType_Perimeter]=false;
+// //endRecord(SdkType_Perimeter);
+// DBG("crowdTriggerElement Down");
+// break;
+// default:
+// break;
+// }
+// });
+ registerElement(crowdElement);
+// registerElement(crowdTriggerElement);
+}
+
+void AppPipeController::intKeepRight() {
+ if (m_json["keepRight.enable"] != "1") {
+ return;
+ }
+ std::string leftArea = m_json["keepRight.leftArea"].asString();
+ std::string leftLine = m_json["keepRight.leftLine"].asString();
+ std::string rightArea = m_json["keepRight.rightArea"].asString();
+ std::string rightLine = m_json["keepRight.rightLine"].asString();
+ leftJudgment.init(QString::fromStdString(leftArea), QString::fromStdString(leftLine));
+ rightJudgment.init(QString::fromStdString(rightArea), QString::fromStdString(rightLine));
+ yoloRpcElement.registerConnector([&] {
+ leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
+ rightJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
+ });
+ registerElement(leftJudgment);
+ registerElement(rightJudgment);
+
+}
+
+
+//================
+void AppPipeController::recordInit(int videoMin, int videoMax) {
+ sdkTrigger = false;
+ fileMin = videoMin;
+ fileMax = videoMax;
+ triggerDelay = fileMin/2;
+
+ recordStatus = RECORD_STOP;
+ videoLength = 0;
+ recordDelay = 0;
+}
+
+void AppPipeController::setSdkTrigger() {
+ if( faceRpcElement.getTriggerState() ||//TODO
+ yoloRpcElement.getTrigger() ||
+ leftJudgment.getTriggerState()||
+ rightJudgment.getTriggerState() ||
+ perimeterElement.getTriggerState() ||
+ crowdElement.getTriggerState()
+ ){
+ triggerDelay = 0;
+ sdkTrigger = true;
+ } else{
+ if(triggerDelay++ >= fileMin/2) {
+ sdkTrigger = false;
+ }
+ else{
+ sdkTrigger = true;
+ }
+ }
+}
+
+void AppPipeController::doRecord() {
+ switch(recordStatus)
+ {
+ case RECORD_STOP:
+// DBG("recordDelay:" << recordDelay);
+// DBG("videoLength:" << videoLength);
+// DBG("sdkTrigger:" << sdkTrigger);
+ videoLength = 0;
+ recordDelay = 0;
+ if(sdkTrigger){
+ recordStatus = RECORD_DOING;
+ newRecordVideoElement.startRecord();
+ }
+ else
+ {
+ ImgInfo info;
+ newRecordVideoElement.getImg(info);
+ }
+ break;
+
+ case RECORD_DOING:
+ videoLength++;
+ if(sdkTrigger){
+ if(videoLength < fileMax){
+ newRecordVideoElement.doRecord();
+ }
+ else{
+ recordStatus = RECORD_STOP;
+ newRecordVideoElement.endRecord();
+ }
+ }else{
+ recordStatus = RECORD_ENDING;
+ newRecordVideoElement.doRecord();
+ }
+ break;
+
+ case RECORD_ENDING:
+ DBG("recordDelay:" << recordDelay);
+ DBG("videoLength:" << videoLength);
+ DBG("sdkTrigger:" << sdkTrigger);
+ recordDelay++;
+ videoLength++;
+ if(sdkTrigger){
+ if( (recordDelay < fileMin/4) &&
+ (videoLength < fileMax)){
+ newRecordVideoElement.doRecord();
+ }else{
+ recordStatus = RECORD_STOP;
+ newRecordVideoElement.endRecord();
+ }
+ }else{
+ if( (recordDelay < fileMin/2) &&
+ (videoLength < fileMax)){
+ newRecordVideoElement.doRecord();
+ }else{
+ recordStatus = RECORD_STOP;
+ newRecordVideoElement.endRecord();
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.h b/QiaoJiaSystem/StructureApp/AppPipeController.h
new file mode 100644
index 0000000..648b766
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/AppPipeController.h
@@ -0,0 +1,116 @@
+#ifndef APPPIPECONTROLLER_H
+#define APPPIPECONTROLLER_H
+
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ffmpeg/FfmpegElement.h>
+#include <basic/pipe_element/ImageShowElement.h>
+#include <basic/util/curl/HttpRequestWithCrul.hpp>
+#include "ImageDrawElement.h"
+#include "FaceRpcElement.h"
+#include "FaceExtractElement.h"
+#include "YoloRpcElement.h"
+#include "RecordVideoElement.h"
+#include <TriggerElement.h>
+#include <QtCore/QDateTime>
+#include "PerimeterElement.h"
+#include "JudgmentRetrogradeTool.h"
+#include "NewRecordVideoElement.h"
+#include <jsoncpp/json/json.h>
+
+
+class AppPipeController : public PipeController {
+public:
+ /***
+ * 鐢ㄤ簬蹇�熻棰戠粨鏋勫寲
+ * @param folderPath 浠诲姟鏍圭洰褰曪紝鐢ㄤ簬鍋氬叡浜唴瀛榠d
+ * @param json 鍙傛暟涓簉tsp娴佸湴鍧� sdk鏄惁鍚敤鐨勬爣璇�
+ */
+ AppPipeController(std::string folderPath, const Json::Value &json);
+
+ AppPipeController(int index, const Json::Value &json, bool RecordVideoEnable = false);
+
+ AppPipeController(std::string camId, const Json::Value &json, bool RecordVideoEnable);
+
+ virtual ~AppPipeController();
+
+ bool resetVideoCapturePath(std::string path);
+
+ bool getRunning();
+
+ std::string getRtmp();
+
+ void setfdfsClient(FastFdsWithLock *p_fdfsClient);
+
+private:
+ void init();
+
+private://Perimete
+ PerimeterElement perimeterElement;
+ // TriggerElement peTriggerElement;
+
+ void initPerimeter();
+
+private://Crowd
+ PerimeterElement crowdElement;
+ //TriggerElement crowdTriggerElement;
+
+ void initCrowd();
+
+private://KeepRight
+ JudgmentRetrogradeTool leftJudgment;
+ JudgmentRetrogradeTool rightJudgment;
+
+// TriggerElement leftTriggerElement;
+// TriggerElement rightTriggerElement;
+
+ void intKeepRight();
+
+private:
+ ffmpeg::VideoCaptureElement videoCaptureElement;
+ YoloRpcElement yoloRpcElement;
+ FaceRpcElement faceRpcElement;
+ FaceExtractElement faceExtractElement;
+ ImageDrawElement imageDrawElement;
+ RecordVideoElement recordVideoElement;
+ NewRecordVideoElement newRecordVideoElement;
+
+ int m_index;
+ std::string m_camId;
+ std::string m_folderPath;
+ Json::Value m_json;
+ Json::Value m_json_Record;
+
+ Json::FastWriter m_fastWriter;
+ FastFdsWithLock *fdfsClient;
+
+ bool bRecordVideoEnable;
+ std::map<std::string, bool> recordRetMap;
+
+ TriggerElement triggerElement;
+ std::atomic<bool> bUp;
+
+ QDateTime m_dt;
+
+ std::string getFullFileName();
+
+
+ void recordInit(int videoMin, int videoMax);
+ void setSdkTrigger();
+ void doRecord();
+ int fileMin;
+ int fileMax;
+ bool sdkTrigger;
+ int triggerDelay;
+
+#define RECORD_STOP (0)
+#define RECORD_DOING (1)
+#define RECORD_ENDING (2)
+
+ int recordStatus;
+ int videoLength;
+ int recordDelay;
+
+
+};
+
+#endif // APPPIPECONTROLLER_H
diff --git a/QiaoJiaSystem/StructureApp/AppPipeControllerTest.cpp b/QiaoJiaSystem/StructureApp/AppPipeControllerTest.cpp
new file mode 100644
index 0000000..c4b75b3
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/AppPipeControllerTest.cpp
@@ -0,0 +1,93 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <thread>
+//#include "StructureAppI.h"
+//#include "../AppManager/rpc/AppManager.h"
+#include "AppPipeController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/db/ES/es/ManagerEsDB.h>
+
+int main(int argc, char **argv) {
+ SAVE_APP_ARGS;
+
+// ManagerEsDB pManagerEsDB;
+// bool ret = pManagerEsDB.addDB("facedb233");
+
+// pManagerEsDB.faceResInsert("facedb","6666666","{\"test222\":\"sdfasdf\"}");
+
+ appPref.setLongData("gpu.index", 0);
+ appPref.setIntData("show.image", 1);
+
+ //yolo server
+ appPref.setStringData("yolo.proxy", "yoloServer");
+ //#todo
+ appPref.setStringData("yolo.ip", "");
+ appPref.setIntData("yolo.port", 10003);
+// rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"),
+
+
+ //face detect server
+ appPref.setStringData("faceDete.proxy", "faceServer");
+ //#todo
+ appPref.setStringData("faceDete.ip", "");
+ appPref.setIntData("faceDete.port", 10002);
+//rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"), appPref.getLongData("faceDete.port"),"tcp"),
+// rpcClient("faceServer","",10002,"tcp"),
+
+
+ //fece extern server
+ appPref.setStringData("faceExte.proxy", "faceExtractServer");
+ //#todo
+ appPref.setStringData("faceExte.ip", "");
+ appPref.setIntData("faceExte.port", 10008);
+//rpcClient(appPref.getStringData("faceExte.proxy"), appPref.getStringData("faceExte.ip"), appPref.getLongData("faceExte.port"),"tcp"),
+// "faceExtractServer", "", 10008, "tcp"),//浜鸿劯鐗瑰緛鎻愬彇 淇敼鎴愮偣瀵圭偣閫氳
+
+
+ //face search server
+ appPref.setStringData("faceSear.proxy", "faceCmServer");
+ //#todo
+ appPref.setStringData("faceSear.ip", "");
+ appPref.setIntData("faceSear.port", 10004);
+//rpcClient(appPref.getStringData("faceSear.proxy"), appPref.getStringData("faceSear.ip"), appPref.getLongData("faceSear.port"),"tcp"),
+// faceSearchRpcClient("faceCmServer", "", 10004, "tcp")
+
+ appPref.setStringData("ipAdd", "192.168.1.159");
+ appPref.setIntData("ipPort", 9200);
+
+ Json::Value json;
+ json["rtsp"] = "/home/bsk/development/c++/Qt/QiaoJiaSystem/build/load/123456/33/201808/27/123456-33-201808-20180827093100/2018-08-27 09:31:00.mp4";
+ json["face.enable"] = "1";
+ json["yolo.enable"] = "1";
+
+ AppPipeController appPipeController(0, json);
+ appPipeController.resetVideoCapturePath(
+ "/home/bsk/development/c++/Qt/QiaoJiaSystem/build/load/123456/33/201808/27/123456-33-201808-20180827093100/2018-08-27 09:31:00.mp4");
+ appPipeController.start();
+ getchar();
+ appPipeController.stop();
+ appPipeController.wait();
+ return 0;
+}
+
+#include "HttpRequestWithCrul.hpp"
+
+int main2() {
+
+
+ HttpRequestWithCrul httpRequestWithCrul;
+
+
+ // test post requery
+ string postUrlStr = "http://192.168.1.159:9200/facedb/external/fffffff";
+ string postParams = "{\"assss\":\"cccc\"}";
+ string postResponseStr;
+ auto res = httpRequestWithCrul.curl_post_req(postUrlStr, postParams, postResponseStr);
+ auto res2 = httpRequestWithCrul.curl_post_req(postUrlStr, postParams, postResponseStr);
+ if (res != CURLE_OK)
+ cerr << "curl_easy_perform() failed: " + string(curl_easy_strerror(res)) << endl;
+ else
+ cout << postResponseStr << endl;
+// system("pause");
+ return 0;
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/StructureApp/CMakeLists.txt b/QiaoJiaSystem/StructureApp/CMakeLists.txt
new file mode 100644
index 0000000..901e914
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/CMakeLists.txt
@@ -0,0 +1,127 @@
+cmake_minimum_required(VERSION 3.5)
+project(StructureApp)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -DTESTCODE -fpermissive)
+
+SET(SOURCES
+
+# HiredisTool.cpp
+ NewRecordVideoElement.cpp
+ JudgmentRetrogradeTool.cpp
+ PerimeterElement.cpp
+
+
+ TrackingTrigger.cpp
+ FaceRpcElement.cpp
+ FaceExtractElement.cpp
+ YoloRpcElement.cpp
+ ImageDrawElement.cpp
+ RecordVideoElement.cpp
+ rpc/StructureApp.cpp
+ AppPipeController.cpp
+ ../YoloServer/rpc/YoloServer.cpp
+ ../FaceDetectServer/rpc/FaceServer.cpp
+ ../FaceSearchServer/rpc/FaceSearchServer.cpp
+ ../RecordVideo/rpc/RecordVideo.cpp
+ ../RapidStructureApp/TriggerElement.cpp
+
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
+ ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+ ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+ ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+ ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+ ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.cpp
+ ../../BasicPlatForm/basic/util/curl/HttpRequestWithCrul.hpp
+ ../../BasicPlatForm/basic/util/net_config/net_config.cpp
+ )
+
+SET(LIBS
+ Ice
+ crypto
+ opencv_world
+ avformat
+ avcodec
+ swresample
+ swscale
+ avutil
+ bz2 dl z
+ Qt5Core
+ Qt5Gui
+ pthread
+ jsoncpp
+ cuda
+ cudart
+ cublas
+ curand
+
+ glog
+
+ uuid
+ curl
+ fastcommon
+ fdfsclient
+ )
+
+include_directories(
+ ./rpc
+ ../YoloServer/rpc
+ ../RecordVideo/rpc
+ ../FaceDetectServer/rpc
+ ../FaceSearchServer/rpc
+ ../RapidStructureApp/
+
+ ../../BasicPlatForm
+ ../../BasicPlatForm/libs/opencv/include
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/ffmpeg/include
+ ../../BasicPlatForm/libs/jsoncpp/include
+
+ ../../BasicPlatForm/basic/util/net_config/
+ ../../BasicPlatForm/basic/util/fastdfs/
+ ../../BasicPlatForm/libs/FastDFS/include
+ ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+ ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+
+ ../../BasicPlatForm/basic/pipe/
+ ../../BasicPlatForm/libs/crul/include
+ ../../BasicPlatForm/basic/util/curl/
+ ../../BasicPlatForm/libs/libuuid/include
+ ../../BasicPlatForm/libs/glog/include
+ /usr/include/x86_64-linux-gnu/qt5
+ /usr/include/x86_64-linux-gnu/qt5/QtCore
+)
+
+link_directories(
+ /usr/local/cuda/lib64
+ ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+ ../../BasicPlatForm/libs/openssl/lib
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/ffmpeg/lib
+ ../../BasicPlatForm/libs/jsoncpp/lib
+ ../../BasicPlatForm/libs/FastDFS/lib
+ ../../BasicPlatForm/libs/libuuid/lib
+
+ ../../BasicPlatForm/libs/glog/lib
+ ../../BasicPlatForm/libs/crul/lib
+)
+
+add_executable(${PROJECT_NAME}
+ main.cpp
+ ${SOURCES}
+ )
+
+add_executable(AppPipeControllerTest
+ AppPipeControllerTest.cpp
+ ${SOURCES})
+
+target_link_libraries(${PROJECT_NAME}
+ ${LIBS}
+ )
+
+target_link_libraries(AppPipeControllerTest
+ ${LIBS}
+ )
diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
new file mode 100644
index 0000000..7f6e288
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -0,0 +1,230 @@
+#include "FaceExtractElement.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QSharedMemory>
+#include <QtCore/QString>
+#include <basic/util/app/AppUtil.h>
+#include <basic/util/opencv/CvUtil.h>
+//diao鐢ㄥ搴攅s鏁版嵁灏佽鐨勭被
+//#include <basic/db/ES/es/ManagerEsDB.h>
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+
+#define state "state"
+
+void StringReplace(string &strBase, string strSrc, string strDes) {
+ string::size_type pos = 0;
+ string::size_type srcLen = strSrc.size();
+ string::size_type desLen = strDes.size();
+ pos = strBase.find(strSrc, pos);
+ while ((pos != string::npos)) {
+ strBase.replace(pos, srcLen, strDes);
+ pos = strBase.find(strSrc, (pos + desLen));
+ }
+}
+
+FaceExtractElement::FaceExtractElement(std::string shareMemoryName) :
+ TimerElement(1000), sharedMemory(nullptr), fdfsClient(nullptr),
+ //#todo appPref.setStringData
+ faceExtractRpcClient(appPref.getStringData("faceExte.proxy"), appPref.getStringData("faceExte.ip"),
+ appPref.getIntData("faceExte.port"), "tcp"),
+// faceExtractRpcClient(/*appPref.getStringData("face.extract.proxy")*/
+// "faceExtractServer", "", 10008, "tcp"),//浜鸿劯鐗瑰緛鎻愬彇 淇敼鎴愮偣瀵圭偣閫氳
+ faceSearchRpcClient(appPref.getStringData("faceSear.proxy"), appPref.getStringData("faceSear.ip"),
+ appPref.getIntData("faceSear.port"), "tcp")
+// faceSearchRpcClient("faceCmServer", "", 10004, "tcp")
+{
+ sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
+ if (!sharedMemory->create(4608 * 2592 * 4)) {
+ sharedMemory->attach();
+ }
+}
+
+FaceExtractElement::~FaceExtractElement() {
+ if (sharedMemory) {
+ delete sharedMemory;
+ }
+}
+
+void FaceExtractElement::submitFaceExtract(FaceToExtract faceToExtract) {
+ std::lock_guard<std::mutex> lg(imageQueueMutex);
+ if (faceExtractQueue.size() >= VECTOR_MAX) {
+ ERR("FaceExtractElement::submitFaceExtract too fast, imageQueue.size()>=QUEUE_MAX")
+ return;
+ }
+ faceExtractQueue.push_back(faceToExtract);
+}
+
+void FaceExtractElement::timerFunc() {
+ std::vector<FaceToExtract> faceExtractQueueTmp;
+ {
+ std::lock_guard<std::mutex> lg(imageQueueMutex);
+ if (faceExtractQueue.empty())return;
+ faceExtractQueueTmp.swap(faceExtractQueue);
+ faceExtractQueue.clear();
+ }
+ try {
+
+ string t_camIdex = getProperty("dev_id") + getProperty("ch_id");
+ float t_com_sc =
+ appPref.getFloatData(t_camIdex + "face.cmp") == -1 ? 75 : appPref.getFloatData(t_camIdex + "face.cmp");
+
+ DBG(" TESTCODE getValue" << t_camIdex << " " << t_com_sc << " " << t_com_sc / 100);
+
+ t_com_sc = t_com_sc / 100;
+
+ for (int i = 0; i < faceExtractQueueTmp.size(); i++) {
+ auto extractServer = faceExtractRpcClient.getServer();
+ if (!extractServer) {
+ ERR("extractServer is null");
+ return;
+ }
+ auto &image = faceExtractQueueTmp[i].image;
+ auto sharedImage = cv::Mat(image.rows, image.cols, CV_8UC3, sharedMemory->data());
+ image.copyTo(sharedImage);
+
+ unsigned long size = faceExtractQueueTmp[i].facesPos.size();
+ for (int j = 0; j < size; j++) {
+ auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j],
+ sharedMemory->key().toStdString());
+// {
+// //#todo
+// string string1(
+// AppUtil::getTimeString() + "-ff3" + faceExtractQueueTmp[i].scoredRects[j].properties["time"] +
+// ".jpg");
+// cv::imwrite(string1, image);
+// }
+ if (feature.empty()) {
+ ERR("feature is empty");
+ continue;
+ }
+ features.clear();
+ features.emplace_back(feature);
+
+ std::string strImgUrl = "http://";
+ if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
+ fdfsClient->rwLock.rdlock();
+ std::vector<unsigned char> buffer;
+ CvUtil::cvMat2Buffer(faceExtractQueueTmp[i].faceImages[j], buffer);
+ std::string strImgUrlTmp = "";
+ fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
+ strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
+ strImgUrl.clear();
+ strImgUrl = strImgUrlTmp;
+// strImgUrl.append("/").append(strImgUrlTmp);
+ fdfsClient->rwLock.unlock();
+ }
+
+ //鎷兼帴json
+ string str_uuid;
+ uuid_t t_uuid;
+ char str[36];
+ uuid_generate(t_uuid);
+ uuid_unparse(t_uuid, str);
+ str_uuid = str;
+
+ Json::Value t_json;
+ t_json["Id"] = str_uuid; //涓婚敭
+
+ //#鍦ㄥ姣斾腑娣诲姞鐗瑰緛鍊�
+ t_json["FaceFeature"] = "base64";
+ t_json["personId"] = "wait todo";//鍏宠仈搴曞簱浜哄憳id,浜鸿劯id
+ t_json["BaseName"] = "wait todo";//鍏宠仈搴曞簱琛ㄥ悕
+ //#end
+// t_json["likePer"] = faceExtractQueueTmp[i].scoredRects[j].score;//浜哄憳鐩镐技搴� Score
+ t_json["likeDate"] = AppUtil::getTimeSecString();//"2018-01-01 01:01:01";//姣旇緝鏃堕棿
+
+ t_json["picName"] = "wait todo";
+
+
+ t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store
+ t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
+ t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞
+ t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞
+ t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥�
+ //#todo
+ t_json["picDate"] = faceExtractQueueTmp[i].scoredRects[j].properties["time"];
+// DBG("timeC ::::B" << t_json["picDate"].asString());
+// t_json["picDate"] = AppUtil::getTimeSecString();
+
+ t_json["content"] = "wait todo";
+ t_json["viType"] = "1";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+ t_json["personIsHub"] = "4";//1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡
+
+
+ //faceExtractElement.setProperty("dev_id", str_device_id);
+ //faceExtractElement.setProperty("cg_id", str_ch_id);
+ t_json["videoNum"] = getProperty("dev_id");//Video璁惧缂栧彿//getProperty("path");//Vide缂栧彿 澶栭敭
+ t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
+ t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
+ t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+ //浜鸿劯灞炴��
+ t_json["Age"] = atoi(
+ faceExtractQueueTmp[i].scoredRects[j].properties["age"].c_str());//妫�娴嬬殑骞撮緞 搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+
+ //#todo 浼樺寲 get vector<string> from json
+ t_json["Gender"] = faceExtractQueueTmp[i].scoredRects[j].properties["gender"];//妫�娴嬬殑鎬у埆 涓虹┖ 鏃犳娴嬬粨鏋�
+ switch (atoi(faceExtractQueueTmp[i].scoredRects[j].properties["gender"].c_str())) {
+ case 0:
+ t_json["Gender"] = "濂�";
+ break;
+ case 1:
+ t_json["Gender"] = "鐢�";
+ break;
+ }
+
+ t_json["BeautyLevel"] = faceExtractQueueTmp[i].scoredRects[j].properties["beauty"];//妫�娴嬬殑缇庡寲姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+ t_json["SimleLevel"] = faceExtractQueueTmp[i].scoredRects[j].properties["smile"];//妫�娴嬬殑寰瑧姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+ t_json["Race"] = "";//妫�娴嬬殑绉嶆棌 搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+ t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
+
+ //#todo 浼樺寲 get vector<string> from json
+ switch (atoi(faceExtractQueueTmp[i].scoredRects[j].properties["race"].c_str())) {
+ case 1:
+ t_json["Race"] = "鐧戒汉";
+ break;
+ case 2:
+ t_json["Race"] = "榛勪汉";
+ break;
+ case 3:
+ t_json["Race"] = "榛戜汉";
+ break;
+ }
+
+// DBG(t_json.toStyledString());
+
+ t_json["indeviceid"] = appPref.getStringData("fxDevID");
+ t_json["indevicename"] = appPref.getStringData("fxDevNAME");
+
+ auto faceSearchServer = faceSearchRpcClient.getServer();
+ if (!faceSearchServer) {
+ ERR("faceSearchServer is null");
+ EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+ bool retface = false;
+ retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", t_json.toStyledString(),
+ str_uuid);
+// if (retface) {
+// INFO("facedb success");
+// } else {
+// ERR("facedb fail");
+// }
+ } else {
+ INFO("send faceSearchTopN ");
+ auto faceSearchResults = faceSearchServer->faceSearchTopN(feature, t_json.toStyledString(), 2,
+ t_com_sc);
+ }
+ }
+ }
+ } catch (std::exception &e) {
+ ERR(e.what())
+ }
+ if (!features.empty())fireConnectors();
+}
+
+std::vector<::FaceDetect::Data> FaceExtractElement::getFeatures() const {
+ return features;
+}
+
diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.h b/QiaoJiaSystem/StructureApp/FaceExtractElement.h
new file mode 100644
index 0000000..8a1a0fb
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.h
@@ -0,0 +1,61 @@
+#ifndef FACEEXTRACTELEMENT_H
+#define FACEEXTRACTELEMENT_H
+
+#include <FaceServer.h>
+#include <FaceSearchServer.h>
+#include <basic/pipe/TimerElement.h>
+#include <basic/util/BASE64/Base64.h>
+#include "TrackingTrigger.h"
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/util/fastdfs/FastFds.hpp>
+#include <opencv2/opencv.hpp>
+#include <queue>
+#include <mutex>
+#include <jsoncpp/json/json.h>
+
+#define VECTOR_MAX 50
+
+class QSharedMemory;
+
+struct FaceToExtract {
+ string uuid;
+ string time;
+ cv::Mat image;
+ FaceDetect::Faces facesPos;
+ std::vector<ScoredRect> scoredRects;
+ std::vector<cv::Mat> faceImages;
+};
+
+class FaceExtractElement : public TimerElement {
+public:
+ FaceExtractElement(std::string shareMemoryName);
+
+ ~FaceExtractElement();
+
+ void setFdfs(FastFdsWithLock *p_fdfsClient) {
+ fdfsClient = p_fdfsClient;
+ }
+
+ void submitFaceExtract(FaceToExtract faceToExtract);
+
+// AlarmServerInterface::TableNames getTableNames() const;
+ std::vector<::FaceDetect::Data> getFeatures() const;
+
+private:
+ virtual void timerFunc() override;
+
+ IceRpcClient<FaceDetect::FaceExtractServerPrx> faceExtractRpcClient;
+ IceRpcClient<FaceSearch::FaceFeatureSearchServerPrx> faceSearchRpcClient;
+ FastFdsWithLock *fdfsClient;
+ std::vector<FaceToExtract> faceExtractQueue;
+ std::mutex imageQueueMutex;
+ QSharedMemory *sharedMemory;
+
+// AlarmServerInterface::TableNames tableNames;
+ std::vector<::FaceDetect::Data> features;
+
+ Base64 base64;
+};
+
+
+#endif // FACEEXTRACTELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
new file mode 100644
index 0000000..ccee428
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
@@ -0,0 +1,168 @@
+#include "FaceRpcElement.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QSharedMemory>
+#include <QtCore/QString>
+#include <basic/timer_counter/Clocktimer.h>
+#include <basic/util/opencv/CvUtil.h>
+
+#define GETSCORE(IDENT) appPref.getFloatData(IDENT) == -1 ? 95 : appPref.getFloatData(IDENT);
+
+//************************************
+// Method: string_replace
+// FullName: string_replace
+// Access: public
+// Returns: void
+// Qualifier: 鎶婂瓧绗︿覆鐨剆trsrc鏇挎崲鎴恠trdst
+// Parameter: std::string & strBig
+// Parameter: const std::string & strsrc
+// Parameter: const std::string & strdst
+//************************************
+static void string_replace(std::string &strBig, const std::string &strsrc, const std::string &strdst) {
+ std::string::size_type pos = 0;
+ std::string::size_type srclen = strsrc.size();
+ std::string::size_type dstlen = strdst.size();
+
+ while ((pos = strBig.find(strsrc, pos)) != std::string::npos) {
+ strBig.replace(pos, srclen, strdst);
+ pos += dstlen;
+ }
+}
+
+//todo appPref.getStringData("face.detect.proxy")
+FaceRpcElement::FaceRpcElement(string shareMemoryName) :
+//#todo
+ rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"),
+ appPref.getIntData("faceDete.port"), "tcp"), m_triggerElement(0, 50),
+// rpcClient("faceServer","",10002,"tcp"),
+ sharedMemory(nullptr), trackingTrigger(nullptr) {
+ sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
+ if (!sharedMemory->create(4608 * 2592 * 4)) {
+ sharedMemory->attach();
+ DBG("size is " << sharedMemory->size());
+ }
+
+// string t_camIdex = getProperty("dev_id");
+ //#todo
+ string t_camIdex;
+ if (shareMemoryName.find("/")) {
+ string_replace(shareMemoryName, "//", "/");
+ auto dev_pos = shareMemoryName.find("/cut/") + 5;
+ auto ch_pos = shareMemoryName.find("/", dev_pos) + 1;
+ auto str_device_id = shareMemoryName.substr(dev_pos, ch_pos - dev_pos - 1);
+ auto str_ch_id = shareMemoryName.substr(ch_pos, shareMemoryName.find("/", ch_pos) - ch_pos);
+ t_camIdex.append(str_device_id).append(str_ch_id);
+ } else {
+ t_camIdex = shareMemoryName.substr(0, shareMemoryName.rfind("faceRpc"));
+ }
+
+ float t_score = GETSCORE(t_camIdex + "face.det");
+
+ DBG(" TESTCODE getValue" << t_camIdex << " " << t_score << " " << t_score / 100);
+
+ t_score = t_score / 100;
+
+ trackingTrigger = new TrackingTrigger(t_score);
+}
+
+FaceRpcElement::~FaceRpcElement() {
+ if (sharedMemory) {
+ delete sharedMemory;
+ }
+ if (trackingTrigger) {
+ delete trackingTrigger;
+ }
+}
+
+void FaceRpcElement::threadFunc() {
+// ClockTimer ct("FaceRpcElement::threadFunc");
+// {
+//
+// string string1(AppUtil::getTimeString() + "-ff2" + getProperty("time") + ".jpg");
+// cv::imwrite(string1, image);
+// }
+ triggerMats.clear();
+ triggerFaces.clear();
+ triggerScoredRects.clear();
+ try {
+ auto server = rpcClient.getServer();
+ if (!server) ERR("server is null");
+ faces = server->faceDetect(image.cols, image.rows, sharedMemory->key().toStdString());
+// DBG("faces.size " << faces.size());
+ for (auto face: faces) {
+ ::FaceDetect::RECT &rect = face.rcFace;
+ ScoredRect scoredRect;
+ int x = face.rcFace.left;
+ int y = face.rcFace.top;
+ int w = face.rcFace.right - face.rcFace.left;
+ int h = face.rcFace.bottom - face.rcFace.top;
+ scoredRect.rect = {x, y, w, h};
+ scoredRect.score = (float) face.fAngle.confidence;
+
+ if (trackingTrigger->triggerOnce(scoredRect)) {
+ auto property = server->faceProperty(image.cols, image.rows, face, sharedMemory->key().toStdString());
+ trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id);
+ trackingTrigger->getLastRect().properties["age"] = to_string(property.age);
+ trackingTrigger->getLastRect().properties["gender"] = to_string(property.gender);
+ trackingTrigger->getLastRect().properties["beauty"] = to_string(property.beauty_level);
+ trackingTrigger->getLastRect().properties["smile"] = to_string(property.smile_level);
+ trackingTrigger->getLastRect().properties["race"] = to_string(property.race);
+ trackingTrigger->getLastRect().properties["time"] = getProperty("time");
+
+ triggerFaces.push_back(face);
+ triggerMats.push_back(image(
+ CvUtil::zoomRectEqual(scoredRect.rect, 1.5, 1.5) & cv::Rect(0, 0, image.cols, image.rows)).clone());
+ triggerScoredRects.push_back(trackingTrigger->getLastRect());
+ } else {
+// DBG("trackingTrigger->triggerOnce(scoredRect) is false ");
+ }
+ }
+ trackingTrigger->triggerLine();
+ // DBG("faces.size " << faces.size());
+ if (getLastScoreRects().size() > 0) {
+ m_triggerElement.setState(true);
+ } else {
+ m_triggerElement.setState(false);
+ }
+
+ m_triggerElement.triggerOnce(false);
+ if (triggerMats.size() > 0)fireConnectors("FaceTrigger");
+ fireConnectors();
+ } catch (std::exception &e) {
+ ERR(e.what())
+ }
+}
+
+cv::Mat FaceRpcElement::getImage() const {
+ return image;
+}
+
+::FaceDetect::Faces FaceRpcElement::getTriggerFaces() const {
+ return triggerFaces;
+}
+
+::FaceDetect::Faces FaceRpcElement::getFaces() const {
+ return faces;
+}
+
+std::vector<cv::Mat> FaceRpcElement::getTriggerMats() {
+ return triggerMats;
+}
+
+std::vector<ScoredRect> FaceRpcElement::getTriggerScoreRects() const {
+ return triggerScoredRects;
+}
+
+std::vector<ScoredRect> FaceRpcElement::getLastScoreRects() const {
+ return trackingTrigger->getLastScoreRects();
+}
+
+void FaceRpcElement::setImage(const cv::Mat &value) {
+ if (value.size != image.size) {
+ image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
+ }
+ value.copyTo(image);
+}
+
+bool FaceRpcElement::getTriggerState() const {
+ return m_triggerElement.getTriggerState();
+}
diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.h b/QiaoJiaSystem/StructureApp/FaceRpcElement.h
new file mode 100644
index 0000000..4804da4
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.h
@@ -0,0 +1,52 @@
+#ifndef FACERPCELEMENT_H
+#define FACERPCELEMENT_H
+
+#include <FaceServer.h>
+#include <basic/pipe/PipeElement.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <opencv2/opencv.hpp>
+#include <RapidStructureApp/TriggerElement.h>
+#include "TrackingTrigger.h"
+
+class QSharedMemory;
+
+class FaceRpcElement : public basic::PipeElement {
+public:
+ FaceRpcElement(string);
+
+ ~FaceRpcElement();
+
+ // PipeElement interface
+ void setImage(const cv::Mat &value);
+
+ ::FaceDetect::Faces getFaces() const;
+
+ std::vector<cv::Mat> getTriggerMats();
+
+ std::vector<ScoredRect> getTriggerScoreRects() const;
+
+ std::vector<ScoredRect> getLastScoreRects() const;
+
+ ::FaceDetect::Faces getTriggerFaces() const;
+
+ bool getTriggerState() const;
+
+ cv::Mat getImage() const;
+
+private:
+ virtual void threadFunc() override;
+
+private:
+ IceRpcClient<FaceDetect::FaceDetectServerPrx> rpcClient;
+ cv::Mat image;
+ QSharedMemory *sharedMemory;
+ ::FaceDetect::Faces faces;
+ TrackingTrigger *trackingTrigger;
+ ::FaceDetect::Faces triggerFaces;
+ std::vector<cv::Mat> triggerMats;
+ std::vector<ScoredRect> triggerScoredRects;
+
+ TriggerElement m_triggerElement;
+};
+
+#endif // FACERPCELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/ImageDrawElement.cpp b/QiaoJiaSystem/StructureApp/ImageDrawElement.cpp
new file mode 100644
index 0000000..44a0088
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/ImageDrawElement.cpp
@@ -0,0 +1,42 @@
+#include "ImageDrawElement.h"
+#include <basic/util/opencv/CvUtil.h>
+
+ImageDrawElement::ImageDrawElement() {
+
+}
+
+void ImageDrawElement::darwProperty(cv::Mat &image, string key, string value, int x, int y) {
+ cv::putText(image, key + ": " + value, cv::Point(x, y), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1.5,
+ cv::Scalar(255, 255, 0), 2);
+}
+
+void ImageDrawElement::processImage(cv::Mat &image) {
+ auto faceData = faces.getData();
+ auto yoloObjectsData = yoloObjects.getData();
+
+ for (auto face: faceData) {
+ auto rect = CvUtil::zoomRect(face.rect, 1.2, 1.2);
+ cv::rectangle(image, rect, face.id >= 0 ? cv::Scalar(0, 255, 0) : cv::Scalar(0, 255, 255), 2);
+ int i = 0;
+ for (auto &property:face.properties) {
+ darwProperty(image, property.first, property.second, rect.x + rect.width, rect.y + 40 * i++);
+ }
+ }
+
+ for (auto yoloObj: yoloObjectsData) {
+ auto rect = CvUtil::zoomRect(yoloObj.rect, 1, 1);
+ cv::rectangle(image, rect, yoloObj.id >= 0 ? cv::Scalar(255, 0, 0) : cv::Scalar(0, 255, 255), 2);
+ int i = 0;
+ for (auto &property:yoloObj.properties) {
+ darwProperty(image, property.first, property.second, rect.x + rect.width, rect.y + 40 * i++);
+ }
+ }
+}
+
+void ImageDrawElement::setFaces(std::vector<ScoredRect> value) {
+ faces = value;
+}
+
+void ImageDrawElement::setYoloObjects(std::vector<ScoredRect> value) {
+ yoloObjects = value;
+}
diff --git a/QiaoJiaSystem/StructureApp/ImageDrawElement.h b/QiaoJiaSystem/StructureApp/ImageDrawElement.h
new file mode 100644
index 0000000..c3d6d30
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/ImageDrawElement.h
@@ -0,0 +1,30 @@
+#ifndef IMAGEDRAWELEMENT_H
+#define IMAGEDRAWELEMENT_H
+
+#include <YoloServer.h>
+#include <FaceServer.h>
+#include <basic/pipe_element/ImageFactoryElement.h>
+#include <basic/core/DoubleBufferedData.h>
+#include "TrackingTrigger.h"
+
+class ImageDrawElement : public ImageFactoryElement {
+public:
+ ImageDrawElement();
+
+ // ImageFactoryElement interface
+ void setFaces(std::vector<ScoredRect> value);
+
+ void setYoloObjects(std::vector<ScoredRect> value);
+
+private:
+ virtual void processImage(cv::Mat &) override;
+
+ void darwProperty(cv::Mat &image, string key, string value, int x, int y);
+
+private:
+ DoubleBufferedData<std::vector<ScoredRect>> faces;
+ DoubleBufferedData<std::vector<ScoredRect>> yoloObjects;
+};
+
+
+#endif // IMAGEDRAWELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp
new file mode 100644
index 0000000..1dca1a6
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp
@@ -0,0 +1,194 @@
+//
+// Created by basic on 18-8-24.
+//
+
+#include "JudgmentRetrogradeTool.h"
+#include <basic/util/opencv/CvMath.hpp>
+#include <QtCore/QDebug>
+
+JudgmentRetrogradeTool::JudgmentRetrogradeTool():
+TimerElement(1000),
+m_triggerElement(0,50)
+{
+
+}
+
+JudgmentRetrogradeTool::~JudgmentRetrogradeTool() {
+
+}
+
+bool JudgmentRetrogradeTool::init(QString area,QString line) {
+ //#todo string ->json
+ QJsonArray arrayAreas = getJsonArrayFromQString(area);
+ if(arrayAreas.isEmpty())
+ {
+ return false;//do not detect
+ }
+ QVector<QPoint> vec;
+ for(int i = 0;i < arrayAreas.size();++i){
+ QJsonValue jsonValue = arrayAreas[i];
+ QJsonObject obj = jsonValue.toObject();
+ int x = obj.value("x").toInt()*2 ;
+ int y = obj.value("y").toInt()*2 ;
+ vec.push_back(QPoint(x,y));
+ }
+
+
+ m_polygon = std::move(QPolygon(vec));
+// QPoint left[]={QPoint(100,6),QPoint(100,1200),QPoint(850,1200),QPoint(850,6)} ;
+// QPoint right[]={QPoint(850,6),QPoint(1800,6),QPoint(1800,1200),QPoint(850,1200)} ;
+// for(auto &item:left)
+// {
+// m_UpPolygon<<(item);
+// }
+// for(auto &item:right)
+// {
+// m_DownPolygon<<(item);
+// }
+
+ cv::Point start, end;
+ QJsonArray arrayLine = getJsonArrayFromQString(line);
+ if(arrayLine.size() == 2){
+ QJsonValue jsonValue = arrayLine[0];
+ QJsonObject obj = jsonValue.toObject();
+ start.x = obj.value("x").toInt() ;
+ start.y = obj.value("y").toInt() ;
+
+
+ QJsonValue jsonValue2 = arrayLine[1];
+ QJsonObject obj2 = jsonValue2.toObject();
+ end.x = obj2.value("x").toInt() ;
+ end.y = obj2.value("y").toInt() ;
+
+ }else{
+ return false;
+ }
+ setUpBaseline(start,end);
+
+ //setDownBaseline(start,end);
+ // setUpBaseline();
+ // setUpDetectionArea();
+ return true;
+}
+
+void JudgmentRetrogradeTool::setYoloObjects(std::vector<ScoredRect> value)
+{
+ mObjs=value;
+ for(auto & item :value){
+ setPerRect(item.id,item.rect);
+ }
+}
+
+
+void JudgmentRetrogradeTool::setPerRect(const long& id,cv::Rect rect){
+ setPerPoint(id,getCenterPoint(rect));
+}
+
+void JudgmentRetrogradeTool::setPerPoint(const long &id, cv::Point2f result) {
+ auto &listCache = m_mapPerPoint[id];
+ cv::Point2f vp;
+ vp.x = result.x;
+ vp.y = result.y;
+ listCache.push_back(vp);
+ if (listCache.size() >= 2) {
+ VectorPoint tt;
+ tt.start_Point = listCache.front();
+ tt.end_Point = listCache.back();
+ auto &temp = m_mapPerDirection[id];
+ //#TODO tt.end_Point in UP Area
+ QPoint center(tt.end_Point.x,tt.end_Point.y);
+ if(m_polygon.containsPoint(center,Qt::OddEvenFill)){
+ temp.push_back(JRTOOL::low_filter(temp.back(), getTheta(m_UpBaseLine, tt)));
+ //DBG("ID="<<id<<" left getTheta="<<getTheta(m_DownBaseLine, tt));
+ }
+ else
+ {
+ temp.clear();
+ }
+ listCache.clear();
+ }
+}
+
+bool JudgmentRetrogradeTool::getPerRet(const long &id) {
+ bool ret = (m_mapPerRet.find(id) == m_mapPerRet.end()) ? true : m_mapPerRet[id];
+ return ret;
+}
+
+void JudgmentRetrogradeTool::setUpBaseline(cv::Point start, cv::Point end) {
+ m_UpBaseLine.start_Point = start;
+ m_UpBaseLine.end_Point = end;
+}
+
+
+void JudgmentRetrogradeTool::setDownBaseline(cv::Point start, cv::Point end) {
+ m_DownBaseLine.start_Point = start;
+ m_DownBaseLine.end_Point = end;
+}
+
+float JudgmentRetrogradeTool::getTheta(BaseLine &directionVectorPoint, VectorPoint &point) {
+ return JRTOOL::getAngelOfTwoVector(directionVectorPoint, point);
+}
+
+void JudgmentRetrogradeTool::timerFunc()
+{
+ func();
+ fireConnectors();
+}
+
+void JudgmentRetrogradeTool::func() {
+ for (auto &item : m_mapPerDirection) {
+ int a = 0;
+ int b = 0;
+ auto &temp = item.second;
+ for (auto &item2 : temp) {
+ if (item2 > 100) {
+ b++;
+ } else if (item2 < 80) {
+ a++;
+ }
+ }
+ // DBG("id="<<item.first<<" a="<<a<<" b="<<b);
+ bool ret = a >= b ? true : false;
+ m_mapPerRet[item.first] = ret;
+ if (temp.size() > 9) {
+ temp.pop_front();
+ }
+ }
+
+ for (auto scoredRect:mObjs) {
+ if (!getPerRet(scoredRect.id))//judgment.bool
+ {
+ m_triggerElement.setState(true);
+ break;
+ }
+ else
+ {
+ m_triggerElement.setState(false);
+
+ }
+ }
+ m_triggerElement.triggerOnce();
+}
+
+QJsonArray JudgmentRetrogradeTool::getJsonArrayFromQString(const QString strJson)
+{
+ QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit());
+ if( jsonDocument.isNull() ){
+ qDebug()<< "please check the string"<< strJson.toLocal8Bit();
+ return QJsonArray();
+ }
+ QJsonArray jsonArray = jsonDocument.array();
+ return jsonArray;
+}
+
+void JudgmentRetrogradeTool::setUpDetectionArea()
+{
+
+}
+void JudgmentRetrogradeTool::setDownDetectionArea()
+{
+
+}
+bool JudgmentRetrogradeTool::getTriggerState() const {
+ return m_triggerElement.getTriggerState();
+}
diff --git a/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h
new file mode 100644
index 0000000..c2bb157
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h
@@ -0,0 +1,118 @@
+//
+// Created by basic on 18-8-24.
+//
+
+#ifndef JUDGINGRETROGRADE_JUDGMENTRETROGRADETOOL_H
+#define JUDGINGRETROGRADE_JUDGMENTRETROGRADETOOL_H
+
+#include <iostream>
+#include <map>
+#include <list>
+#include <opencv2/opencv.hpp>
+#include <basic/pipe/TimerElement.h>
+#include "YoloRpcElement.h"
+#include <QSharedMemory>
+#include <QString>
+#include <QJsonArray>
+#include <QJsonObject>
+#include <QJsonDocument>
+#include <QtGui/QPolygon>
+
+struct VectorPoint{
+ cv::Point2f start_Point;
+ cv::Point2f end_Point;
+};
+
+typedef VectorPoint BaseLine;
+namespace JRTOOL{
+//浠t1涓哄熀鍑�
+//璁$畻涓や釜鍚戦噺鐨勫す瑙�,0~90涔嬮棿涓烘甯�,90~180涓洪�嗚
+static float getAngelOfTwoVector(VectorPoint &pt1, VectorPoint &pt2){
+ float theta = atan2(pt1.end_Point.x - pt1.start_Point.x, pt1.end_Point.y - pt1.start_Point.y)
+ - atan2(pt2.end_Point.x - pt2.start_Point.x, pt2.end_Point.y - pt2.start_Point.y);
+ if (theta > CV_PI)
+ theta -= 2 * CV_PI;
+ if (theta < -CV_PI)
+ theta += 2 * CV_PI;
+ theta = theta * 180.0 / CV_PI;
+ return abs(theta);
+}
+
+//婊ゆ尝
+static float low_filter(float a, float b){
+ float sample_value;
+ float X=0.1;
+ sample_value=(1-X)*b+X*a;
+ return(sample_value);
+}
+}
+
+
+class JudgmentRetrogradeTool :public TimerElement {
+public:
+ JudgmentRetrogradeTool();
+
+ virtual ~JudgmentRetrogradeTool();
+
+ bool init(QString area,QString line);
+
+ void setYoloObjects(std::vector<ScoredRect> value);
+
+ bool getPerRet(const long&);
+
+ bool getTriggerState() const;
+
+private:
+ void setPerPoint(const long&,cv::Point2f);
+ void setPerRect(const long&,cv::Rect rect);
+
+ //璁剧疆涓婅鐨勮繍鍔ㄥ熀鍑嗙嚎
+ void setUpBaseline(cv::Point start,cv::Point end);
+
+ //璁剧疆涓婅妫�娴嬪尯鍩�
+ void setUpDetectionArea();
+
+ //璁剧疆涓嬭鐨勮繍鍔ㄥ熀鍑嗙嚎
+ void setDownBaseline(cv::Point start,cv::Point end);
+
+ //璁剧疆涓嬭妫�娴嬪尯鍩�
+ void setDownDetectionArea();
+
+
+ void func();
+
+ float getTheta(BaseLine&,VectorPoint&);
+
+ QJsonArray getJsonArrayFromQString(const QString strJson);
+
+
+private:
+ // virtual void threadInitial() override;
+ virtual void timerFunc()override;
+ // virtual void threadClosing()override;
+
+private:
+
+ //鍩哄噯绾垮悜閲�
+ BaseLine m_UpBaseLine;
+ BaseLine m_DownBaseLine;
+
+ //浜哄憳杩愬姩杞ㄨ抗
+ //璺熻釜id,杩愬姩涓績鐐�
+ std::map<long,std::vector<cv::Point2f>> m_mapPerPoint;
+
+ //璺熻釜id,涓庡熀鍑嗙嚎鐨勫す瑙掑垪琛�
+ std::map<long,std::list<float>> m_mapPerDirection;
+
+ //璺熻釜id,閫嗚鐘舵��
+ std::map<long,bool> m_mapPerRet;
+
+ QPolygon m_polygon;
+
+ TriggerElement m_triggerElement;
+
+ std::vector<ScoredRect> mObjs;
+};
+
+
+#endif //JUDGINGRETROGRADE_JUDGMENTRETROGRADETOOL_H
diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
new file mode 100644
index 0000000..dda7544
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
@@ -0,0 +1,112 @@
+#include "NewRecordVideoElement.h"
+#include <basic/util/app/AppPreference.hpp>
+
+//#todo index int -> string
+NewRecordVideoElement::NewRecordVideoElement(std::string camid) :
+videoEncoderElement(cv::Size(1920, 1080), 9, 0),
+camID(camid)
+{
+
+ // basicPath();
+ m_cutPath= appPref.getStringData("user.loop.absolute.path");
+}
+
+NewRecordVideoElement::~NewRecordVideoElement() {
+m_imgBufQue.clear();
+}
+
+std::string NewRecordVideoElement::startRecord() {
+
+// ImgInfo info=m_HiredisTool.getImage(camID);
+ ImgInfo info;
+ getImg(info);
+ std::string srcPath= getFileName(info.time);
+
+
+ try {
+ videoEncoderElement.threadInitial(srcPath, info.img);
+ }
+ catch (std::exception &e) {
+ ERR(e.what())
+ }
+ return srcPath;
+}
+
+void NewRecordVideoElement::endRecord() {
+ ImgInfo info;
+ getImg(info);
+ videoEncoderElement.threadClosing();
+}
+
+void NewRecordVideoElement::doRecord() {
+
+
+// ImgInfo info=m_HiredisTool.getImage(camID);
+ ImgInfo info;
+ getImg(info);
+ DBG(" time="<<info.time);
+ videoEncoderElement.doFunc(info.img);
+}
+
+ std::string NewRecordVideoElement::getFileName(std::string timeStamp)
+{
+ std::string dirPath=makeDir();
+
+ char szDateTime[256] = {0};
+ sprintf(szDateTime, "%s%s.mp4", dirPath.c_str(), timeStamp.c_str());
+ DBG(szDateTime);
+ return szDateTime;
+}
+
+
+std::string NewRecordVideoElement::makeDir() {
+
+ //# ./camIndex/YYYYMM/DD/YYYYMMDDHH/
+ std::string t_FilePath = m_cutPath;
+
+ if (t_FilePath.back() != '/') {
+ t_FilePath.push_back('/');
+ }
+ char buf[24];
+
+ time_t t=time(nullptr);
+ // 20180901113048 2018-09-01 11:30:48
+ strftime(buf,24,"%Y%m%d%H",localtime(&t));
+ std::string t_strTime(buf);
+ //# ./camIndex/YYYYMM/DD/
+ t_FilePath.append(camID + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/");
+ //YYYYMMDDHH
+ t_FilePath.append(t_strTime.substr(0,10) + "/");
+ std::string t_cmd = "mkdir -p '";
+ t_cmd.append(t_FilePath + "'");
+ //#get path mkdir path
+ system(t_cmd.c_str());
+
+ return t_FilePath;
+}
+void NewRecordVideoElement::pushImgBuf(const std::string& time,cv::Mat img)
+{
+ ImgInfo info;
+ info.img=img;
+ info.time=time;
+ m_imgBufQue.push_front(info);
+// int size=m_imgBufQue.size();
+// DBG("m_imgBufQue size="<<size);
+}
+ void NewRecordVideoElement::getImg(ImgInfo& info)
+ {
+ //todo
+ int len=10;
+ info=m_imgBufQue.back();
+ int size=m_imgBufQue.size();
+ //DBG("m_imgBufQue size="<<size<<" time="<<info.time);
+ if(size>len)
+ {
+ m_imgBufQue.pop_back();
+
+
+ }
+
+
+
+ }
diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h
new file mode 100644
index 0000000..8da45c7
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h
@@ -0,0 +1,38 @@
+#ifndef NEWRECORDVIDEOELEMENT_H
+#define NEWRECORDVIDEOELEMENT_H
+
+#include <basic/pipe_element/ffmpeg/FfmpegElement.h>
+struct ImgInfo
+{
+ std::string time;
+ cv::Mat img;
+};
+class NewRecordVideoElement {
+
+public:
+
+ NewRecordVideoElement(){}
+ NewRecordVideoElement(std::string camid);
+
+ ~NewRecordVideoElement();
+
+ std::string startRecord();
+
+ void doRecord();
+
+ void endRecord();
+
+ void pushImgBuf(const std::string& time,cv::Mat img);
+
+ void getImg(ImgInfo& info);
+
+private:
+ std::string getFileName(std::string timeStamp);
+ std::string makeDir();
+ ffmpeg::VideoEncodeElement videoEncoderElement;
+ std::string camID;
+ std::string m_cutPath;
+ std::list<ImgInfo> m_imgBufQue;
+};
+
+#endif // RECORDVIDEOELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/PerimeterElement.cpp b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp
new file mode 100644
index 0000000..df68f9a
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp
@@ -0,0 +1,241 @@
+#include "PerimeterElement.h"
+#include <basic/event/EventBus.hpp>
+#include <basic/debug/Debug.h>
+#include <iostream>
+#include <opencv2/opencv.hpp>
+#include <basic/timer_counter/Clocktimer.h>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QString>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <basic/util/opencv/CvUtil.h>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+PerimeterElement::PerimeterElement(int alarm_people_num):
+m_nAlarmPeopleNum(alarm_people_num),
+PipeElement(true),
+trackingTrigger(nullptr),
+mRealNum(0),
+m_triggerElement(0,50)
+{
+
+ trackingTrigger= new TrackingTrigger(0.5);
+
+
+}
+
+PerimeterElement::~PerimeterElement()
+{
+ if(trackingTrigger)
+ {
+ delete trackingTrigger;
+ trackingTrigger=nullptr;
+ }
+}
+
+
+
+void PerimeterElement::threadInitial()
+{
+
+}
+
+
+void PerimeterElement::threadFunc()
+{
+
+ int num=0;
+ string detKey = getProperty("dev_id") + getProperty("ch_id")+getProperty("sdkType")+".det";
+ float t_det_sc =0.75;
+
+ t_det_sc= appPref.getFloatData(detKey) == -1 ? 0.75 : appPref.getFloatData(detKey);
+
+
+// t_det_sc= appPref.getFloatData(t_camIdex + "perimeter.det") == -1 ? 0.75 : appPref.getFloatData(t_camIdex + "perimeter.det");
+
+
+ for(auto obj:m_objs){
+ if(obj.type!=0) continue;
+ //todo
+ if(obj.prob < ((1-0.5)/2+0.5))continue;
+
+// ScoredRect scoredRect;
+
+ int x = obj.rcObj.left * image.cols;
+ int y = obj.rcObj.top * image.rows;
+ int w = (obj.rcObj.right - obj.rcObj.left) * image.cols;
+ int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows;
+// scoredRect.rect = cv::Rect(x, y, w, h);
+// scoredRect.score = scoredRect.rect.area() > 0 ? obj.prob : 0;
+ // cv::Rect rec=obj.rect;
+ QRect rect(x,y,w,h);
+ QPoint center = rect.center();
+ if(mPolygon.containsPoint(center,Qt::OddEvenFill))
+ {
+ // scoredRect.isMask=true;
+ //if(bInWeekTime)
+ num++;
+ auto t_image = image(cv::Rect(x, y, w, h)& cv::Rect(0, 0, image.cols, image.rows)).clone();
+ std::string imgUrl=uploadImgToFdfs(t_image);
+ saveInfoToEs(imgUrl,obj);
+ }
+// if(trackingTrigger->triggerOnce(scoredRect))
+// {
+// trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id);
+// trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type];
+// }
+
+ }
+ trackingTrigger->triggerLine();
+ if(num>=m_nAlarmPeopleNum)
+ {
+ m_triggerElement.setState(true);
+
+ }
+ else
+ {
+ m_triggerElement.setState(false);
+ }
+ m_triggerElement.triggerOnce();
+ mRealNum=num;
+
+ fireConnectors();
+}
+
+
+
+
+
+
+void PerimeterElement::setSensitivity(float value)
+{
+ sensitivity = value;
+}
+
+
+
+void PerimeterElement::setObjsResults(const YoloDetect::ObjInfos &value)
+{
+ m_objs = value;
+}
+
+std::vector<ScoredRect> PerimeterElement::getLastScoreRects() const {
+ return trackingTrigger->getLastScoreRects();
+}
+
+void PerimeterElement::setYoloObjects(std::vector<ScoredRect> value)
+{
+ mObjs=value;
+}
+
+int PerimeterElement::getRealNum() const
+{
+ //DBG("getRealNum "<<mRealNum);
+ return mRealNum;
+}
+void PerimeterElement::setMask(std::string mask)
+{
+ QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask));
+ if(arrayAreas.isEmpty())
+ {
+ return;//do not detect
+ }
+ for(int i = 0;i < arrayAreas.size();++i)
+ {
+ QJsonValue jsonValue = arrayAreas[i];
+ QJsonObject obj = jsonValue.toObject();
+ int x = obj.value("x").toInt()*2;
+ int y = obj.value("y").toInt()*2;
+ mPolygon<<(QPoint(x,y));
+
+ }
+}
+QJsonArray PerimeterElement::getJsonArrayFromQString(const QString& strJson)
+{
+ QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit());
+ if( jsonDocument.isNull() ){
+ //DBG("please check the string"<< strJson.toLocal8Bit());
+ return QJsonArray();
+ }
+ QJsonArray jsonArray = jsonDocument.array();
+ return jsonArray;
+}
+
+void PerimeterElement::setImage(const cv::Mat &value)
+{
+// if (value.size != image.size) {
+// image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
+// }
+// value.copyTo(image);
+}
+bool PerimeterElement::getTriggerState() const {
+ return m_triggerElement.getTriggerState();
+}
+std::string PerimeterElement::uploadImgToFdfs(cv::Mat& image)
+{
+ std::string strImgUrl = "http://";
+ if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
+ fdfsClient->rwLock.rdlock();
+ std::vector<unsigned char> buffer;
+ CvUtil::cvMat2Buffer(image, buffer);
+ std::string strImgUrlTmp = "";
+ fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
+ strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
+ strImgUrl.clear();
+ strImgUrl = strImgUrlTmp;
+// strImgUrl.append("/").append(strImgUrlTmp);
+ fdfsClient->rwLock.unlock();
+ }
+ return strImgUrl;
+}
+bool PerimeterElement::saveInfoToEs(const std::string& imgUrl,const ::YoloDetect::ObjInfo& obj)
+{
+
+ //#todo
+ EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+
+ string str_uuid;
+ uuid_t t_uuid;
+ char str[36];
+ uuid_generate(t_uuid);
+ uuid_unparse(t_uuid, str);
+ str_uuid = str;
+
+
+ Json::Value t_json;
+ t_json["Id"] = str_uuid; //涓婚敭
+//#todo
+
+ t_json["picName"] = "wait todo";
+ t_json["DataType"] = cocoData[obj.type];
+ t_json["Score"] = obj.prob;
+
+ t_json["likeDate"] = AppUtil::getTimeSecString();//姣旇緝鏃堕棿
+ t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
+ t_json["picSmUrl"] = imgUrl;//浜哄憳鎶撳皬鍥�
+ t_json["picDate"] = getProperty("time");
+ t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+ t_json["personIsHub"] = "4";//1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡
+ t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
+
+
+ t_json["videoNum"] = getProperty("path");//Vide缂栧彿 澶栭敭
+ t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
+ t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
+ t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+ t_json["indeviceid"] = appPref.getStringData("fxDevID");
+ t_json["indevicename"] = appPref.getStringData("fxDevNAME");
+ bool retface = false;
+ std::string name=getProperty("sdkType")+"det";
+ retface = pManagerEsDB.insertData(name, "info", t_json.toStyledString(), str_uuid);
+ if (retface)
+ {
+ INFO(name<<"db success");
+ }
+ else
+ {
+ ERR(name<<"db fail");
+ }
+}
diff --git a/QiaoJiaSystem/StructureApp/PerimeterElement.h b/QiaoJiaSystem/StructureApp/PerimeterElement.h
new file mode 100644
index 0000000..b6fbd88
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/PerimeterElement.h
@@ -0,0 +1,82 @@
+#ifndef PERIMETERELEMENT
+#define PERIMETERELEMENT
+#include <basic/pipe/PipeElement.h>
+#include <basic/event/EventHandler.hpp>
+#include <opencv2/opencv.hpp>
+#include <Ice/Ice.h>
+#include <YoloServer.h>
+#include <QtGui/qpolygon.h>
+#include "TrackingTrigger.h"
+#include <QJsonArray>
+#include <RapidStructureApp/TriggerElement.h>
+#include <basic/util/fastdfs/FastFds.hpp>
+class PerimeterElement : public basic::PipeElement
+{
+public:
+ PerimeterElement(int alarm_people_num=1);
+public:
+ ~PerimeterElement();
+
+ //鏄惁鏈夌煩褰�
+ bool hasRects();
+ //璁剧疆ROI鍖哄煙
+ void setMask(std::string mask);
+
+ void setImage(const cv::Mat &value);
+
+ void setYoloObjects(std::vector<ScoredRect> value);
+
+ //灏嗘娴嬬粨鏋滄斁鍒版鍗曞厓涓�
+ //void setVptResults(const vector<VPT_ObjInfo> &value);
+ void setObjsResults(const ::YoloDetect::ObjInfos &value);
+
+ //璁剧疆缃俊搴�
+ void setSensitivity(float value);
+
+ //鑾峰彇鐭╁舰妗�
+ std::vector<cv::Rect2f> getRects() const;
+
+ //鑾峰彇YOLO妫�娴嬬殑缁撴灉
+ std::vector<ScoredRect> getLastScoreRects() const;
+
+ int getRealNum() const;
+
+ bool getTriggerState() const;
+
+ void setFdfs(FastFdsWithLock *p_fdfsClient) {
+ fdfsClient = p_fdfsClient;
+ }
+
+
+private:
+
+
+ virtual void threadInitial()override;
+
+ virtual void threadFunc()override;
+
+ QJsonArray getJsonArrayFromQString(const QString& strJson);
+
+ std::string uploadImgToFdfs(cv::Mat& image);
+
+ bool saveInfoToEs(const std::string& imgUrl,const ::YoloDetect::ObjInfo& obj);
+
+
+
+private:
+ cv::Mat image;
+ cv::Mat mask;
+ //vector<VPT_ObjInfo> vptResults;
+ ::YoloDetect::ObjInfos m_objs;
+ float sensitivity;
+ QPolygon mPolygon;
+ TrackingTrigger *trackingTrigger;
+ ::YoloDetect::stringData cocoData;
+ int mRealNum;
+ int m_nAlarmPeopleNum;
+ std::vector<ScoredRect> mObjs;
+ TriggerElement m_triggerElement;
+ FastFdsWithLock* fdfsClient;
+};
+
+#endif // PAELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/RecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/RecordVideoElement.cpp
new file mode 100644
index 0000000..a4ced8a
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/RecordVideoElement.cpp
@@ -0,0 +1,63 @@
+#include "RecordVideoElement.h"
+#include <basic/util/app/AppPreference.hpp>
+
+RecordVideoElement::RecordVideoElement(int index, std::string rtsp)
+ : m_nIndex(std::to_string(index)), m_strRtsp(rtsp),
+ loopRecordClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"),
+ appPref.getIntData("loopRecord.port"), "tcp") {
+
+}
+
+//#todo index int -> string
+RecordVideoElement::RecordVideoElement(std::string index, std::string rtsp)
+ : m_nIndex(index), m_strRtsp(rtsp),
+ loopRecordClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"),
+ appPref.getIntData("loopRecord.port"), "tcp") {
+
+}
+
+RecordVideoElement::~RecordVideoElement() {
+
+}
+
+std::string RecordVideoElement::startRecord() {
+ return callStartRecord(m_strRtsp);
+}
+
+std::string RecordVideoElement::callStartRecord(std::string jsonValue) {
+ try {
+ auto server = loopRecordClient.getServer();
+ return server->addCamera(m_nIndex, jsonValue);
+ }
+ catch (std::exception &e) {
+ ERR(e.what())
+ return "";
+ }
+}
+
+std::string RecordVideoElement::startRecord(std::string json) {
+ return callStartRecord(json);
+}
+
+void RecordVideoElement::endRecord() {
+ try {
+ auto server = loopRecordClient.getServer();
+ server->removeCamera(m_nIndex);
+ }
+ catch (std::exception &e) {
+ ERR(e.what())
+ }
+}
+
+void RecordVideoElement::feedDog() {
+ try {
+ auto server = loopRecordClient.getServer();
+ server->feedDog(m_nIndex);
+ //INFO("feedDog:" + m_nIndex);
+ }
+ catch (std::exception &e) {
+ ERR(e.what())
+ }
+}
+
+
diff --git a/QiaoJiaSystem/StructureApp/RecordVideoElement.h b/QiaoJiaSystem/StructureApp/RecordVideoElement.h
new file mode 100644
index 0000000..c036246
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/RecordVideoElement.h
@@ -0,0 +1,33 @@
+#ifndef RECORDVIDEOELEMENT_H
+#define RECORDVIDEOELEMENT_H
+
+#include "TimerElement.h"
+#include <basic/rpc/IceRpc.hpp>
+#include "RecordVideo.h"
+
+class RecordVideoElement {
+
+public:
+ RecordVideoElement(int index, std::string rtsp);
+
+ RecordVideoElement(std::string index, std::string rtsp);
+
+ ~RecordVideoElement();
+
+ std::string startRecord();
+
+ std::string startRecord(std::string json);
+
+ void endRecord();
+
+ void feedDog();
+
+private:
+ std::string m_nIndex;
+ std::string m_strRtsp;
+ IceRpcClient<RecordVideo::LoopRecorderPrx> loopRecordClient;
+
+ std::string callStartRecord(std::string jsonValue);
+};
+
+#endif // RECORDVIDEOELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/StructureAppI.cpp b/QiaoJiaSystem/StructureApp/StructureAppI.cpp
new file mode 100644
index 0000000..c501d76
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/StructureAppI.cpp
@@ -0,0 +1,90 @@
+#include "StructureAppI.h"
+Ice::Int StructureAppI::addCamera(Ice::Int index, const std::string &json, const Ice::Current ¤t)
+{
+ if(controllers.find(index)==controllers.end()){
+ if(currentCount>=maxCount){
+ ERR("addCamera faild, camera's num is full!")
+ return -1;
+ }
+ Json::CharReaderBuilder builder;
+ auto reader = builder.newCharReader();
+ Json::Value value;
+ reader->parse(json.data(), json.data() + json.size(), &value, nullptr);
+ controllers[index] = new AppPipeController(index,std::move(value));
+ controllers[index]->start();
+ currentCount++;
+ return 0;
+ }else{
+ removeCamera(index,current);
+ DBG("removeCamera "<<index)
+ return addCamera(index,json,current);
+ }
+}
+
+Ice::Int StructureAppI::removeCamera(Ice::Int index, const Ice::Current &)
+{
+ if(controllers.find(index)==controllers.end())return -1;
+ auto controller = controllers[index];
+ controller->stop();
+ controller->wait();
+ delete controller;
+ controllers.erase(index);
+ currentCount--;
+ return 0;
+}
+
+Ice::Int StructureAppI::removeAll(const Ice::Current &)
+{
+ for(auto controller: controllers){
+ controller.second->stop();
+ }
+ for(auto controller: controllers){
+ controller.second->wait();
+ delete controller.second;
+ }
+ controllers.clear();
+ currentCount = 0;
+ return 0;
+}
+
+Ice::Int StructureAppI::getMaxCamCount(const Ice::Current &)
+{
+ return maxCount;
+}
+
+Ice::Int StructureAppI::getCurrentCamCount(const Ice::Current &)
+{
+ return currentCount;
+}
+
+int StructureAppI::addVedio(int index, string path,string state)
+{
+ if(controllers.find(index)==controllers.end()){
+ if(currentCount>=maxCount){
+ ERR("addCamera faild, camera's num is full!")
+ return -1;
+ }
+ Json::Value json;
+ json["rtsp"] = path;
+ json["state"] = state;
+ controllers[index] = new AppPipeController(index,json);
+ controllers[index]->start();
+ currentCount++;
+ return 0;
+ }/*else
+ {
+ removeCamera(index,current);
+ DBG("removeCamera "<<index)
+ return addCamera(index,json,current);
+ }*/
+}
+
+string StructureAppI::getRtmp(Ice::Int index, const Ice::Current &)
+{
+ if(controllers.find(index)==controllers.end())return "";
+ auto controller = controllers[index];
+ return controller->getRtmp();
+}
+
+
+
diff --git a/QiaoJiaSystem/StructureApp/StructureAppI.h b/QiaoJiaSystem/StructureApp/StructureAppI.h
new file mode 100644
index 0000000..b09efdd
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/StructureAppI.h
@@ -0,0 +1,50 @@
+#ifndef STRUCTUREAPPI_H
+#define STRUCTUREAPPI_H
+#include "AppPipeController.h"
+#include <atomic>
+#include <Ice/Ice.h>
+#include "rpc/StructureApp.h"
+
+class StructureAppI : public Structure::StructureApp{
+
+public:
+
+ StructureAppI(int maxCount):currentCount(0),maxCount(maxCount)
+ {}
+ ~StructureAppI(){
+ for(auto controller: controllers){
+ delete controller.second;
+ }
+ controllers.clear();
+ }
+ // StructureApp interface
+public:
+ virtual Ice::Int addCamera(Ice::Int, const std::string &, const Ice::Current &) override;
+ virtual Ice::Int removeCamera(Ice::Int, const Ice::Current &) override;
+ virtual Ice::Int removeAll(const Ice::Current &) override;
+ virtual Ice::Int getMaxCamCount(const Ice::Current &) override;
+ virtual Ice::Int getCurrentCamCount(const Ice::Current &) override;
+ int addVedio(int index, std::string path, string state);
+
+private:
+ std::map<int, AppPipeController*> controllers;
+ std::atomic<int> currentCount;
+ int maxCount;
+ // StructureApp interface
+public:
+ virtual string getRtmp(Ice::Int, const Ice::Current &) override;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+#endif // STRUCTUREAPPI_H
diff --git a/QiaoJiaSystem/StructureApp/TrackingTrigger.cpp b/QiaoJiaSystem/StructureApp/TrackingTrigger.cpp
new file mode 100644
index 0000000..c35472c
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/TrackingTrigger.cpp
@@ -0,0 +1 @@
+#include "TrackingTrigger.h"
diff --git a/QiaoJiaSystem/StructureApp/TrackingTrigger.h b/QiaoJiaSystem/StructureApp/TrackingTrigger.h
new file mode 100644
index 0000000..8fe9509
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/TrackingTrigger.h
@@ -0,0 +1,69 @@
+#ifndef TRACKINGTRIGGER_H
+#define TRACKINGTRIGGER_H
+
+#include <vector>
+#include <opencv2/opencv.hpp>
+#include <functional>
+#include <atomic>
+
+using namespace std;
+
+struct ScoredRect {
+ ScoredRect() : id(-1) ,isMask(false){}
+ bool isMask;
+ float score;
+ cv::Rect rect;
+ long id;
+ map<string, string> properties;
+};
+
+class TrackingTrigger {
+public:
+ TrackingTrigger(float threshold) :
+ threshold(threshold), faceTrackingId(0) {}
+
+ bool triggerOnce(ScoredRect &rect) {
+ bool found = false;
+ for (auto lastRect: lastScoreRects) {
+ if (lastRect.id >= 0 && (rect.rect & lastRect.rect).area() > lastRect.rect.area() * 0.4) {
+ found = true;
+ rect.id = lastRect.id;
+ rect.properties = lastRect.properties;
+ tempScoreRects.push_back(rect);
+ break;
+ }
+ }
+ if (!found) {
+ if (rect.score < threshold) {
+// tempScoreRects.push_back(rect);
+ return false;
+ } else {
+ rect.id = faceTrackingId++;
+ tempScoreRects.push_back(rect);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void triggerLine() {
+ lastScoreRects = tempScoreRects;
+ tempScoreRects.clear();
+ }
+
+ ScoredRect &getLastRect() {
+ return tempScoreRects[tempScoreRects.size() - 1];
+ }
+
+ std::vector<ScoredRect> getLastScoreRects() const {
+ return lastScoreRects;
+ }
+
+private:
+ float threshold;
+ std::vector<ScoredRect> lastScoreRects;
+ std::vector<ScoredRect> tempScoreRects;
+ std::atomic<long> faceTrackingId;
+};
+
+#endif // TRACKINGTRIGGER_H
diff --git a/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp b/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp
new file mode 100644
index 0000000..7f660d7
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp
@@ -0,0 +1,199 @@
+#include "YoloRpcElement.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QSharedMemory>
+#include <QtCore/QString>
+#include <basic/timer_counter/Clocktimer.h>
+#include <basic/util/opencv/CvUtil.h>
+
+
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+
+#include <basic/db/ES/es/ManagerEsDB.h>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+
+YoloRpcElement::YoloRpcElement(string shareMemoryName) :
+ rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"),
+ appPref.getIntData("yolo.port"), "tcp"), fdfsClient(nullptr), sharedMemory(nullptr),
+ m_triggerElement(0, 50), trackingTrigger(nullptr) {
+ sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
+// DBG(shareMemoryName);
+ //1520 x 2688 1080 x 1920 //2560 * 1440 * 4
+ if (!sharedMemory->create(4608 * 2592 * 4)) {
+ sharedMemory->attach();
+ }
+ trackingTrigger = new TrackingTrigger(0.5);
+ try {
+ auto server = rpcClient.getServer();
+ cocoData = server->getCocoData();
+ }
+ catch (std::exception &e) {
+ ERR(e.what())
+ }
+}
+
+YoloRpcElement::~YoloRpcElement() {
+ if (sharedMemory) {
+ delete sharedMemory;
+ }
+ if (trackingTrigger) {
+ delete trackingTrigger;
+ }
+}
+
+void YoloRpcElement::threadFunc() {
+// ClockTimer ct("YoloRpcElement::threadFunc");.
+ triggerMats.clear();
+ try {
+ auto server = rpcClient.getServer();
+ if (!server) {
+ ERR("server is null");
+ return;
+ }
+ objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO
+ if (objs.size() <= 0) {
+ m_triggerElement.setState(false);
+ m_triggerElement.triggerOnce(false);
+ trackingTrigger->triggerLine();
+ return;
+ } else {
+ m_triggerElement.setState(true);
+ }
+ string t_camIdex = getProperty("dev_id") + getProperty("ch_id");
+ float t_det_sc =
+ appPref.getFloatData(t_camIdex + "yolo.det") == -1 ? 0.75 : appPref.getFloatData(t_camIdex + "yolo.det");
+
+ for (auto &obj: objs) {
+ if (obj.type != 0)
+ continue;
+ if (obj.prob < t_det_sc) {
+ continue;
+ }
+ ScoredRect scoredRect;
+
+ int x = obj.rcObj.left * image.cols;
+ int y = obj.rcObj.top * image.rows;
+ int w = (obj.rcObj.right - obj.rcObj.left) * image.cols;
+ int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows;
+ scoredRect.rect = cv::Rect(x, y, w, h);
+
+ scoredRect.score = scoredRect.rect.area() > 0 ? obj.prob : 0;
+ if (trackingTrigger->triggerOnce(scoredRect)) {
+ trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id);
+ trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type];
+ auto t_image = image(scoredRect.rect & cv::Rect(0, 0, image.cols, image.rows)).clone();
+ triggerMats.push_back(t_image);
+
+ std::string strImgUrl = "http://";
+ if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
+ fdfsClient->rwLock.rdlock();
+ std::vector<unsigned char> buffer;
+ CvUtil::cvMat2Buffer(t_image, buffer);
+ std::string strImgUrlTmp = "";
+ fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
+ strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
+ strImgUrl.clear();
+ strImgUrl = strImgUrlTmp;
+// strImgUrl.append("/").append(strImgUrlTmp);
+ fdfsClient->rwLock.unlock();
+ }
+
+ //浣跨敤鐨勬椂鍊欏皢false鏀逛负ture
+ {
+ //#todo
+ EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+
+ string str_uuid;
+ uuid_t t_uuid;
+ char str[36];
+ uuid_generate(t_uuid);
+ uuid_unparse(t_uuid, str);
+ str_uuid = str;
+
+// jsonyolo.insert("HardCamId","");//纭洏鎽勫儚鏈篿d 锛燂紵锛熸嬁涓嶅埌
+// jsonyolo.insert("ChannlId","");//閫氶亾id 锛燂紵锛� 鎷夸笉鍒�
+// jsonyolo.insert("Time","");//鏃堕棿 鍙互鑾峰彇褰撳墠鏃堕棿 鏄庣‘鏃堕棿鏄幏鍙栧綋鍓嶇殑杩樻槸浼犺繃鏉ョ殑 锛燂紵锛� 鎷夸笉鍒�
+// jsonyolo.insert("ImgUrl","");//鍥惧儚img璺緞 锛燂紵锛� 鎷夸笉鍒�
+// jsonyolo.insert("Image","");//蹇収 锛燂紵锛� 鎷夸笉鍒�
+// jsonyolo.insert("DataType",obj.type);//妫�娴嬬殑绫诲瀷
+// jsonyolo.insert("Score",obj.prob);//妫�娴嬬殑寰楀垎
+
+ Json::Value t_json;
+ t_json["Id"] = str_uuid; //涓婚敭
+//#todo
+
+ t_json["picName"] = "wait todo";
+ t_json["DataType"] = cocoData[obj.type];
+ t_json["Score"] = obj.prob;
+
+ t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store
+ t_json["likeDate"] = AppUtil::getTimeSecString();//姣旇緝鏃堕棿
+ t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
+ t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞
+ t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞
+ t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥�
+
+// faceRpcElement.setProperty("frame_number", frame_number);
+ t_json["picDate"] = getProperty("time");
+ t_json["content"] = "wait todo";
+ t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+ t_json["personIsHub"] = "4";//1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡
+ t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
+
+
+ t_json["videoNum"] = getProperty("path");//Vide缂栧彿 澶栭敭
+ t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
+ t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
+ t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+ t_json["indeviceid"] = appPref.getStringData("fxDevID");
+ t_json["indevicename"] = appPref.getStringData("fxDevNAME");
+
+ DBG(t_json.toStyledString());
+ bool retface = false;
+ retface = pManagerEsDB.insertData("yolodet", "info", t_json.toStyledString(), str_uuid);
+ if (retface) {
+ INFO("facedb success");
+ } else {
+ ERR("facedb fail");
+ }
+ }
+ }
+ }
+ trackingTrigger->triggerLine();
+ m_triggerElement.triggerOnce(false);
+ if (triggerMats.size() > 0)fireConnectors("YoloTrigger");
+ fireConnectors();
+ } catch (std::exception &e) {
+ ERR(e.what())
+ }
+}
+
+::YoloDetect::ObjInfos YoloRpcElement::getObjects() const {
+ return objs;
+}
+
+bool YoloRpcElement::getTrigger() const {
+ return (objs.size() > 0 ? true : false);
+}
+
+std::vector<cv::Mat> YoloRpcElement::getTriggerMats() {
+ return triggerMats;
+}
+
+std::vector<ScoredRect> YoloRpcElement::getLastScoreRects() const {
+ return trackingTrigger->getLastScoreRects();
+}
+
+void YoloRpcElement::setImage(const cv::Mat &value) {
+ if (value.size != image.size) {
+ image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
+ }
+ value.copyTo(image);
+}
+
+bool YoloRpcElement::getTriggerState() const {
+ return m_triggerElement.getTriggerState();
+}
diff --git a/QiaoJiaSystem/StructureApp/YoloRpcElement.h b/QiaoJiaSystem/StructureApp/YoloRpcElement.h
new file mode 100644
index 0000000..857f2d7
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/YoloRpcElement.h
@@ -0,0 +1,52 @@
+#ifndef YOLORPCELEMENT_H
+#define YOLORPCELEMENT_H
+
+#include <YoloServer.h>
+#include <basic/pipe/PipeElement.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <opencv2/opencv.hpp>
+#include <basic/util/fastdfs/FastFds.hpp>
+#include <RapidStructureApp/TriggerElement.h>
+#include "TrackingTrigger.h"
+
+class QSharedMemory;
+
+class YoloRpcElement : public basic::PipeElement {
+public:
+ YoloRpcElement(string);
+
+ ~YoloRpcElement();
+
+ void setImage(const cv::Mat &value);
+
+ ::YoloDetect::ObjInfos getObjects() const;
+
+ std::vector<cv::Mat> getTriggerMats();
+
+ std::vector<ScoredRect> getLastScoreRects() const;
+
+ void setFdfs(FastFdsWithLock *p_fdfsClient) {
+ fdfsClient = p_fdfsClient;
+ }
+
+ bool getTriggerState() const;
+
+ bool getTrigger() const;
+
+private:
+ virtual void threadFunc() override;
+
+private:
+ IceRpcClient<YoloDetect::YoloDetectServerPrx> rpcClient;
+ cv::Mat image;
+ QSharedMemory *sharedMemory;
+ ::YoloDetect::ObjInfos objs;
+ TrackingTrigger *trackingTrigger;
+ std::vector<cv::Mat> triggerMats;
+ ::YoloDetect::stringData cocoData;
+ FastFdsWithLock *fdfsClient;
+
+ TriggerElement m_triggerElement;
+};
+
+#endif // YOLORPCELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/main.cpp b/QiaoJiaSystem/StructureApp/main.cpp
new file mode 100644
index 0000000..c820521
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/main.cpp
@@ -0,0 +1,120 @@
+#include <thread>
+#include "AppPipeController.h"
+#include <basic/util/file/FileUtil.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/debug/Debug.h>
+
+using namespace std;
+
+
+int main(int argc, char **argv) {
+ SAVE_APP_ARGS;
+
+#ifdef GLOG
+ ENABLEGLOG("./log/");
+#endif
+
+// std::string src_path = "/home/bsk/development/c++/Qt/QiaoJiaSystem/build/cut/123456/34/201808/28/123456-34-201808-20180828090100";
+ std::string src_path = "/home/basic/瑙嗛/test";
+
+
+ appPref.setLongData("gpu.index", 0);
+ appPref.setIntData("show.image", 0);
+
+ //yolo server
+ appPref.setStringData("yolo.proxy", "yoloServer");
+ //#todo
+ appPref.setStringData("yolo.ip", "");
+ appPref.setIntData("yolo.port", 10003);
+// rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"),
+
+
+ //face detect server
+ appPref.setStringData("faceDete.proxy", "faceServer");
+ //#todo
+ appPref.setStringData("faceDete.ip", "");
+ appPref.setIntData("faceDete.port", 10002);
+//rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"), appPref.getLongData("faceDete.port"),"tcp"),
+// rpcClient("faceServer","",10002,"tcp"),
+
+
+ //fece extern server
+ appPref.setStringData("faceExte.proxy", "faceExtractServer");
+ //#todo
+ appPref.setStringData("faceExte.ip", "");
+ appPref.setIntData("faceExte.port", 10008);
+//rpcClient(appPref.getStringData("faceExte.proxy"), appPref.getStringData("faceExte.ip"), appPref.getLongData("faceExte.port"),"tcp"),
+// "faceExtractServer", "", 10008, "tcp"),//浜鸿劯鐗瑰緛鎻愬彇 淇敼鎴愮偣瀵圭偣閫氳
+
+
+ //face search server
+ appPref.setStringData("faceSear.proxy", "faceCmServer");
+ //#todo
+ appPref.setStringData("faceSear.ip", "");
+ appPref.setIntData("faceSear.port", 10004);
+//rpcClient(appPref.getStringData("faceSear.proxy"), appPref.getStringData("faceSear.ip"), appPref.getLongData("faceSear.port"),"tcp"),
+// faceSearchRpcClient("faceCmServer", "", 10004, "tcp")
+
+ //loopRecord server
+ appPref.setStringData("loopRecord.proxy", "LoopRecordVideoServer");
+ //#todo
+ appPref.setStringData("loopRecord.ip", "");
+ appPref.setIntData("loopRecord.port", 10010);
+//rpcClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"), appPref.getLongData("loopRecord.port"),"tcp"),
+
+ appPref.setStringData("ipAdd", "192.168.1.185");
+ appPref.setIntData("ipPort", 9200);
+ Json::Value json;
+
+ //split sdks enable
+ //#todo other sdk
+
+ json["face.enable"] = "1";
+ json["yolo.enable"] = "0";
+ json["rtsp"] = "rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+// json["rtsp"] = "rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+// json["rtsp"] = "/home/bsk/test/realtime/test123/201809/27/test123-2018092717/2018-09-27 17:20:57.mp4";
+
+
+ FastFdsWithLock fdfsClient;
+// fdfsClient.fastFds = new FastFds;
+
+ //#todo from path get file list
+ file_filter_type filter = [](const char *dirName, const char *dirent) {
+ return (strstr(dirent, ".mp4") != nullptr);// add format
+ };
+ std::vector<std::string> vec = for_each_file(src_path, filter);
+// while (true) {
+ auto size = vec.size();
+// int size = 1;
+ int pos = 0;
+ AppPipeController _AppPipeController("test12344", json, true);
+// AppPipeController _AppPipeController(src_path, json);
+ _AppPipeController.setfdfsClient(&fdfsClient);
+// for (; pos < size;) {
+//
+// //#todo
+// _AppPipeController.resetVideoCapturePath(vec[pos++]);
+// _AppPipeController.resetVideoCapturePath(
+// "/home/basic/work/qiaojia/cut/DS-7808N-SN0820161208AARR691369356WCVU/34/201810/11/DS-7808N-SN0820161208AARR691369356WCVU-34-20181011090000/2018-10-11 09:48:05.mp4");
+ _AppPipeController.start();
+ while (_AppPipeController.getRunning()) {
+ usleep(40000);
+ }
+ _AppPipeController.stop();
+ _AppPipeController.wait();
+ DBG("finish file");
+// }
+// }
+
+// _AppPipeController.start();
+// while (_AppPipeController.getRunning()) {
+// usleep(40000);
+// }
+// _AppPipeController.stop();
+// _AppPipeController.wait();
+//
+ getchar();
+
+ return 0;
+}
diff --git a/QiaoJiaSystem/StructureApp/rpc/Basic/__init__.py b/QiaoJiaSystem/StructureApp/rpc/Basic/__init__.py
new file mode 100644
index 0000000..caeef8c
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/Basic/__init__.py
@@ -0,0 +1,10 @@
+# Generated by slice2py - DO NOT EDIT!
+#
+
+import Ice
+Ice.updateModule("Basic")
+
+# Modules:
+import StructureApp_ice
+
+# Submodules:
diff --git a/QiaoJiaSystem/StructureApp/rpc/Structure/__init__.py b/QiaoJiaSystem/StructureApp/rpc/Structure/__init__.py
new file mode 100644
index 0000000..04e7326
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/Structure/__init__.py
@@ -0,0 +1,10 @@
+# Generated by slice2py - DO NOT EDIT!
+#
+
+import Ice
+Ice.updateModule("Structure")
+
+# Modules:
+import StructureApp_ice
+
+# Submodules:
diff --git a/QiaoJiaSystem/StructureApp/rpc/StructureApp.cpp b/QiaoJiaSystem/StructureApp/rpc/StructureApp.cpp
new file mode 100644
index 0000000..7fbdcb5
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/StructureApp.cpp
@@ -0,0 +1,854 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `StructureApp.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <StructureApp.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+# pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+# pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_Structure_StructureApp_ids[2] =
+{
+ "::Ice::Object",
+ "::Structure::StructureApp"
+};
+const ::std::string iceC_Structure_StructureApp_ops[] =
+{
+ "addCamera",
+ "getCurrentCamCount",
+ "getMaxCamCount",
+ "getRtmp",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping",
+ "removeAll",
+ "removeCamera"
+};
+const ::std::string iceC_Structure_StructureApp_addCamera_name = "addCamera";
+const ::std::string iceC_Structure_StructureApp_removeCamera_name = "removeCamera";
+const ::std::string iceC_Structure_StructureApp_removeAll_name = "removeAll";
+const ::std::string iceC_Structure_StructureApp_getMaxCamCount_name = "getMaxCamCount";
+const ::std::string iceC_Structure_StructureApp_getCurrentCamCount_name = "getCurrentCamCount";
+const ::std::string iceC_Structure_StructureApp_getRtmp_name = "getRtmp";
+
+}
+
+bool
+Structure::StructureApp::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_Structure_StructureApp_ids, iceC_Structure_StructureApp_ids + 2, s);
+}
+
+::std::vector<::std::string>
+Structure::StructureApp::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector<::std::string>(&iceC_Structure_StructureApp_ids[0], &iceC_Structure_StructureApp_ids[2]);
+}
+
+::std::string
+Structure::StructureApp::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+Structure::StructureApp::ice_staticId()
+{
+ static const ::std::string typeId = "::Structure::StructureApp";
+ return typeId;
+}
+
+bool
+Structure::StructureApp::_iceD_addCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ int iceP_index;
+ ::std::string iceP_jsonConfig;
+ istr->readAll(iceP_index, iceP_jsonConfig);
+ inS.endReadParams();
+ int ret = this->addCamera(iceP_index, ::std::move(iceP_jsonConfig), current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_removeCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ int iceP_index;
+ istr->readAll(iceP_index);
+ inS.endReadParams();
+ int ret = this->removeCamera(iceP_index, current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_removeAll(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ inS.readEmptyParams();
+ int ret = this->removeAll(current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getMaxCamCount(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ inS.readEmptyParams();
+ int ret = this->getMaxCamCount(current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getCurrentCamCount(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ inS.readEmptyParams();
+ int ret = this->getCurrentCamCount(current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getRtmp(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ int iceP_index;
+ istr->readAll(iceP_index);
+ inS.endReadParams();
+ ::std::string ret = this->getRtmp(iceP_index, current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_Structure_StructureApp_ops, iceC_Structure_StructureApp_ops + 10, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_Structure_StructureApp_ops)
+ {
+ case 0:
+ {
+ return _iceD_addCamera(in, current);
+ }
+ case 1:
+ {
+ return _iceD_getCurrentCamCount(in, current);
+ }
+ case 2:
+ {
+ return _iceD_getMaxCamCount(in, current);
+ }
+ case 3:
+ {
+ return _iceD_getRtmp(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 6:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 7:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ case 8:
+ {
+ return _iceD_removeAll(in, current);
+ }
+ case 9:
+ {
+ return _iceD_removeCamera(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+Structure::StructureAppPrx::_iceI_addCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_addCamera_name);
+ outAsync->invoke(iceC_Structure_StructureApp_addCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_index, iceP_jsonConfig);
+ },
+ nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_removeCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, int iceP_index, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_removeCamera_name);
+ outAsync->invoke(iceC_Structure_StructureApp_removeCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_index);
+ },
+ nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_removeAll(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_removeAll_name);
+ outAsync->invoke(iceC_Structure_StructureApp_removeAll_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ nullptr,
+ nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_getMaxCamCount(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_getMaxCamCount_name);
+ outAsync->invoke(iceC_Structure_StructureApp_getMaxCamCount_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ nullptr,
+ nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_getCurrentCamCount(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_getCurrentCamCount_name);
+ outAsync->invoke(iceC_Structure_StructureApp_getCurrentCamCount_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ nullptr,
+ nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_getRtmp(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>& outAsync, int iceP_index, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_getRtmp_name);
+ outAsync->invoke(iceC_Structure_StructureApp_getRtmp_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_index);
+ },
+ nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+Structure::StructureAppPrx::_newInstance() const
+{
+ return ::IceInternal::createProxy<StructureAppPrx>();
+}
+
+const ::std::string&
+Structure::StructureAppPrx::ice_staticId()
+{
+ return Structure::StructureApp::ice_staticId();
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_Structure_StructureApp_addCamera_name = "addCamera";
+
+const ::std::string iceC_Structure_StructureApp_removeCamera_name = "removeCamera";
+
+const ::std::string iceC_Structure_StructureApp_removeAll_name = "removeAll";
+
+const ::std::string iceC_Structure_StructureApp_getMaxCamCount_name = "getMaxCamCount";
+
+const ::std::string iceC_Structure_StructureApp_getCurrentCamCount_name = "getCurrentCamCount";
+
+const ::std::string iceC_Structure_StructureApp_getRtmp_name = "getRtmp";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::Structure::upCast(::IceProxy::Structure::StructureApp* p) { return p; }
+
+void
+::IceProxy::Structure::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::Structure::StructureApp>& v)
+{
+ ::Ice::ObjectPrx proxy;
+ istr->read(proxy);
+ if(!proxy)
+ {
+ v = 0;
+ }
+ else
+ {
+ v = new ::IceProxy::Structure::StructureApp;
+ v->_copyFrom(proxy);
+ }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_addCamera_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_addCamera_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_Structure_StructureApp_addCamera_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_index);
+ ostr->write(iceP_jsonConfig);
+ result->endWriteParams();
+ result->invoke(iceC_Structure_StructureApp_addCamera_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_addCamera(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_addCamera_name);
+ ::Ice::Int ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_removeCamera_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_removeCamera_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_Structure_StructureApp_removeCamera_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_index);
+ result->endWriteParams();
+ result->invoke(iceC_Structure_StructureApp_removeCamera_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_removeCamera(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_removeCamera_name);
+ ::Ice::Int ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_removeAll(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_removeAll_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_removeAll_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_Structure_StructureApp_removeAll_name, ::Ice::Normal, context);
+ result->writeEmptyParams();
+ result->invoke(iceC_Structure_StructureApp_removeAll_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_removeAll(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_removeAll_name);
+ ::Ice::Int ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_getMaxCamCount(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_getMaxCamCount_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_getMaxCamCount_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_Structure_StructureApp_getMaxCamCount_name, ::Ice::Normal, context);
+ result->writeEmptyParams();
+ result->invoke(iceC_Structure_StructureApp_getMaxCamCount_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_getMaxCamCount(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_getMaxCamCount_name);
+ ::Ice::Int ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_getCurrentCamCount(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_getCurrentCamCount_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_getCurrentCamCount_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_Structure_StructureApp_getCurrentCamCount_name, ::Ice::Normal, context);
+ result->writeEmptyParams();
+ result->invoke(iceC_Structure_StructureApp_getCurrentCamCount_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_getCurrentCamCount(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_getCurrentCamCount_name);
+ ::Ice::Int ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_Structure_StructureApp_getRtmp_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_getRtmp_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_Structure_StructureApp_getRtmp_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_index);
+ result->endWriteParams();
+ result->invoke(iceC_Structure_StructureApp_getRtmp_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::std::string
+IceProxy::Structure::StructureApp::end_getRtmp(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_getRtmp_name);
+ ::std::string ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::Structure::StructureApp::_newInstance() const
+{
+ return new StructureApp;
+}
+
+const ::std::string&
+IceProxy::Structure::StructureApp::ice_staticId()
+{
+ return ::Structure::StructureApp::ice_staticId();
+}
+
+Structure::StructureApp::~StructureApp()
+{
+}
+
+::Ice::Object* Structure::upCast(::Structure::StructureApp* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_Structure_StructureApp_ids[2] =
+{
+ "::Ice::Object",
+ "::Structure::StructureApp"
+};
+
+}
+
+bool
+Structure::StructureApp::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_Structure_StructureApp_ids, iceC_Structure_StructureApp_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+Structure::StructureApp::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector< ::std::string>(&iceC_Structure_StructureApp_ids[0], &iceC_Structure_StructureApp_ids[2]);
+}
+
+const ::std::string&
+Structure::StructureApp::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+Structure::StructureApp::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+ static const ::std::string typeId = "::Structure::StructureApp";
+ return typeId;
+#else
+ return iceC_Structure_StructureApp_ids[1];
+#endif
+}
+
+bool
+Structure::StructureApp::_iceD_addCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::Ice::Int iceP_index;
+ ::std::string iceP_jsonConfig;
+ istr->read(iceP_index);
+ istr->read(iceP_jsonConfig);
+ inS.endReadParams();
+ ::Ice::Int ret = this->addCamera(iceP_index, iceP_jsonConfig, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_removeCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::Ice::Int iceP_index;
+ istr->read(iceP_index);
+ inS.endReadParams();
+ ::Ice::Int ret = this->removeCamera(iceP_index, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_removeAll(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ inS.readEmptyParams();
+ ::Ice::Int ret = this->removeAll(current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getMaxCamCount(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ inS.readEmptyParams();
+ ::Ice::Int ret = this->getMaxCamCount(current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getCurrentCamCount(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ inS.readEmptyParams();
+ ::Ice::Int ret = this->getCurrentCamCount(current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getRtmp(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::Ice::Int iceP_index;
+ istr->read(iceP_index);
+ inS.endReadParams();
+ ::std::string ret = this->getRtmp(iceP_index, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+namespace
+{
+const ::std::string iceC_Structure_StructureApp_all[] =
+{
+ "addCamera",
+ "getCurrentCamCount",
+ "getMaxCamCount",
+ "getRtmp",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping",
+ "removeAll",
+ "removeCamera"
+};
+
+}
+
+bool
+Structure::StructureApp::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_Structure_StructureApp_all, iceC_Structure_StructureApp_all + 10, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_Structure_StructureApp_all)
+ {
+ case 0:
+ {
+ return _iceD_addCamera(in, current);
+ }
+ case 1:
+ {
+ return _iceD_getCurrentCamCount(in, current);
+ }
+ case 2:
+ {
+ return _iceD_getMaxCamCount(in, current);
+ }
+ case 3:
+ {
+ return _iceD_getRtmp(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 6:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 7:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ case 8:
+ {
+ return _iceD_removeAll(in, current);
+ }
+ case 9:
+ {
+ return _iceD_removeCamera(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+Structure::StructureApp::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+ ostr->startSlice(ice_staticId(), -1, true);
+ Ice::StreamWriter< ::Structure::StructureApp, ::Ice::OutputStream>::write(ostr, *this);
+ ostr->endSlice();
+}
+
+void
+Structure::StructureApp::_iceReadImpl(::Ice::InputStream* istr)
+{
+ istr->startSlice();
+ Ice::StreamReader< ::Structure::StructureApp, ::Ice::InputStream>::read(istr, *this);
+ istr->endSlice();
+}
+
+void
+Structure::_icePatchObjectPtr(StructureAppPtr& handle, const ::Ice::ObjectPtr& v)
+{
+ handle = ::Structure::StructureAppPtr::dynamicCast(v);
+ if(v && !handle)
+ {
+ IceInternal::Ex::throwUOE(::Structure::StructureApp::ice_staticId(), v);
+ }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/StructureApp/rpc/StructureApp.h b/QiaoJiaSystem/StructureApp/rpc/StructureApp.h
new file mode 100644
index 0000000..0ee68df
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/StructureApp.h
@@ -0,0 +1,1268 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `StructureApp.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __StructureApp_h__
+#define __StructureApp_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace Structure
+{
+
+class StructureApp;
+class StructureAppPrx;
+
+}
+
+namespace Structure
+{
+
+class StructureApp : public virtual ::Ice::Object
+{
+public:
+
+ using ProxyType = StructureAppPrx;
+
+ virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+ virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+ virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+ static const ::std::string& ice_staticId();
+
+ virtual int addCamera(int, ::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_addCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual int removeCamera(int, const ::Ice::Current&) = 0;
+ bool _iceD_removeCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual int removeAll(const ::Ice::Current&) = 0;
+ bool _iceD_removeAll(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual int getMaxCamCount(const ::Ice::Current&) = 0;
+ bool _iceD_getMaxCamCount(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual int getCurrentCamCount(const ::Ice::Current&) = 0;
+ bool _iceD_getCurrentCamCount(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::std::string getRtmp(int, const ::Ice::Current&) = 0;
+ bool _iceD_getRtmp(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace Structure
+{
+
+class StructureAppPrx : public virtual ::Ice::Proxy<StructureAppPrx, ::Ice::ObjectPrx>
+{
+public:
+
+ int addCamera(int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_addCamera, iceP_index, iceP_jsonConfig, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto addCameraAsync(int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<int>>().get_future())
+ {
+ return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_addCamera, iceP_index, iceP_jsonConfig, context);
+ }
+
+ ::std::function<void()>
+ addCameraAsync(int iceP_index, const ::std::string& iceP_jsonConfig,
+ ::std::function<void(int)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_addCamera, iceP_index, iceP_jsonConfig, context);
+ }
+
+ void _iceI_addCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, int, const ::std::string&, const ::Ice::Context&);
+
+ int removeCamera(int iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_removeCamera, iceP_index, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto removeCameraAsync(int iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<int>>().get_future())
+ {
+ return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_removeCamera, iceP_index, context);
+ }
+
+ ::std::function<void()>
+ removeCameraAsync(int iceP_index,
+ ::std::function<void(int)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_removeCamera, iceP_index, context);
+ }
+
+ void _iceI_removeCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, int, const ::Ice::Context&);
+
+ int removeAll(const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_removeAll, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto removeAllAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<int>>().get_future())
+ {
+ return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_removeAll, context);
+ }
+
+ ::std::function<void()>
+ removeAllAsync(::std::function<void(int)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_removeAll, context);
+ }
+
+ void _iceI_removeAll(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, const ::Ice::Context&);
+
+ int getMaxCamCount(const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_getMaxCamCount, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto getMaxCamCountAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<int>>().get_future())
+ {
+ return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_getMaxCamCount, context);
+ }
+
+ ::std::function<void()>
+ getMaxCamCountAsync(::std::function<void(int)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_getMaxCamCount, context);
+ }
+
+ void _iceI_getMaxCamCount(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, const ::Ice::Context&);
+
+ int getCurrentCamCount(const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_getCurrentCamCount, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto getCurrentCamCountAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<int>>().get_future())
+ {
+ return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_getCurrentCamCount, context);
+ }
+
+ ::std::function<void()>
+ getCurrentCamCountAsync(::std::function<void(int)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_getCurrentCamCount, context);
+ }
+
+ void _iceI_getCurrentCamCount(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, const ::Ice::Context&);
+
+ ::std::string getRtmp(int iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::std::string>(true, this, &Structure::StructureAppPrx::_iceI_getRtmp, iceP_index, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto getRtmpAsync(int iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::std::string>>().get_future())
+ {
+ return _makePromiseOutgoing<::std::string, P>(false, this, &Structure::StructureAppPrx::_iceI_getRtmp, iceP_index, context);
+ }
+
+ ::std::function<void()>
+ getRtmpAsync(int iceP_index,
+ ::std::function<void(::std::string)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::std::string>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_getRtmp, iceP_index, context);
+ }
+
+ void _iceI_getRtmp(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>&, int, const ::Ice::Context&);
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ StructureAppPrx() = default;
+ friend ::std::shared_ptr<StructureAppPrx> IceInternal::createProxy<StructureAppPrx>();
+
+ virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+}
+
+namespace Structure
+{
+
+using StructureAppPtr = ::std::shared_ptr<StructureApp>;
+using StructureAppPrxPtr = ::std::shared_ptr<StructureAppPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace Structure
+{
+
+class StructureApp;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::Structure::StructureApp>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::Structure::StructureApp*);
+
+}
+
+}
+
+namespace Structure
+{
+
+class StructureApp;
+::Ice::Object* upCast(::Structure::StructureApp*);
+typedef ::IceInternal::Handle< ::Structure::StructureApp> StructureAppPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::Structure::StructureApp> StructureAppPrx;
+typedef StructureAppPrx StructureAppPrxPtr;
+void _icePatchObjectPtr(StructureAppPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace Structure
+{
+
+class Callback_StructureApp_addCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_addCamera_Base> Callback_StructureApp_addCameraPtr;
+
+class Callback_StructureApp_removeCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_removeCamera_Base> Callback_StructureApp_removeCameraPtr;
+
+class Callback_StructureApp_removeAll_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_removeAll_Base> Callback_StructureApp_removeAllPtr;
+
+class Callback_StructureApp_getMaxCamCount_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_getMaxCamCount_Base> Callback_StructureApp_getMaxCamCountPtr;
+
+class Callback_StructureApp_getCurrentCamCount_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_getCurrentCamCount_Base> Callback_StructureApp_getCurrentCamCountPtr;
+
+class Callback_StructureApp_getRtmp_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_getRtmp_Base> Callback_StructureApp_getRtmpPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace Structure
+{
+
+class StructureApp : public virtual ::Ice::Proxy<StructureApp, ::IceProxy::Ice::Object>
+{
+public:
+
+ ::Ice::Int addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_addCamera(_iceI_begin_addCamera(iceP_index, iceP_jsonConfig, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Structure::Callback_StructureApp_addCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context, const ::Structure::Callback_StructureApp_addCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, context, del, cookie);
+ }
+
+ ::Ice::Int end_addCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_addCamera(::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ ::Ice::Int removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_removeCamera(_iceI_begin_removeCamera(iceP_index, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_removeCamera(iceP_index, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeCamera(iceP_index, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeCamera(iceP_index, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Structure::Callback_StructureApp_removeCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeCamera(iceP_index, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context, const ::Structure::Callback_StructureApp_removeCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeCamera(iceP_index, context, del, cookie);
+ }
+
+ ::Ice::Int end_removeCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_removeCamera(::Ice::Int, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ ::Ice::Int removeAll(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_removeAll(_iceI_begin_removeAll(context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_removeAll(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_removeAll(context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeAll(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeAll(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeAll(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeAll(context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeAll(const ::Structure::Callback_StructureApp_removeAllPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeAll(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_removeAll(const ::Ice::Context& context, const ::Structure::Callback_StructureApp_removeAllPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_removeAll(context, del, cookie);
+ }
+
+ ::Ice::Int end_removeAll(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_removeAll(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ ::Ice::Int getMaxCamCount(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_getMaxCamCount(_iceI_begin_getMaxCamCount(context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_getMaxCamCount(context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getMaxCamCount(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getMaxCamCount(context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Structure::Callback_StructureApp_getMaxCamCountPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getMaxCamCount(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Ice::Context& context, const ::Structure::Callback_StructureApp_getMaxCamCountPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getMaxCamCount(context, del, cookie);
+ }
+
+ ::Ice::Int end_getMaxCamCount(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_getMaxCamCount(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ ::Ice::Int getCurrentCamCount(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_getCurrentCamCount(_iceI_begin_getCurrentCamCount(context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_getCurrentCamCount(context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getCurrentCamCount(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getCurrentCamCount(context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Structure::Callback_StructureApp_getCurrentCamCountPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getCurrentCamCount(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Ice::Context& context, const ::Structure::Callback_StructureApp_getCurrentCamCountPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getCurrentCamCount(context, del, cookie);
+ }
+
+ ::Ice::Int end_getCurrentCamCount(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_getCurrentCamCount(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ ::std::string getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_getRtmp(_iceI_begin_getRtmp(iceP_index, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_getRtmp(iceP_index, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getRtmp(iceP_index, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getRtmp(iceP_index, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Structure::Callback_StructureApp_getRtmpPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getRtmp(iceP_index, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context, const ::Structure::Callback_StructureApp_getRtmpPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getRtmp(iceP_index, context, del, cookie);
+ }
+
+ ::std::string end_getRtmp(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_getRtmp(::Ice::Int, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace Structure
+{
+
+class StructureApp : public virtual ::Ice::Object
+{
+public:
+
+ typedef StructureAppPrx ProxyType;
+ typedef StructureAppPtr PointerType;
+
+ virtual ~StructureApp();
+
+ virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::Ice::Int addCamera(::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_addCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::Ice::Int removeCamera(::Ice::Int, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_removeCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::Ice::Int removeAll(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_removeAll(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::Ice::Int getMaxCamCount(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_getMaxCamCount(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::Ice::Int getCurrentCamCount(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_getCurrentCamCount(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::std::string getRtmp(::Ice::Int, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_getRtmp(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+ virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+ virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const StructureApp& lhs, const StructureApp& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const StructureApp& lhs, const StructureApp& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+}
+
+namespace Structure
+{
+
+template<class T>
+class CallbackNC_StructureApp_addCamera : public Callback_StructureApp_addCamera_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(::Ice::Int);
+
+ CallbackNC_StructureApp_addCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_addCamera(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_StructureApp_addCameraPtr
+newCallback_StructureApp_addCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_addCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_addCameraPtr
+newCallback_StructureApp_addCamera(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_addCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_addCamera : public Callback_StructureApp_addCamera_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(::Ice::Int, const CT&);
+
+ Callback_StructureApp_addCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_addCamera(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_addCameraPtr
+newCallback_StructureApp_addCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_addCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_addCameraPtr
+newCallback_StructureApp_addCamera(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_addCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_removeCamera : public Callback_StructureApp_removeCamera_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(::Ice::Int);
+
+ CallbackNC_StructureApp_removeCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_removeCamera(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_StructureApp_removeCameraPtr
+newCallback_StructureApp_removeCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_removeCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_removeCameraPtr
+newCallback_StructureApp_removeCamera(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_removeCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_removeCamera : public Callback_StructureApp_removeCamera_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(::Ice::Int, const CT&);
+
+ Callback_StructureApp_removeCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_removeCamera(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_removeCameraPtr
+newCallback_StructureApp_removeCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_removeCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_removeCameraPtr
+newCallback_StructureApp_removeCamera(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_removeCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_removeAll : public Callback_StructureApp_removeAll_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(::Ice::Int);
+
+ CallbackNC_StructureApp_removeAll(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_removeAll(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_StructureApp_removeAllPtr
+newCallback_StructureApp_removeAll(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_removeAll<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_removeAllPtr
+newCallback_StructureApp_removeAll(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_removeAll<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_removeAll : public Callback_StructureApp_removeAll_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(::Ice::Int, const CT&);
+
+ Callback_StructureApp_removeAll(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_removeAll(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_removeAllPtr
+newCallback_StructureApp_removeAll(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_removeAll<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_removeAllPtr
+newCallback_StructureApp_removeAll(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_removeAll<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_getMaxCamCount : public Callback_StructureApp_getMaxCamCount_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(::Ice::Int);
+
+ CallbackNC_StructureApp_getMaxCamCount(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_getMaxCamCount(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_StructureApp_getMaxCamCountPtr
+newCallback_StructureApp_getMaxCamCount(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_getMaxCamCount<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_getMaxCamCountPtr
+newCallback_StructureApp_getMaxCamCount(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_getMaxCamCount<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_getMaxCamCount : public Callback_StructureApp_getMaxCamCount_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(::Ice::Int, const CT&);
+
+ Callback_StructureApp_getMaxCamCount(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_getMaxCamCount(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_getMaxCamCountPtr
+newCallback_StructureApp_getMaxCamCount(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_getMaxCamCount<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_getMaxCamCountPtr
+newCallback_StructureApp_getMaxCamCount(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_getMaxCamCount<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_getCurrentCamCount : public Callback_StructureApp_getCurrentCamCount_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(::Ice::Int);
+
+ CallbackNC_StructureApp_getCurrentCamCount(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_getCurrentCamCount(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_StructureApp_getCurrentCamCountPtr
+newCallback_StructureApp_getCurrentCamCount(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_getCurrentCamCount<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_getCurrentCamCountPtr
+newCallback_StructureApp_getCurrentCamCount(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_getCurrentCamCount<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_getCurrentCamCount : public Callback_StructureApp_getCurrentCamCount_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(::Ice::Int, const CT&);
+
+ Callback_StructureApp_getCurrentCamCount(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::Ice::Int ret;
+ try
+ {
+ ret = proxy->end_getCurrentCamCount(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_getCurrentCamCountPtr
+newCallback_StructureApp_getCurrentCamCount(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_getCurrentCamCount<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_getCurrentCamCountPtr
+newCallback_StructureApp_getCurrentCamCount(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_getCurrentCamCount<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_getRtmp : public Callback_StructureApp_getRtmp_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::std::string&);
+
+ CallbackNC_StructureApp_getRtmp(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::std::string ret;
+ try
+ {
+ ret = proxy->end_getRtmp(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_StructureApp_getRtmpPtr
+newCallback_StructureApp_getRtmp(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_getRtmp<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_getRtmpPtr
+newCallback_StructureApp_getRtmp(T* instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_StructureApp_getRtmp<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_getRtmp : public Callback_StructureApp_getRtmp_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::std::string&, const CT&);
+
+ Callback_StructureApp_getRtmp(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+ ::std::string ret;
+ try
+ {
+ ret = proxy->end_getRtmp(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_getRtmpPtr
+newCallback_StructureApp_getRtmp(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_getRtmp<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_getRtmpPtr
+newCallback_StructureApp_getRtmp(T* instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_StructureApp_getRtmp<T, CT>(instance, cb, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/StructureApp/rpc/StructureApp.ice b/QiaoJiaSystem/StructureApp/rpc/StructureApp.ice
new file mode 100644
index 0000000..30f62cc
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/StructureApp.ice
@@ -0,0 +1,17 @@
+module Structure
+{
+ interface StructureApp
+ {
+ int addCamera(int index, string jsonConfig);
+
+ int removeCamera(int index);
+
+ int removeAll();
+
+ int getMaxCamCount();
+
+ int getCurrentCamCount();
+
+ string getRtmp(int index);
+ }
+}
diff --git a/QiaoJiaSystem/StructureApp/rpc/StructureApp_ice.py b/QiaoJiaSystem/StructureApp/rpc/StructureApp_ice.py
new file mode 100644
index 0000000..e49a565
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/StructureApp_ice.py
@@ -0,0 +1,172 @@
+# -*- coding: utf-8 -*-
+# **********************************************************************
+#
+# Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+#
+# Ice version 3.7.1
+#
+# <auto-generated>
+#
+# Generated from file `StructureApp.ice'
+#
+# Warning: do not edit this file.
+#
+# </auto-generated>
+#
+
+from sys import version_info as _version_info_
+import Ice, IcePy
+
+# Start of module Structure
+_M_Structure = Ice.openModule('Structure')
+__name__ = 'Structure'
+
+_M_Structure._t_StructureApp = IcePy.defineValue('::Structure::StructureApp', Ice.Value, -1, (), False, True, None, ())
+
+if 'StructureAppPrx' not in _M_Structure.__dict__:
+ _M_Structure.StructureAppPrx = Ice.createTempClass()
+ class StructureAppPrx(Ice.ObjectPrx):
+
+ def addCamera(self, index, jsonConfig, context=None):
+ return _M_Structure.StructureApp._op_addCamera.invoke(self, ((index, jsonConfig), context))
+
+ def addCameraAsync(self, index, jsonConfig, context=None):
+ return _M_Structure.StructureApp._op_addCamera.invokeAsync(self, ((index, jsonConfig), context))
+
+ def begin_addCamera(self, index, jsonConfig, _response=None, _ex=None, _sent=None, context=None):
+ return _M_Structure.StructureApp._op_addCamera.begin(self, ((index, jsonConfig), _response, _ex, _sent, context))
+
+ def end_addCamera(self, _r):
+ return _M_Structure.StructureApp._op_addCamera.end(self, _r)
+
+ def removeCamera(self, index, context=None):
+ return _M_Structure.StructureApp._op_removeCamera.invoke(self, ((index, ), context))
+
+ def removeCameraAsync(self, index, context=None):
+ return _M_Structure.StructureApp._op_removeCamera.invokeAsync(self, ((index, ), context))
+
+ def begin_removeCamera(self, index, _response=None, _ex=None, _sent=None, context=None):
+ return _M_Structure.StructureApp._op_removeCamera.begin(self, ((index, ), _response, _ex, _sent, context))
+
+ def end_removeCamera(self, _r):
+ return _M_Structure.StructureApp._op_removeCamera.end(self, _r)
+
+ def removeAll(self, context=None):
+ return _M_Structure.StructureApp._op_removeAll.invoke(self, ((), context))
+
+ def removeAllAsync(self, context=None):
+ return _M_Structure.StructureApp._op_removeAll.invokeAsync(self, ((), context))
+
+ def begin_removeAll(self, _response=None, _ex=None, _sent=None, context=None):
+ return _M_Structure.StructureApp._op_removeAll.begin(self, ((), _response, _ex, _sent, context))
+
+ def end_removeAll(self, _r):
+ return _M_Structure.StructureApp._op_removeAll.end(self, _r)
+
+ def getMaxCamCount(self, context=None):
+ return _M_Structure.StructureApp._op_getMaxCamCount.invoke(self, ((), context))
+
+ def getMaxCamCountAsync(self, context=None):
+ return _M_Structure.StructureApp._op_getMaxCamCount.invokeAsync(self, ((), context))
+
+ def begin_getMaxCamCount(self, _response=None, _ex=None, _sent=None, context=None):
+ return _M_Structure.StructureApp._op_getMaxCamCount.begin(self, ((), _response, _ex, _sent, context))
+
+ def end_getMaxCamCount(self, _r):
+ return _M_Structure.StructureApp._op_getMaxCamCount.end(self, _r)
+
+ def getCurrentCamCount(self, context=None):
+ return _M_Structure.StructureApp._op_getCurrentCamCount.invoke(self, ((), context))
+
+ def getCurrentCamCountAsync(self, context=None):
+ return _M_Structure.StructureApp._op_getCurrentCamCount.invokeAsync(self, ((), context))
+
+ def begin_getCurrentCamCount(self, _response=None, _ex=None, _sent=None, context=None):
+ return _M_Structure.StructureApp._op_getCurrentCamCount.begin(self, ((), _response, _ex, _sent, context))
+
+ def end_getCurrentCamCount(self, _r):
+ return _M_Structure.StructureApp._op_getCurrentCamCount.end(self, _r)
+
+ def getRtmp(self, index, context=None):
+ return _M_Structure.StructureApp._op_getRtmp.invoke(self, ((index, ), context))
+
+ def getRtmpAsync(self, index, context=None):
+ return _M_Structure.StructureApp._op_getRtmp.invokeAsync(self, ((index, ), context))
+
+ def begin_getRtmp(self, index, _response=None, _ex=None, _sent=None, context=None):
+ return _M_Structure.StructureApp._op_getRtmp.begin(self, ((index, ), _response, _ex, _sent, context))
+
+ def end_getRtmp(self, _r):
+ return _M_Structure.StructureApp._op_getRtmp.end(self, _r)
+
+ @staticmethod
+ def checkedCast(proxy, facetOrContext=None, context=None):
+ return _M_Structure.StructureAppPrx.ice_checkedCast(proxy, '::Structure::StructureApp', facetOrContext, context)
+
+ @staticmethod
+ def uncheckedCast(proxy, facet=None):
+ return _M_Structure.StructureAppPrx.ice_uncheckedCast(proxy, facet)
+
+ @staticmethod
+ def ice_staticId():
+ return '::Structure::StructureApp'
+ _M_Structure._t_StructureAppPrx = IcePy.defineProxy('::Structure::StructureApp', StructureAppPrx)
+
+ _M_Structure.StructureAppPrx = StructureAppPrx
+ del StructureAppPrx
+
+ _M_Structure.StructureApp = Ice.createTempClass()
+ class StructureApp(Ice.Object):
+
+ def ice_ids(self, current=None):
+ return ('::Ice::Object', '::Structure::StructureApp')
+
+ def ice_id(self, current=None):
+ return '::Structure::StructureApp'
+
+ @staticmethod
+ def ice_staticId():
+ return '::Structure::StructureApp'
+
+ def addCamera(self, index, jsonConfig, current=None):
+ raise NotImplementedError("servant method 'addCamera' not implemented")
+
+ def removeCamera(self, index, current=None):
+ raise NotImplementedError("servant method 'removeCamera' not implemented")
+
+ def removeAll(self, current=None):
+ raise NotImplementedError("servant method 'removeAll' not implemented")
+
+ def getMaxCamCount(self, current=None):
+ raise NotImplementedError("servant method 'getMaxCamCount' not implemented")
+
+ def getCurrentCamCount(self, current=None):
+ raise NotImplementedError("servant method 'getCurrentCamCount' not implemented")
+
+ def getRtmp(self, index, current=None):
+ raise NotImplementedError("servant method 'getRtmp' not implemented")
+
+ def __str__(self):
+ return IcePy.stringify(self, _M_Structure._t_StructureAppDisp)
+
+ __repr__ = __str__
+
+ _M_Structure._t_StructureAppDisp = IcePy.defineClass('::Structure::StructureApp', StructureApp, (), None, ())
+ StructureApp._ice_type = _M_Structure._t_StructureAppDisp
+
+ StructureApp._op_addCamera = IcePy.Operation('addCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0), ((), IcePy._t_string, False, 0)), (), ((), IcePy._t_int, False, 0), ())
+ StructureApp._op_removeCamera = IcePy.Operation('removeCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0),), (), ((), IcePy._t_int, False, 0), ())
+ StructureApp._op_removeAll = IcePy.Operation('removeAll', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (), (), ((), IcePy._t_int, False, 0), ())
+ StructureApp._op_getMaxCamCount = IcePy.Operation('getMaxCamCount', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (), (), ((), IcePy._t_int, False, 0), ())
+ StructureApp._op_getCurrentCamCount = IcePy.Operation('getCurrentCamCount', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (), (), ((), IcePy._t_int, False, 0), ())
+ StructureApp._op_getRtmp = IcePy.Operation('getRtmp', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0),), (), ((), IcePy._t_string, False, 0), ())
+
+ _M_Structure.StructureApp = StructureApp
+ del StructureApp
+
+# End of module Structure
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.cpp b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.cpp
new file mode 100644
index 0000000..593b0ce
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.cpp
@@ -0,0 +1,5 @@
+//
+// Created by basic on 18-8-22.
+//
+
+#include "BaiscSDKAnalysVideo.h"
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h
new file mode 100644
index 0000000..a742fb6
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h
@@ -0,0 +1,158 @@
+//
+// Created by basic on 18-8-22.
+//
+
+#ifndef VIDEOANALYSFROMHC_BAISCSDKANALYSVIDEO_H
+#define VIDEOANALYSFROMHC_BAISCSDKANALYSVIDEO_H
+
+#include "myThread.h"
+#include <vector>
+#include <basic/io/io.h>
+#include <basic/debug/Debug.h>
+#include <basic/util/file/FileUtil.h>
+#include "../StructureApp/AppPipeController.h"
+#include "dispathdatatype.hpp"
+
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/http_server/HttpSrvRetRecieve.hpp>
+#include <basic/util/net_config/net_config.h>
+
+#define SETSCORE(VEC, POS, IDENT) appPref.setFloatData(IDENT, POS >= VEC.size() ? 80 : VEC[POS]);
+
+class BaiscSDKAnalysVideo : public mythread<getsdkHdlManage> {
+ using TASK_FUNCTION = std::function<void(std::shared_ptr<finishSdkHdlManage> &, int)>;
+public:
+ BaiscSDKAnalysVideo(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {
+ resetFdfs();
+ {
+ std::thread httpServer([&]() {
+ HttpSrvRetRecieve httpSrvRetRecieve("0.0.0.0", 9090, 1);
+ httpSrvRetRecieve.setInfo("^/resetFdfs$", "POST", std::bind(&BaiscSDKAnalysVideo::resetFdfs, this,
+ std::placeholders::_1,
+ std::placeholders::_2,
+ std::placeholders::_3));
+ httpSrvRetRecieve.start();
+ httpSrvRetRecieve.waitForShutDown();
+ });
+ httpServer.detach();
+ }
+ }
+
+ ~BaiscSDKAnalysVideo() {
+ }
+
+ std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = "") {
+
+ std::thread reset([&]() {
+ fdfsClient.rwLock.rdlock();
+ if (fdfsClient.fastFds != nullptr) {
+ delete fdfsClient.fastFds;
+ }
+ fdfsClient.fastFds = new FastFds("fastDfsClient.conf");
+ fdfsClient.rwLock.unlock();
+ });
+ reset.detach();
+
+ return "";
+ }
+
+private:
+ virtual void doFunc(std::shared_ptr<getsdkHdlManage> spPacket) {
+
+// DBG("do func sdk");
+ Json::Value json;
+
+ //split sdks enable
+ //#todo other sdk
+ vector<int> sdkVec = chnString2Vec(spPacket->en_sdk);
+ //璁剧疆妫�娴嬪緱鍒�
+// std::string s_d = str_det_thr;
+// std::string s_c = str_cmp_thr;
+ vector<int> sdkDetCoVec = chnString2Vec(spPacket->str_det_thr);
+ vector<int> sdkComCoVec = chnString2Vec(spPacket->str_cmp_thr);
+
+ int t_size = sdkVec.size();
+ std::string str_pre(spPacket->strDevID);
+ str_pre.append(to_string(spPacket->nChannelID));
+ for (int i = 0; i < t_size; i++) {
+ switch (sdkVec[i]) {
+ case 1: {
+ json["face.enable"] = "1";
+ DBG("" << str_pre);
+ DBG(" TESTCODE setValue" << str_pre << " " << sdkDetCoVec[i] << " " << sdkComCoVec[i]);
+ SETSCORE(sdkDetCoVec, i, str_pre + "face.det");
+ SETSCORE(sdkComCoVec, i, str_pre + "face.cmp");
+ break;
+ }
+ case 2: {
+ DBG("XX.enable " << "1");
+ DBG(" TESTCODE setValue" << str_pre << " " << sdkDetCoVec[i] << " " << sdkComCoVec[i]);
+ SETSCORE(sdkDetCoVec, i, str_pre + "XX.det");
+ SETSCORE(sdkComCoVec, i, str_pre + "XX.cmp");
+ break;
+ }
+ case 3: {
+ json["yolo.enable"] = "1";
+ DBG(" TESTCODE setValue" << str_pre << " " << sdkDetCoVec[i] << " " << sdkComCoVec[i]);
+ SETSCORE(sdkDetCoVec, i, str_pre + "yolo.det");
+ SETSCORE(sdkComCoVec, i, str_pre + "yolo.cmp");
+ break;
+ }
+ }
+ }
+ json["addr"] = spPacket->str_addr;
+ INFO("cam add is " << spPacket->str_addr);
+
+ //#todo get address
+
+ AppPipeController _AppPipeController(spPacket->src_path, json);
+ _AppPipeController.setfdfsClient(&fdfsClient);
+ //#todo from path get file list
+ file_filter_type filter = [](const char *dirName, const char *dirent) {
+ return (strstr(dirent, ".mp4") != nullptr);// add format
+ };
+ std::vector<std::string> vec = for_each_file(spPacket->src_path, filter);
+ auto size = vec.size();
+ int pos = spPacket->pos;
+ if (size == 0 || spPacket->total == 0) {
+ if (m_task_function != nullptr) {
+ auto fp_task(
+ std::make_shared<finishSdkHdlManage>(
+ finishSdkHdlManage{spPacket->src_path, 0}));
+ m_task_function(fp_task, 0);
+ return;
+ } else {
+ ERR("m_task_function == nullptr");
+ return;
+ }
+ }
+ for (; pos < size;) {
+ //#todo
+ _AppPipeController.resetVideoCapturePath(vec[pos]);
+ _AppPipeController.start();
+ while (_AppPipeController.getRunning()) {
+ usleep(40000);
+ }
+ _AppPipeController.stop();
+ _AppPipeController.wait();
+ if (m_task_function != nullptr) {
+ auto fp_task(
+ std::make_shared<finishSdkHdlManage>(
+ finishSdkHdlManage{spPacket->src_path, pos}));
+ m_task_function(fp_task, size - pos - 1);
+ } else {
+ ERR("m_task_function == nullptr");
+ return;
+ }
+ pos++;
+ }
+ _AppPipeController;
+ }
+
+private:
+ TASK_FUNCTION m_task_function;
+ FastFdsWithLock fdfsClient;
+};
+
+
+#endif //VIDEOANALYSFROMHC_BAISCSDKANALYSVIDEO_H
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt b/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt
new file mode 100644
index 0000000..9654ae7
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt
@@ -0,0 +1,228 @@
+#cmake_minimum_required(VERSION 2.8)
+
+#project(VideoAnalysFromHC)
+#add_executable(${PROJECT_NAME} "main.cpp")
+cmake_minimum_required(VERSION 3.5)
+project(VideoAnalysFromHC)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_compile_options(-fPIC)
+add_definitions(-DGLOG)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive)
+SET(SOURCES
+
+ #
+ ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.cpp
+
+ #浠诲姟璋冨害妯″潡
+ ../VideoServer/QiaoJia/DB/LDBTool.cpp
+ ../VideoServer/QiaoJia/dispatchTool/loadManage.cpp
+ ../VideoServer/QiaoJia/dispatchTool/cutManage.cpp
+ ../VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp
+ ../VideoServer/QiaoJia/DB/LDBTool.h
+ ../VideoServer/QiaoJia/dispatchTool/loadManage.h
+ ../VideoServer/QiaoJia/dispatchTool/cutManage.h
+ ../VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h
+
+
+ #蹇�熻棰戠粨鏋勫寲
+ ../RapidStructureApp/AppController.cpp
+ ../RapidStructureApp/AppController.h
+ ../RapidStructureApp/RapidAppPipeController.cpp
+ ../RapidStructureApp/RapidAppPipeController.h
+ ../RapidStructureApp/TriggerElement.cpp
+ ../RapidStructureApp/TriggerElement.h
+ ../RapidStructureApp/VideoChangeScore.cpp
+ ../RapidStructureApp/VideoChangeScore.h
+ ../RapidStructureApp/VideoMoveCaptureElement.cpp
+ ../RapidStructureApp/VideoMoveCaptureElement.h
+
+
+ #sdk鍒嗘瀽妯″潡
+ # ../StructureApp/rpc/StructureApp.cpp
+ # ../StructureApp/StructureAppI.cpp
+ ../StructureApp/AppPipeController.cpp
+ ../StructureApp/AppPipeController.h
+ ../StructureApp/TrackingTrigger.cpp
+ ../StructureApp/YoloRpcElement.cpp
+ ../StructureApp/FaceRpcElement.cpp
+ ../StructureApp/FaceExtractElement.cpp
+ ../StructureApp/ImageDrawElement.cpp
+ ../StructureApp/RecordVideoElement.cpp
+ ../StructureApp/JudgmentRetrogradeTool.cpp
+ ../StructureApp/PerimeterElement.cpp
+
+ ../StructureApp/NewRecordVideoElement.cpp
+
+ ../YoloServer/rpc/YoloServer.cpp
+ ../FaceDetectServer/rpc/FaceServer.cpp
+ ../FaceSearchServer/rpc/FaceSearchServer.cpp
+ ../RecordVideo/rpc/RecordVideo.cpp
+
+
+ #閫氱敤妯″潡
+ ../../BasicPlatForm/basic/io/io.cpp
+ ../../BasicPlatForm/basic/io/io.h
+ ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+ ../../BasicPlatForm/basic/pipe/PipeElement.cpp
+ ../../BasicPlatForm/basic/pipe/PipeElement.h
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/ffmpegRecoder/FileRecorder.cpp
+ ../../BasicPlatForm/basic/pipe_element/ffmpeg/ffmpegRecoder/FileRecorder.h
+ #todo fix bug
+ # ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+ ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+ ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+ ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+ ../../BasicPlatForm/basic/db/ES/es/ManagerEsDB.cpp
+
+ #绾跨▼姹�
+ myThread.cpp
+ myThread.h
+ mySem.hpp
+
+ #sdk鍒嗘瀽浠诲姟姹�
+ BaiscSDKAnalysVideo.cpp
+ BaiscSDKAnalysVideo.h
+
+ #蹇�熻棰戠粨鏋勫寲浠诲姟姹�
+ HcAnalysVideo.cpp
+ HcAnalysVideo.h
+
+ #娴峰悍纭洏褰曞儚鏈轰笅杞戒换鍔℃睜
+ HcDowloadElement.cpp
+ HcDowloadElement.h
+ HcRecord.cpp
+ HcRecord.h
+
+ #瀹炴椂瑙嗛娴佸垎鏋�
+ RtspAnalysElement.cpp
+
+
+
+ ../../BasicPlatForm/basic/util/net_config/net_config.cpp
+
+ main.cpp
+ DBManageClass.cpp DBManageClass.h
+ )
+SET(LIBS
+ glog
+ #Ice
+ Ice
+ crypto
+
+ #娴峰悍
+ AudioRender
+ HCCore
+ hcnetsdk
+ hpr
+ PlayCtrl
+ SuperRender
+ analyzedata
+ HCAlarm
+ HCCoreDevCfg
+ HCDisplay
+ HCGeneralCfgMgr
+ HCIndustry
+ HCPlayBack
+ HCPreview
+ HCVoiceTalk
+ iconv2
+ StreamTransClient
+ SystemTransform
+
+ #ffmpeg
+ avformat
+ avcodec
+ swresample
+ swscale
+ avutil
+ bz2 dl z
+
+ #QT5
+ Qt5Core
+ Qt5Sql
+ Qt5Gui
+
+ #fastfds
+ fastcommon
+ fdfsclient
+
+ boost_system
+ boost_thread
+ boost_filesystem
+ #
+ cuda jsoncpp
+ # cudart
+ # cublas
+ opencv_world
+ jsoncpp
+ curl
+ uuid
+ pthread
+ )
+include_directories(
+
+ #glog
+ ../../BasicPlatForm/libs/glog/include
+ ./
+ ../VideoServer
+ ../RapidStructureApp
+ ../VideoServer/QiaoJia/DB
+ ../VideoServer/QiaoJia/dispatchTool
+
+ ../RecordVideo/rpc
+ ../StructureApp/rpc
+ ../YoloServer/rpc
+ ../FaceDetectServer/rpc
+ ../FaceSearchServer/rpc
+
+ ../../BasicPlatForm/
+
+ ../../BasicPlatForm/basic/pipe/
+ ../../BasicPlatForm/basic/util/fastdfs
+ ../../BasicPlatForm/basic/util/curl/
+ #webServer
+ ../../BasicPlatForm/basic/http_server/
+ ../../BasicPlatForm/basic/util/net_config/
+
+ ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+ ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+ ../../BasicPlatForm/libs/opencv/include
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/ffmpeg/include
+ ../../BasicPlatForm/libs/jsoncpp/include
+ ../../BasicPlatForm/libs/crul/include
+ ../../BasicPlatForm/libs/libuuid/include
+ ../../BasicPlatForm/libs/hcTool/HCNetSDK64/incCn
+ ../../BasicPlatForm/libs/libboost/include
+
+
+ /usr/include/x86_64-linux-gnu/qt5
+ /usr/include/x86_64-linux-gnu/qt5/QtCore/
+ /usr/include/x86_64-linux-gnu/qt5/QtSql/
+)
+
+link_directories(
+ #glog
+ ../../BasicPlatForm/libs/glog/lib
+ ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+ ../../BasicPlatForm/libs/openssl/lib
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/ffmpeg/lib
+ ../../BasicPlatForm/libs/jsoncpp/lib
+ ../../BasicPlatForm/libs/crul/lib
+ ../../BasicPlatForm/libs/libuuid/lib
+ ../../BasicPlatForm/libs/FastDFS/lib
+ ../../BasicPlatForm/libs/hcTool/HCNetSDK64/lib/
+ ../../BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom/
+ ../../BasicPlatForm/libs/libboost/lib
+)
+
+add_executable(${PROJECT_NAME}
+ ${SOURCES}
+ )
+target_link_libraries(${PROJECT_NAME}
+ ${LIBS}
+ )
+
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.cpp b/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.cpp
new file mode 100644
index 0000000..5313085
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.cpp
@@ -0,0 +1,192 @@
+//
+// Created by basic on 18-8-23.
+//
+
+#include <basic/util/app/AppConfig.h>
+#include "DBManageClass.h"
+#include <iostream>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+DBManageClass::DBManageClass(LDBTool *_dbTool) :
+ m_fileManage(_dbTool), m_downloadFileRet(true), m_cutManage(_dbTool), m_cutVideoRet(true),
+ m_sdkHdlManage(_dbTool), m_sdkHdlRet(true),
+ //#todo
+ m_HcDowloadElement(std::bind(&DBManageClass::downFileFuncFinish, this, std::placeholders::_1)),
+ m_HcAnalysVideo(std::bind(&DBManageClass::cutVideoFuncFinish, this, std::placeholders::_1)),
+ m_BasicSDKAnalysVideo(
+ std::bind(&DBManageClass::sdkhlVideoFuncFinish, this, std::placeholders::_1, std::placeholders::_2)) {}
+
+DBManageClass::~DBManageClass() {
+ stop();
+}
+
+void DBManageClass::addDevice(const std::string strDevID, const char *ip, const unsigned short port,
+ const char *usrname, const char *passwd) {
+ m_HcDowloadElement.addDevice(strDevID, ip, port, usrname, passwd);
+}
+
+void DBManageClass::start(int fileManagePSize, int cutManagePSize, int sdkHdlManagePSize) {
+ //#todo init threads num
+ init(fileManagePSize, cutManagePSize, sdkHdlManagePSize);
+}
+
+void DBManageClass::testSdk() {
+ m_BasicSDKAnalysVideo.beginThreads(1);
+ std::thread tpf_sdkHlVideoFile(sdkHlVideo, this);
+ tpf_sdkHlVideoFile.detach();
+}
+
+void DBManageClass::stop() {
+ //Ret =false
+ m_downloadFileRet = false;
+ m_cutVideoRet = false;
+ m_sdkHdlRet = false;
+}
+
+void DBManageClass::downFileFuncFinish(std::shared_ptr<ChannelLoadFileManage> &spPacket) {
+ m_fileManage.finishTask(spPacket.get());
+}
+
+void DBManageClass::cutVideoFuncFinish(std::shared_ptr<finishCutFileManage> &spPacket) {
+ if (m_cutManage.finishTask(spPacket.get())) {
+ //#todo delete src_file
+ string cmd = "rm -rf ";
+ cmd.append(spPacket->src_path).append(" & ");
+ system(cmd.c_str());
+ //#todo have bug
+// IOOperate::RemoveDir(spPacket->src_path.c_str());
+ } else {
+ ERR("m_cutManage.finishTask err");
+ }
+}
+
+void DBManageClass::sdkhlVideoFuncFinish(std::shared_ptr<finishSdkHdlManage> &spPacket, int listSize) {
+ bool ret = false;
+ if (listSize == 0) {
+ ret = m_sdkHdlManage.finishTask(spPacket.get());
+ } else {
+ ret = m_sdkHdlManage.updateSdkHdlPos(spPacket.get());
+ }
+ if (!ret) ERR("sdkhlVideoFuncFinish err ; listSize is " << listSize);
+}
+
+
+void DBManageClass::init(int fileManagePSize, int cutManagePSize, int sdkHdlManagePSize) {
+ m_fileManagePSize = fileManagePSize;
+ m_cutManagePSize = cutManagePSize;
+ m_sdkHdlManagePSize = sdkHdlManagePSize;
+
+ m_HcDowloadElement.beginThreads(m_fileManagePSize);
+ m_HcAnalysVideo.beginThreads(m_cutManagePSize);
+ m_BasicSDKAnalysVideo.beginThreads(m_sdkHdlManagePSize);
+ //Thread(start)
+ std::thread tpf_downloadFile(downloadFile, this);
+ std::thread tpf_cutVideoFile(cutVideoFile, this);
+ std::thread tpf_sdkHlVideoFile(sdkHlVideo, this);
+ tpf_downloadFile.detach();
+ tpf_cutVideoFile.detach();
+ tpf_sdkHlVideoFile.detach();
+}
+
+std::string getCmdResult(const std::string &strCmd) {
+ char buf[10240] = {0};
+ FILE *pf = NULL;
+
+ if ((pf = popen(strCmd.c_str(), "r")) == NULL) {
+ return "";
+ }
+
+ std::string strResult;
+ while (fgets(buf, sizeof buf, pf)) {
+ strResult += buf;
+ }
+
+ pclose(pf);
+
+ unsigned int iSize = strResult.size();
+ if (iSize > 0 && strResult[iSize - 1] == '\n') // linux
+ {
+ strResult = strResult.substr(0, iSize - 1);
+ }
+
+ return strResult;
+}
+
+void DBManageClass::downloadFile(DBManageClass *dbManageClass) {
+ while (dbManageClass->m_downloadFileRet) {
+ //#todo sdkhl size
+ bool t_ret = true;
+ std::string loadPath = appConfig.getStringProperty("loadPath");
+ std::string loadMaxSize_auto = appConfig.getStringProperty("TotalLoadSize");
+ long int loadMaxSize = atol(loadMaxSize_auto.c_str());
+ char cmd[100] = {0};
+ sprintf(cmd, "du -s %s | awk '{print $1}'", loadPath.c_str());
+ std::string str_cmd(cmd);
+ std::string cmd_result = getCmdResult(str_cmd);
+ int currentSize = atol(cmd_result.c_str());
+
+ //瓒呭嚭缁欏畾涓嬭浇鐨勫瓨鍌ㄧ┖闂寸殑80%锛宻leep 10鍒嗛挓
+ if (currentSize >= (loadMaxSize * 1024 * 1024 * 80 / 100)) {
+ INFO(" 瓒呭嚭缁欏畾涓嬭浇鐨勫瓨鍌ㄧ┖闂寸殑80%锛宻leep 10鍒嗛挓 ");
+ sleep(10 * 60);
+ }
+
+ if (dbManageClass->m_HcDowloadElement.get_taskListSize() < dbManageClass->m_fileManagePSize) {
+ auto sp_task(std::make_shared<ChannelLoadFileManage>(dbManageClass->m_fileManage.getTask()));
+ if (sp_task->strDevID.size() <= 0) {
+ sleep(WAITTASKTIME);
+ } else {
+ INFO(" channel " << sp_task->nChannelID
+ << " Month " << sp_task->startTime.Month
+ << " Day " << sp_task->startTime.Day
+ << " Hour " << sp_task->startTime.Hour
+ << " Minute " << sp_task->startTime.Minute
+ << " Second " << sp_task->startTime.Second
+ );
+ dbManageClass->m_HcDowloadElement.put_task(sp_task);
+ }
+ } else {
+ sleep(WAITTASKPOOLTIME);
+ }
+ }
+}
+
+void DBManageClass::cutVideoFile(DBManageClass *dbManageClass) {
+ while (dbManageClass->m_cutVideoRet) {
+ //#todo sdkhl size
+ if (dbManageClass->m_HcAnalysVideo.get_taskListSize() < dbManageClass->m_cutManagePSize) {
+ auto sp_task(std::make_shared<getCutFileManage>(dbManageClass->m_cutManage.getTask()));
+ if (sp_task->src_path.size() <= 0) {
+ sleep(WAITTASKTIME);
+ } else {
+ dbManageClass->m_HcAnalysVideo.put_task(sp_task);
+ }
+ } else {
+ sleep(WAITTASKPOOLTIME);
+ }
+ }
+}
+
+void DBManageClass::sdkHlVideo(DBManageClass *dbManageClass) {
+ while (dbManageClass->m_sdkHdlRet) {
+ //#todo sdkhl size
+// DBG("???????");
+ if (dbManageClass->m_BasicSDKAnalysVideo.get_taskListSize() <= dbManageClass->m_sdkHdlManagePSize) {
+ auto sp_task(std::make_shared<getsdkHdlManage>(dbManageClass->m_sdkHdlManage.getTask()));
+ if (sp_task->src_path.size() <= 0) {
+// DBG("??????? size <0");
+ sleep(WAITTASKTIME);
+ } else {
+ DBG("sdk work " << sp_task->src_path);
+ dbManageClass->m_BasicSDKAnalysVideo.put_task(sp_task);
+ }
+ } else {
+// DBG("??????? get_taskListSize < m_sdkHdlManagePSize");
+ sleep(WAITTASKPOOLTIME);
+ }
+
+ }
+}
+
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.h b/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.h
new file mode 100644
index 0000000..0e606f8
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.h
@@ -0,0 +1,73 @@
+//
+// Created by basic on 18-8-23.
+//
+
+#ifndef VIDEOANALYSFROMHC_DBMANAGECLASS_H
+#define VIDEOANALYSFROMHC_DBMANAGECLASS_H
+
+#define WAITTASKTIME 10
+
+#define WAITTASKPOOLTIME 10
+
+#include <basic/io/io.h>
+
+#include "HcDowloadElement.h"
+#include "HcAnalysVideo.h"
+#include "BaiscSDKAnalysVideo.h"
+
+#include <VideoServer/QiaoJia/dispatchTool/loadManage.h>
+#include <VideoServer/QiaoJia/dispatchTool/cutManage.h>
+#include <VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h>
+
+class DBManageClass {
+public:
+ DBManageClass(LDBTool *_dbTool);
+
+ virtual ~DBManageClass();
+
+ void start(int fileManagePSize = 1, int cutManagePSize = 1, int sdkHdlManagePSize = 1);
+
+ void addDevice(const std::string strDevID, const char *ip, const unsigned short port, const char *usrname,
+ const char *passwd);
+
+ void testSdk();
+
+ void stop();
+
+ void downFileFuncFinish(std::shared_ptr<ChannelLoadFileManage> &spPacket);
+
+ void cutVideoFuncFinish(std::shared_ptr<finishCutFileManage> &spPacket);
+
+ void sdkhlVideoFuncFinish(std::shared_ptr<finishSdkHdlManage> &spPacket, int listSize);
+
+private:
+
+ void init(int fileManagePSize = 1, int cutManagePSize = 1, int sdkHdlManagePSize = 1);
+
+ static void downloadFile(DBManageClass *dbManageClass);
+
+ static void cutVideoFile(DBManageClass *dbManageClass);
+
+ static void sdkHlVideo(DBManageClass *dbManageClass);
+
+private:
+ std::atomic_bool m_downloadFileRet;
+ int m_fileManagePSize = 0;
+ loadFileManage m_fileManage;
+
+ std::atomic_bool m_cutVideoRet;
+ int m_cutManagePSize = 0;
+ cutManage m_cutManage;
+
+ std::atomic_bool m_sdkHdlRet;
+ int m_sdkHdlManagePSize = 0;
+ sdkHdlManage m_sdkHdlManage;
+
+ HcDowloadElement m_HcDowloadElement;
+ HcAnalysVideo m_HcAnalysVideo;
+ //#todo sdk
+ BaiscSDKAnalysVideo m_BasicSDKAnalysVideo;
+};
+
+
+#endif //VIDEOANALYSFROMHC_DBMANAGECLASS_H
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.cpp b/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.cpp
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.h b/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.h
new file mode 100644
index 0000000..ec8e948
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.h
@@ -0,0 +1,43 @@
+#ifndef HCANALYSVIDEO_H_XZL_201808131611
+#define HCANALYSVIDEO_H_XZL_201808131611
+
+#include "myThread.h"
+#include "AppController.h"
+#include <vector>
+#include <basic/io/io.h>
+#include "dispathdatatype.hpp"
+
+//struct AnalysSrcInfo {
+// std::string strPath;
+//};
+
+class HcAnalysVideo : public mythread<getCutFileManage> {
+ using TASK_FUNCTION = std::function<void(std::shared_ptr<finishCutFileManage> &)>;
+public:
+ HcAnalysVideo(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+
+ ~HcAnalysVideo() {
+
+ }
+
+private:
+ virtual void doFunc(std::shared_ptr<getCutFileManage> spPacket) {
+ AppController _AppController(spPacket->src_path, 5000);
+ auto str_Path = _AppController.startController();
+ if (m_task_function != nullptr) {
+ auto fp_task(
+ std::make_shared<finishCutFileManage>(
+ finishCutFileManage{spPacket->src_path, str_Path,
+ IOOperate::GetFileNum(str_Path.c_str(), ".mp4")}));
+ m_task_function(fp_task);
+ } else {
+ ERR("m_task_function == nullptr");
+ return;
+ }
+ }
+
+private:
+ TASK_FUNCTION m_task_function;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.cpp b/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.cpp
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.h b/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.h
new file mode 100644
index 0000000..52add24
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.h
@@ -0,0 +1,92 @@
+#ifndef HCDOWNLOADELEMENT_XZL_201808091137
+#define HCDOWNLOADELEMENT_XZL_201808091137
+
+#include "myThread.h"
+#include "HCNetSDK.h"
+#include "HcRecord.h"
+#include "HcAnalysVideo.h"
+#include <mutex>
+
+
+class HcDowloadElement : public mythread<ChannelLoadFileManage> {
+ using TASK_FUNCTION = std::function<void(std::shared_ptr<ChannelLoadFileManage> &)>;
+public:
+ HcDowloadElement(const TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+// HcDowloadElement(LDBTool* dbTool) : m_fileManage(dbTool) {
+// m_HcRecord.init("192.168.1.4", 8000, "admin", "basic123");
+// }
+
+// HcDowloadElement(HcAnalysVideo *p) : m_HcAnalysVideo(p) {
+// m_HcRecord.init("192.168.1.4", 8000, "admin", "basic123");
+// }
+
+ void addDevice(const std::string strDevID, const char *ip,
+ const unsigned short port,
+ const char *usrname,
+ const char *passwd) {
+ //#todo
+ if (m_mapHcRecord.find(strDevID) == m_mapHcRecord.end()) {
+ m_mapHcRecord[strDevID] = new HcRecord;
+ m_mapHcRecord[strDevID]->init(ip, port, usrname, passwd);
+ } else {
+ ERR("璁惧宸插瓨鍦�");
+ }
+
+ }
+
+ ~HcDowloadElement() {
+// m_HcRecord.unInit();
+ for (auto item : m_mapHcRecord) {
+ item.second->unInit();
+ delete (item.second);
+ }
+ }
+
+
+private:
+
+ virtual void doFunc(std::shared_ptr<ChannelLoadFileManage> spPacket) {
+ if (m_mapHcRecord.find(spPacket->strDevID) == m_mapHcRecord.end()) {
+ ERR("璁惧涓嶅凡瀛樺湪");
+ return;
+ }
+// std::vector<int> ret = m_HcRecord.getUsefulChans();
+ std::vector<int> ret = m_mapHcRecord[spPacket->strDevID]->getUsefulChans();
+ NET_DVR_TIME startTime;
+ startTime.dwYear = spPacket->startTime.Year;
+ startTime.dwMonth = spPacket->startTime.Month;
+ startTime.dwDay = spPacket->startTime.Day;
+ startTime.dwHour = spPacket->startTime.Hour;
+ startTime.dwMinute = spPacket->startTime.Minute;
+ startTime.dwSecond = spPacket->startTime.Second;
+ NET_DVR_TIME endTime;
+ endTime.dwYear = spPacket->endTime.Year;
+ endTime.dwMonth = spPacket->endTime.Month;
+ endTime.dwDay = spPacket->endTime.Day;
+ endTime.dwHour = spPacket->endTime.Hour;
+ endTime.dwMinute = spPacket->endTime.Minute;
+ endTime.dwSecond = spPacket->endTime.Second;
+ std::string filePath;
+ //#todo 浠诲姟鎸夌収30min鐨勯绮掑害鎷嗗垎銆�
+ m_mapHcRecord[spPacket->strDevID]->downloadfiles(spPacket->strDevID.c_str(), spPacket->nChannelID, &startTime,
+ &endTime, filePath);
+ if (m_task_function != nullptr) {
+ auto str = filePath.substr(0, filePath.rfind('/'));
+ spPacket->srcPath = filePath.substr(0, filePath.rfind('/'));
+ DBG(spPacket->srcPath);
+ m_task_function(spPacket);
+ } else {
+ ERR("m_task_function == nullptr");
+ return;
+ }
+ }
+
+private:
+// HcRecord m_HcRecord;
+ std::map<std::string, HcRecord *> m_mapHcRecord;
+ TASK_FUNCTION m_task_function;
+// HcAnalysVideo *m_HcAnalysVideo;
+// loadFileManage m_fileManage;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.cpp b/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.cpp
new file mode 100644
index 0000000..aa36988
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.cpp
@@ -0,0 +1,356 @@
+#include "HcRecord.h"
+#include <cstring>
+#include <unistd.h>
+#include <basic/io/io.h>
+#include <string>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <basic/util/app/AppConfig.h>
+
+int HcRecord::init(const char *ip, unsigned short port, const char *usrname, const char *passwd) {
+ NET_DVR_Init();
+ //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+ NET_DVR_SetConnectTime(2000, 1);
+ NET_DVR_SetReconnect(10000, true);
+
+ NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+ struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+ strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+ struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+ strcpy(struLoginInfo.sUserName, usrname); //璁惧鐧诲綍鐢ㄦ埛鍚�
+ strcpy(struLoginInfo.sPassword, passwd); //璁惧鐧诲綍瀵嗙爜
+
+ //璁惧淇℃伅, 杈撳嚭鍙傛暟
+ NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+ m_lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+ if (m_lUserID < 0) {
+// printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+ NET_DVR_Cleanup();
+ return -1;
+ }
+ devSerialNumber = (char *) struDeviceInfoV40.struDeviceV30.sSerialNumber;
+ UsefulChans();
+ return 0;
+}
+
+int HcRecord::unInit() {
+ //娉ㄩ攢鐢ㄦ埛
+ NET_DVR_Logout(m_lUserID);
+ //閲婃斁SDK璧勬簮
+ NET_DVR_Cleanup();
+ return 0;
+}
+
+int HcRecord::saveRecordFile(int userId, char *srcfile, char *destfile) {
+ int bRes = 1;
+ int hPlayback = 0;
+ if ((hPlayback = NET_DVR_GetFileByName(userId, srcfile, destfile)) < 0) {
+ printf("GetFileByName failed. error[%d]\n", NET_DVR_GetLastError());
+ bRes = -1;
+ return bRes;
+ }
+
+ if (!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL, 0, NULL, NULL)) {
+ printf("play back control failed [%d]\n", NET_DVR_GetLastError());
+ bRes = -1;
+ return bRes;
+ }
+
+ int nPos = 0;
+ for (nPos = 0; nPos < 100 && nPos >= 0; nPos = NET_DVR_GetDownloadPos(hPlayback)) {
+ //printf("Be downloading...%d %%\n", nPos);
+ usleep(5000); //millisecond
+ }
+ printf("have got %d\n", nPos);
+
+ if (!NET_DVR_StopGetFile(hPlayback)) {
+ printf("failed to stop get file [%d]\n", NET_DVR_GetLastError());
+ bRes = -1;
+ return bRes;
+ }
+ printf("%s\n", srcfile);
+
+ if (nPos < 0 || nPos > 100) {
+ printf("download err [%d]\n", NET_DVR_GetLastError());
+ bRes = -1;
+ return bRes;
+ } else {
+ return 0;
+ }
+}
+
+std::vector<int> HcRecord::getUsefulChans() const {
+ return m_vecUsefulChans;
+}
+
+std::string HcRecord::getSerialNumber() const {
+ return devSerialNumber;
+}
+
+void HcRecord::UsefulChans() {
+ m_vecUsefulChans.clear();
+ NET_DVR_IPPARACFG_V40 ipOut;
+ long len;
+ BOOL bret = NET_DVR_GetDVRConfig(m_lUserID, NET_DVR_GET_IPPARACFG_V40, 33, &ipOut, sizeof(NET_DVR_IPPARACFG_V40),
+ (LPDWORD) &len);
+ NET_DVR_PICCFG_V40 picOut;
+ bret = NET_DVR_GetDVRConfig(m_lUserID, NET_DVR_GET_PICCFG_V40, 33, &picOut, sizeof(NET_DVR_PICCFG_V40),
+ (LPDWORD) &len);
+ DWORD dErr = NET_DVR_GetLastError();
+
+ BYTE byIPID, byIPIDHigh;
+ int iDevInfoIndex, iGroupNO;
+
+
+ for (int i = 0; i < ipOut.dwDChanNum; i++) {
+ switch (ipOut.struStreamMode[i].byGetStreamType) {
+ case 0: //鐩存帴浠庤澶囧彇娴�
+ if (ipOut.struStreamMode[i].uGetStream.struChanInfo.byEnable) {
+ byIPID = ipOut.struStreamMode[i].uGetStream.struChanInfo.byIPID;
+ byIPIDHigh = ipOut.struStreamMode[i].uGetStream.struChanInfo.byIPIDHigh;
+ iDevInfoIndex = byIPIDHigh * 256 + byIPID - 1 - iGroupNO * 64;
+ printf("IP channel no.%d is online, IP: %s\n", i + 1,
+ ipOut.struIPDevInfo[iDevInfoIndex].struIP.sIpV4);
+ m_vecUsefulChans.push_back(i + 33);
+ }
+ break;
+ case 1: //浠庢祦濯掍綋鍙栨祦
+ if (ipOut.struStreamMode[i].uGetStream.struPUStream.struStreamMediaSvrCfg.byValid) {
+ printf("IP channel %d connected with the IP device by stream server.\n", i + 1);
+ printf("IP of stream server: %s, IP of IP device: %s\n", ipOut.struStreamMode[i].uGetStream.\
+ struPUStream.struStreamMediaSvrCfg.struDevIP.sIpV4, ipOut.struStreamMode[i].uGetStream.\
+ struPUStream.struDevChanInfo.struIP.sIpV4);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+std::string HcRecord::makeDirs(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME pStartTime,
+ const LPNET_DVR_TIME pEndTime) {
+ auto cutpath = appConfig.getStringProperty("cutPath");
+ if (cutpath.back() != '/') {
+ cutpath.append("/");
+ }
+ auto loadPath = appConfig.getStringProperty("loadPath");
+ if (loadPath.back() != '/') {
+ loadPath.append("/");
+ }
+ makeDir(cutpath, strDevID, nChannel, pStartTime, pEndTime);
+ return makeDir(loadPath, strDevID, nChannel, pStartTime, pEndTime);
+}
+
+std::string HcRecord::makeDir(const std::string &strType, const std::string &strDevID, const int nChannel,
+ const LPNET_DVR_TIME pStartTime,
+ const LPNET_DVR_TIME pEndTime) {
+// char szPath[MAX_PATH] = {0};
+// getcwd(szPath, MAX_PATH);
+// std::string strFinalPath(szPath);
+ std::string strFinalPath = strType;
+ if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+ strFinalPath = strFinalPath + "/" + strDevID;
+ if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+ strFinalPath = strFinalPath + "/" + toString(nChannel);
+ if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+ strFinalPath = strFinalPath + "/" + std::to_string(pStartTime->dwYear) + toString(pStartTime->dwMonth);
+ if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+ strFinalPath = strFinalPath + "/" + toString(pStartTime->dwDay);
+ if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+ strFinalPath = strFinalPath + "/" + strDevID + "-" + toString(nChannel) + "-" +
+ std::to_string(pStartTime->dwYear) + toString(pStartTime->dwMonth) +
+ toString(pStartTime->dwDay) +
+ toString(pStartTime->dwHour) + toString(pStartTime->dwMinute) +
+ toString(pStartTime->dwSecond);
+ if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+ //2018-08-08 14:00:00.mp4
+ std::string filepath = strFinalPath + "/" + std::to_string(pStartTime->dwYear) + "-" +
+ toString(pStartTime->dwMonth) + "-" +
+ toString(pStartTime->dwDay) + " " +
+ toString(pStartTime->dwHour) + ":" + toString(pStartTime->dwMinute) + ":" +
+ toString(pStartTime->dwSecond) + ".mp4";
+ return filepath;
+}
+
+std::string HcRecord::toString(const int src) {
+ std::stringstream ss;
+ ss << std::setw(2) << std::setfill('0') << src;
+ return ss.str();
+}
+
+int HcRecord::downloadfiles(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME pStartTime,
+ const LPNET_DVR_TIME pEndTime, std::string &filePath) {
+
+ //鑾峰彇璺緞
+ filePath = makeDirs(strDevID, nChannel, pStartTime, pEndTime);
+
+ //灏嗘椂闂磋浆鍖栦负QDateTime绫诲瀷锛屼究浜庢椂闂存瘮杈�
+ //#todo寰呬紭鍖�
+// string str_StringStartTime(
+// to_string(pStartTime->dwYear) + "-" + to_string(pStartTime->dwMonth) + "-" + to_string(pStartTime->dwDay) + " "
+// + to_string(pStartTime->dwHour) + ":" + to_string(pStartTime->dwMinute) + ":" +
+// to_string(pStartTime->dwSecond));
+
+ char ch_StringStartTime[128];
+ sprintf(ch_StringStartTime, "%04d-%02d-%02d %02d:%02d:%02d", pStartTime->dwYear, pStartTime->dwMonth,
+ pStartTime->dwDay, pStartTime->dwHour, pStartTime->dwMinute, pStartTime->dwSecond);
+ string str_StringStartTime(ch_StringStartTime);
+
+ QDateTime taskStartTime = QDateTime::fromString(QString::fromStdString(str_StringStartTime), "yyyy-MM-dd hh:mm:ss");
+
+// string str_StringEndTime(
+// to_string(pEndTime->dwYear) + "-" + to_string(pEndTime->dwMonth) + "-" + to_string(pEndTime->dwDay) + " "
+// + to_string(pEndTime->dwHour) + ":" + to_string(pEndTime->dwMinute) + ":" + to_string(pEndTime->dwSecond));
+
+ char ch_StringEndTime[128];
+ sprintf(ch_StringEndTime, "%04d-%02d-%02d %02d:%02d:%02d", pEndTime->dwYear, pEndTime->dwMonth, pEndTime->dwDay,
+ pEndTime->dwHour, pEndTime->dwMinute, pEndTime->dwSecond);
+ string str_StringEndTime(ch_StringEndTime);
+
+ QDateTime taskEndTime = QDateTime::fromString(QString::fromStdString(str_StringEndTime), "yyyy-MM-dd hh:mm:ss");
+ //鏃堕棿杞寲-------------end----------------------
+
+ //閫掑綊锛屽皢鏃堕棿鎸夌収15min鍒嗗壊,鑻ユ渶鍚庡皬浜�15min,鍒欐寜鍓╀綑鏃堕棿褰曞埗骞剁粨鏉熼�掑綊
+ RecursiveByTimeDownloadfiles(strDevID, nChannel, taskStartTime, taskEndTime, filePath);
+
+ return 0;
+}
+
+int
+HcRecord::RecursiveByTimeDownloadfiles(const std::string &strDevID, const int nChannel, QDateTime pStartTime,
+ QDateTime pEndTime, std::string &filePath) {
+
+ NET_DVR_TIME startTime;
+ startTime.dwYear = pStartTime.date().year();
+ startTime.dwMonth = pStartTime.date().month();
+ startTime.dwDay = pStartTime.date().day();
+ startTime.dwHour = pStartTime.time().hour();
+ startTime.dwMinute = pStartTime.time().minute();
+ startTime.dwSecond = pStartTime.time().second();
+
+ std::string tmp_filepath = std::to_string(startTime.dwYear) + "-" + toString(startTime.dwMonth) + "-" +
+ toString(startTime.dwDay) + " " + toString(startTime.dwHour) + ":" +
+ toString(startTime.dwMinute) + ":" + toString(startTime.dwSecond) + ".mp4";
+ auto pos = filePath.rfind("/");
+
+// cout << filePath << endl;
+
+ filePath.replace(pos+1, filePath.size() - pos, tmp_filepath);
+
+// cout << filePath << endl;
+
+ QDateTime tmp_EndTime = pStartTime.addSecs(1 * 60 * 15);
+ if (tmp_EndTime < pEndTime) {
+ NET_DVR_TIME endTime;
+ endTime.dwYear = tmp_EndTime.date().year();
+ endTime.dwMonth = tmp_EndTime.date().month();
+ endTime.dwDay = tmp_EndTime.date().day();
+ endTime.dwHour = tmp_EndTime.time().hour();
+ endTime.dwMinute = tmp_EndTime.time().minute();
+ endTime.dwSecond = tmp_EndTime.time().second();
+
+
+ Downloadfile(strDevID, nChannel, &startTime, &endTime, filePath);
+
+ RecursiveByTimeDownloadfiles(strDevID, nChannel, tmp_EndTime, pEndTime, filePath);
+ } else {
+
+ NET_DVR_TIME endTime;
+ endTime.dwYear = pEndTime.date().year();
+ endTime.dwMonth = pEndTime.date().month();
+ endTime.dwDay = pEndTime.date().day();
+ endTime.dwHour = pEndTime.time().hour();
+ endTime.dwMinute = pEndTime.time().minute();
+ endTime.dwSecond = pEndTime.time().second();
+
+ Downloadfile(strDevID, nChannel, &startTime, &endTime, filePath);
+ return 0;
+ }
+}
+
+int
+HcRecord::Downloadfile(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME pStartTime,
+ const LPNET_DVR_TIME pEndTime, std::string &filePath) {
+// NET_DVR_TIME startTime;
+// startTime.dwYear = pStartTime.date().year();
+// startTime.dwMonth = pStartTime.date().month();
+// startTime.dwDay = pStartTime.date().day();
+// startTime.dwHour = pStartTime.time().hour();
+// startTime.dwMinute = pStartTime.time().minute();
+// startTime.dwSecond = pStartTime.time().second();
+//
+// NET_DVR_TIME endTime;
+// endTime.dwYear = pEndTime.date().year();
+// endTime.dwMonth = pEndTime.date().month();
+// endTime.dwDay = pEndTime.date().day();
+// endTime.dwHour = pEndTime.time().hour();
+// endTime.dwMinute = pEndTime.time().minute();
+// endTime.dwSecond = pEndTime.time().second();
+
+
+ NET_DVR_PLAYCOND struDownloadCond = {0};
+ struDownloadCond.dwChannel = nChannel;
+
+ struDownloadCond.struStartTime.dwYear = pStartTime->dwYear;
+ struDownloadCond.struStartTime.dwMonth = pStartTime->dwMonth;
+ struDownloadCond.struStartTime.dwDay = pStartTime->dwDay;
+ struDownloadCond.struStartTime.dwHour = pStartTime->dwHour;
+ struDownloadCond.struStartTime.dwMinute = pStartTime->dwMinute;
+ struDownloadCond.struStartTime.dwSecond = pStartTime->dwSecond;
+
+ struDownloadCond.struStopTime.dwYear = pEndTime->dwYear;
+ struDownloadCond.struStopTime.dwMonth = pEndTime->dwMonth;
+ struDownloadCond.struStopTime.dwDay = pEndTime->dwDay;
+ struDownloadCond.struStopTime.dwHour = pEndTime->dwHour;
+ struDownloadCond.struStopTime.dwMinute = pEndTime->dwMinute;
+ struDownloadCond.struStopTime.dwSecond = pEndTime->dwSecond;
+
+// filePath = makeDirs(strDevID, nChannel, pStartTime, pEndTime);
+
+
+
+ //std::cout << filePath << std::endl;
+
+ //---------------------------------------
+ //鎸夋椂闂翠笅杞�
+ int hPlayback;
+ hPlayback = NET_DVR_GetFileByTime_V40(m_lUserID, (char *) filePath.c_str(), &struDownloadCond);
+ if (hPlayback < 0) {
+ printf("NET_DVR_GetFileByTime_V40 fail,last error %d\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(m_lUserID);
+ NET_DVR_Cleanup();
+ return -1;
+ }
+
+ //---------------------------------------
+ //寮�濮嬩笅杞�
+ if (!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL, 0, NULL, NULL)) {
+ printf("Play back control failed [%d]\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(m_lUserID);
+ NET_DVR_Cleanup();
+ return -1;
+ }
+
+ int nPos = 0;
+ for (nPos = 0; nPos < 100 && nPos >= 0; nPos = NET_DVR_GetDownloadPos(hPlayback)) {
+ //printf("Be downloading... %d %%\n",nPos);
+ usleep(5000); //millisecond
+ }
+ if (!NET_DVR_StopGetFile(hPlayback)) {
+ printf("failed to stop get file [%d]\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(m_lUserID);
+ NET_DVR_Cleanup();
+ return -1;
+ }
+ if (nPos < 0 || nPos > 100) {
+ printf("download err [%d]\n", NET_DVR_GetLastError());
+ NET_DVR_Logout(m_lUserID);
+ NET_DVR_Cleanup();
+ return -1;
+ }
+ //printf("Be downloading... %d %%\n",nPos);
+ return 0;
+}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.h b/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.h
new file mode 100644
index 0000000..a592d68
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.h
@@ -0,0 +1,52 @@
+#ifndef HCRECORD_H_XZL_201808081648
+#define HCRECORD_H_XZL_201808081648
+
+#include "HCNetSDK.h"
+#include <QDateTime>
+#include <string>
+#include <vector>
+
+class HcRecord {
+public:
+ HcRecord() : m_lUserID(-1) {}
+
+ ~HcRecord() {}
+
+ int init(const char *ip, unsigned short port, const char *usrname, const char *passwd);
+
+ int unInit();
+
+ int downloadfiles(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME,
+ const LPNET_DVR_TIME, std::string &);
+
+ int saveRecordFile(int userId, char *srcfile, char *destfile);
+
+ std::vector<int> getUsefulChans() const;
+
+ std::string getSerialNumber() const;
+
+private:
+ void UsefulChans();
+
+ std::string makeDirs(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME pStartTime,
+ const LPNET_DVR_TIME pEndTime);
+
+ std::string makeDir(const std::string &strType, const std::string &strDevID, const int nChannel,
+ const LPNET_DVR_TIME pStartTime,
+ const LPNET_DVR_TIME pEndTime);
+
+ std::string toString(const int src);
+
+ int Downloadfile(const std::string &, const int nChannel, const LPNET_DVR_TIME, const LPNET_DVR_TIME,
+ std::string &);
+
+ int
+ RecursiveByTimeDownloadfiles(const std::string &, const int nChannel, QDateTime, QDateTime, std::string &);
+
+private:
+ LONG m_lUserID;
+ std::vector<int> m_vecUsefulChans;
+ std::string devSerialNumber;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.cpp b/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.cpp
new file mode 100644
index 0000000..bcd62e6
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.cpp
@@ -0,0 +1,185 @@
+#include "PerimeterAlarmManager.h"
+#include <basic/core/JsonFile.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <map>
+#include <mutex>
+#include <sys/time.h>
+#include "../VideoServer/QiaoJia/DB/LDBTool.h"
+#include <basic/util/fastdfs/FastFds.hpp>
+PerimeterAlarmManager::PerimeterAlarmManager(LDBTool *lDBTool):
+m_lDBTool(lDBTool)
+{
+ init();
+}
+
+PerimeterAlarmManager::~PerimeterAlarmManager()
+{
+ PA_removeAll();
+}
+
+
+void PerimeterAlarmManager::printConfigInfo(const ControllerConfig& config)
+{
+ //INFO("nFps "<<config.camInfo.nFps);
+
+// INFO("strRtsp "<<config.camInfo.strRtsp);
+// INFO("nTriggerDelay "<<config.paAlarmInfo.nTriggerDelay);
+// INFO("nAlarmDelay "<<config.paAlarmInfo.nAlarmDelay);
+// INFO("fSensitivity "<<config.paAlarmInfo.fSensitivity);
+// INFO("strMaskPath "<<config.paAlarmInfo.strMaskPath);
+// INFO("nAssembleCount "<<config.paAlarmInfo.nAssembleCount);
+
+
+// for(auto ele:config.assembleInfo.sounds)
+// {
+// INFO("soundPlayInfo.nID "<<ele.strIP);
+// INFO("soundPlayInfo.nSoundDuration "<<ele.nSoundDuration);
+// INFO("soundPlayInfo.strPath "<<ele.strPath);
+// }
+}
+
+
+int PerimeterAlarmManager::PA_addCamera(int index, const ControllerConfig& config)
+{
+ static int gpucount = 0;
+
+ gpucount++;
+
+ if(g_mapControls[index] == nullptr)
+ {
+ auto control = new AppPaController(index,config);
+ g_mapControls[index] = control;
+ control->start();
+ return 0;
+ }else{
+ PA_removeCamera(index);
+ return PA_addCamera(index, config);
+ }
+}
+
+int PerimeterAlarmManager::PA_removeCamera(int index)
+{
+ INFO("PA_removeCamera remove_index : "<<index);
+ if(g_mapControls[index] != nullptr)
+ {
+ AppPaController* control = g_mapControls[index];
+ control->stop();
+ control->wait();
+ delete control;
+ g_mapControls[index] = nullptr;
+ g_mapControls.erase(index);
+ return 0;
+ }
+ return -1;
+}
+
+int PerimeterAlarmManager::PA_removeAll()
+{
+ INFO("PA_removeAll");
+ for(auto iter = g_mapControls.begin();iter!=g_mapControls.end();iter++){
+ AppPaController* control = iter->second;
+ if(nullptr!=control)
+ {
+ control->stop();
+ control->wait();
+ delete control;
+ }
+ control = nullptr;
+ }
+ g_mapControls.clear();
+ return 0;
+}
+
+
+
+
+bool PerimeterAlarmManager::PA_hasIndex(int index)
+{
+ return g_mapControls[index] != nullptr;
+}
+
+
+static std::string rtspAddrBuild(std::string ip, const int port, std::string username,
+ std::string passwd, std::string brand) {
+ std::string rtsp_url;
+ if (brand == "haikang") {
+ rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+ "/h264/ch1/main/av_stream";
+ } else if (brand == "dahua") {
+ //rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
+ rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+ "/cam/realmonitor?channel=1&subtype=0";
+ //TODO
+ } else if (brand == "yushi") {
+ rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+ "/video1";
+ } else {
+ //TODO
+ }
+
+ return rtsp_url;
+}
+
+void PerimeterAlarmManager::init()
+{
+ auto lst = m_lDBTool->searchCamDevTableAll();
+ auto lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
+
+ appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration);
+
+ if (lst.size() > 0)
+ {
+ Json::Value json;
+ Json::Value rules;
+ for (auto item : lst)
+ {
+ int camId=item.str_cam_dev_id.toInt();
+ AlarmRule rule=m_lDBTool->searchCameraRuleByCamId(camId);
+ QVector<LActRuleWeekRecord> vec=m_lDBTool->searchCameraWeekRuleByCamId(camId);
+ ControllerConfig config;
+ for(int i=0;i<vec.size();++i)
+ {
+ RuleWeekInfo info;
+ info.m_nType=vec[i].m_nType;
+ info.m_strBegin=vec[i].m_strBegin;
+ info.m_strEnd=vec[i].m_strEnd;
+ config.ruleWeekInfoVec.push_back(info);
+ }
+
+
+ config.camInfo.strCamId= item.str_cam_dev_id.toStdString();
+
+
+ config.camInfo.strRtsp= rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(),
+ item.str_password.toStdString(), item.str_brand.toStdString());
+
+ config.camInfo.strAdrr = item.str_addr.toStdString();
+
+ config.paAlarmInfo.fSensitivity=rule.sensitivity;
+ config.paAlarmInfo.nAlarmDelay=rule.alarm_delay;
+ config.paAlarmInfo.nTriggerDelay=rule.trigger_delay;
+ config.paAlarmInfo.strMaskPath=rule.str_mask_path;
+ config.paAlarmInfo.nAssembleCount=rule.assemble_count;
+
+ PA_addCamera(camId, config);
+ }
+ }
+ else
+ {
+ ERR("searchCamDevTableAll size is 0");
+ }
+}
+std::string PerimeterAlarmManager::resetFdfs(std::string ip, unsigned int port, std::string content) {
+
+ std::thread reset([&]() {
+ fdfsClient.rwLock.rdlock();
+ if (fdfsClient.fastFds != nullptr) {
+ delete fdfsClient.fastFds;
+ }
+ fdfsClient.fastFds = new FastFds("fastDfsClient.conf");
+ fdfsClient.rwLock.unlock();
+ });
+ reset.detach();
+
+ return "";
+}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.h b/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.h
new file mode 100644
index 0000000..a88ec11
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.h
@@ -0,0 +1,42 @@
+#ifndef PERIMETERALARMMANAGER_H
+#define PERIMETERALARMMANAGER_H
+#include "../PerimeterAlarm/AppPaController.h"
+class ControllerConfig;
+class LDBTool;
+class FastFdsWithLock;
+class PerimeterAlarmManager
+{
+public:
+ PerimeterAlarmManager(LDBTool *_dbTool);
+ virtual ~PerimeterAlarmManager();
+private:
+
+ int PA_addCamera(int index, const ControllerConfig& config);
+
+ int PA_removeCamera(int index);
+
+
+ int PA_removeAll();
+
+ /* 鍔熻兘锛氬垽鏂煇涓猧ndex鏄惁鍦ㄦ杩涚▼涓�
+ params:
+ index 鎽勫儚澶磇ndex
+ return value:
+ true琛ㄧず鍦ㄦ杩涚▼涓紝false琛ㄧず涓嶅湪
+ */
+ bool PA_hasIndex(int index);
+
+ void printConfigInfo(const ControllerConfig& config);
+
+ void init();
+
+ std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = "");
+
+ //static std::vector<int> chnString2Vec(std::string str_list);
+private:
+ LDBTool* m_lDBTool;
+ FastFdsWithLock fdfsClient;
+ std::map<int, AppPaController*> g_mapControls;
+};
+
+#endif // PERIMETERALARMMANAGER_H
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
new file mode 100644
index 0000000..b96f6bd
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -0,0 +1,304 @@
+//
+// Created by ps on 18-9-26.
+//
+
+#include "RtspAnalysElement.h"
+
+#include <basic/http_server/HttpSrvRetRecieve.hpp>
+
+using std::string;
+
+//RtspAnalysElement::RtspAnalysElement() {}
+
+std::string RtspAnalysElement::resetFdfs(std::string ip, unsigned int port, std::string content) {
+
+ std::thread reset([&]() {
+ fdfsClient.rwLock.rdlock();
+ if (fdfsClient.fastFds != nullptr) {
+ delete fdfsClient.fastFds;
+ }
+ fdfsClient.fastFds = new FastFds("fastDfsClient.conf");
+ fdfsClient.rwLock.unlock();
+ });
+ reset.detach();
+
+ return "";
+}
+
+RtspAnalysElement::RtspAnalysElement(LDBTool *_dbTool) : m_lDBTool(_dbTool), maxCount(50), currentCount(0) {
+ init();
+ resetFdfs();
+ {
+// std::thread httpServer([&]() {
+// //#todo port
+// HttpSrvRetRecieve httpSrvRetRecieve("0.0.0.0", 12306, 1);
+// httpSrvRetRecieve.setInfo("^/resetFdfs$", "POST", std::bind(&RtspAnalysElement::resetFdfs, this,
+// std::placeholders::_1,
+// std::placeholders::_2,
+// std::placeholders::_3));
+// httpSrvRetRecieve.start();
+// httpSrvRetRecieve.waitForShutDown();
+// });
+// httpServer.detach();
+ }
+}
+
+#define SETSCORE(VEC, POS, IDENT) appPref.setFloatData(IDENT, POS >= VEC.size() ? 80 : VEC[POS]);
+//#define GETSCORE(IDENT) appPref.getFloatData(IDENT) == -1 ? 0.1 : appPref.getFloatData(IDENT);
+
+static std::string rtspAddrBuild(std::string ip, const int port, std::string username,
+ std::string passwd, std::string brand) {
+ std::string rtsp_url;
+ if (brand == "haikang") {
+ rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+ "/h264/ch1/main/av_stream";
+ } else if (brand == "dahua") {
+ //rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
+ rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+ "/cam/realmonitor?channel=1&subtype=0";
+ //TODO
+ } else if (brand == "yushi") {
+ rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+ "/video1";
+ } else {
+ //TODO
+ }
+
+ return rtsp_url;
+}
+
+void RtspAnalysElement::init() {
+ auto lst = m_lDBTool->searchCamDevTableAll();
+ auto lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
+
+ appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration);
+
+ if (lst.size() > 0) {
+ Json::Value json;
+ for (auto item : lst) {
+ string t_camIdex = item.str_cam_dev_id.toStdString();
+// std::string rtsp_url;
+// if (item.str_brand.toStdString() == "haikang") {
+// //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+// int port = 554;//TODO
+// string username =;
+// DBG("username:" << username << "!!!");
+// string passwd = item.str_password.toStdString();
+// string ip = item.str_ip.toStdString();
+//
+// rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+// "/h264/ch1/main/av_stream";
+//
+// }//else if(){}
+
+ std::string rtsp_url = rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(),
+ item.str_password.toStdString(), item.str_brand.toStdString());
+
+
+// lRec.str_det_thr = rec.value("det_thr").toString();
+// lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+ auto en_sdk = m_lDBTool->searchCamSdkTableByCamId(item.str_cam_dev_id);
+ vector<int> sdkVec = chnString2Vec(en_sdk.str_sdks.toStdString());
+
+ //璁剧疆妫�娴嬪緱鍒�
+// std::string s_d = str_det_thr;
+// std::string s_c = str_cmp_thr;
+ vector<int> sdkDetCoVec = chnString2Vec(en_sdk.str_det_thr.toStdString());
+ vector<int> sdkComCoVec = chnString2Vec(en_sdk.str_cmp_thr.toStdString());
+
+ int camId=item.str_cam_dev_id.toInt();
+ int t_size = sdkVec.size();
+ for (int i = 0; i < t_size; i++) {
+ switch (sdkVec[i]) {
+ case 1: {
+// INFO("face.enable");
+ json["face.enable"] = "1";
+ SETSCORE(sdkDetCoVec, i, t_camIdex + "face.det");
+ SETSCORE(sdkComCoVec, i, t_camIdex + "face.cmp");
+ DBG(" TESTCODE " << sdkDetCoVec[i] << " " << sdkComCoVec[i]);
+
+ break;
+ }
+ case 2: {
+ DBG("XX.enable " << "1");
+ SETSCORE(sdkDetCoVec, i, t_camIdex + "XX.det");
+ SETSCORE(sdkComCoVec, i, t_camIdex + "XX.cmp");
+ break;
+ }
+ case 3: {
+// INFO("face.enable");
+ json["yolo.enable"] = "1";
+ SETSCORE(sdkDetCoVec, i, t_camIdex + "yolo.det");
+ SETSCORE(sdkComCoVec, i, t_camIdex + "yolo.cmp");
+ break;
+ }
+ case 4: {
+
+ json["perimeter.enable"] = "1";
+ SETSCORE(sdkDetCoVec, i, t_camIdex + "perimeter.det");
+ SETSCORE(sdkComCoVec, i, t_camIdex + "perimeter.cmp");
+ setDataByType(4,json,camId);
+ break;
+ }
+ case 5: {
+
+ json["crowd.enable"] = "1";
+ SETSCORE(sdkDetCoVec, i, t_camIdex + "crowd.det");
+ SETSCORE(sdkComCoVec, i, t_camIdex + "crowd.cmp");
+ setDataByType(5,json,camId);
+ break;
+ }
+ case 6: {
+
+ json["keepRight.enable"] = "1";
+ SETSCORE(sdkDetCoVec, i, t_camIdex + "keepRight.det");
+ SETSCORE(sdkComCoVec, i, t_camIdex + "keepRight.cmp");
+ setDataByType(6,json,camId);
+ break;
+ }
+ }
+ }
+ json["rtsp"] = rtsp_url;
+ json["addr"] = item.str_addr.toStdString();
+
+ INFO("cam add is " << item.str_addr.toStdString());
+
+// DBG(t_camIdex);
+
+ appPref.getLongData("gpu.index");
+ addCamera(t_camIdex, json.toStyledString());
+ }
+ } else {
+ ERR("searchCamDevTableAll size is 0");
+ }
+
+}
+
+RtspAnalysElement::~RtspAnalysElement() {
+ for (auto controller: controllers) {
+ delete controller.second;
+ }
+ controllers.clear();
+}
+
+int RtspAnalysElement::addCamera(const std::string &index, const std::string &json) {
+ if (controllers.find(index) == controllers.end()) {
+ if (currentCount >= maxCount) {
+ ERR("addCamera faild, camera's num is full!")
+ return -1;
+ }
+ Json::Reader reader;
+ Json::Value value;
+
+ if (reader.parse(json, value)) {
+
+ controllers[index] = new AppPipeController(index, std::move(value), true);
+// controllers[index] = new AppPipeController(index, std::move(value), false);
+
+ controllers[index]->setfdfsClient(&fdfsClient);
+ controllers[index]->start();
+ currentCount++;
+ return 0;
+ }
+ return -1;
+ } else {
+ removeCamera(index);
+ DBG("removeCamera " << index)
+ return addCamera(index, json);
+ }
+}
+
+int RtspAnalysElement::removeCamera(const std::string &index) {
+ if (controllers.find(index) == controllers.end())return -1;
+ auto controller = controllers[index];
+ controller->stop();
+ controller->wait();
+ delete controller;
+ controllers.erase(index);
+ currentCount--;
+ return 0;
+}
+
+int RtspAnalysElement::removeAll() {
+ for (auto controller: controllers) {
+ controller.second->stop();
+ }
+ for (auto controller: controllers) {
+ controller.second->wait();
+ delete controller.second;
+ }
+ controllers.clear();
+ currentCount = 0;
+ return 0;
+}
+
+int RtspAnalysElement::getMaxCamCount() {
+ return maxCount;
+}
+
+int RtspAnalysElement::getCurrentCamCount() {
+ return currentCount;
+}
+
+std::string RtspAnalysElement::getRtmp(std::string &index) {
+ if (controllers.find(index) == controllers.end())return "";
+ auto controller = controllers[index];
+ return controller->getRtmp();
+}
+
+
+std::vector<int> RtspAnalysElement::chnString2Vec(std::string str_list) {
+ std::vector<int> result;
+ char *property_list = const_cast<char *>(str_list.c_str());
+ const char *c_Analyse = ",";
+ char *t_property;
+
+ char *t_save = NULL;
+ t_property = strtok_r(property_list, c_Analyse, &t_save);
+
+ while (t_property) {
+ std::string str_pro(t_property);
+
+ result.push_back(atoi(str_pro.c_str()));
+
+ t_property = strtok_r(t_save, c_Analyse, &t_save);
+
+ }
+ return result;
+}
+void RtspAnalysElement::setDataByType(int type,Json::Value& json,int camId)
+{
+ switch (type) {
+ case 4:
+ {
+ auto rule=m_lDBTool->searchPerimeterRuleByCamId(camId);
+ json["perimeter.area"]=rule.strAreas.toStdString();
+ json["perimeter.num"]=rule.nAlarmPeopleNum;
+ json["perimeter.delay"]=rule.nTriggerDelay;
+ json["perimeter.tolerance"]=rule.nTriggertolerance;
+ break;
+ }
+ case 5:
+ {
+ auto rule=m_lDBTool->searchCrowdRuleByCamId(camId);
+ json["crowd.area"]=rule.strAreas.toStdString();
+ json["crowd.num"]=rule.nAlarmPeopleNum;
+ json["crowd.delay"]=rule.nTriggerDelay;
+ json["crowd.tolerance"]=rule.nTriggertolerance;
+ break;
+ }
+ case 6:
+ {
+ auto rule=m_lDBTool->searchActRuleByCamId(camId);
+ json["keepRight.leftArea"]=rule.strAreas.toStdString();
+ json["keepRight.leftLine"]=rule.strLine.toStdString();
+ json["keepRight.rightArea"]=rule.strExAreas.toStdString();
+ json["keepRight.rightLine"]=rule.strExLine.toStdString();
+ json["keepRight.delay"]=rule.nTriggerDelay;
+ json["keepRight.tolerance"]=rule.nTriggertolerance;
+ break;
+ }
+ default:
+ break;
+ }
+}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h
new file mode 100644
index 0000000..890e317
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h
@@ -0,0 +1,56 @@
+//
+// Created by ps on 18-9-26.
+//
+
+#ifndef VIDEOANALYSFROMHC_RTSPANALYSELEMENT_H
+#define VIDEOANALYSFROMHC_RTSPANALYSELEMENT_H
+
+#include <iostream>
+#include <map>
+#include <StructureApp/AppPipeController.h>
+#include <VideoServer/QiaoJia/DB/LDBTool.h>
+#include <basic/util/app/AppPreference.hpp>
+
+
+class RtspAnalysElement {
+
+public:
+// RtspAnalysElement();
+
+ RtspAnalysElement(LDBTool *_dbTool);
+
+ virtual ~RtspAnalysElement();
+
+ int addCamera(const std::string &, const std::string &);
+
+ int removeCamera(const std::string &);
+
+ int removeAll();
+
+ int getMaxCamCount();
+
+ int getCurrentCamCount();
+
+ std::string getRtmp(std::string &);
+
+private:
+ void init();
+
+ std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = "");
+
+ static std::vector<int> chnString2Vec(std::string str_list);
+
+ void setDataByType(int type,Json::Value& json,int camId);
+
+private:
+ LDBTool *m_lDBTool;
+
+ std::map<std::string, AppPipeController *> controllers;
+ std::atomic<int> currentCount;
+ int maxCount;
+
+ FastFdsWithLock fdfsClient;
+};
+
+
+#endif //VIDEOANALYSFROMHC_RTSPANALYSELEMENT_H
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.cpp b/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.cpp
new file mode 100644
index 0000000..268ab71
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.cpp
@@ -0,0 +1,17 @@
+#include "TestThreads.h"
+//TestThreads::TestThreads()
+//{
+
+//}
+
+//TestThreads::~TestThreads()
+//{
+
+//}
+
+//void TestThreads::doFunc(std::shared_ptr<int>&)
+//{
+// static int a = 0;
+// a++;
+// printf("Testcode [%d]",a);
+//}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.h b/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.h
new file mode 100644
index 0000000..800bc53
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.h
@@ -0,0 +1,19 @@
+#ifndef TESTTHREADS_XZL201808091501
+#define TESTTHREADS_XZL201808091501
+
+#include <myThread.h>
+
+class TestThreads : public mythread<int> {
+public:
+ TestThreads();
+
+ ~TestThreads();
+
+ virtual void doFunc(std::shared_ptr<int> &) {
+ static int a = 0;
+ a++;
+ printf("Testcode [%d]", a);
+ }
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/main.cpp b/QiaoJiaSystem/VideoAnalysFromHC/main.cpp
new file mode 100644
index 0000000..98df593
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/main.cpp
@@ -0,0 +1,182 @@
+#include <stdio.h>
+#include <iostream>
+#include <unistd.h>
+#include "HCNetSDK.h"
+#include <cstring>
+#include "HcRecord.h"
+#include "TestThreads.h"
+#include "AppController.h"
+#include "DBManageClass.h"
+#include "RtspAnalysElement.h"
+#include <basic/debug/Debug.h>
+//#include "PerimeterAlarmManager.h"
+//#include "KeepRightManager.h"
+//"192.168.1.4", 8000, "admin", "basic123"
+
+using namespace std;
+
+#include <basic/util/file/FileUtil.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppConfig.h>
+
+
+static void startDBManageClass(LDBTool *_dbTool) {
+ DBManageClass _DBManageClass(_dbTool);
+ //from DEV_table get DEV config DS-7808N-SN0820161208AARR691369356WCVU
+ auto lst = _dbTool->searchDeviceTableAll();
+ if (lst.size() > 0) {
+ for (auto item : lst) {
+ _DBManageClass.addDevice(item.str_storage_dev_id.toStdString(), item.str_ip.toStdString().c_str(),
+ item.n_port, item.str_username.toStdString().c_str(),
+ item.str_password.toStdString().c_str());
+ }
+ _DBManageClass.start(4, 8, 16);
+ } else {
+ ERR("searchDeviceTableAll size is 0");
+ }
+ while (1) {
+ sleep(1 * 60 * 60 * 12);
+ }
+}
+
+static void startRtspAnalysElement(LDBTool *_dbTool) {
+ RtspAnalysElement rtspAnalysElement(_dbTool);
+ while (1) {
+ sleep(1 * 60 * 60 * 12);
+ }
+}
+
+//static void startPerimeterAlarmManager(LDBTool *_dbTool) {
+// PerimeterAlarmManager perimeterAlarmManager(_dbTool);
+// while (1) {
+// sleep(1 * 60 * 60 * 12);
+// }
+//}
+//static void startKeepRightManager(LDBTool *_dbTool) {
+// KeepRightManager keepRightManager(_dbTool);
+// while (1) {
+// sleep(1 * 60 * 60 * 12);
+// }
+//}
+
+#include <basic/util/app/AppConfig.h>
+
+int main(int argc, char **argv) {
+ SAVE_APP_ARGS
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+
+ appPref.setLongData("gpu.index", 0);
+ appPref.setIntData("show.image", 0);
+
+ //#todo get from config File
+// appPref.setStringData("ipAdd", "192.168.1.185");
+// appPref.setIntData("ipPort", 9200);
+
+ appPref.setStringData("ipAdd", appConfig.getStringProperty("ES_IP"));
+ appPref.setIntData("ipPort", appConfig.getIntProperty("ES_PORT"));
+
+ //yolo server
+ appPref.setStringData("yolo.proxy", "yoloServer");
+ //#todo
+ appPref.setStringData("yolo.ip", "");
+ appPref.setIntData("yolo.port", 10003);
+// rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"),
+
+
+ //face detect server
+ appPref.setStringData("faceDete.proxy", "faceServer");
+ //#todo
+ appPref.setStringData("faceDete.ip", "");
+ appPref.setIntData("faceDete.port", 10002);
+//rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"), appPref.getLongData("faceDete.port"),"tcp"),
+// rpcClient("faceServer","",10002,"tcp"),
+
+
+ //fece extern server
+ appPref.setStringData("faceExte.proxy", "faceExtractServer");
+ //#todo
+ appPref.setStringData("faceExte.ip", "");
+ appPref.setIntData("faceExte.port", 10008);
+//rpcClient(appPref.getStringData("faceExte.proxy"), appPref.getStringData("faceExte.ip"), appPref.getLongData("faceExte.port"),"tcp"),
+// "faceExtractServer", "", 10008, "tcp"),//浜鸿劯鐗瑰緛鎻愬彇 淇敼鎴愮偣瀵圭偣閫氳
+
+
+ //face search server
+ appPref.setStringData("faceSear.proxy", "faceCmServer");
+ appPref.setStringData("faceSear.ip", "");
+ appPref.setIntData("faceSear.port", 10004);
+//rpcClient(appPref.getStringData("faceSear.proxy"), appPref.getStringData("faceSear.ip"), appPref.getLongData("faceSear.port"),"tcp"),
+// faceSearchRpcClient("faceCmServer", "", 10004, "tcp")
+
+ //loopRecord server
+ appPref.setStringData("loopRecord.proxy", "LoopRecordVideoServer");
+ //#todo
+ appPref.setStringData("loopRecord.ip", "");
+ appPref.setIntData("loopRecord.port", 10010);
+//rpcClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"), appPref.getLongData("loopRecord.port"),"tcp"),
+
+ LDBTool _dbTool;
+ //"192.168.1.4", 8000, "admin", "basic123"
+
+ auto rec = _dbTool.searchConfigTableWithinServerInfo();
+
+ appPref.setStringData("fxDevID", rec.dev_id.toStdString());
+ appPref.setStringData("fxDevNAME", rec.dev_name.toStdString());
+ appPref.setStringData("user.loop.absolute.path", appConfig.getStringProperty("cutPath"));
+
+
+ bool loopRet = true;
+ while (loopRet) {
+ switch (_dbTool.searchDevTypeFromConfigTable()) {
+ case 0: {
+ DBG("case 0");
+ sleep(5);
+ break;
+ }
+ case 1: {
+ DBG("case 1");
+ //#todo add if
+ thread startDBManage(startDBManageClass, &_dbTool);
+ startDBManage.detach();
+ loopRet = false;
+ break;
+ }
+ case 2: {
+ DBG("case 2");
+ //#todo add 瀹炴椂娴佸湴鍧�
+ thread startRtspAnalys(startRtspAnalysElement, &_dbTool);
+ startRtspAnalys.detach();
+ loopRet = false;
+ break;
+ }
+// case 3: {
+// DBG("case 3");
+// //#todo add 鍛ㄧ晫鎶ヨ
+// thread startPAManager(startPerimeterAlarmManager, &_dbTool);
+// startPAManager.detach();
+// loopRet = false;
+// break;
+// }
+// case 4: {
+// DBG("case 4");
+// //#todo add KeepRight
+// thread startKPManager(startKeepRightManager, &_dbTool);
+// startKPManager.detach();
+// loopRet = false;
+// break;
+// }
+ default:
+ ERR("searchDevTypeFromConfigTable type is error");
+ }
+ }
+
+
+ INFO("get char");
+// getchar();
+// INFO("get char after");
+ while (1) {
+ sleep(1 * 60 * 60 * 12);
+ }
+ return 0;
+
+}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/mySem.hpp b/QiaoJiaSystem/VideoAnalysFromHC/mySem.hpp
new file mode 100644
index 0000000..37b2f9c
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/mySem.hpp
@@ -0,0 +1,70 @@
+#ifndef MYSEM_H_XZL_201808141050
+#define MYSEM_H_XZL_201808141050
+
+#include <chrono>
+#include <mutex>
+#include <condition_variable>
+
+enum {
+ SEMPHORE_FAIL = (-1),
+ SEMPHORE_SUCCESS = 0,
+ SEMPHORE_TIME_OUT = 1
+};
+
+class Semphore {
+public:
+ Semphore(const int sigs = 0) : m_signals(sigs), m_blocked(0) {}
+
+ ~Semphore() {}
+
+private:
+ Semphore(const Semphore &) = delete;
+
+ Semphore(Semphore &&) = delete;
+
+ Semphore operator=(const Semphore &) = delete;
+
+private:
+ std::mutex m_mtx;
+ std::condition_variable m_cv;
+ int m_signals;
+ int m_blocked;
+
+public:
+ int wait(const int time_out_ms = (-1)) {
+ std::unique_lock<std::mutex> ul(m_mtx);
+ if (m_signals > 0) {
+ --m_signals;
+ return SEMPHORE_SUCCESS;
+ } else {
+ ++m_blocked;
+ }
+
+ if (time_out_ms >= 0) {
+ std::chrono::milliseconds wait_time_ms(time_out_ms);
+ auto result = m_cv.wait_for(ul, wait_time_ms, [&] { return m_signals > 0; });
+ --m_blocked;
+ if (result) {
+ --m_signals;
+ return SEMPHORE_SUCCESS;
+ } else {
+ return SEMPHORE_TIME_OUT;
+ }
+ } else {
+ m_cv.wait(ul, [&] { return m_signals > 0; });
+ --m_blocked;
+ --m_signals;
+ return SEMPHORE_SUCCESS;
+ }
+ }
+
+ inline void signal(const int count = 1) {
+ std::lock_guard<std::mutex> lg(m_mtx);
+ m_signals += count;
+ if (m_blocked > 0) {
+ m_cv.notify_one();
+ }
+ }
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/myThread.cpp b/QiaoJiaSystem/VideoAnalysFromHC/myThread.cpp
new file mode 100644
index 0000000..7dd893d
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/myThread.cpp
@@ -0,0 +1 @@
+#include "myThread.h"
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/myThread.h b/QiaoJiaSystem/VideoAnalysFromHC/myThread.h
new file mode 100644
index 0000000..2749a52
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/myThread.h
@@ -0,0 +1,128 @@
+#ifndef MYTHREAD_H_XZL_201808081711
+#define MYTHREAD_H_XZL_201808081711
+
+#include <thread>
+#include <vector>
+#include <list>
+#include <memory>
+#include <thread>
+#include <chrono>
+#include <functional>
+#include <mySem.hpp>
+
+struct threadInfo {
+ bool isRunning;
+ std::shared_ptr<std::thread> thd;
+};
+enum {
+ PROCESSOR_FAIL = -1,
+ PROCESSOR_SUCCESS = 0,
+ PROCESSOR_TIME_OUT = 1,
+ PROCESSOR_QUEUE_FULL = 2,
+ PROCESSOR_QUEUE_EMPTY = 3
+};
+
+template<typename PACKET>
+class mythread {
+ using TASK_FUNCTION = std::function<void(std::shared_ptr<PACKET> &)>;
+public:
+ mythread(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+
+ virtual ~mythread() {}
+
+ int beginThreads(const int count) {
+ for (int i = 0; i < count; i++) {
+ threadInfo thInfo;
+ thInfo.isRunning = true;
+ m_thds.push_back(thInfo);
+ }
+ for (auto &ele:m_thds) {
+ ele.thd = std::make_shared<std::thread>([&]() -> void {
+ std::shared_ptr<PACKET> sp_task(nullptr);
+ int status = 0;
+ while (ele.isRunning) {
+ status = get_task(sp_task, 200);
+ if (status == PROCESSOR_SUCCESS) {
+ doFunc(sp_task);
+ if (m_task_function != nullptr) {
+ m_task_function(sp_task);
+ }
+ }
+ }
+ });
+ }
+ }
+
+ int endThreads() {
+ for (auto &ele:m_thds) {
+ ele.isRunning = false;
+ ele.thd->join();
+ }
+ }
+
+ int put_task(std::shared_ptr<PACKET> &sp_task, int *p_new_size = nullptr) {
+ std::lock_guard<std::mutex> auto_lock(m_task_lock);
+
+ int cur_size = static_cast<int>(m_taskList.size());
+ if (cur_size >= m_task_max_count) {
+ if (p_new_size != nullptr) {
+ *p_new_size = cur_size;
+ }
+ return PROCESSOR_QUEUE_FULL;
+ }
+
+ m_taskList.emplace_back(sp_task);
+ m_task_semphore.signal();
+
+ if (p_new_size != nullptr) {
+ *p_new_size = cur_size + 1;
+ }
+
+ return PROCESSOR_SUCCESS;
+ }
+
+ int get_task(std::shared_ptr<PACKET> &sp_task, const int ms = (-1), int *p_new_size = nullptr) {
+ if (m_task_semphore.wait(ms) != SEMPHORE_SUCCESS) {
+ return PROCESSOR_TIME_OUT;
+ }
+
+ std::lock_guard<std::mutex> auto_lock(m_task_lock);
+
+ /*
+ * 鍏冪礌鍏ラ槦鏃朵俊鍙蜂笌鍏冪礌鏄�1瀵�1鍏崇郴锛岀敱浜庡彲浠ヤ竴娆″彇鍏ㄩ儴闃熷垪鍏冪礌锛�
+ * 鎵�浠ュ彲鑳藉瓨鍦ㄧ瓑寰呬俊鍙锋垚鍔熶絾闃熷垪涓凡鏃犲厓绱犵殑鎯呭喌锛屾晠鍦ㄦ鍒ゆ柇
+ */
+ if (m_taskList.empty()) {
+ if (p_new_size != nullptr) {
+ *p_new_size = 0;
+ }
+ return PROCESSOR_QUEUE_EMPTY;
+ }
+
+ sp_task = std::move(m_taskList.front());
+ m_taskList.pop_front();
+
+ if (p_new_size != nullptr) {
+ *p_new_size = static_cast<int>(m_taskList.size());
+ }
+
+ return PROCESSOR_SUCCESS;
+ }
+
+ int get_taskListSize() {
+ std::lock_guard<std::mutex> auto_lock(m_task_lock);
+ return m_taskList.size();
+ }
+
+ virtual void doFunc(std::shared_ptr<PACKET> spPacket) {}
+
+private:
+ std::vector<threadInfo> m_thds;
+ std::mutex m_task_lock;
+ Semphore m_task_semphore;
+ volatile int m_task_max_count = 1024;
+ std::list<std::shared_ptr<PACKET>> m_taskList;
+ TASK_FUNCTION m_task_function = nullptr;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/CMakeLists.txt b/QiaoJiaSystem/VideoServer/CMakeLists.txt
new file mode 100644
index 0000000..f7cd8a7
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/CMakeLists.txt
@@ -0,0 +1,50 @@
+cmake_minimum_required(VERSION 3.5)
+project(QiaoJia)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+add_compile_options(-fPIC)
+
+SET(LIBS
+ pthread
+ Qt5Core
+ Qt5Sql
+ )
+include_directories(
+ /usr/include/x86_64-linux-gnu/qt5
+ /usr/include/x86_64-linux-gnu/qt5/QtCore/
+ /usr/include/x86_64-linux-gnu/qt5/QtSql/
+
+ ../../BasicPlatForm/
+ ./QiaoJia/DB
+ ./QiaoJia/dispatchTool
+)
+
+link_directories(
+ /usr/local/cuda/lib64
+ ../../BasicPlatForm/libs/opencv/lib
+ )
+
+add_executable(${PROJECT_NAME}
+ ./QiaoJia/main.cpp
+
+ ./QiaoJia/DB/LDBTool.cpp
+
+ ./QiaoJia/dispatchTool/loadManage.cpp
+ ./QiaoJia/dispatchTool/cutManage.cpp
+ ./QiaoJia/dispatchTool/sdkHdlManage.cpp
+
+ #绾跨▼姹�
+ ./QiaoJia/myThread.cpp
+ ./QiaoJia/myThread.h
+ ./QiaoJia/mySem.hpp
+
+ ./QiaoJia/dbtest.h
+
+ )
+
+
+target_link_libraries(${PROJECT_NAME}
+ ${LIBS}
+)
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/DB.pri b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DB.pri
new file mode 100644
index 0000000..5e0bce6
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DB.pri
@@ -0,0 +1,22 @@
+INCLUDEPATH += $$PWD
+DEPENDPATH += $$PWD
+
+INCLUDEPATH += \
+ $$PWD/../../BasicPlatForm \
+
+SOURCES += \
+ $$PWD/LDBTool.cpp \
+ $$PWD/../dispatchTool/loadManage.cpp \
+ $$PWD/../dispatchTool/cutManage.cpp \
+ $$PWD/../dispatchTool/sdkHdlManage.cpp
+
+HEADERS += \
+ $$PWD/LDBTool.h \
+ $$PWD/DBStruct.h \
+ $$PWD/../dispatchTool/loadManage.h \
+ $$PWD/../dispatchTool/cutManage.h \
+ $$PWD/../dispatchTool/sdkHdlManage.h
+
+
+
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h
new file mode 100644
index 0000000..5de036a
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h
@@ -0,0 +1,324 @@
+#ifndef DBCONNECTSTRUCT
+#define DBCONNECTSTRUCT
+
+//#include <vector>
+//#include <QImage>
+#include <QString>
+#include <QDateTime>
+#include <QVector>
+struct Record_Storage_Dev
+{
+ Record_Storage_Dev()
+ {
+ n_id = 0;
+ str_storage_dev_id = "";
+ str_dev_name = "";
+ n_total_chn = 0;
+ str_all_chn_num = "";
+ str_addr = "";
+ str_longitude = "";
+ str_latitude = "";
+ str_ip = "";
+ n_port = 0;
+ str_username = "";
+ str_password = "";
+ tim_start_time = QDateTime();
+ n_duration = 1;
+ str_brand = "";
+ str_reserved = "";
+ }
+
+ int n_id;//鑷id
+ QString str_storage_dev_id;//纾佺洏闃靛垪id
+ QString str_dev_name;//璁惧鍚嶇О
+ int n_total_chn;//璇ヨ澶囩殑鎬诲彲鐢ㄩ�氶亾
+ QString str_all_chn_num;//姣忎釜閫氶亾鐨勯�氶亾鍙�
+ QString str_addr;//璁惧鍦板潃鎻忚堪
+ QString str_longitude;//璁惧鍦板潃缁忓害
+ QString str_latitude;//璁惧鍦板潃缁村害
+ QString str_ip;//ip鍦板潃
+ int n_port;//ip绔彛
+ QString str_username;//璁惧鐨勭敤鎴峰悕
+ QString str_password;//璁惧鐨勫瘑鐮�
+ QDateTime tim_start_time;//寮�濮嬩笅杞界殑鏂囦欢鐨勬椂闂�
+ int n_duration;//姣忔涓嬭浇鐨勬椂闂撮暱搴︼紝鍗曚綅锛氬皬鏃�
+ QString str_brand;//鍝佺墝
+ QString str_reserved;//棰勭暀
+};
+
+struct Record_Cam_Dev
+{
+ Record_Cam_Dev()
+ {
+ n_id = 0;
+ str_name = "";
+ str_addr = "";
+ str_longitude = "";
+ str_latitude = "";
+ str_cam_dev_id = "";
+ str_ip = "";
+ n_port = 0;
+ str_username = "";
+ str_password = "";
+ str_brand = "";
+ str_reserved = "";
+ }
+
+ int n_id;//鑷id
+ QString str_cam_dev_id;//鎽勫儚鏈篿d
+ QString str_name;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍚嶇О
+ QString str_addr;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃鎻忚堪
+ QString str_longitude;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃缁忓害
+ QString str_latitude;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃缁村害
+ QString str_ip;//鎽勫儚鏈篿p
+ int n_port;//鎽勫儚鏈簆ort
+ QString str_username;//鎽勫儚鏈虹敤鎴峰悕
+ QString str_password;//鎽勫儚鏈哄瘑鐮�
+ QString str_brand;//鎽勫儚鏈哄搧鐗�
+ QString str_reserved;//棰勭暀
+};
+
+struct Record_Cam_Chn
+{
+
+ Record_Cam_Chn()
+ {
+ n_id = 0;
+ str_storage_dev_id = "";
+ n_chn = 0;
+ str_name = "";
+ str_addr = "";
+ str_longitude = "";
+ str_latitude = "";
+ tim_do_time = QDateTime();
+ tim_update_time = QDateTime();
+// str_cam_dev_id = "";
+// str_ip = "";
+// n_port = 0;
+// str_username = "";
+// str_password = "";
+// str_brand = "";
+ str_reserved = "";
+ }
+
+
+ int n_id;//鑷id
+ QString str_storage_dev_id;//纾佺洏闃靛垪id
+ int n_chn;//閫氶亾鍙�
+ QString str_name;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍚嶇О
+ QString str_addr;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃鎻忚堪
+ QString str_longitude;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃缁忓害
+ QString str_latitude;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃缁村害
+ QDateTime tim_do_time;//鍗冲皢涓嬭浇鐨勬枃浠剁殑寮�濮嬫椂闂�
+ QDateTime tim_update_time;//璁板綍鏇存柊鏃堕棿
+// QString str_cam_dev_id;//鎽勫儚鏈篿d
+// QString str_ip;//鎽勫儚鏈篿p
+// int n_port;//鎽勫儚鏈簆ort
+// QString str_username;//鎽勫儚鏈虹敤鎴峰悕
+// QString str_password;//鎽勫儚鏈哄瘑鐮�
+// QString str_brand;//鎽勫儚鏈哄搧鐗�
+ QString str_reserved;//棰勭暀
+};
+
+struct Record_Load_File_info
+{
+
+// Record_Load_File_info()
+// {
+// n_id = 0;
+// str_storage_dev_id = "";
+// n_chn = 0;
+// tim_do_time = QDateTime();
+// b_finish_flag = 0;
+// str_load_file_path = "";
+// tim_update_time = QDateTime();
+// str_reserved = "";
+// }
+
+ int n_id;//鑷id
+ QString str_storage_dev_id;//纾佺洏闃靛垪id
+ int n_chn;//閫氶亾鍙�
+ QDateTime tim_do_time;//姝e湪涓嬭浇鐨勬枃浠剁殑寮�濮嬫椂闂�
+ int b_finish_flag;//涓嬭浇瀹屾垚鏍囧織
+ QString str_load_file_path;//涓嬭浇鏂囦欢淇濆瓨璺緞
+ QDateTime tim_update_time;//璁板綍鏇存柊鏃堕棿
+ QString str_reserved;//棰勭暀
+};
+
+struct Record_Cut_Video_info
+{
+
+// Record_Cut_Video_info()
+// {
+// n_id = 0;
+// str_storage_dev_id = "";
+// n_chn = 0;
+// str_src_path = "";
+// str_dst_path = "";
+// n_total = 0;
+// b_finish_flag = 0;
+// tim_update_time = QDateTime();
+// str_reserved = "";
+// }
+
+ int n_id;//鑷id
+ QString str_storage_dev_id;//纾佺洏闃靛垪id
+ int n_chn;//閫氶亾鍙�
+ QString str_src_path;//涓嬭浇鏂囦欢淇濆瓨璺緞
+ QString str_dst_path;//瑁佸壀瀹岀殑鏂囦欢淇濆瓨璺緞
+ int n_total;//瑁佸壀鍚庣殑瑙嗛鎬绘暟
+ int b_finish_flag;//涓嬭浇瀹屾垚鏍囧織
+ QDateTime tim_update_time;//璁板綍鏇存柊鏃堕棿
+ QString str_reserved;//棰勭暀
+};
+
+struct Record_Sdk_Hdl_info
+{
+
+// Record_Sdk_Hdl_info()
+// {
+// n_id = 0;
+// str_storage_dev_id = "";
+// n_chn = 0;
+// str_src_path = "";
+// n_total = 0;
+// n_pos = 0;
+// str_reserved = "";
+// }
+
+ int n_id;//鑷id
+ QString str_storage_dev_id;//纾佺洏闃靛垪id
+ int n_chn;//閫氶亾鍙�
+ QString str_src_path;//瑁佸壀鍚�,寰卻dk澶勭悊鐨勬枃浠惰矾寰�
+ int n_total;//瑁佸壀鍚庣殑瑙嗛鎬绘暟
+ int n_pos;//澶勭悊瀹岀殑鏂囦欢鐨勫簭鍙�
+ QString str_reserved;//棰勭暀
+};
+
+struct Record_Chn_Sdk
+{
+
+ Record_Chn_Sdk()
+ {
+ n_id = 0;
+ str_storage_dev_id = "";
+ n_chn = 0;
+ str_sdks = "";
+ str_det_thr = "";
+ str_cmp_thr = "";
+// str_cam_dev_id = "";
+ str_reserved = "";
+ }
+
+ int n_id;//鑷id
+ QString str_storage_dev_id;//纾佺洏闃靛垪id
+ int n_chn;//閫氶亾鍙�
+ QString str_sdks;//璇ラ�氶亾瑕佷娇鐢ㄧ殑sdk绉嶇被锛屼汉鑴�-1,yolo-2,杞︾墝-3,鍏朵粬-4
+ QString str_det_thr;//璇ラ�氶亾瑕佷娇鐢ㄧ殑妫�娴嬮槇鍊硷紝浜鸿劯闃堝��-1,yolo闃堝��-2,杞︾墝闃堝��-3,鍏朵粬闃堝��-4
+ QString str_cmp_thr;//璇ラ�氶亾瑕佷娇鐢ㄧ殑姣斿闃堝�硷紝浜鸿劯闃堝��-1,yolo闃堝��-2,杞︾墝闃堝��-3,鍏朵粬闃堝��-4
+// QString str_cam_dev_id;//鎽勫儚鏈篿d
+ QString str_reserved;//棰勭暀
+};
+
+struct Record_Cam_Sdk
+{
+
+ Record_Cam_Sdk()
+ {
+ n_id = 0;
+ str_cam_dev_id = "";
+ str_sdks = "";
+ str_det_thr = "";
+ str_cmp_thr = "";
+ str_reserved = "";
+ }
+
+ int n_id;//鑷id
+ QString str_cam_dev_id;//鎽勫儚鏈篿d
+ QString str_sdks;//璇ラ�氶亾瑕佷娇鐢ㄧ殑sdk绉嶇被锛屼汉鑴�-1,杞︾墝-2,yolo-3,鍏朵粬-4
+ QString str_det_thr;//璇ラ�氶亾瑕佷娇鐢ㄧ殑妫�娴嬮槇鍊硷紝浜鸿劯闃堝��-1,杞︾墝闃堝��-2,yolo闃堝��-3,鍏朵粬闃堝��-4
+ QString str_cmp_thr;//璇ラ�氶亾瑕佷娇鐢ㄧ殑姣斿闃堝�硷紝浜鸿劯闃堝��-1,杞︾墝闃堝��-2,yolo闃堝��-3,鍏朵粬闃堝��-4
+ QString str_reserved;//棰勭暀
+};
+
+struct Record_Config
+{
+ Record_Config()
+ {
+ str_alarm_ip = "";
+ n_alarm_port = 0;
+ str_web_pic_ip = "";
+ n_web_pic_port = 0;
+ str_es_pic_ip = "";
+ n_es_pic_port = 0;
+ n_cut_max_duration = 0;
+ n_dev_type = 0;
+ str_reserved = "";
+ dev_id = "";
+ dev_name= "";
+ }
+
+ QString str_alarm_ip;//鎶ヨ鏈嶅姟鍣╥p
+ int n_alarm_port;//鎶ヨ鏈嶅姟鍣ㄧ鍙�
+ QString str_web_pic_ip;//web绔浘鐗囨湇鍔″櫒ip
+ int n_web_pic_port;//web绔浘鐗囨湇鍔″櫒绔彛
+ QString str_es_pic_ip;//ES绔浘鐗囨湇鍔″櫒ip
+ int n_es_pic_port;//ES绔浘鐗囨湇鍔″櫒绔彛
+ int n_cut_max_duration;//瑁佸壀瑙嗛鏈�闀�
+ int n_dev_type;//0:no dev; 1:storage; 2:camera
+ QString str_reserved;//棰勭暀
+ QString dev_id;
+ QString dev_name;
+};
+
+struct LActRuleWeekRecord
+{
+ LActRuleWeekRecord()
+ {
+ m_nCamId=0;
+ m_nType = 0;
+ m_strBegin = "";
+ m_strEnd = "";
+ }
+ int m_nCamId;
+ int m_nType; //鍛ㄥ嚑
+ QString m_strBegin;
+ QString m_strEnd;
+};
+struct ActRule
+{
+ ActRule()
+ {
+ nCamId = 0;
+ strAreas = "";
+ strLine = "";
+ strImageUrl = "";
+ nTriggertolerance = 0;
+ nTriggerDelay=0;
+ fSensitivity = 0.5;
+ nAlarmPeopleNum = 0;
+ strExAreas="";
+ strLine="";
+ }
+ int nCamId;
+ QString strAreas; //鐩戞祴鍖哄煙
+ QString strExAreas;
+ QString strLine; //鍒嗗壊绾�
+ QString strExLine;
+ QString strImageUrl; //鍒掑尯鍩熺殑鍥剧墖璺緞
+ int nTriggertolerance;
+ int nTriggerDelay; //寤惰繜鏃堕棿锛堢锛�
+ float fSensitivity;//鐏垫晱搴�
+ int nAlarmPeopleNum; //鎶ヨ浜烘暟锛堜汉鍛樻嫢鎸わ級
+};
+struct RuleCfg
+{
+
+ QVector<LActRuleWeekRecord> weekRuleVec;
+ ActRule actRule;
+ std::string strCamId;
+ std::string strRtsp;
+ std::string strAdrr;
+
+};
+#endif // DBCONNECTSTRUCT
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp
new file mode 100644
index 0000000..f2e61a4
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp
@@ -0,0 +1,2709 @@
+#include "LDBTool.h"
+#include <basic/debug/Debug.h>
+//#include <QMessageBox>
+#include <QMutexLocker>
+#include <QDebug>
+#include <basic/util/app/AppConfig.h>
+
+LDBTool::LDBTool() {
+ connectDB();
+}
+
+LDBTool::~LDBTool() {
+ delete m_pModel;
+}
+
+void LDBTool::connectDB() {
+ m_db = QSqlDatabase::addDatabase("QSQLITE");
+ m_db.setDatabaseName("./config.db");
+
+ if (m_db.open()) {
+ m_pModel = new QSqlTableModel(NULL, m_db);
+ // qDebug("Database opened successfully");
+ DBG("Database opened successfully");
+ } else {
+ qCritical("Can't open database: %s(%s)",
+ m_db.lastError().text().toLocal8Bit().data(),
+ qt_error_string().toLocal8Bit().data());
+ }
+}
+
+bool LDBTool::insertDeviceTable(Record_Storage_Dev deviceRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("storage_dev");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ // rec.setValue("id",deviceRec.n_id);
+ rec.setValue("storage_dev_id", deviceRec.str_storage_dev_id);
+ rec.setValue("dev_name", deviceRec.str_dev_name);
+ rec.setValue("total_chn", deviceRec.n_total_chn);
+ rec.setValue("all_chn_num", deviceRec.str_all_chn_num);
+ rec.setValue("addr", deviceRec.str_addr);
+ rec.setValue("longitude", deviceRec.str_longitude);
+ rec.setValue("latitude", deviceRec.str_latitude);
+ rec.setValue("ip", deviceRec.str_ip);
+ rec.setValue("port", deviceRec.n_port);
+ rec.setValue("username", deviceRec.str_username);
+ rec.setValue("password", deviceRec.str_password);
+ rec.setValue("start_time", deviceRec.tim_start_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("duration", deviceRec.n_duration);
+ rec.setValue("brand", deviceRec.str_brand);
+ rec.setValue("reserved", deviceRec.str_reserved);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+
+bool LDBTool::deleteDeviceTable(QString str_storage_dev_id) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("storage_dev");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(str_storage_dev_id));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteDeviceTableAndChnAndSdk(QString str_storage_dev_id) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel_dev(NULL, m_db);
+ pModel_dev.setTable("storage_dev");
+ pModel_dev.setFilter(QObject::tr("storage_dev_id = '%1'").arg(str_storage_dev_id));
+ pModel_dev.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_dev.select();
+
+ QSqlTableModel pModel_chn(NULL, m_db);
+ pModel_chn.setTable("cam_chn");
+ pModel_chn.setFilter(QObject::tr("storage_dev_id = '%1'").arg(str_storage_dev_id));
+ pModel_chn.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_chn.select();
+
+ QSqlTableModel pModel_sdk(NULL, m_db);
+ pModel_sdk.setTable("chn_sdk");
+ pModel_sdk.setFilter(QObject::tr("storage_dev_id = '%1'").arg(str_storage_dev_id));
+ pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_sdk.select();
+
+ int rowCount_dev = pModel_dev.rowCount();
+
+ if (rowCount_dev >= 1) {
+ for (int i = 0; i < rowCount_dev; i++) {
+ pModel_dev.removeRow(i);//TODO
+ }
+ }
+
+ int rowCount_chn = pModel_chn.rowCount();
+
+ if (rowCount_chn >= 1) {
+ for (int i = 0; i < rowCount_chn; i++) {
+ pModel_chn.removeRow(i);//TODO
+ }
+ }
+
+ int rowCount_sdk = pModel_sdk.rowCount();
+
+ if (rowCount_sdk >= 1) {
+ for (int i = 0; i < rowCount_sdk; i++) {
+ pModel_sdk.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel_dev.submitAll() && \
+ pModel_chn.submitAll() && \
+ pModel_sdk.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable err ,Database pModel_dev or pModel_chn or pModel_sdk Error: " \
+ << pModel_dev.lastError().text().toStdString() \
+ << pModel_chn.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::updateDeviceTable(Record_Storage_Dev deviceRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("storage_dev");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(deviceRec.str_storage_dev_id));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+// rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", deviceRec.str_storage_dev_id);
+ rec.setValue("dev_name", deviceRec.str_dev_name);
+ rec.setValue("total_chn", deviceRec.n_total_chn);
+ rec.setValue("all_chn_num", deviceRec.str_all_chn_num);
+ rec.setValue("addr", deviceRec.str_addr);
+ rec.setValue("longitude", deviceRec.str_longitude);
+ rec.setValue("latitude", deviceRec.str_latitude);
+ rec.setValue("ip", deviceRec.str_ip);
+ rec.setValue("port", deviceRec.n_port);
+ rec.setValue("username", deviceRec.str_username);
+ rec.setValue("password", deviceRec.str_password);
+ rec.setValue("start_time", deviceRec.tim_start_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("duration", deviceRec.n_duration);
+ rec.setValue("brand", deviceRec.str_brand);
+ rec.setValue("reserved", deviceRec.str_reserved);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+int LDBTool::searchDeviceNumber(void) {
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("storage_dev");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ return rowCount;
+}
+
+std::list<Record_Storage_Dev> LDBTool::searchDeviceTableAll(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ std::list<Record_Storage_Dev> lst;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("storage_dev");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ for (int i = 0; i < rowCount; ++i) {
+ Record_Storage_Dev lDeviceRec;
+ QSqlRecord rec = pModel.record(i);
+
+ lDeviceRec.n_id = rec.value("id").toInt();
+ lDeviceRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lDeviceRec.str_dev_name = rec.value("dev_name").toString();
+ lDeviceRec.n_total_chn = rec.value("total_chn").toInt();
+ lDeviceRec.str_all_chn_num = rec.value("all_chn_num").toString();
+ lDeviceRec.str_addr = rec.value("addr").toString();
+ lDeviceRec.str_longitude = rec.value("longitude").toString();
+ lDeviceRec.str_latitude = rec.value("latitude").toString();
+ lDeviceRec.str_ip = rec.value("ip").toString();
+ lDeviceRec.n_port = rec.value("port").toInt();
+ lDeviceRec.str_username = rec.value("username").toString();
+ lDeviceRec.str_password = rec.value("password").toString();
+ lDeviceRec.tim_start_time = QDateTime::fromString(rec.value("start_time").toString(),
+ "yyyy-MM-dd hh:mm:ss");
+ lDeviceRec.n_duration = rec.value("duration").toInt();
+ lDeviceRec.str_brand = rec.value("brand").toString();
+ lDeviceRec.str_reserved = rec.value("reserved").toString();
+ lst.push_back(lDeviceRec);
+ }
+ }
+
+ return lst;
+
+}
+
+Record_Storage_Dev LDBTool::searchDeviceTableByDeviceId(QString strDeviceId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ Record_Storage_Dev lDeviceRec;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("storage_dev");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDeviceId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lDeviceRec.n_id = rec.value("id").toInt();
+ lDeviceRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lDeviceRec.str_dev_name = rec.value("dev_name").toString();
+ lDeviceRec.n_total_chn = rec.value("total_chn").toInt();
+ lDeviceRec.str_all_chn_num = rec.value("all_chn_num").toString();
+ lDeviceRec.str_addr = rec.value("addr").toString();
+ lDeviceRec.str_longitude = rec.value("longitude").toString();
+ lDeviceRec.str_latitude = rec.value("latitude").toString();
+ lDeviceRec.str_ip = rec.value("ip").toString();
+ lDeviceRec.n_port = rec.value("port").toInt();
+ lDeviceRec.str_username = rec.value("username").toString();
+ lDeviceRec.str_password = rec.value("password").toString();
+ lDeviceRec.tim_start_time = QDateTime::fromString(rec.value("start_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lDeviceRec.n_duration = rec.value("duration").toInt();
+ lDeviceRec.str_brand = rec.value("brand").toString();
+ lDeviceRec.str_reserved = rec.value("reserved").toString();
+ }
+
+ return lDeviceRec;
+}
+
+int LDBTool::searchDurationByDeviceId(QString strDeviceId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ int nDuration = 1;//娌℃煡鍒板氨榛樿鏄�1灏忔椂
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("storage_dev");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDeviceId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ nDuration = rec.value("duration").toInt();
+ }
+
+ return nDuration;
+}
+
+//cam_dev==========================
+///
+/// \brief LDBTool::insertCamDevTable
+/// \param channelRec
+/// \return
+//=============================
+bool LDBTool::insertCamDevTable(Record_Cam_Dev channelRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_dev");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ rec.setValue("cam_dev_id", channelRec.str_cam_dev_id);
+ rec.setValue("name", channelRec.str_name);
+ rec.setValue("addr", channelRec.str_addr);
+ rec.setValue("longitude", channelRec.str_longitude);
+ rec.setValue("latitude", channelRec.str_latitude);
+ rec.setValue("ip", channelRec.str_ip);
+ rec.setValue("port", channelRec.n_port);
+ rec.setValue("username", channelRec.str_username);
+ rec.setValue("password", channelRec.str_password);
+ rec.setValue("brand", channelRec.str_brand);
+ rec.setValue("reserved", channelRec.str_reserved);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteCamDevandSdkByCamID(QString strCamId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel_cam(NULL, m_db);
+ pModel_cam.setTable("cam_dev");
+ pModel_cam.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+ pModel_cam.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_cam.select();
+
+ QSqlTableModel pModel_sdk(NULL, m_db);
+ pModel_sdk.setTable("cam_sdk");
+ pModel_sdk.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+ pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_sdk.select();
+
+ int rowCount_cam = pModel_cam.rowCount();
+ if (rowCount_cam >= 1) {
+ for (int i = 0; i < rowCount_cam; i++) {
+ pModel_cam.removeRow(i);//TODO
+ }
+ }
+
+ int rowCount_sdk = pModel_sdk.rowCount();
+ if (rowCount_sdk >= 1) {
+ for (int i = 0; i < rowCount_sdk; i++) {
+ pModel_sdk.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel_cam.submitAll() && \
+ pModel_sdk.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable err ,Database Error: " \
+ << pModel_cam.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::updateCamDevTable(Record_Cam_Dev camRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_dev");
+ pModel.setFilter(
+ QObject::tr("cam_dev_id = '%1'").arg(camRec.str_cam_dev_id));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+ rec.setValue("cam_dev_id", camRec.str_cam_dev_id);
+ rec.setValue("name", camRec.str_name);
+ rec.setValue("addr", camRec.str_addr);
+ rec.setValue("longitude", camRec.str_longitude);
+ rec.setValue("latitude", camRec.str_latitude);
+ rec.setValue("ip", camRec.str_ip);
+ rec.setValue("port", camRec.n_port);
+ rec.setValue("username", camRec.str_username);
+ rec.setValue("password", camRec.str_password);
+ rec.setValue("brand", camRec.str_brand);
+ rec.setValue("reserved", camRec.str_reserved);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+int LDBTool::searchCamDevNumber(void) {
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_dev");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ return rowCount;
+}
+
+//鏌ヨ鎽勫儚鏈哄垪琛�
+std::list<Record_Cam_Dev> LDBTool::searchCamDevTableAll(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ std::list<Record_Cam_Dev> lst;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_dev");
+ pModel.setFilter(QObject::tr("cam_dev_id != '' and cam_dev_id is not null"));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ for (int i = 0; i < rowCount; ++i) {
+ Record_Cam_Dev lChannelRec;
+ QSqlRecord rec = pModel.record(i);
+ lChannelRec.n_id = rec.value("id").toInt();
+ lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+ lChannelRec.str_name = rec.value("name").toString();
+ lChannelRec.str_addr = rec.value("addr").toString();
+ lChannelRec.str_longitude = rec.value("longitude").toString();
+ lChannelRec.str_latitude = rec.value("latitude").toString();
+ lChannelRec.str_ip = rec.value("ip").toString();
+ lChannelRec.n_port = rec.value("port").toInt();
+ lChannelRec.str_username = rec.value("username").toString();
+ lChannelRec.str_password = rec.value("password").toString();
+ lChannelRec.str_brand = rec.value("brand").toString();
+ lChannelRec.str_reserved = rec.value("reserved").toString();
+ lst.push_back(lChannelRec);
+ }
+ }
+
+ return lst;
+}
+
+
+//chn==========================
+///
+/// \brief LDBTool::insertChannelTable
+/// \param channelRec
+/// \return
+//=============================
+bool LDBTool::insertChannelTable(Record_Cam_Chn channelRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_chn");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", channelRec.str_storage_dev_id);
+ rec.setValue("chn", channelRec.n_chn);
+ rec.setValue("name", channelRec.str_name);
+ rec.setValue("addr", channelRec.str_addr);
+ rec.setValue("longitude", channelRec.str_longitude);
+ rec.setValue("latitude", channelRec.str_latitude);
+ rec.setValue("do_time", channelRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("update_time", channelRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+// rec.setValue("cam_dev_id", channelRec.str_cam_dev_id);
+// rec.setValue("ip", channelRec.str_ip);
+// rec.setValue("port", channelRec.n_port);
+// rec.setValue("username", channelRec.str_username);
+// rec.setValue("password", channelRec.str_password);
+// rec.setValue("brand", channelRec.str_brand);
+ rec.setValue("reserved", channelRec.str_reserved);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteChannelTable(QString strDeviceId, int nChannelId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_chn");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(strDeviceId).arg(nChannelId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteChannelTableByCamID(QString strCamId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel_cam(NULL, m_db);
+ pModel_cam.setTable("cam_chn");
+ pModel_cam.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+ pModel_cam.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_cam.select();
+
+ QSqlTableModel pModel_sdk(NULL, m_db);
+ pModel_sdk.setTable("chn_sdk");
+ pModel_sdk.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+ pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_sdk.select();
+
+ int rowCount_cam = pModel_cam.rowCount();
+ if (rowCount_cam >= 1) {
+ for (int i = 0; i < rowCount_cam; i++) {
+ pModel_cam.removeRow(i);//TODO
+ }
+ }
+
+ int rowCount_sdk = pModel_sdk.rowCount();
+ if (rowCount_sdk >= 1) {
+ for (int i = 0; i < rowCount_sdk; i++) {
+ pModel_sdk.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel_cam.submitAll() && \
+ pModel_sdk.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable err ,Database Error: " \
+ << pModel_cam.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::updateChannelTable(Record_Cam_Chn channelRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_chn");
+ pModel.setFilter(
+ QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(channelRec.str_storage_dev_id).arg(channelRec.n_chn));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+// rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", channelRec.str_storage_dev_id);
+ rec.setValue("chn", channelRec.n_chn);
+ rec.setValue("name", channelRec.str_name);
+ rec.setValue("addr", channelRec.str_addr);
+ rec.setValue("longitude", channelRec.str_longitude);
+ rec.setValue("latitude", channelRec.str_latitude);
+ rec.setValue("do_time", channelRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("update_time", channelRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+// rec.setValue("cam_dev_id", channelRec.str_cam_dev_id);
+// rec.setValue("ip", channelRec.str_ip);
+// rec.setValue("port", channelRec.n_port);
+// rec.setValue("username", channelRec.str_username);
+// rec.setValue("password", channelRec.str_password);
+// rec.setValue("brand", channelRec.str_brand);
+ rec.setValue("reserved", channelRec.str_reserved);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+std::list<Record_Cam_Chn> LDBTool::searchChannelTableAll(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ std::list<Record_Cam_Chn> lst;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_chn");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ for (int i = 0; i < rowCount; ++i) {
+ Record_Cam_Chn lChannelRec;
+ QSqlRecord rec = pModel.record(i);
+ lChannelRec.n_id = rec.value("id").toInt();
+ lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lChannelRec.n_chn = rec.value("chn").toInt();
+ lChannelRec.str_name = rec.value("name").toString();
+ lChannelRec.str_addr = rec.value("addr").toString();
+ lChannelRec.str_longitude = rec.value("longitude").toString();
+ lChannelRec.str_latitude = rec.value("latitude").toString();
+ lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+ "yyyy-MM-dd hh:mm:ss");
+// lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+// lChannelRec.str_ip = rec.value("ip").toString();
+// lChannelRec.n_port = rec.value("port").toInt();
+// lChannelRec.str_username = rec.value("username").toString();
+// lChannelRec.str_password = rec.value("password").toString();
+// lChannelRec.str_brand = rec.value("brand").toString();
+ lChannelRec.str_reserved = rec.value("reserved").toString();
+ lst.push_back(lChannelRec);
+ }
+ }
+
+ return lst;
+}
+
+//鏌ヨtongdao鎽勫儚鏈哄垪琛�
+std::list<Record_Cam_Chn> LDBTool::searchChannelTableCamType(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ std::list<Record_Cam_Chn> lst;
+ QSqlTableModel pModel(NULL, m_db);
+
+ pModel.setTable("cam_chn");
+ pModel.setFilter(QObject::tr("cam_dev_id != '' and cam_dev_id is not null"));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ for (int i = 0; i < rowCount; ++i) {
+ Record_Cam_Chn lChannelRec;
+ QSqlRecord rec = pModel.record(i);
+ lChannelRec.n_id = rec.value("id").toInt();
+ lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lChannelRec.n_chn = rec.value("chn").toInt();
+ lChannelRec.str_name = rec.value("name").toString();
+ lChannelRec.str_addr = rec.value("addr").toString();
+ lChannelRec.str_longitude = rec.value("longitude").toString();
+ lChannelRec.str_latitude = rec.value("latitude").toString();
+ lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+ "yyyy-MM-dd hh:mm:ss");
+// lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+// lChannelRec.str_ip = rec.value("ip").toString();
+// lChannelRec.n_port = rec.value("port").toInt();
+// lChannelRec.str_username = rec.value("username").toString();
+// lChannelRec.str_password = rec.value("password").toString();
+// lChannelRec.str_brand = rec.value("brand").toString();
+ lChannelRec.str_reserved = rec.value("reserved").toString();
+ lst.push_back(lChannelRec);
+ }
+ }
+
+ return lst;
+}
+
+std::list<Record_Cam_Chn> LDBTool::searchChannelTableByDevlId(QString strDeviceId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ std::list<Record_Cam_Chn> lst;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_chn");
+ pModel.setFilter(QObject::tr(" storage_dev_id = '%1'").arg(strDeviceId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ for (int i = 0; i < rowCount; ++i) {
+ Record_Cam_Chn lChannelRec;
+ QSqlRecord rec = pModel.record(i);
+ lChannelRec.n_id = rec.value("id").toInt();
+ lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lChannelRec.n_chn = rec.value("chn").toInt();
+ lChannelRec.str_name = rec.value("name").toString();
+ lChannelRec.str_addr = rec.value("addr").toString();
+ lChannelRec.str_longitude = rec.value("longitude").toString();
+ lChannelRec.str_latitude = rec.value("latitude").toString();
+ lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+ "yyyy-MM-dd hh:mm:ss");
+// lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+// lChannelRec.str_ip = rec.value("ip").toString();
+// lChannelRec.n_port = rec.value("port").toInt();
+// lChannelRec.str_username = rec.value("username").toString();
+// lChannelRec.str_password = rec.value("password").toString();
+// lChannelRec.str_brand = rec.value("brand").toString();
+ lChannelRec.str_reserved = rec.value("reserved").toString();
+ lst.push_back(lChannelRec);
+ }
+ }
+
+ return lst;
+}
+
+Record_Cam_Chn LDBTool::searchChannelTableByChannelId(QString strDeviceId, int nChannelId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ Record_Cam_Chn lChannelRec;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_chn");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(strDeviceId).arg(nChannelId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lChannelRec.n_id = rec.value("id").toInt();
+ lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lChannelRec.n_chn = rec.value("chn").toInt();
+ lChannelRec.str_name = rec.value("name").toString();
+ lChannelRec.str_addr = rec.value("addr").toString();
+ lChannelRec.str_longitude = rec.value("longitude").toString();
+ lChannelRec.str_latitude = rec.value("latitude").toString();
+ lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), \
+ "yyyy-MM-dd hh:mm:ss");
+// lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+// lChannelRec.str_ip = rec.value("ip").toString();
+// lChannelRec.n_port = rec.value("port").toInt();
+// lChannelRec.str_username = rec.value("username").toString();
+// lChannelRec.str_password = rec.value("password").toString();
+// lChannelRec.str_brand = rec.value("brand").toString();
+ lChannelRec.str_reserved = rec.value("reserved").toString();
+ }
+
+ return lChannelRec;
+}
+
+Record_Cam_Chn LDBTool::searchOldestRecordfromChnTableByUpdateTime(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ Record_Cam_Chn lChannelRec;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_chn");
+ pModel.setFilter(QObject::tr(
+ "storage_dev_id != '' and storage_dev_id is not null and chn != 0 and do_time != '' and do_time is not null"));
+ pModel.setSort(8, Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪,鎵惧埌鏃堕棿鏈�鏃х殑璁板綍
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lChannelRec.n_id = rec.value("id").toInt();
+ lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lChannelRec.n_chn = rec.value("chn").toInt();
+ lChannelRec.str_name = rec.value("name").toString();
+ lChannelRec.str_addr = rec.value("addr").toString();
+ lChannelRec.str_longitude = rec.value("longitude").toString();
+ lChannelRec.str_latitude = rec.value("latitude").toString();
+ lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), \
+ "yyyy-MM-dd hh:mm:ss");
+// lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+// lChannelRec.str_ip = rec.value("ip").toString();
+// lChannelRec.n_port = rec.value("port").toInt();
+// lChannelRec.str_username = rec.value("username").toString();
+// lChannelRec.str_password = rec.value("password").toString();
+// lChannelRec.str_brand = rec.value("brand").toString();
+ lChannelRec.str_reserved = rec.value("reserved").toString();
+
+ rec.setValue("update_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
+ pModel.setRecord(0, rec);//TODO
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ }
+ }
+
+ return lChannelRec;
+}
+
+Record_Cam_Chn LDBTool::searchOldestRecordfromChnTableByChannelId(QString strDeviceId, int nChannelId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ Record_Cam_Chn lChannelRec;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_chn");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(strDeviceId).arg(nChannelId)); //TODO
+ pModel.setSort(7, Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lChannelRec.n_id = rec.value("id").toInt();
+ lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lChannelRec.n_chn = rec.value("chn").toInt();
+ lChannelRec.str_name = rec.value("name").toString();
+ lChannelRec.str_addr = rec.value("addr").toString();
+ lChannelRec.str_longitude = rec.value("longitude").toString();
+ lChannelRec.str_latitude = rec.value("latitude").toString();
+ lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), \
+ "yyyy-MM-dd hh:mm:ss");
+// lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+// lChannelRec.str_ip = rec.value("ip").toString();
+// lChannelRec.n_port = rec.value("port").toInt();
+// lChannelRec.str_username = rec.value("username").toString();
+// lChannelRec.str_password = rec.value("password").toString();
+// lChannelRec.str_brand = rec.value("brand").toString();
+ lChannelRec.str_reserved = rec.value("reserved").toString();
+
+ rec.setValue("update_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
+ pModel.setRecord(0, rec);//TODO
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ }
+ }
+
+ return lChannelRec;
+}
+
+Record_Cam_Chn LDBTool::searchNewestRecordfromChnTableByChannelId(QString strDeviceId, int nChannelId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ Record_Cam_Chn lChannelRec;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_chn");
+ pModel.setFilter(QObject::tr(" storage_dev_id = '%1' and chn = '%2'").arg(strDeviceId).arg(nChannelId)); //TODO
+ pModel.setSort(7, Qt::DescendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lChannelRec.n_id = rec.value("id").toInt();
+ lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lChannelRec.n_chn = rec.value("chn").toInt();
+ lChannelRec.str_name = rec.value("name").toString();
+ lChannelRec.str_addr = rec.value("addr").toString();
+ lChannelRec.str_longitude = rec.value("longitude").toString();
+ lChannelRec.str_latitude = rec.value("latitude").toString();
+ lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), \
+ "yyyy-MM-dd hh:mm:ss");
+// lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+// lChannelRec.str_ip = rec.value("ip").toString();
+// lChannelRec.n_port = rec.value("port").toInt();
+// lChannelRec.str_username = rec.value("username").toString();
+// lChannelRec.str_password = rec.value("password").toString();
+// lChannelRec.str_brand = rec.value("brand").toString();
+ lChannelRec.str_reserved = rec.value("reserved").toString();
+ }
+
+ return lChannelRec;
+}
+
+///
+/// \brief LDBTool::insertloadFileTable
+/// \param channelRec
+/// \return
+///
+bool LDBTool::insertLoadFileTable(Record_Load_File_info loadfileRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("load_file_info");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", loadfileRec.str_storage_dev_id);
+ rec.setValue("chn", loadfileRec.n_chn);
+ rec.setValue("do_time", loadfileRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("finish_flag", loadfileRec.b_finish_flag);
+ rec.setValue("path", loadfileRec.str_load_file_path);
+ rec.setValue("update_time", loadfileRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("reserved", loadfileRec.str_reserved);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteLoadFileTable(QString strDeviceId, int nChannelId, QDateTime tim_startTime) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("load_file_info");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and do_time = '%3'")\
+.arg(strDeviceId).arg(nChannelId).arg(tim_startTime.toString("yyyy-MM-dd hh:mm:ss")));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteLoadFileTablebyDevID(QString strDeviceId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("load_file_info");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDeviceId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::updateLoadFileTable(Record_Load_File_info loadfileRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("load_file_info");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and do_time = '%3'")\
+.arg(loadfileRec.str_storage_dev_id).arg(loadfileRec.n_chn)\
+.arg(loadfileRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss")));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+// rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", loadfileRec.str_storage_dev_id);
+ rec.setValue("chn", loadfileRec.n_chn);
+ rec.setValue("do_time", loadfileRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("finish_flag", loadfileRec.b_finish_flag);
+ rec.setValue("path", loadfileRec.str_load_file_path);
+ rec.setValue("update_time", loadfileRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("reserved", loadfileRec.str_reserved);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+std::list<Record_Load_File_info> LDBTool::searchLoadFileTableAll(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ std::list<Record_Load_File_info> lst;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("load_file_info");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ for (int i = 0; i < rowCount; ++i) {
+ Record_Load_File_info lRec;
+ QSqlRecord rec = pModel.record(i);
+ if (!rec.value("finish_flag").toBool()) {
+ lRec.n_id = rec.value("id").toInt();
+ lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lRec.n_chn = rec.value("chn").toInt();
+ lRec.tim_do_time = rec.value("do_time").toDateTime();
+ lRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lRec.b_finish_flag = rec.value("finish_flag").toBool();
+ lRec.str_load_file_path = rec.value("path").toString();
+ lRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+ "yyyy-MM-dd hh:mm:ss");
+ lRec.str_reserved = rec.value("reserved").toString();
+ lst.push_back(lRec);
+ }
+ }
+ }
+
+ return lst;
+}
+
+Record_Load_File_info LDBTool::searchOldestRecordfromLoadTableByUpdateTime(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ Record_Load_File_info lRec;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("load_file_info");
+ pModel.setFilter(QObject::tr("finish_flag = 1"));
+ pModel.setSort(6, Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪,鎵惧埌鏃堕棿鏈�鏃х殑璁板綍
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lRec.n_id = rec.value("id").toInt();
+ lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lRec.n_chn = rec.value("chn").toInt();
+ lRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lRec.b_finish_flag = rec.value("finish_flag").toBool();
+ lRec.str_load_file_path = rec.value("path").toString();
+ lRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lRec.str_reserved = rec.value("reserved").toString();
+ } else {
+ ERR("rowCount <=0");
+ }
+
+ return lRec;
+}
+
+///
+/// \brief insertLoadFileTableAndUpdateChannelTable
+/// \param loadfileRec
+/// \param channelRec
+/// \return
+///
+bool LDBTool::insertLoadFileTableAndUpdateChannelTable(Record_Load_File_info loadfileRec,
+ Record_Cam_Chn channelRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel_load(NULL, m_db);
+ pModel_load.setTable("load_file_info");
+ pModel_load.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec_load = pModel_load.record();
+ rec_load.setGenerated("id", false);
+ rec_load.setValue("storage_dev_id", loadfileRec.str_storage_dev_id);
+ rec_load.setValue("chn", loadfileRec.n_chn);
+ rec_load.setValue("do_time", loadfileRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec_load.setValue("finish_flag", loadfileRec.b_finish_flag);
+ rec_load.setValue("path", loadfileRec.str_load_file_path);
+ rec_load.setValue("update_time", loadfileRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec_load.setValue("reserved", loadfileRec.str_reserved);
+
+ /////////
+ QSqlTableModel pModel_chn(NULL, m_db);
+ pModel_chn.setTable("cam_chn");
+ pModel_chn.setFilter(
+ QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(channelRec.str_storage_dev_id).arg(channelRec.n_chn));
+ pModel_chn.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_chn.select();
+
+ QSqlRecord rec_chn = pModel_chn.record(0);
+// rec_chn.setGenerated("id", false);
+ rec_chn.setValue("storage_dev_id", channelRec.str_storage_dev_id);
+ rec_chn.setValue("chn", channelRec.n_chn);
+ rec_chn.setValue("name", channelRec.str_name);
+ rec_chn.setValue("addr", channelRec.str_addr);
+ rec_chn.setValue("longitude", channelRec.str_longitude);
+ rec_chn.setValue("latitude", channelRec.str_latitude);
+ rec_chn.setValue("do_time", channelRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec_chn.setValue("update_time", channelRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec_chn.setValue("reserved", channelRec.str_reserved);
+
+ pModel_load.insertRecord(-1, rec_load);
+
+ int rowCount = pModel_chn.rowCount();
+ if (rowCount == 0) {
+ pModel_chn.insertRecord(-1, rec_chn);
+ } else if (rowCount > 0) {
+ pModel_chn.setRecord(0, rec_chn);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel_load.submitAll() && pModel_chn.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertLDeviceTable ,pModel_load Error: " << pModel_load.lastError().text().toStdString()
+ << " pModel_chn "
+ << pModel_load.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),\
+ // QObject::tr("Database Error: %1").arg(pModel_load.lastError().text()),\
+ // QObject::tr("Database Error: %1").arg(pModel_chn.lastError().text()));
+ return false;
+ }
+}
+
+///
+/// \brief LDBTool::insertCutVideoTable
+/// \param cutVideoRec
+/// \return
+///
+bool LDBTool::insertCutVideoTable(Record_Cut_Video_info cutVideoRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cut_video_info");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", cutVideoRec.str_storage_dev_id);
+ rec.setValue("chn", cutVideoRec.n_chn);
+ rec.setValue("src_path", cutVideoRec.str_src_path);
+ rec.setValue("dst_path", cutVideoRec.str_dst_path);
+ rec.setValue("total", cutVideoRec.n_total);
+ rec.setValue("finish_flag", cutVideoRec.b_finish_flag);
+ rec.setValue("update_time", cutVideoRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("reserved", cutVideoRec.str_reserved);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteCutVideoTable(QString strDeviceId, int nChannelId, QString strSrcPath) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cut_video_info");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and src_path = '%3'")\
+.arg(strDeviceId).arg(nChannelId).arg(strSrcPath));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteCutVideoTablebyDevID(QString strDeviceId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cut_video_info");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDeviceId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ return false;
+ }
+}
+
+bool LDBTool::updateCutVideoTable(Record_Cut_Video_info cutVideoRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cut_video_info");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and src_path = '%3'")\
+.arg(cutVideoRec.str_storage_dev_id).arg(cutVideoRec.n_chn).arg(cutVideoRec.str_src_path));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+// rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", cutVideoRec.str_storage_dev_id);
+ rec.setValue("chn", cutVideoRec.n_chn);
+ rec.setValue("src_path", cutVideoRec.str_src_path);
+ rec.setValue("dst_path", cutVideoRec.str_dst_path);
+ rec.setValue("total", cutVideoRec.n_total);
+ rec.setValue("finish_flag", cutVideoRec.b_finish_flag);
+ rec.setValue("update_time", cutVideoRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("reserved", cutVideoRec.str_reserved);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::updateCutVideoTable(std::string src_path, std::string dst_path, int total) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cut_video_info");
+ pModel.setFilter(QObject::tr("src_path = '%1'").arg(QString::fromStdString(src_path)));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ /*QSqlRecord rec = pModel.record();
+ rec.setValue("dst_path",QString::fromStdString(dst_path));
+ rec.setValue("total",total);
+ rec.setValue("finish_flag",1);
+ rec.setValue("update_time",QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));*/
+
+ int rowCount = pModel.rowCount();
+ /*if(rowCount == 0)
+ {
+ pModel.insertRecord(-1,rec);
+ }else */if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ rec.setValue("dst_path", QString::fromStdString(dst_path));
+ rec.setValue("total", total);
+ rec.setValue("finish_flag", 1);
+ rec.setValue("update_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
+
+ pModel.setRecord(0, rec);//TODO
+ } else {
+ return false;
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+std::list<Record_Cut_Video_info> LDBTool::searchCutVideoTableAll(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ std::list<Record_Cut_Video_info> lst;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cut_video_info");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ for (int i = 0; i < rowCount; ++i) {
+ Record_Cut_Video_info lRec;
+ QSqlRecord rec = pModel.record(i);
+ if (!rec.value("finish_flag").toBool()) {
+ lRec.n_id = rec.value("id").toInt();
+ lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lRec.n_chn = rec.value("chn").toInt();
+ lRec.str_src_path = rec.value("src_path").toString();
+ lRec.str_dst_path = rec.value("dst_path").toString();
+ lRec.n_total = rec.value("total").toInt();
+ lRec.b_finish_flag = rec.value("finish_flag").toBool();
+ lRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+ "yyyy-MM-dd hh:mm:ss");
+ lRec.str_reserved = rec.value("reserved").toString();
+ lst.push_back(lRec);
+ }
+ }
+ }
+
+ return lst;
+}
+
+Record_Cut_Video_info LDBTool::searchOldestRecordfromCutTableByUpdateTime(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ Record_Cut_Video_info lRec;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cut_video_info");
+ pModel.setFilter(QObject::tr("finish_flag = 1"));
+ pModel.setSort(7, Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪,鎵惧埌鏃堕棿鏈�鏃х殑璁板綍
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lRec.n_id = rec.value("id").toInt();
+ lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lRec.n_chn = rec.value("chn").toInt();
+ lRec.str_src_path = rec.value("src_path").toString();
+ lRec.str_dst_path = rec.value("dst_path").toString();
+ lRec.n_total = rec.value("total").toInt();
+ lRec.b_finish_flag = rec.value("finish_flag").toBool();
+ lRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), "yyyy-MM-dd hh:mm:ss");
+ lRec.str_reserved = rec.value("reserved").toString();
+ }
+
+ return lRec;
+}
+
+///
+/// \brief insertCutVideoTableandDeleteLoadFileTable
+/// \param cutVideoRec
+/// \param strDeviceId
+/// \param nChannelId
+/// \param tim_loadStartTime
+/// \return
+///
+bool LDBTool::insertCutVideoTableAndDeleteLoadFileTable(Record_Cut_Video_info cutVideoRec,
+ QString strDeviceId, int nChannelId,
+ QDateTime tim_loadStartTime) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel_cut(NULL, m_db);
+ pModel_cut.setTable("cut_video_info");
+ pModel_cut.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel_cut.record();
+ rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", cutVideoRec.str_storage_dev_id);
+ rec.setValue("chn", cutVideoRec.n_chn);
+ rec.setValue("src_path", cutVideoRec.str_src_path);
+ rec.setValue("dst_path", cutVideoRec.str_dst_path);
+ rec.setValue("total", cutVideoRec.n_total);
+ rec.setValue("finish_flag", cutVideoRec.b_finish_flag);
+ rec.setValue("update_time", cutVideoRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("reserved", cutVideoRec.str_reserved);
+
+ QSqlTableModel pModel_load(NULL, m_db);
+ pModel_load.setTable("load_file_info");
+ pModel_load.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and do_time = '%3'")\
+.arg(strDeviceId).arg(nChannelId).arg(tim_loadStartTime.toString("yyyy-MM-dd hh:mm:ss")));
+ pModel_load.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_load.select();
+
+ pModel_cut.insertRecord(-1, rec);
+
+ int rowCount = pModel_load.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel_load.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel_cut.submitAll() && pModel_load.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_cut Error: " << pModel_cut.lastError().text().toStdString()
+ << " " << pModel_load.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),\
+ // QObject::tr("Database Error: %1").arg(pModel_cut.lastError().text()),\
+ // QObject::tr("Database Error: %1").arg(pModel_load.lastError().text()));
+ return false;
+ }
+}
+
+///
+/// \brief LDBTool::insertSdkHdlTable
+/// \param sdkHdlRec
+/// \return
+///
+bool LDBTool::insertSdkHdlTable(Record_Sdk_Hdl_info sdkHdlRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("sdk_hdl_info");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", sdkHdlRec.str_storage_dev_id);
+ rec.setValue("chn", sdkHdlRec.n_chn);
+ rec.setValue("src_path", sdkHdlRec.str_src_path);
+ rec.setValue("total", sdkHdlRec.n_total);
+ rec.setValue("pos", sdkHdlRec.n_pos);
+ rec.setValue("reserved", sdkHdlRec.str_reserved);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteSdkHdlTable(QString strSrcPath) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("sdk_hdl_info");
+ pModel.setFilter(QObject::tr("src_path = '%1'").arg(strSrcPath));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteSdkHdlTablebyDevID(QString strDevId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("sdk_hdl_info");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDevId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::updateSdkHdlTable(Record_Sdk_Hdl_info sdkHdlRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("sdk_hdl_info");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and src_path = '%3'")\
+.arg(sdkHdlRec.str_storage_dev_id).arg(sdkHdlRec.n_chn).arg(sdkHdlRec.str_src_path));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+// rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", sdkHdlRec.str_storage_dev_id);
+ rec.setValue("chn", sdkHdlRec.n_chn);
+ rec.setValue("src_path", sdkHdlRec.str_src_path);
+ rec.setValue("total", sdkHdlRec.n_total);
+ rec.setValue("pos", sdkHdlRec.n_pos);
+ rec.setValue("reserved", sdkHdlRec.str_reserved);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+
+bool LDBTool::updateSdkHdlTablePos(QString str_src_path, int pos) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("sdk_hdl_info");
+ pModel.setFilter(QObject::tr("src_path = '%1'").arg(str_src_path));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ /*QSqlRecord rec = pModel.record();
+ rec.setValue("pos",pos);*/
+
+ int rowCount = pModel.rowCount();
+ /*if(rowCount == 0)
+ {
+ pModel.insertRecord(-1,rec);
+ }else */if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ rec.setValue("pos", pos);
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+
+std::list<Record_Sdk_Hdl_info> LDBTool::searchSdkHdlTableAll(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ std::list<Record_Sdk_Hdl_info> lst;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("sdk_hdl_info");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ for (int i = 0; i < rowCount; ++i) {
+ Record_Sdk_Hdl_info lRec;
+ QSqlRecord rec = pModel.record(i);
+ lRec.n_id = rec.value("id").toInt();
+ lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lRec.n_chn = rec.value("chn").toInt();
+ lRec.str_src_path = rec.value("src_path").toString();
+ lRec.n_total = rec.value("total").toInt();
+ lRec.n_pos = rec.value("pos").toInt();
+ lRec.str_reserved = rec.value("reserved").toString();
+ lst.push_back(lRec);
+ }
+ }
+
+ return lst;
+}
+
+//Record_Sdk_Hdl_info LDBTool::searchOldestRecordfromSdkHdlTableByUpdateTime(void)
+//{
+// Record_Sdk_Hdl_info lRec;
+// QSqlTableModel pModel(NULL,m_db);
+// pModel.setTable("sdk_hdl_info");
+// pModel.setSort(7,Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪,鎵惧埌鏃堕棿鏈�鏃х殑璁板綍
+// pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+// pModel.select();
+
+// int rowCount = pModel.rowCount();
+// if (rowCount > 0)
+// {
+// QSqlRecord rec = pModel.record(0);
+// lRec.n_id = rec.value("id").toInt();
+// lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+// lRec.n_chn = rec.value("chn").toInt();
+// lRec.str_src_path = rec.value("src_path").toString();
+// lRec.n_total = rec.value("total").toInt();
+// lRec.n_pos = rec.value("pos").toInt();
+// lRec.str_reserved = rec.value("reserved").toString();
+// }
+
+// return lRec;
+//}
+
+///
+/// \brief insertSdkHdlTableAndDeleteCutVideoTable
+/// \param sdkHdlRec
+/// \param strDeviceId
+/// \param nChannelId
+/// \param strCutSrcPath
+/// \return
+///
+bool LDBTool::insertSdkHdlTableAndDeleteCutVideoTable(Record_Sdk_Hdl_info sdkHdlRec, \
+ QString strDeviceId, \
+ int nChannelId, \
+ QString strCutSrcPath) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel_sdkhdl(NULL, m_db);
+ pModel_sdkhdl.setTable("sdk_hdl_info");
+ pModel_sdkhdl.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel_sdkhdl.record();
+ rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", sdkHdlRec.str_storage_dev_id);
+ rec.setValue("chn", sdkHdlRec.n_chn);
+ rec.setValue("src_path", sdkHdlRec.str_src_path);
+ rec.setValue("total", sdkHdlRec.n_total);
+ rec.setValue("pos", sdkHdlRec.n_pos);
+ rec.setValue("reserved", sdkHdlRec.str_reserved);
+
+ ////////
+ QSqlTableModel pModel_cut(NULL, m_db);
+ pModel_cut.setTable("cut_video_info");
+ pModel_cut.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and src_path = '%3'")\
+.arg(strDeviceId).arg(nChannelId).arg(strCutSrcPath));
+ pModel_cut.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_cut.select();
+
+ pModel_sdkhdl.insertRecord(-1, rec);
+ int rowCount = pModel_cut.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel_cut.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel_sdkhdl.submitAll() && pModel_cut.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_load Error: " << pModel_sdkhdl.lastError().text().toStdString() << " "
+ << pModel_cut.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),\
+ QObject::tr("Database Error: %1").arg(pModel_sdkhdl.lastError().text()),\
+ QObject::tr("Database Error: %1").arg(pModel_cut.lastError().text()));
+ return false;
+ }
+}
+
+///
+/// \brief insertCamSdkTable
+/// \param camSdkRec
+/// \return
+///
+bool LDBTool::insertCamSdkTable(Record_Cam_Sdk camSdkRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_sdk");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ rec.setValue("cam_dev_id", camSdkRec.str_cam_dev_id);
+ rec.setValue("sdks", camSdkRec.str_sdks);
+ rec.setValue("det_thr", camSdkRec.str_det_thr);
+ rec.setValue("cmp_thr", camSdkRec.str_cmp_thr);
+ rec.setValue("reserved", camSdkRec.str_reserved);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteCamSdkTable(QString strCamDevId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_sdk");
+ pModel.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamDevId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::updateCamSdkTable(Record_Cam_Sdk camSdkRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_sdk");
+ pModel.setFilter(QObject::tr("cam_dev_id = '%1'").arg(camSdkRec.str_cam_dev_id));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+ rec.setValue("cam_dev_id", camSdkRec.str_cam_dev_id);
+ rec.setValue("sdks", camSdkRec.str_sdks);
+ rec.setValue("det_thr", camSdkRec.str_det_thr);
+ rec.setValue("cmp_thr", camSdkRec.str_cmp_thr);
+ rec.setValue("reserved", camSdkRec.str_reserved);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+//鏌ヨ鎽勫儚鏈轰俊鎭�
+Record_Cam_Sdk LDBTool::searchCamSdkTableByCamId(QString strCamId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ Record_Cam_Sdk lRec;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("cam_sdk");
+ pModel.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lRec.n_id = rec.value("id").toInt();
+ lRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+ lRec.str_sdks = rec.value("sdks").toString();
+ lRec.str_det_thr = rec.value("det_thr").toString();
+ lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+ lRec.str_reserved = rec.value("reserved").toString();
+ }
+
+ return lRec;
+}
+
+//缂栬緫閫氶亾
+bool LDBTool::updateCamAndSdkTable(Record_Cam_Dev camRec, Record_Cam_Sdk camSdkRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel_cam(NULL, m_db);
+ pModel_cam.setTable("cam_dev");
+ pModel_cam.setFilter(QObject::tr("cam_dev_id = '%1'")\
+.arg(camRec.str_cam_dev_id));
+ pModel_cam.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_cam.select();
+
+ QSqlRecord rec = pModel_cam.record(0);
+// rec.setGenerated("id", false);
+ rec.setValue("cam_dev_id", camRec.str_cam_dev_id);
+ rec.setValue("name", camRec.str_name);
+ rec.setValue("addr", camRec.str_addr);
+ rec.setValue("longitude", camRec.str_longitude);
+ rec.setValue("latitude", camRec.str_latitude);
+ rec.setValue("ip", camRec.str_ip);
+ rec.setValue("port", camRec.n_port);
+ rec.setValue("username", camRec.str_username);
+ rec.setValue("password", camRec.str_password);
+ rec.setValue("brand", camRec.str_brand);
+ rec.setValue("reserved", camRec.str_reserved);
+
+ //camsdk
+ QSqlTableModel pModel_sdk(NULL, m_db);
+ pModel_sdk.setTable("cam_sdk");
+ pModel_sdk.setFilter(QObject::tr("cam_dev_id = '%1'")\
+.arg(camRec.str_cam_dev_id));
+ pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_sdk.select();
+
+ QSqlRecord rec_sdk = pModel_sdk.record(0);
+// rec_sdk.setGenerated("id", false);
+ rec_sdk.setValue("cam_dev_id", camSdkRec.str_cam_dev_id);
+ rec_sdk.setValue("sdks", camSdkRec.str_sdks);
+ rec_sdk.setValue("det_thr", camSdkRec.str_det_thr);
+ rec_sdk.setValue("cmp_thr", camSdkRec.str_cmp_thr);
+ rec_sdk.setValue("reserved", camSdkRec.str_reserved);
+
+ int rowCount = pModel_cam.rowCount();
+ if (rowCount == 0) {
+ pModel_cam.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel_cam.setRecord(0, rec);//TODO
+ }
+
+ rowCount = pModel_sdk.rowCount();
+ if (rowCount == 0) {
+ pModel_sdk.insertRecord(-1, rec_sdk);
+ } else if (rowCount > 0) {
+ pModel_sdk.setRecord(0, rec_sdk);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel_cam.submitAll() && pModel_sdk.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_chn or pModel_sdk Error: " \
+ << pModel_cam.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+///
+/// \brief insertChnSdkTable
+/// \param chnSdkRec
+/// \return
+///
+bool LDBTool::insertChnSdkTable(Record_Chn_Sdk chnSdkRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("chn_sdk");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", chnSdkRec.str_storage_dev_id);
+ rec.setValue("chn", chnSdkRec.n_chn);
+ rec.setValue("sdks", chnSdkRec.str_sdks);
+ rec.setValue("det_thr", chnSdkRec.str_det_thr);
+ rec.setValue("cmp_thr", chnSdkRec.str_cmp_thr);
+// rec.setValue("cam_dev_id", chnSdkRec.str_cam_dev_id);
+ rec.setValue("reserved", chnSdkRec.str_reserved);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::deleteChnSdkTable(QString strDeviceId, int nChannelId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("chn_sdk");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(strDeviceId).arg(nChannelId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+
+ if (rowCount >= 1) {
+ for (int i = 0; i < rowCount; i++) {
+ pModel.removeRow(i);//TODO
+ }
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+bool LDBTool::updateChnSdkTable(Record_Chn_Sdk chnSdkRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("chn_sdk");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(chnSdkRec.str_storage_dev_id).arg(chnSdkRec.n_chn));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+// rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", chnSdkRec.str_storage_dev_id);
+ rec.setValue("chn", chnSdkRec.n_chn);
+ rec.setValue("sdks", chnSdkRec.str_sdks);
+ rec.setValue("det_thr", chnSdkRec.str_det_thr);
+ rec.setValue("cmp_thr", chnSdkRec.str_cmp_thr);
+// rec.setValue("cam_dev_id", chnSdkRec.str_cam_dev_id);
+ rec.setValue("reserved", chnSdkRec.str_reserved);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+std::list<Record_Chn_Sdk> LDBTool::searchChnSdkTableAll(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ std::list<Record_Chn_Sdk> lst;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("chn_sdk");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ for (int i = 0; i < rowCount; ++i) {
+ Record_Chn_Sdk lRec;
+ QSqlRecord rec = pModel.record(i);
+ lRec.n_id = rec.value("id").toInt();
+ lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lRec.n_chn = rec.value("chn").toInt();
+ lRec.str_sdks = rec.value("sdks").toString();
+ lRec.str_det_thr = rec.value("det_thr").toString();
+ lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+// lRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+ lRec.str_reserved = rec.value("reserved").toString();
+ lst.push_back(lRec);
+ }
+ }
+
+ return lst;
+}
+
+Record_Chn_Sdk LDBTool::searchChnSdkTableByChannelId(QString strDeviceId, int nChannelId) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ Record_Chn_Sdk lRec;
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("chn_sdk");
+ pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(strDeviceId).arg(nChannelId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lRec.n_id = rec.value("id").toInt();
+ lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+ lRec.n_chn = rec.value("chn").toInt();
+ lRec.str_sdks = rec.value("sdks").toString();
+ lRec.str_det_thr = rec.value("det_thr").toString();
+ lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+// lRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+ lRec.str_reserved = rec.value("reserved").toString();
+ }
+
+ return lRec;
+}
+
+////鏌ヨ鎽勫儚鏈轰俊鎭�
+//Record_Chn_Sdk LDBTool::searchChnSdkTableByCam(QString strCamId)
+//{
+// QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+// Record_Chn_Sdk lRec;
+// QSqlTableModel pModel(NULL, m_db);
+// pModel.setTable("chn_sdk");
+// pModel.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+// pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+// pModel.select();
+//
+// int rowCount = pModel.rowCount();
+// if (rowCount > 0) {
+// QSqlRecord rec = pModel.record(0);
+// lRec.n_id = rec.value("id").toInt();
+// lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+// lRec.n_chn = rec.value("chn").toInt();
+// lRec.str_sdks = rec.value("sdks").toString();
+// lRec.str_det_thr = rec.value("det_thr").toString();
+// lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+// lRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+// lRec.str_reserved = rec.value("reserved").toString();
+// }
+//
+// return lRec;
+//}
+
+//缂栬緫閫氶亾
+bool LDBTool::updateDevChnAndSdk(Record_Cam_Chn channelRec, Record_Chn_Sdk chnSdkRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel_chn(NULL, m_db);
+ pModel_chn.setTable("cam_chn");
+ pModel_chn.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(channelRec.str_storage_dev_id).arg(channelRec.n_chn));
+ pModel_chn.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_chn.select();
+
+ QSqlRecord rec = pModel_chn.record(0);
+// rec.setGenerated("id", false);
+ rec.setValue("storage_dev_id", channelRec.str_storage_dev_id);
+ rec.setValue("chn", channelRec.n_chn);
+ rec.setValue("name", channelRec.str_name);
+ rec.setValue("addr", channelRec.str_addr);
+ rec.setValue("longitude", channelRec.str_longitude);
+ rec.setValue("latitude", channelRec.str_latitude);
+ rec.setValue("do_time", channelRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("update_time", channelRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+ rec.setValue("reserved", channelRec.str_reserved);
+
+ //chnsdk
+ QSqlTableModel pModel_sdk(NULL, m_db);
+ pModel_sdk.setTable("chn_sdk");
+ pModel_sdk.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(chnSdkRec.str_storage_dev_id).arg(chnSdkRec.n_chn));
+ pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel_sdk.select();
+
+ QSqlRecord rec_sdk = pModel_sdk.record(0);
+// rec_sdk.setGenerated("id", false);
+ rec_sdk.setValue("storage_dev_id", chnSdkRec.str_storage_dev_id);
+ rec_sdk.setValue("chn", chnSdkRec.n_chn);
+ rec_sdk.setValue("sdks", chnSdkRec.str_sdks);
+ rec_sdk.setValue("det_thr", chnSdkRec.str_det_thr);
+ rec_sdk.setValue("cmp_thr", chnSdkRec.str_cmp_thr);
+ rec_sdk.setValue("reserved", chnSdkRec.str_reserved);
+
+ int rowCount = pModel_chn.rowCount();
+ if (rowCount == 0) {
+ pModel_chn.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel_chn.setRecord(0, rec);//TODO
+ }
+
+ rowCount = pModel_sdk.rowCount();
+ if (rowCount == 0) {
+ pModel_sdk.insertRecord(-1, rec_sdk);
+ } else if (rowCount > 0) {
+ pModel_sdk.setRecord(0, rec_sdk);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+ if (pModel_chn.submitAll() && \
+ pModel_sdk.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ std::string warning_str = " No Fields to update";
+ std::string ok_str = " ";
+ if ((pModel_chn.lastError().text().toStdString() == warning_str) || \
+ (pModel_chn.lastError().text().toStdString() == ok_str)) {
+ if ((pModel_sdk.lastError().text().toStdString() == warning_str) || \
+ (pModel_sdk.lastError().text().toStdString() == ok_str)) {
+ m_db.commit();//鎻愪氦
+ return true;
+ }
+ }
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_chn or pModel_sdk Error: " \
+ << pModel_chn.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+////缂栬緫閫氶亾
+//bool LDBTool::updateCamAndSdk(Record_Cam_Chn channelRec, Record_Chn_Sdk chnSdkRec)
+//{
+// QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+// QSqlTableModel pModel_chn(NULL, m_db);
+// pModel_chn.setTable("cam_chn");
+// pModel_chn.setFilter(QObject::tr("cam_dev_id = '%1'")\
+// .arg(channelRec.str_cam_dev_id));
+// pModel_chn.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+// pModel_chn.select();
+//
+// QSqlRecord rec = pModel_chn.record(0);
+//// rec.setGenerated("id", false);
+// rec.setValue("cam_dev_id", channelRec.str_cam_dev_id);
+// rec.setValue("name", channelRec.str_name);
+// rec.setValue("addr", channelRec.str_addr);
+// rec.setValue("longitude", channelRec.str_longitude);
+// rec.setValue("latitude", channelRec.str_latitude);
+// rec.setValue("ip", channelRec.str_ip);
+// rec.setValue("port", channelRec.n_port);
+// rec.setValue("username", channelRec.str_username);
+// rec.setValue("password", channelRec.str_password);
+// rec.setValue("brand", channelRec.str_brand);
+// rec.setValue("reserved", channelRec.str_reserved);
+//
+// //chnsdk
+// QSqlTableModel pModel_sdk(NULL, m_db);
+// pModel_sdk.setTable("chn_sdk");
+// pModel_sdk.setFilter(QObject::tr("cam_dev_id = '%1'")\
+// .arg(channelRec.str_cam_dev_id));
+// pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+// pModel_sdk.select();
+//
+// QSqlRecord rec_sdk = pModel_sdk.record(0);
+//// rec_sdk.setGenerated("id", false);
+// rec_sdk.setValue("cam_dev_id", chnSdkRec.str_cam_dev_id);
+// rec_sdk.setValue("sdks", chnSdkRec.str_sdks);
+// rec_sdk.setValue("det_thr", chnSdkRec.str_det_thr);
+// rec_sdk.setValue("cmp_thr", chnSdkRec.str_cmp_thr);
+// rec_sdk.setValue("reserved", chnSdkRec.str_reserved);
+//
+// int rowCount = pModel_chn.rowCount();
+// if (rowCount == 0) {
+// pModel_chn.insertRecord(-1, rec);
+// } else if (rowCount > 0) {
+// pModel_chn.setRecord(0, rec);//TODO
+// }
+//
+// rowCount = pModel_sdk.rowCount();
+// if (rowCount == 0) {
+// pModel_sdk.insertRecord(-1, rec_sdk);
+// } else if (rowCount > 0) {
+// pModel_sdk.setRecord(0, rec_sdk);//TODO
+// }
+//
+// m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+//
+// if (pModel_chn.submitAll() && pModel_sdk.submitAll()) {
+// m_db.commit();//鎻愪氦
+// return true;
+// } else {
+// m_db.rollback();//鍥炴粴
+// ERR("updateLDeviceTable ,pModel_chn or pModel_sdk Error: " \
+// << pModel_chn.lastError().text().toStdString() \
+// << pModel_sdk.lastError().text().toStdString());
+// // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+// return false;
+// }
+//}
+
+//config 淇敼ip 绔彛绛夐厤缃俊鎭�
+bool LDBTool::updateConfigTableByServerInfo(Record_Config configRec) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("config");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+ rec.setValue("alarm_ip", configRec.str_alarm_ip);
+ rec.setValue("alarm_port", configRec.n_alarm_port);
+ rec.setValue("web_pic_ip", configRec.str_web_pic_ip);
+ rec.setValue("web_pic_port", configRec.n_web_pic_port);
+ rec.setValue("es_pic_ip", configRec.str_es_pic_ip);
+ rec.setValue("es_pic_port", configRec.n_es_pic_port);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+//config device type
+bool LDBTool::updateConfigTableByDevType(int devType) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("config");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+ rec.setValue("dev_type", devType);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ return false;
+ }
+}
+
+//config device type
+int LDBTool::searchDevTypeFromConfigTable(void) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("config");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int devType = 0;
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ devType = rec.value("dev_type").toInt();
+ }
+
+ return devType;
+}
+
+
+//config 淇敼瑁佸壀瑙嗛鏃堕暱
+bool LDBTool::updateConfigTableByCutDuration(int n_cut_max_duration) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("config");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+ rec.setValue("cut_max_duration", n_cut_max_duration);
+
+ while (pModel.canFetchMore()) {
+ pModel.fetchMore();
+ }
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ // QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+ return false;
+ }
+}
+
+//config 鏌ヨip 绔彛绛夐厤缃俊鎭�
+Record_Config LDBTool::searchConfigTableWithinServerInfo(void) {
+ Record_Config lRec;
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("config");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ lRec.str_alarm_ip = rec.value("alarm_ip").toString();
+ lRec.n_alarm_port = rec.value("alarm_port").toInt();
+ lRec.str_web_pic_ip = rec.value("web_pic_ip").toString();
+ lRec.n_web_pic_port = rec.value("web_pic_port").toInt();
+ lRec.str_es_pic_ip = rec.value("es_pic_ip").toString();
+ lRec.n_es_pic_port = rec.value("es_pic_port").toInt();
+ lRec.n_cut_max_duration = rec.value("cut_max_duration").toInt();
+ lRec.dev_id = QString::fromStdString(appConfig.getStringProperty("DEV_ID"));
+ lRec.dev_name = rec.value("dev_name").toString();
+ }
+
+ return lRec;
+}
+
+//config 鏌ヨ瑁佸壀瑙嗛鏃堕暱
+int LDBTool::searchConfigTableWithinCutDuration(void) {
+ int cut_max_duration = 5;//榛樿5鍒嗛挓
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("config");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ if (cut_max_duration != 0) {
+ cut_max_duration = rec.value("cut_max_duration").toInt();
+ }
+ }
+
+ return cut_max_duration;
+}
+
+bool LDBTool::insertRecordVedioPath(QString pathKey, QString filePath) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("name_key_match");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ rec.setValue("key", pathKey);
+ rec.setValue("filename", filePath);
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ DBG("srtPath=" << filePath.toStdString() << ", m_uuid=" << pathKey.toStdString());
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertRecordVedioPath ,pModel_load Error: " << pModel.lastError().text().toStdString());
+
+ return false;
+ }
+}
+
+QString LDBTool::searchRecordVedioPathByKey(QString pathKey) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("name_key_match");
+ pModel.setFilter(QObject::tr("key = '%1' ").arg(pathKey));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QString path;
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ path = rec.value("filename").toString();
+ }
+
+ return path;
+}
+
+
+bool LDBTool::updateDevNameConfigTable(QString dev_name) {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("config");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ QSqlRecord rec = pModel.record(0);
+ rec.setValue("dev_name", dev_name);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateDevNameConfigTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ return false;
+ }
+}
+ bool LDBTool::insertPerimeterRule(ActRule actRule)
+ {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("rule_perimeter");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("rule_id", false);
+ rec.setValue("camera_id", actRule.nCamId);
+ rec.setValue("sensitivity", actRule.fSensitivity);
+ rec.setValue("delay",actRule.nTriggerDelay);
+ rec.setValue("tolerance",actRule.nTriggertolerance);
+ rec.setValue("show_pepole_num",actRule.nAlarmPeopleNum);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertCameraRule ,pModel_load Error: " << pModel.lastError().text().toStdString());
+
+ return false;
+ }
+ }
+ bool LDBTool::updatePerimeterRuleByCamId(ActRule actRule)
+ {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("rule_perimeter");
+ pModel.setFilter(QObject::tr("camera_id = '%1' ").arg(actRule.nCamId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+
+ QSqlRecord rec = pModel.record(0);
+ rec.setValue("camera_id", actRule.nCamId);
+ rec.setValue("sensitivity", actRule.fSensitivity);
+ rec.setValue("delay",actRule.nTriggerDelay);
+ rec.setValue("tolerance",actRule.nTriggertolerance);
+ rec.setValue("show_pepole_num",actRule.nAlarmPeopleNum);
+
+ int rowCount = pModel.rowCount();
+ if (rowCount == 0) {
+ pModel.insertRecord(-1, rec);
+ } else if (rowCount > 0) {
+ pModel.setRecord(0, rec);//TODO
+ }
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("updateCameraRuleByCamId ,pModel_load Error: " << pModel.lastError().text().toStdString());
+ return false;
+ }
+
+ }
+ ActRule LDBTool::searchPerimeterRuleByCamId(int camId)
+ {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("rule_perimeter");
+ pModel.setFilter(QObject::tr("camera_id = '%1' ").arg(camId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ ActRule rule;
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ rule.nTriggerDelay=rec.value("delay").toInt();
+ rule.nTriggertolerance=rec.value("tolerance").toInt();
+ rule.strAreas=rec.value("area_points").toString();
+ rule.nAlarmPeopleNum=rec.value("show_people_sum").toInt();
+ rule.fSensitivity=rec.value("sensitivity").toFloat();
+ }
+
+ return rule;
+ }
+
+ bool LDBTool::insertCameraWeekRule(LActRuleWeekRecord weekRule)
+ {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("rule_week");
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+ QSqlRecord rec = pModel.record();
+ rec.setGenerated("id", false);
+ rec.setValue("camera_id",weekRule.m_nCamId);
+ rec.setValue("type", weekRule.m_nType);
+ rec.setValue("start_time", weekRule.m_strBegin);
+ rec.setValue("end_time",weekRule.m_strEnd);
+
+ pModel.insertRecord(-1, rec);//TODO
+
+ m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+ if (pModel.submitAll()) {
+ m_db.commit();//鎻愪氦
+ return true;
+ } else {
+ m_db.rollback();//鍥炴粴
+ ERR("insertCameraWeekRule ,pModel_load Error: " << pModel.lastError().text().toStdString());
+
+ return false;
+ }
+ }
+ QVector<LActRuleWeekRecord> LDBTool::searchCameraWeekRuleByCamId(int camId)
+ {
+ QVector<LActRuleWeekRecord> vecWeek;
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("rule_week");
+ pModel.setFilter(QObject::tr("camera_id = '%1' ").arg(camId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ int rowCount = pModel.rowCount();
+ for(int i = 0;i < rowCount;++i)
+ {
+ LActRuleWeekRecord lActRuleWeekRec;
+ QSqlRecord rec = pModel.record(i);
+ lActRuleWeekRec.m_nType = rec.value("type").toInt();
+ lActRuleWeekRec.m_strBegin = rec.value("begin").toString();
+ lActRuleWeekRec.m_strEnd = rec.value("end").toString();
+ vecWeek.push_back(lActRuleWeekRec);
+ }
+
+ return vecWeek;
+ }
+ ActRule LDBTool::searchActRuleByCamId(int camId)
+ {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("rule_act");
+ pModel.setFilter(QObject::tr("cam_id = '%1' ").arg(camId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ ActRule rule;
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ rule.nTriggertolerance=rec.value("tolerance").toInt();
+ rule.nTriggerDelay=rec.value("delay").toInt();
+ rule.strAreas=rec.value("act_left_area").toString();
+ rule.strLine=rec.value("act_left_line").toString();
+ rule.strExAreas=rec.value("act_right_area").toString();
+ rule.strExLine=rec.value("act_right_line").toString();
+ rule.fSensitivity=rec.value("sensitivity").toFloat();
+ }
+
+ return rule;
+ }
+
+ ActRule LDBTool::searchCrowdRuleByCamId(int camId)
+ {
+ QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+ QSqlTableModel pModel(NULL, m_db);
+ pModel.setTable("rule_crowd");
+ pModel.setFilter(QObject::tr("camera_id = '%1' ").arg(camId));
+ pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+ pModel.select();
+
+ ActRule rule;
+ int rowCount = pModel.rowCount();
+ if (rowCount > 0) {
+ QSqlRecord rec = pModel.record(0);
+ rule.nTriggertolerance=rec.value("tolerance").toInt();
+ rule.nTriggerDelay=rec.value("delay").toInt();
+ rule.strAreas=rec.value("area_points").toString();
+ rule.nAlarmPeopleNum=rec.value("alarm_people_num").toInt();
+ }
+
+ return rule;
+ }
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h
new file mode 100644
index 0000000..2c73a77
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h
@@ -0,0 +1,142 @@
+#ifndef LDBTOOL_H
+#define LDBTOOL_H
+
+//#include <QObject>
+#include <QSqlDatabase>
+#include <QSqlTableModel>
+#include <QSqlQuery>
+#include <QSqlRecord>
+#include <QSqlError>
+#include "DBStruct.h"
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QDateTime>
+#include <QMutexLocker>
+
+class LDBTool
+{
+public:
+// explicit LDBTool(QObject *parent = nullptr);
+ LDBTool();
+ ~LDBTool();
+
+ void connectDB();
+
+ //DeviceTable
+ bool insertDeviceTable(Record_Storage_Dev deviceRec);
+ bool deleteDeviceTable(QString strDeviceId);
+ bool deleteDeviceTableAndChnAndSdk(QString str_storage_dev_id);
+ bool updateDeviceTable(Record_Storage_Dev deviceRec);
+ std::list<Record_Storage_Dev> searchDeviceTableAll(void);
+ int searchDeviceNumber(void);
+ Record_Storage_Dev searchDeviceTableByDeviceId(QString strDeviceId);
+ int searchDurationByDeviceId(QString strDeviceId);
+
+ //ChannelTable
+ bool insertChannelTable(Record_Cam_Chn channelRec);
+ bool deleteChannelTable(QString strDeviceId, int nChannelId);
+ bool deleteChannelTableByCamID(QString strCamId);
+ bool updateChannelTable(Record_Cam_Chn channelRec);
+ std::list<Record_Cam_Chn> searchChannelTableAll(void);
+ std::list<Record_Cam_Chn> searchChannelTableByDevlId(QString strDeviceId);
+ Record_Cam_Chn searchOldestRecordfromChnTableByUpdateTime(void);
+ Record_Cam_Chn searchChannelTableByChannelId(QString strDeviceId, int nChannelId);
+ Record_Cam_Chn searchNewestRecordfromChnTableByChannelId(QString strDeviceId, int nChannelId);
+ Record_Cam_Chn searchOldestRecordfromChnTableByChannelId(QString strDeviceId, int nChannelId);
+ std::list<Record_Cam_Chn> searchChannelTableCamType(void);
+
+ //cam_dev
+ bool insertCamDevTable(Record_Cam_Dev channelRec);
+ bool deleteCamDevandSdkByCamID(QString strCamId);
+ bool updateCamDevTable(Record_Cam_Dev camRec);
+ std::list<Record_Cam_Dev> searchCamDevTableAll(void);
+ int searchCamDevNumber(void);
+
+ //load_file_info
+ bool insertLoadFileTable(Record_Load_File_info loadfileRec);
+ bool deleteLoadFileTable(QString strDeviceId, int nChannelId, QDateTime tim_startTime);
+ bool deleteLoadFileTablebyDevID(QString strDeviceId);
+ bool updateLoadFileTable(Record_Load_File_info loadfileRec);
+ std::list<Record_Load_File_info> searchLoadFileTableAll(void);
+ Record_Load_File_info searchOldestRecordfromLoadTableByUpdateTime(void);
+
+ //insert rec to loadfile_info && update cam_chn
+ bool insertLoadFileTableAndUpdateChannelTable(Record_Load_File_info loadfileRec,
+ Record_Cam_Chn channelRec);
+
+ //cut_video_info
+ bool insertCutVideoTable(Record_Cut_Video_info cutVideoRec);
+ bool deleteCutVideoTable(QString strDeviceId, int nChannelId, QString strSrcPath);
+ bool deleteCutVideoTablebyDevID(QString strDeviceId);
+ bool updateCutVideoTable(Record_Cut_Video_info cutVideoRec);
+ bool updateCutVideoTable(std::string src_path, std::string dst_path, int total);
+ std::list<Record_Cut_Video_info> searchCutVideoTableAll(void);
+ Record_Cut_Video_info searchOldestRecordfromCutTableByUpdateTime(void);
+
+ //insert rec to cut_video_info && delete load_file_info
+ bool insertCutVideoTableAndDeleteLoadFileTable(Record_Cut_Video_info cutVideoRec,
+ QString strDeviceId, int nChannelId,
+ QDateTime tim_loadStartTime);
+
+ //sdk_hdl_info
+ bool insertSdkHdlTable(Record_Sdk_Hdl_info sdkHdlRec);
+ bool deleteSdkHdlTable(QString strSrcPath);
+ bool updateSdkHdlTable(Record_Sdk_Hdl_info sdkHdlRec);
+ bool updateSdkHdlTablePos(QString str_src_path,int pos);
+ std::list<Record_Sdk_Hdl_info> searchSdkHdlTableAll(void);
+ bool deleteSdkHdlTablebyDevID(QString strDevId);
+
+ //insert rec to sdk_hdl_info && delete cut_video_info
+ bool insertSdkHdlTableAndDeleteCutVideoTable(Record_Sdk_Hdl_info sdkHdlRec,\
+ QString strDeviceId, \
+ int nChannelId, \
+ QString strCutSrcPath);
+
+ //chn_sdk
+ bool insertChnSdkTable(Record_Chn_Sdk chnSdkRec);
+ bool deleteChnSdkTable(QString strDeviceId, int nChannelId);
+ bool updateChnSdkTable(Record_Chn_Sdk chnSdkRec);
+ std::list<Record_Chn_Sdk> searchChnSdkTableAll(void);
+ Record_Chn_Sdk searchChnSdkTableByChannelId(QString strDeviceId, int nChannelId);
+// Record_Chn_Sdk searchChnSdkTableByCam(QString strCamId);
+
+ bool updateDevChnAndSdk(Record_Cam_Chn channelRec, Record_Chn_Sdk chnSdkRec);
+// bool updateCamAndSdk(Record_Cam_Chn channelRec, Record_Chn_Sdk chnSdkRec);
+
+ bool insertCamSdkTable(Record_Cam_Sdk camSdkRec);
+ bool deleteCamSdkTable(QString strCamDevId);
+ bool updateCamSdkTable(Record_Cam_Sdk camSdkRec);
+ Record_Cam_Sdk searchCamSdkTableByCamId(QString strCamId);
+ bool updateCamAndSdkTable(Record_Cam_Dev camRec, Record_Cam_Sdk camSdkRec);
+
+ //config
+ bool updateConfigTableByServerInfo(Record_Config configRec);
+ bool updateConfigTableByCutDuration(int n_cut_max_duration);
+ Record_Config searchConfigTableWithinServerInfo(void);
+ int searchConfigTableWithinCutDuration(void);
+ bool updateConfigTableByDevType(int devType);
+ int searchDevTypeFromConfigTable(void);
+ //Record_Config searchDevIdFromConfigTable(void);
+ bool updateDevNameConfigTable(QString dev_name);
+ //name_key_match
+ bool insertRecordVedioPath(QString pathKey,QString filePath);
+ QString searchRecordVedioPathByKey(QString pathKey);
+ //perimeter_rule
+ bool insertPerimeterRule(ActRule actRule);
+ bool updatePerimeterRuleByCamId(ActRule actRule);
+ ActRule searchPerimeterRuleByCamId(int camId);
+ //rule_week
+ bool insertCameraWeekRule(LActRuleWeekRecord weekRule);
+ QVector<LActRuleWeekRecord> searchCameraWeekRuleByCamId(int camId);
+ //rule_act
+ ActRule searchActRuleByCamId(int camId);
+ //crowd_rule
+ ActRule searchCrowdRuleByCamId(int camId);
+private:
+ QSqlDatabase m_db;
+ QSqlTableModel *m_pModel;
+
+ QMutex m_mutexVisit;
+};
+
+#endif // LDBTOOL_H
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/config.db b/QiaoJiaSystem/VideoServer/QiaoJia/DB/config.db
new file mode 100644
index 0000000..1953304
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/config.db
Binary files differ
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro b/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro
new file mode 100644
index 0000000..57c0c9b
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro
@@ -0,0 +1,30 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2018-08-09T18:41:34
+#
+#-------------------------------------------------
+
+QT += core gui sql
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+INCLUDEPATH += $$PWD/include
+include(DB/DB.pri)
+
+
+INCLUDEPATH += \
+ ../../../../BasicPlatForm \
+
+TARGET = QiaoJia
+TEMPLATE = app
+CONFIG += c++11
+
+SOURCES += main.cpp\
+ widget.cpp
+
+HEADERS += widget.h \
+ ../../../../BasicPlatForm/basic/debug/Debug.h \
+ dispatchTool/dispathdatatype.hpp \
+ dispatchTool/taskmanage.h
+
+FORMS += widget.ui
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro.user b/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro.user
new file mode 100644
index 0000000..dbae9cd
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro.user
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 3.5.1, 2018-08-29T13:38:25. -->
+<qtcreator>
+ <data>
+ <variable>EnvironmentId</variable>
+ <value type="QByteArray">{ab775435-ca7f-4656-b967-d6e66c62ea7e}</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.ActiveTarget</variable>
+ <value type="int">0</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.EditorSettings</variable>
+ <valuemap type="QVariantMap">
+ <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+ <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+ <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+ <value type="QString" key="language">Cpp</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+ </valuemap>
+ </valuemap>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+ <value type="QString" key="language">QmlJS</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+ </valuemap>
+ </valuemap>
+ <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+ <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+ <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+ <value type="int" key="EditorConfiguration.IndentSize">4</value>
+ <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+ <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+ <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+ <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+ <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+ <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+ <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+ <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+ <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+ <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+ <value type="int" key="EditorConfiguration.TabSize">8</value>
+ <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+ <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+ <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+ <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+ <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+ <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.PluginSettings</variable>
+ <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Target.0</variable>
+ <valuemap type="QVariantMap">
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">妗岄潰</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">妗岄潰</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{961f1414-5ec5-452f-93eb-158b95e105ab}</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/QiaoJiaSystem/VideoServer/build-QiaoJia-unknown-Debug</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/QiaoJiaSystem/VideoServer/build-QiaoJia-unknown-Release</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+ <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+ <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+ <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+ <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+ <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+ <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+ <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+ <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+ <value type="int">0</value>
+ <value type="int">1</value>
+ <value type="int">2</value>
+ <value type="int">3</value>
+ <value type="int">4</value>
+ <value type="int">5</value>
+ <value type="int">6</value>
+ <value type="int">7</value>
+ <value type="int">8</value>
+ <value type="int">9</value>
+ <value type="int">10</value>
+ <value type="int">11</value>
+ <value type="int">12</value>
+ <value type="int">13</value>
+ <value type="int">14</value>
+ </valuelist>
+ <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">QiaoJia</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro</value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">QiaoJia.pro</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.TargetCount</variable>
+ <value type="int">1</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+ <value type="int">18</value>
+ </data>
+ <data>
+ <variable>Version</variable>
+ <value type="int">18</value>
+ </data>
+</qtcreator>
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dbtest.h b/QiaoJiaSystem/VideoServer/QiaoJia/dbtest.h
new file mode 100644
index 0000000..af3095b
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dbtest.h
@@ -0,0 +1,46 @@
+#ifndef _DB_TEST_____
+#define _DB_TEST_____
+
+#include "myThread.h"
+#include <vector>
+#include "LDBTool.h"
+#include <string>
+#include <QString>
+
+class DbTest : public mythread<std::string> {
+ using TASK_FUNCTION = std::function<void(std::shared_ptr<int> &)>;
+public:
+ DbTest(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+
+ ~DbTest() {
+
+ }
+
+private:
+ virtual void doFunc(std::shared_ptr<std::string> param) {
+ static int i = 0;
+ db_mtest.searchChannelTableCamType();
+ std::cout << i++ << std::endl;
+// if (m_task_function != nullptr) {
+// auto fp_task(std::make_shared<int>(ret));
+// m_task_function(fp_task);
+// std::cout << i++ << std::endl;
+// } else {
+// //std::cout << "m_task_function == nullptr" << std::endl;
+// return;
+// }
+ }
+
+private:
+ TASK_FUNCTION m_task_function;
+ LDBTool db_mtest;
+};
+
+struct CallBackFunc{
+ int callback_func(std::shared_ptr<int> in)
+ {
+ static int i = 0;
+ std::cout << *in.get() << ":" << i++ << std::endl;
+ }
+};
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.cpp
new file mode 100644
index 0000000..a78d7f4
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.cpp
@@ -0,0 +1,68 @@
+#include <QString>
+#include "../DB/LDBTool.h"
+#include "cutManage.h"
+#include <QDateTime>
+#include <QVector>
+#include <basic/debug/Debug.h>
+
+//cutManage::cutManage()
+//{
+// init();
+//}
+
+
+cutManage::cutManage(LDBTool *dbTool) : TaskManage(dbTool) {
+ init();
+}
+
+cutManage::~cutManage() {
+
+}
+
+void cutManage::init(void) {
+ //search all cut_video_info where finish_flag = 0
+ m_list = db_c->searchCutVideoTableAll();
+}
+
+getCutFileManage cutManage::getTask(void) {
+ getCutFileManage result;
+
+ if (m_list.size() > 0) {
+ //get task from cut_video_info
+ Record_Cut_Video_info rec = *m_list.begin();
+ m_list.pop_front();
+ result.src_path = rec.str_src_path.toStdString();
+ } else {
+ //get task from load_file_info
+ //search oldest update time record
+ Record_Load_File_info rec = db_c->searchOldestRecordfromLoadTableByUpdateTime();
+ if (rec.n_id == 0 || rec.str_storage_dev_id.size() <= 0) {
+ DBG("searchOldestRecordfromChnTableByUpdateTime NULL");
+ return result;
+ }
+
+ result.src_path = rec.str_load_file_path.toStdString();
+
+ //淇敼鏇存柊鏃堕棿
+ rec.tim_update_time = QDateTime::currentDateTime();
+
+ //insert rec to cut_video_info && delete load_file_info
+ Record_Cut_Video_info cutVideoRec = {0, rec.str_storage_dev_id, rec.n_chn, rec.str_load_file_path, "", 0, false,
+ QDateTime::currentDateTime(), ""};
+
+ bool ret = db_c->insertCutVideoTableAndDeleteLoadFileTable(cutVideoRec, rec.str_storage_dev_id, rec.n_chn,
+ rec.tim_do_time);
+ if (!ret) {
+ return getCutFileManage();
+ }
+ }
+ return result;
+}
+
+
+bool cutManage::finishTask(const pfinishCutFileManage finishInfo) {
+ //鏍规嵁devID&chn&src_path鏇存敼cut_video_info瀹屾垚鏍囧織鍜岀洰鏍囪矾寰�,total
+ return db_c->updateCutVideoTable(finishInfo->src_path, finishInfo->dst_path, finishInfo->total);
+}
+
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.h b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.h
new file mode 100644
index 0000000..1fa91aa
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.h
@@ -0,0 +1,25 @@
+#ifndef CUT_MANAGE_H
+#define CUT_MANAGE_H
+
+#include "taskmanage.h"
+#include "dispathdatatype.hpp"
+
+
+class cutManage : public TaskManage<getCutFileManage, pfinishCutFileManage> {
+public:
+// cutManage();
+ cutManage(LDBTool *dbTool);
+
+ ~cutManage();
+
+ getCutFileManage getTask(void);
+
+ bool finishTask(const pfinishCutFileManage finishInfo);
+
+private:
+ void init(void);
+
+ std::list<Record_Cut_Video_info> m_list;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/dispathdatatype.hpp b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/dispathdatatype.hpp
new file mode 100644
index 0000000..89c0753
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/dispathdatatype.hpp
@@ -0,0 +1,90 @@
+#ifndef DISPATHDATATYPE_HPP
+#define DISPATHDATATYPE_HPP
+
+#include <string>
+#include <QVector>
+#include <QDateTime>
+
+typedef struct {
+ int Year;
+ int Month;
+ int Day;
+ int Hour;
+ int Minute;
+ int Second;
+} TimeSt, *pTimeSt;
+
+typedef struct {
+ std::string strDevID;
+ int nChannelID;
+ TimeSt startTime;
+ TimeSt endTime;
+ std::string srcPath;
+} ChannelLoadFileManage, *pChannelLoadFileManage;
+
+
+//typedef struct
+//{
+// int nChn;//閫氶亾鍙�
+// QDateTime tCurrentTime;//姝e湪澶勭悊鐨勬枃浠跺紑濮嬫椂闂�
+// bool bFinishFlag;//瀹屾垚鏍囧織
+//}ChnFinishFlag;
+
+//typedef struct
+//{
+// int nDuration;//姣忔涓嬭浇鐨勬椂闀匡紝鍗曚綅灏忔椂
+// int nTotalChn;//鎬婚�氶亾鏁�
+// QVector<ChnFinishFlag> vChnInfo;//姣忎釜閫氶亾鐨勫畬鎴愪俊鎭�
+//}DevChnInfo;
+
+typedef struct {
+ std::string src_path;
+} getCutFileManage, *pgetCutFileManage;
+
+typedef struct {
+ std::string src_path;
+ std::string dst_path;
+ int total;
+} finishCutFileManage, *pfinishCutFileManage;
+
+typedef struct {
+ std::string src_path;
+ std::string en_sdk;
+ int pos;
+ int total;
+ std::string str_addr;
+ std::string str_det_thr;
+ std::string str_cmp_thr;
+ std::string strDevID;
+ int nChannelID;
+} getsdkHdlManage, *pgetsdkHdlManage;
+
+typedef struct {
+ std::string src_path;
+ int pos;
+} finishSdkHdlManage, *pfinishSdkHdlManage;
+
+
+static std::vector<int> chnString2Vec(std::string str_list) {
+ std::vector<int> result;
+ char *property_list = const_cast<char *>(str_list.c_str());
+ const char *c_Analyse = ",";
+ char *t_property;
+
+ char *t_save = NULL;
+ t_property = strtok_r(property_list, c_Analyse, &t_save);
+
+ while (t_property) {
+ std::string str_pro(t_property);
+
+ result.push_back(atoi(str_pro.c_str()));
+
+ t_property = strtok_r(t_save, c_Analyse, &t_save);
+
+ }
+ return result;
+}
+
+
+#endif // DISPATHDATATYPE_HPP
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.cpp
new file mode 100644
index 0000000..318b018
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.cpp
@@ -0,0 +1,105 @@
+#include "../DB/LDBTool.h"
+#include <basic/debug/Debug.h>
+#include "loadManage.h"
+#include <QDateTime>
+#include <QString>
+#include <QVector>
+
+
+loadFileManage::loadFileManage(LDBTool *dbTool) : TaskManage(dbTool) {
+ init();
+}
+
+loadFileManage::~loadFileManage() {
+
+}
+
+void loadFileManage::init(void) {
+ //search all loadfile_info where finish_flag = 0
+ m_list = db_c->searchLoadFileTableAll();
+}
+
+
+#define Record_Cam_Chn2pChannelLoadFileManage(RCC, RESULT) \
+{\
+ RESULT.strDevID = RCC.str_storage_dev_id.toStdString();\
+ RESULT.nChannelID = RCC.n_chn;\
+ RESULT.startTime.Year = RCC.tim_do_time.date().year();\
+ RESULT.startTime.Month = RCC.tim_do_time.date().month();\
+ RESULT.startTime.Day = RCC.tim_do_time.date().day();\
+ RESULT.startTime.Hour = RCC.tim_do_time.time().hour();\
+ RESULT.startTime.Minute = RCC.tim_do_time.time().minute();\
+ RESULT.startTime.Second = RCC.tim_do_time.time().second();\
+ nDuration = db_c->searchDurationByDeviceId(RCC.str_storage_dev_id);\
+ /*endTime = RCC.tim_do_time.addSecs(nDuration * 3600);//nDuration 1鏍间负0.5灏忔椂*/\
+ endTime = RCC.tim_do_time.addSecs(nDuration * 1800);\
+ RESULT.endTime.Year = endTime.date().year();\
+ RESULT.endTime.Month = endTime.date().month();\
+ RESULT.endTime.Day = endTime.date().day();\
+ RESULT.endTime.Hour = endTime.time().hour();\
+ RESULT.endTime.Minute = endTime.time().minute();\
+ RESULT.endTime.Second = endTime.time().second();\
+ }
+
+ChannelLoadFileManage loadFileManage::getTask(void) {
+ ChannelLoadFileManage result;
+
+ QDateTime endTime;
+ int nDuration;
+
+ if (m_list.size() > 0) {
+ Record_Load_File_info rec = *m_list.begin();
+ m_list.pop_front();
+ Record_Cam_Chn2pChannelLoadFileManage(rec, result);
+ } else {
+ //get task from cam_chn_table
+ Record_Cam_Chn rec = db_c->searchOldestRecordfromChnTableByUpdateTime();
+ if (rec.n_id == 0 || rec.tim_do_time.secsTo(QDateTime::currentDateTime()) <= nDuration * 1800) {
+ DBG("searchOldestRecordfromChnTableByUpdateTime NULL"
+ << rec.tim_do_time.secsTo(QDateTime::currentDateTime())
+ << rec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss").toStdString());
+ return result;
+ }
+ //#todo search nDuration from deviceTable where rec.str_storage_dev_id
+
+ Record_Cam_Chn2pChannelLoadFileManage(rec, result);
+
+ Record_Load_File_info loadFileRec{0, rec.str_storage_dev_id, rec.n_chn, rec.tim_do_time, false, "",
+ QDateTime::currentDateTime(), ""};
+
+ //淇敼鏇存柊鏃堕棿鍜屽鐞嗘椂闂�
+ rec.tim_update_time = QDateTime::currentDateTime();
+ rec.tim_do_time = endTime;
+
+ if (rec.str_storage_dev_id.size() <= 0) {
+ ERR(" " << rec.str_storage_dev_id.toStdString());
+ }
+
+ //insert rec to loadfile_info && update cam_chn
+ bool ret = db_c->insertLoadFileTableAndUpdateChannelTable(loadFileRec, rec);
+ if (!ret) return ChannelLoadFileManage();
+
+ }
+ return result;
+}
+
+
+bool loadFileManage::finishTask(const pChannelLoadFileManage finishInfo) {
+ //TODO
+ //鏍规嵁璁惧id/閫氶亾鍙�/寮�濮嬫椂闂存壘鍒拌鏉¤褰曪紝鐒跺悗鏇存柊锛屽皢璇ユ潯璁板綍鐨勬爣蹇楃疆1,娣诲姞path
+ //update db
+ char charStr[256] = {0};
+ sprintf(charStr, "%4d-%02d-%02d %02d:%02d:%02d", finishInfo->startTime.Year, finishInfo->startTime.Month,
+ finishInfo->startTime.Day, finishInfo->startTime.Hour, finishInfo->startTime.Minute,
+ finishInfo->startTime.Second);
+ QString strBuffer = QString(charStr);
+
+ QDateTime time = QDateTime::fromString(strBuffer, "yyyy-MM-dd hh:mm:ss");
+
+ Record_Load_File_info loadFileRec{0, QString::fromStdString(finishInfo->strDevID), finishInfo->nChannelID,
+ time, true, QString::fromStdString(finishInfo->srcPath),
+ QDateTime::currentDateTime(), ""};
+ db_c->updateLoadFileTable(loadFileRec);
+ return true;
+}
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.h b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.h
new file mode 100644
index 0000000..923b8ac
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.h
@@ -0,0 +1,26 @@
+#ifndef LOAD_MANAGE_H
+#define LOAD_MANAGE_H
+
+#include "taskmanage.h"
+#include "dispathdatatype.hpp"
+#include <list>
+#include <string>
+
+class loadFileManage : public TaskManage<ChannelLoadFileManage, pChannelLoadFileManage> {
+public:
+ loadFileManage(LDBTool *dbTool);
+
+ ~loadFileManage();
+
+ ChannelLoadFileManage getTask(void);
+
+ bool finishTask(const pChannelLoadFileManage finishInfo);
+
+private:
+ void init(void);
+
+ std::list<Record_Load_File_info> m_list;
+};
+
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp
new file mode 100644
index 0000000..77d75ec
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp
@@ -0,0 +1,91 @@
+#include <QString>
+#include "../DB/LDBTool.h"
+#include "sdkHdlManage.h"
+#include <QDateTime>
+#include <QVector>
+
+sdkHdlManage::sdkHdlManage(LDBTool *dbTool) : TaskManage(dbTool) {
+ init();
+}
+
+sdkHdlManage::~sdkHdlManage() {
+
+}
+
+void sdkHdlManage::init(void) {
+ //search all sdk_hdl_info
+ m_list = db_c->searchSdkHdlTableAll();
+
+}
+
+getsdkHdlManage sdkHdlManage::getTask(void) {
+ getsdkHdlManage result;
+ QDateTime endTime;
+
+ if (m_list.size() > 0) {
+ Record_Sdk_Hdl_info sdlHdlRec = *m_list.begin();
+ m_list.pop_front();
+ result.src_path = sdlHdlRec.str_src_path.toStdString();
+ result.total = sdlHdlRec.n_total;
+ result.pos = sdlHdlRec.n_pos;
+
+ auto t_rec = db_c->searchChnSdkTableByChannelId(sdlHdlRec.str_storage_dev_id,
+ sdlHdlRec.n_chn);//.str_sdks.toStdString();
+ result.en_sdk = t_rec.str_sdks.toStdString();
+
+ result.str_addr = db_c->searchChannelTableByChannelId(sdlHdlRec.str_storage_dev_id,
+ sdlHdlRec.n_chn).str_addr.toStdString();
+
+ result.str_cmp_thr = t_rec.str_cmp_thr.toStdString();
+ result.str_det_thr = t_rec.str_det_thr.toStdString();
+ result.strDevID = t_rec.str_storage_dev_id.toStdString();
+ result.nChannelID = t_rec.n_chn;
+
+ } else {
+ //get task from cut_video_info
+ Record_Cut_Video_info rec = db_c->searchOldestRecordfromCutTableByUpdateTime();
+
+ if (rec.str_storage_dev_id.size() > 0) {
+ result.src_path = rec.str_dst_path.toStdString();
+ result.total = rec.n_total;
+ result.pos = 0;
+
+ auto t_rec = db_c->searchChnSdkTableByChannelId(rec.str_storage_dev_id,
+ rec.n_chn);//.str_sdks.toStdString();
+
+ result.en_sdk = t_rec.str_sdks.toStdString();
+
+ result.str_addr = db_c->searchChannelTableByChannelId(rec.str_storage_dev_id,
+ rec.n_chn).str_addr.toStdString();
+
+ result.str_cmp_thr = t_rec.str_cmp_thr.toStdString();
+ result.str_det_thr = t_rec.str_det_thr.toStdString();
+ result.strDevID = t_rec.str_storage_dev_id.toStdString();
+ result.nChannelID = t_rec.n_chn;
+
+ //insert rec to sdk_hdl_info && delete cut_video_info
+
+ Record_Sdk_Hdl_info sdlHdlRec{0, rec.str_storage_dev_id, rec.n_chn, rec.str_dst_path, rec.n_total, 0, ""};
+ bool ret = db_c->insertSdkHdlTableAndDeleteCutVideoTable(sdlHdlRec, rec.str_storage_dev_id, rec.n_chn,
+ rec.str_src_path);
+ if (!ret) {
+ return getsdkHdlManage();
+ }
+ }
+ }
+ return result;
+}
+
+
+bool sdkHdlManage::updateSdkHdlPos(const pfinishSdkHdlManage finishInfo) {
+ //鏍规嵁devID&chn&src_path锛屾洿鏂皊dk_hdl_info鐨刾os锛宲os+1
+ return db_c->updateSdkHdlTablePos(QString::fromStdString(finishInfo->src_path), finishInfo->pos);
+}
+
+
+bool sdkHdlManage::finishTask(const pfinishSdkHdlManage finishInfo) {
+ //TODO
+ //鏍规嵁devID&chn&src_path 鍒犻櫎sdk_hdl_info杩欐潯璁板綍
+ return db_c->deleteSdkHdlTable(QString::fromStdString(finishInfo->src_path));
+}
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h
new file mode 100644
index 0000000..301d517
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h
@@ -0,0 +1,27 @@
+#ifndef SDK_HDL_MANAGE_H
+#define SDK_HDL_MANAGE_H
+
+#include "taskmanage.h"
+#include "dispathdatatype.hpp"
+
+
+class sdkHdlManage : public TaskManage<getsdkHdlManage, pfinishSdkHdlManage> {
+public:
+ sdkHdlManage(LDBTool *dbTool);
+
+ ~sdkHdlManage();
+
+ getsdkHdlManage getTask();
+
+ bool finishTask(const pfinishSdkHdlManage finishInfo);
+
+ bool updateSdkHdlPos(const pfinishSdkHdlManage finishInfo);
+
+private:
+ void init(void);
+
+ std::list<Record_Sdk_Hdl_info> m_list;
+};
+
+#endif
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/taskmanage.h b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/taskmanage.h
new file mode 100644
index 0000000..55e8e4e
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/taskmanage.h
@@ -0,0 +1,29 @@
+#ifndef TASKMANAGE
+#define TASKMANAGE
+
+#include "../DB/LDBTool.h"
+
+template<typename TASKTYPE, typename FINSHTYPE>
+class TaskManage {
+public:
+ TaskManage(LDBTool *dbTool) : db_c(dbTool) {
+
+ }
+
+ ~TaskManage() {
+
+ }
+
+ virtual TASKTYPE getTask() = 0;
+
+ virtual bool finishTask(const FINSHTYPE finishInfo) = 0;
+
+private:
+ virtual void init(void) = 0;
+
+protected:
+ LDBTool *db_c;
+};
+
+#endif // TASKMANAGE
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/main.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/main.cpp
new file mode 100644
index 0000000..be0bab1
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/main.cpp
@@ -0,0 +1,436 @@
+//#include "widget.h"
+//#include <QApplication>
+#include "LDBTool.h"
+#include <QObject>
+#include <list>
+#include <string>
+#include <iostream>
+#include <QDebug>
+#include "myThread.h"
+#include "dbtest.h"
+#if 1
+
+//dev
+
+
+int main(int argc, char *argv[])
+{
+
+ {
+ CallBackFunc callf;
+
+ DbTest test_db/*(std::bind(&CallBackFunc::callback_func, &callf, std::placeholders::_1))*/;
+// DbTest test_db2;
+
+ auto sp_task(std::make_shared<std::string>("haikang:12:34:56:78:90:ab"));
+ auto sp_task2(std::make_shared<std::string>("dahua:12:34:56:78:90:ab"));
+// test_db.put_task(sp_task);
+// test_db.put_task(sp_task2);
+// test_db.put_task(sp_task);
+// test_db.put_task(sp_task2);
+// test_db.put_task(sp_task);
+// test_db.put_task(sp_task2);
+// test_db.put_task(sp_task);
+// test_db.put_task(sp_task2);
+// test_db2.put_task(sp_task);
+// test_db2.put_task(sp_task2);
+
+ test_db.beginThreads(10);
+// test_db2.beginThreads(1);
+
+ while(1){
+ test_db.put_task(sp_task);
+ test_db.put_task(sp_task2);
+ }
+
+ }
+
+
+ return 0;
+}
+
+
+
+
+
+#else
+
+//sdkhdl
+int main(int argc, char *argv[])
+{
+// QApplication a(argc, argv);
+ LDBTool test;
+ Record_Chn_Sdk record;
+
+ qDebug() << QDateTime::currentDateTime();
+
+ record.n_id = 0;
+ record.str_storage_dev_id = "str_storage_dev_id1";
+ record.n_chn = 111;
+ record.str_sdks = "1,2,3";
+ record.str_reserved = "str_reserved1";
+
+ test.insertChnSdkTable(record);
+
+ Record_Chn_Sdk record2;
+ record2.n_id = 0;
+ record2.str_storage_dev_id = "str_storage_dev_id2";
+ record2.n_chn = 222;
+ record2.str_sdks = "2,3,4";
+ record2.str_reserved = "str_reserved2";
+ test.insertChnSdkTable(record2);
+
+ std::list<Record_Chn_Sdk> vec;
+ vec = test.searchChnSdkTableAll();
+ // std::cout << vec << std::endl;
+
+ record2.str_sdks = "5,6,7";
+ test.updateChnSdkTable(record2);
+
+ QString id1("str_storage_dev_id1");
+ QString id2("str_storage_dev_id2");
+ int chn1 = 111;
+ int chn2 = 222;
+
+ Record_Chn_Sdk rec1 = test.searchChnSdkTableByChannelId(id1, chn1);
+ test.deleteChnSdkTable(id1, chn2);
+ test.deleteChnSdkTable(id2, chn1);
+ test.deleteChnSdkTable(id1, chn1);
+ test.deleteChnSdkTable(id2, chn2);
+
+ return 0;//a.exec();
+}
+//sdkhdl
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ LDBTool test;
+ Record_Sdk_Hdl_info record;
+
+ qDebug() << QDateTime::currentDateTime();
+
+ record.n_id = 0;
+ record.str_storage_dev_id = "str_storage_dev_id1";
+ record.n_chn = 111;
+ record.str_src_path = "str_src_path1";
+ record.n_total = 11;
+ record.n_pos = 0;
+ record.str_reserved = "str_reserved1";
+
+ test.insertSdkHdlTable(record);
+
+ Record_Sdk_Hdl_info record2;
+ record2.n_id = 0;
+ record2.str_storage_dev_id = "str_storage_dev_id2";
+ record2.n_chn = 222;
+ record2.str_src_path = "str_src_path2";
+ record2.n_total = 22;
+ record2.n_pos = 0;
+ record2.str_reserved = "str_reserved2";
+ test.insertSdkHdlTable(record2);
+
+
+ std::list<Record_Sdk_Hdl_info> vec;
+ vec = test.searchSdkHdlTableAll();
+ // std::cout << vec << std::endl;
+
+ record2.n_pos = 6;
+ test.updateSdkHdlTable(record2);
+
+ test.updateSdkHdlTablePos("str_src_path1", 7);
+
+ QString id1("str_storage_dev_id1");
+ QString id2("str_storage_dev_id2");
+ int chn1 = 111;
+ int chn2 = 222;
+// std::list<Record_Sdk_Hdl_info> vec1 = test.searchChannelTableByChannelId(id1, chn1);
+// std::list<Record_Sdk_Hdl_info> vec2 = test.searchChannelTableByChannelId(id2, chn2);
+ // std::cout << vec1 << std::endl;
+ // std::cout << vec2 << std::endl;
+ //Record_Sdk_Hdl_info recOldest = test.searchOldestRecordfromSdkHdlTableByUpdateTime();
+// Record_Sdk_Hdl_info recOldestID = test.searchOldestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+// Record_Sdk_Hdl_info recNewestID = test.searchNewestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+ test.insertSdkHdlTableAndDeleteCutVideoTable(record2, id1, chn1, "str_src_path1");
+ test.deleteSdkHdlTable(QString::fromStdString("str_src_path1"));
+ test.deleteSdkHdlTable(QString::fromStdString("str_src_path2"));
+
+ return a.exec();
+}
+//cutvideo
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ LDBTool test;
+ Record_Cut_Video_info record;
+
+ qDebug() << QDateTime::currentDateTime();
+
+ record.n_id = 0;
+ record.str_storage_dev_id = "str_storage_dev_id1";
+ record.n_chn = 111;
+ record.str_src_path = "str_src_path1";
+ record.str_dst_path = "";
+ record.n_total = 0;
+ record.b_finish_flag = 0;
+ record.tim_update_time = QDateTime::currentDateTime();
+ record.str_reserved = "str_reserved1";
+
+ test.insertCutVideoTable(record);
+
+ Record_Cut_Video_info record2;
+ record2.n_id = 0;
+ record2.str_storage_dev_id = "str_storage_dev_id2";
+ record2.n_chn = 222;
+ record2.str_src_path = "str_src_path2";
+ record2.str_dst_path = "";
+ record2.n_total = 0;
+ record2.b_finish_flag = 0;
+ record2.tim_update_time = QDateTime::currentDateTime();
+ record2.str_reserved = "str_reserved2";
+ test.insertCutVideoTable(record2);
+
+
+ std::list<Record_Cut_Video_info> vec;
+ vec = test.searchCutVideoTableAll();
+ // std::cout << vec << std::endl;
+
+ record2.b_finish_flag = 1;
+ record2.str_dst_path = "str_dst_path222";
+ record2.n_total = 6;
+ record2.tim_update_time = QDateTime::currentDateTime();
+ test.updateCutVideoTable(record2);
+
+ test.updateCutVideoTable("str_src_path1", "str_dst_path111", 7);
+
+ QString id1("str_storage_dev_id1");
+ QString id2("str_storage_dev_id2");
+ int chn1 = 111;
+ int chn2 = 222;
+// std::list<Record_Cut_Video_info> vec1 = test.searchChannelTableByChannelId(id1, chn1);
+// std::list<Record_Cut_Video_info> vec2 = test.searchChannelTableByChannelId(id2, chn2);
+ // std::cout << vec1 << std::endl;
+ // std::cout << vec2 << std::endl;
+ Record_Cut_Video_info recOldest = test.searchOldestRecordfromCutTableByUpdateTime();
+// Record_Cut_Video_info recOldestID = test.searchOldestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+// Record_Cut_Video_info recNewestID = test.searchNewestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+ test.insertCutVideoTableAndDeleteLoadFileTable(record2, "str_storage_dev_id2",222,\
+ QDateTime::fromString("2018-08-18 16:38:49.819","yyyy-MM-dd hh:mm:ss.zzz"));
+
+ test.deleteCutVideoTable(id1, chn1, QString::fromStdString("str_src_path1"));
+ test.deleteCutVideoTable(id2, chn2, QString::fromStdString("str_src_path2"));
+
+ return a.exec();
+}
+//loadfile
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ LDBTool test;
+ Record_Load_File_info record;
+
+ qDebug() << QDateTime::currentDateTime();
+
+ record.n_id = 0;
+ record.str_storage_dev_id = "str_storage_dev_id1";
+ record.n_chn = 111;
+ record.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+ record.b_finish_flag = 0;
+ record.str_load_file_path = "";
+ record.tim_update_time = QDateTime::currentDateTime();
+ record.str_reserved = "str_reserved1";
+
+ test.insertLoadFileTable(record);
+
+ Record_Load_File_info record2;
+ record2.n_id = 0;
+ record2.str_storage_dev_id = "str_storage_dev_id2";
+ record2.n_chn = 222;
+ record2.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+ record2.b_finish_flag = 0;
+ record2.str_load_file_path = "";
+ record2.tim_update_time = QDateTime::currentDateTime();
+ record2.str_reserved = "str_reserved2";
+ test.insertLoadFileTable(record2);
+
+
+ std::list<Record_Load_File_info> vec;
+ vec = test.searchLoadFileTableAll();
+ // std::cout << vec << std::endl;
+
+ record2.b_finish_flag = 1;
+ record2.str_load_file_path = "str_load_file_path";
+ record2.tim_update_time = QDateTime::currentDateTime();
+ test.updateLoadFileTable(record2);
+
+ QString id1("str_storage_dev_id1");
+ QString id2("str_storage_dev_id2");
+ int chn1 = 111;
+ int chn2 = 222;
+// std::list<Record_Load_File_info> vec1 = test.searchChannelTableByChannelId(id1, chn1);
+// std::list<Record_Load_File_info> vec2 = test.searchChannelTableByChannelId(id2, chn2);
+ // std::cout << vec1 << std::endl;
+ // std::cout << vec2 << std::endl;
+ Record_Load_File_info recOldest = test.searchOldestRecordfromLoadTableByUpdateTime();
+// Record_Load_File_info recOldestID = test.searchOldestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+// Record_Load_File_info recNewestID = test.searchNewestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+
+ Record_Cam_Chn chn_record2 = test.searchChannelTableByChannelId("str_storage_dev_id2", 222);
+ chn_record2.tim_do_time = chn_record2.tim_do_time.addSecs(3600);
+ chn_record2.tim_update_time = QDateTime::currentDateTime();
+ test.insertLoadFileTableAndUpdateChannelTable(record2, chn_record2);
+
+ test.deleteLoadFileTable(id1, chn1, record.tim_do_time);
+ test.deleteLoadFileTable(id2, chn2, record2.tim_do_time);
+
+ return a.exec();
+}
+//camchn
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ LDBTool test;
+ Record_Cam_Chn chn_record;
+
+ // std::cout << QDateTime().toString()<< std::endl;
+
+ chn_record.n_id = 1;
+ chn_record.str_storage_dev_id = "str_storage_dev_id1";
+ chn_record.n_chn = 111;
+ chn_record.str_chn_name = "str_chn_name1";
+ chn_record.str_addr = "str_addr1";
+ chn_record.str_longitude = "str_longitude1";
+ chn_record.str_latitude = "str_latitude1";
+ chn_record.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+ chn_record.tim_update_time = QDateTime::currentDateTime();
+ chn_record.str_reserved = "str_reserved1";
+
+
+ test.insertChannelTable(chn_record);
+
+ Record_Cam_Chn chn_record2;
+ chn_record2.n_id = 2;
+ chn_record2.str_storage_dev_id = "str_storage_dev_id2";
+ chn_record2.n_chn = 222;
+ chn_record2.str_chn_name = "str_chn_name2";
+ chn_record2.str_addr = "str_addr2";
+ chn_record2.str_longitude = "str_longitude2";
+ chn_record2.str_latitude = "str_latitude2";
+ chn_record2.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+ chn_record2.tim_update_time = QDateTime::currentDateTime();
+ chn_record2.str_reserved = "str_reserved2";
+ test.insertChannelTable(chn_record2);
+
+
+ std::list<Record_Cam_Chn> vec;
+ vec = test.searchChannelTableAll();
+ // std::cout << vec << std::endl;
+
+ chn_record2.n_id = 2;
+ chn_record2.str_storage_dev_id = "str_storage_dev_id2";
+ chn_record2.n_chn = 222;
+ chn_record2.str_chn_name = "str_chn_name3";
+ chn_record2.str_addr = "str_addr3";
+ chn_record2.str_longitude = "str_longitude3";
+ chn_record2.str_latitude = "str_latitude3";
+ chn_record2.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+ chn_record2.tim_update_time = QDateTime::currentDateTime();
+ chn_record2.str_reserved = "str_reserved3";
+ test.updateChannelTable(chn_record2);
+
+ QString id1("str_storage_dev_id1");
+ QString id2("str_storage_dev_id2");
+ int chn1 = 111;
+ int chn2 = 222;
+ Record_Cam_Chn vec1 = test.searchChannelTableByChannelId(id1, chn1);
+ Record_Cam_Chn vec2 = test.searchChannelTableByChannelId(id2, chn2);
+ // std::cout << vec1 << std::endl;
+ // std::cout << vec2 << std::endl;
+ Record_Cam_Chn recOldest = test.searchOldestRecordfromChnTableByUpdateTime();
+ Record_Cam_Chn recOldestID = test.searchOldestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+ Record_Cam_Chn recNewestID = test.searchNewestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+
+ test.deleteChannelTable(id1, chn2);
+ test.deleteChannelTable(id2, chn1);
+ test.deleteChannelTable(id1, chn1);
+ test.deleteChannelTable(id2, chn2);
+
+ return a.exec();
+}
+
+//dev
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ LDBTool test;
+ Record_Storage_Dev dev_record;
+
+ dev_record.n_id = 0;
+ dev_record.str_storage_dev_id = "str_storage_dev_id1";
+ dev_record.str_dev_name = "str_dev_name1";
+ dev_record.n_total_chn = 32;
+ dev_record.str_all_chn_num = "str_all_chn_num";
+ dev_record.str_addr = "str_addr";
+ dev_record.str_longitude = "str_longitude";
+ dev_record.str_latitude = "str_latitude";
+ dev_record.str_ip = "str_ip";
+ dev_record.n_port = 1;
+ dev_record.str_username = "str_username";
+ dev_record.str_password = "str_password";
+ dev_record.n_duration = 1;
+ dev_record.str_reserved = "str_reserved";
+
+ test.insertLDeviceTable(dev_record);
+
+ Record_Storage_Dev dev_record1;
+ dev_record1.n_id = 2;
+ dev_record1.str_storage_dev_id = "str_storage_dev_id2";
+ dev_record1.str_dev_name = "str_dev_name2";
+ dev_record1.n_total_chn = 16;
+ dev_record1.str_all_chn_num = "str_all_chn_num";
+ dev_record1.str_addr = "str_addr2";
+ dev_record1.str_longitude = "str_longitude2";
+ dev_record1.str_latitude = "str_latitude2";
+ dev_record1.str_ip = "str_ip2";
+ dev_record1.n_port = 222;
+ dev_record1.str_username = "str_username2";
+ dev_record1.str_password = "str_password2";
+ dev_record1.n_duration = 2;
+ dev_record1.str_reserved = "str_reserved2";
+ test.insertLDeviceTable(dev_record1);
+
+ Record_Storage_Dev dev_record2;
+ dev_record2.n_id = 2;
+ dev_record2.str_storage_dev_id = "str_storage_dev_id2";
+ dev_record2.str_dev_name = "str_dev_name3";
+ dev_record2.n_total_chn = 16;
+ dev_record2.str_all_chn_num = "str_all_chn_num3";
+ dev_record2.str_addr = "str_addr3";
+ dev_record2.str_longitude = "str_longitude3";
+ dev_record2.str_latitude = "str_latitude3";
+ dev_record2.str_ip = "str_ip3";
+ dev_record2.n_port = 333;
+ dev_record2.str_username = "str_username3";
+ dev_record2.str_password = "str_password3";
+ dev_record2.n_duration = 3;
+ dev_record2.str_reserved = "str_reserved3";
+ test.updateLDeviceTable(dev_record2);
+
+
+ std::list<Record_Storage_Dev> vec;
+ vec = test.searchDeviceTableAll();
+
+ QString id1("str_storage_dev_id1");
+ QString id2("str_storage_dev_id2");
+ Record_Storage_Dev s1 = test.searchDeviceTableByDeviceId(id1);
+ Record_Storage_Dev s2 = test.searchDeviceTableByDeviceId(id2);
+
+ int n = test.searchDeviceNumber();
+
+ int d = test.searchDurationByDeviceId(id1);
+
+ test.deleteLDeviceTable(id1);
+ test.deleteLDeviceTable(id2);
+
+ return a.exec();
+}
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/mySem.hpp b/QiaoJiaSystem/VideoServer/QiaoJia/mySem.hpp
new file mode 100644
index 0000000..37b2f9c
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/mySem.hpp
@@ -0,0 +1,70 @@
+#ifndef MYSEM_H_XZL_201808141050
+#define MYSEM_H_XZL_201808141050
+
+#include <chrono>
+#include <mutex>
+#include <condition_variable>
+
+enum {
+ SEMPHORE_FAIL = (-1),
+ SEMPHORE_SUCCESS = 0,
+ SEMPHORE_TIME_OUT = 1
+};
+
+class Semphore {
+public:
+ Semphore(const int sigs = 0) : m_signals(sigs), m_blocked(0) {}
+
+ ~Semphore() {}
+
+private:
+ Semphore(const Semphore &) = delete;
+
+ Semphore(Semphore &&) = delete;
+
+ Semphore operator=(const Semphore &) = delete;
+
+private:
+ std::mutex m_mtx;
+ std::condition_variable m_cv;
+ int m_signals;
+ int m_blocked;
+
+public:
+ int wait(const int time_out_ms = (-1)) {
+ std::unique_lock<std::mutex> ul(m_mtx);
+ if (m_signals > 0) {
+ --m_signals;
+ return SEMPHORE_SUCCESS;
+ } else {
+ ++m_blocked;
+ }
+
+ if (time_out_ms >= 0) {
+ std::chrono::milliseconds wait_time_ms(time_out_ms);
+ auto result = m_cv.wait_for(ul, wait_time_ms, [&] { return m_signals > 0; });
+ --m_blocked;
+ if (result) {
+ --m_signals;
+ return SEMPHORE_SUCCESS;
+ } else {
+ return SEMPHORE_TIME_OUT;
+ }
+ } else {
+ m_cv.wait(ul, [&] { return m_signals > 0; });
+ --m_blocked;
+ --m_signals;
+ return SEMPHORE_SUCCESS;
+ }
+ }
+
+ inline void signal(const int count = 1) {
+ std::lock_guard<std::mutex> lg(m_mtx);
+ m_signals += count;
+ if (m_blocked > 0) {
+ m_cv.notify_one();
+ }
+ }
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/myThread.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/myThread.cpp
new file mode 100644
index 0000000..7dd893d
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/myThread.cpp
@@ -0,0 +1 @@
+#include "myThread.h"
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/myThread.h b/QiaoJiaSystem/VideoServer/QiaoJia/myThread.h
new file mode 100644
index 0000000..8986b8c
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/myThread.h
@@ -0,0 +1,128 @@
+#ifndef MYTHREAD_H_XZL_201808081711
+#define MYTHREAD_H_XZL_201808081711
+
+#include <thread>
+#include <vector>
+#include <list>
+#include <memory>
+#include <thread>
+#include <chrono>
+#include <functional>
+#include "mySem.hpp"
+
+struct threadInfo {
+ bool isRunning;
+ std::shared_ptr<std::thread> thd;
+};
+enum {
+ PROCESSOR_FAIL = -1,
+ PROCESSOR_SUCCESS = 0,
+ PROCESSOR_TIME_OUT = 1,
+ PROCESSOR_QUEUE_FULL = 2,
+ PROCESSOR_QUEUE_EMPTY = 3
+};
+
+template<typename PACKET>
+class mythread {
+ using TASK_FUNCTION = std::function<void(std::shared_ptr<PACKET> &)>;
+public:
+ mythread(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+
+ virtual ~mythread() {}
+
+ int beginThreads(const int count) {
+ for (int i = 0; i < count; i++) {
+ threadInfo thInfo;
+ thInfo.isRunning = true;
+ m_thds.push_back(thInfo);
+ }
+ for (auto &ele:m_thds) {
+ ele.thd = std::make_shared<std::thread>([&]() -> void {
+ std::shared_ptr<PACKET> sp_task(nullptr);
+ int status = 0;
+ while (ele.isRunning) {
+ status = get_task(sp_task, 200);
+ if (status == PROCESSOR_SUCCESS) {
+ doFunc(sp_task);
+ if (m_task_function != nullptr) {
+ m_task_function(sp_task);
+ }
+ }
+ }
+ });
+ }
+ }
+
+ int endThreads() {
+ for (auto &ele:m_thds) {
+ ele.isRunning = false;
+ ele.thd->join();
+ }
+ }
+
+ int put_task(std::shared_ptr<PACKET> &sp_task, int *p_new_size = nullptr) {
+ std::lock_guard<std::mutex> auto_lock(m_task_lock);
+
+ int cur_size = static_cast<int>(m_taskList.size());
+ if (cur_size >= m_task_max_count) {
+ if (p_new_size != nullptr) {
+ *p_new_size = cur_size;
+ }
+ return PROCESSOR_QUEUE_FULL;
+ }
+
+ m_taskList.emplace_back(sp_task);
+ m_task_semphore.signal();
+
+ if (p_new_size != nullptr) {
+ *p_new_size = cur_size + 1;
+ }
+
+ return PROCESSOR_SUCCESS;
+ }
+
+ int get_task(std::shared_ptr<PACKET> &sp_task, const int ms = (-1), int *p_new_size = nullptr) {
+ if (m_task_semphore.wait(ms) != SEMPHORE_SUCCESS) {
+ return PROCESSOR_TIME_OUT;
+ }
+
+ std::lock_guard<std::mutex> auto_lock(m_task_lock);
+
+ /*
+ * 鍏冪礌鍏ラ槦鏃朵俊鍙蜂笌鍏冪礌鏄�1瀵�1鍏崇郴锛岀敱浜庡彲浠ヤ竴娆″彇鍏ㄩ儴闃熷垪鍏冪礌锛�
+ * 鎵�浠ュ彲鑳藉瓨鍦ㄧ瓑寰呬俊鍙锋垚鍔熶絾闃熷垪涓凡鏃犲厓绱犵殑鎯呭喌锛屾晠鍦ㄦ鍒ゆ柇
+ */
+ if (m_taskList.empty()) {
+ if (p_new_size != nullptr) {
+ *p_new_size = 0;
+ }
+ return PROCESSOR_QUEUE_EMPTY;
+ }
+
+ sp_task = std::move(m_taskList.front());
+ m_taskList.pop_front();
+
+ if (p_new_size != nullptr) {
+ *p_new_size = static_cast<int>(m_taskList.size());
+ }
+
+ return PROCESSOR_SUCCESS;
+ }
+
+ int get_taskListSize() {
+ std::lock_guard<std::mutex> auto_lock(m_task_lock);
+ return m_taskList.size();
+ }
+
+ virtual void doFunc(std::shared_ptr<PACKET> spPacket) {}
+
+private:
+ std::vector<threadInfo> m_thds;
+ std::mutex m_task_lock;
+ Semphore m_task_semphore;
+ volatile int m_task_max_count = 1024;
+ std::list<std::shared_ptr<PACKET>> m_taskList;
+ TASK_FUNCTION m_task_function = nullptr;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/widget.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/widget.cpp
new file mode 100644
index 0000000..de81017
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/widget.cpp
@@ -0,0 +1,14 @@
+#include "widget.h"
+#include "ui_widget.h"
+
+Widget::Widget(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::Widget)
+{
+ ui->setupUi(this);
+}
+
+Widget::~Widget()
+{
+ delete ui;
+}
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/widget.h b/QiaoJiaSystem/VideoServer/QiaoJia/widget.h
new file mode 100644
index 0000000..896177c
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/widget.h
@@ -0,0 +1,22 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+namespace Ui {
+class Widget;
+}
+
+class Widget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Widget(QWidget *parent = 0);
+ ~Widget();
+
+private:
+ Ui::Widget *ui;
+};
+
+#endif // WIDGET_H
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/widget.ui b/QiaoJiaSystem/VideoServer/QiaoJia/widget.ui
new file mode 100644
index 0000000..8541684
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/widget.ui
@@ -0,0 +1,20 @@
+<ui version="4.0">
+ <class>Widget</class>
+ <widget class="QWidget" name="Widget" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Widget</string>
+ </property>
+ </widget>
+ <layoutDefault spacing="6" margin="11" />
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/QiaoJiaSystem/YoloServer/CMakeLists.txt b/QiaoJiaSystem/YoloServer/CMakeLists.txt
new file mode 100644
index 0000000..de53fcc
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/CMakeLists.txt
@@ -0,0 +1,103 @@
+cmake_minimum_required(VERSION 3.5)
+project(YoloServer)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+add_definitions(-DGLOG)
+add_compile_options(-fPIC)
+
+SET(LIBS
+ glog
+ Ice
+ jsoncpp
+ pthread
+ opencv_world
+ Qt5Core
+ darknet
+ cuda
+ cudart
+ cublas
+ curand
+ )
+include_directories(
+ ./rpc
+ ../../BasicPlatForm
+ ../../BasicPlatForm/libs/opencv/include
+ ../../BasicPlatForm/libs/jsoncpp/include
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/ffmpeg/include
+ ../../BasicPlatForm/libs/DarkNet/include
+ /usr/local/cuda/include/
+ /usr/include/x86_64-linux-gnu/qt5
+
+ #glog
+ ../../BasicPlatForm/libs/glog/include
+)
+
+link_directories(
+ /usr/local/cuda/lib64
+ ../../BasicPlatForm/libs/jsoncpp/lib
+ ../../BasicPlatForm/libs/openssl/lib/
+ ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/DarkNet/lib
+ #glog
+ ../../BasicPlatForm/libs/glog/lib
+)
+
+link_directories(
+ /usr/local/cuda/lib64
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/DarkNet
+)
+
+link_directories(
+ /usr/local/cuda/lib64
+ ../../BasicPlatForm/libs/opencv/lib
+ ../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../BasicPlatForm/libs/DarkNet/lib
+ ../../BasicPlatForm/libs/ffmpeg/lib
+)
+
+add_executable(${PROJECT_NAME}
+ main.cpp
+ YoloDetectServerI.cpp
+ rpc/YoloServer.cpp
+ )
+
+target_link_libraries(${PROJECT_NAME}
+ ${LIBS}
+ )
+
+#add_executable(YoloDetectClientTest
+# ../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
+# ../../BasicPlatForm/basic/util/opencv/CvUtil.h
+# ../../BasicPlatForm/basic/pipe/PipeConnector.cpp
+# ../../BasicPlatForm/basic/pipe/PipeConnector.h
+# ../../BasicPlatForm/basic/pipe/PipeController.cpp
+# ../../BasicPlatForm/basic/pipe/PipeController.h
+# ../../BasicPlatForm/basic/pipe/PipeElement.cpp
+# ../../BasicPlatForm/basic/pipe/PipeElement.h
+#
+# ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+# ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.h
+# ../../BasicPlatForm/basic/pipe_element/ImageShowElement.cpp
+# ../../BasicPlatForm/basic/pipe_element/ImageShowElement.h
+# ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoCaptureElement.cpp
+# ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoCaptureElement.h
+# rpc/YoloServer.cpp
+# YoloDetectClientTest.cpp
+# YoloRpcElement.cpp
+# YoloRpcElement.h
+# ImageDrawElement.cpp
+# )
+#
+#target_link_libraries(YoloDetectClientTest
+# Ice
+# Qt5Core
+# avformat avcodec avutil avfilter swscale swresample
+# opencv_world
+# pthread
+# )
diff --git a/QiaoJiaSystem/YoloServer/DnDetect.cpp b/QiaoJiaSystem/YoloServer/DnDetect.cpp
new file mode 100644
index 0000000..498ba0f
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/DnDetect.cpp
@@ -0,0 +1,121 @@
+#include "DnDetect.h"
+
+DnDetect::DnDetect(const int gpuIndex):m_net(nullptr),m_thresh(0.5),m_hier_thresh(0.5),m_nms(0.45),names(nullptr),alphabet(nullptr)
+{
+ cuda_set_device(gpuIndex);
+
+ char *datacfg = "cfg/coco.data";
+ char *cfgfile = "cfg/yolov3.cfg";
+ char *weightfile = "./yolov3.weights";
+
+ double loadtime = what_time_is_it_now();
+ list *options = read_data_cfg(datacfg);
+ char *name_list = option_find_str(options, "names", "data/names.list");
+ names = get_labels(name_list);
+
+ alphabet = load_alphabet();
+ m_net = load_network(cfgfile, weightfile, 0);
+ set_batch_network(m_net, 1);
+ printf("load mod use %f seconds.\n", what_time_is_it_now()-loadtime);
+
+ srand(2222222);
+ double attime;
+ float nms=.45;
+}
+
+DnDetect::~DnDetect()
+{
+
+}
+
+std::vector<cv::Rect2f> DnDetect::detect(cv::Mat & img)
+{
+
+ double bttime=what_time_is_it_now();
+ image im = matToImg(img);
+ image sized = letterbox_image(im, m_net->w, m_net->h);
+ layer l = m_net->layers[m_net->n-1];
+
+ float *X = sized.data;
+ //attime=what_time_is_it_now();
+ network_predict(m_net, X);
+ //printf("Predicted in %f seconds.\n", what_time_is_it_now()-attime);
+ int nboxes = 0;
+ detection *dets = get_network_boxes(m_net, im.w, im.h, 0.5f, 0.1f, 0, 1, &nboxes);
+ if (m_nms) do_nms_sort(dets, nboxes, l.classes, m_nms);
+ // draw_detections(im, dets, nboxes, m_thresh, names, alphabet, l.classes);
+ std::vector<cv::Rect2f> rects;
+ for(int i=0;i<nboxes;i++)
+ {
+ std::vector<float> vec(80);
+ memcpy(&vec[0],dets[i].prob,sizeof(float)*80);
+ int type = -1;
+ for(int j = 0; j < l.classes; ++j){
+ if(j != 0){
+ continue;
+ }
+ if (dets[i].prob[j] > m_thresh){
+ if (type < 0) {
+ type = j;
+ } else {
+ }
+ } else{
+ }
+ }
+ if(type >= 0){
+ if(type != 0){
+ continue;
+ }
+ float left = (dets[i].bbox.x-dets[i].bbox.w/2.);
+ float top = (dets[i].bbox.y-dets[i].bbox.h/2.);
+ cv::Rect2f rect(left,top,dets[i].bbox.w,dets[i].bbox.h);
+ std::cout<<"rect.x : "<<left<<" rect.y : "<<top<<" rect.w : "<<rect.width<<" rect.h : "<<rect.height<<std::endl;
+ rects.push_back(rect);
+ }
+
+
+ }
+ free_detections(dets, nboxes);
+// show_image(im, "Video");
+// cv::waitKey(10);
+ free_image(im);
+ free_image(sized);
+ printf("all time use %f seconds.\n", what_time_is_it_now()-bttime);
+ return rects;
+}
+
+image DnDetect::matToImg(cv::Mat& RefImg) {
+ CV_Assert(RefImg.depth() == CV_8U);
+
+ int h = RefImg.rows;
+ int w = RefImg.cols;
+ int channels = RefImg.channels();
+ image im = make_image(w, h, 3);
+ int count = 0;
+ switch(channels){
+ case 1:{
+ cv::MatIterator_<unsigned char> it, end;
+ for (it = RefImg.begin<unsigned char>(), end = RefImg.end<unsigned char>(); it != end; ++it){
+ im.data[count] = im.data[w*h + count] = im.data[w*h*2 + count] = (float)(*it)/255.0;
+
+ ++count;
+ }
+ break;
+ }
+ case 3:{
+ cv::MatIterator_<cv::Vec3b> it, end;
+ for (it = RefImg.begin<cv::Vec3b>(), end = RefImg.end<cv::Vec3b>(); it != end; ++it){
+ im.data[count] = (float)(*it)[2]/255.0;
+ im.data[w*h + count] = (float)(*it)[1]/255.0;
+ im.data[w*h*2 + count] = (float)(*it)[0]/255.0;
+ ++count;
+ }
+ break;
+ }
+
+ default:
+ printf("Channel number not supported.\n");
+ break;
+ }
+ return im;
+}
diff --git a/QiaoJiaSystem/YoloServer/DnDetect.h b/QiaoJiaSystem/YoloServer/DnDetect.h
new file mode 100644
index 0000000..3718aed
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/DnDetect.h
@@ -0,0 +1,26 @@
+#ifndef DNDETECT_H
+#define DNDETECT_H
+#define GPU
+#include <darknet.h>
+#include <opencv2/opencv.hpp>
+class DnDetect
+{
+public:
+ DnDetect(const int gpuIndex);
+ virtual ~DnDetect();
+
+ std::vector<cv::Rect2f> detect(cv::Mat&);
+private:
+ image matToImg(cv::Mat& RefImg);
+
+private:
+ network *m_net;
+ float m_thresh;
+ float m_hier_thresh;
+ float m_nms;
+ char **names;
+
+ image **alphabet;
+};
+
+#endif
diff --git a/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp b/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp
new file mode 100644
index 0000000..0084b09
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp
@@ -0,0 +1,30 @@
+#include "ImageDrawElement.h"
+
+
+ImageDrawElement::ImageDrawElement()
+{
+}
+
+void ImageDrawElement::setRects(const std::vector<cv::Rect2f> &value)
+{
+ rectsMtx.lock();
+ rectsBuffer = value;
+ rectsUpdated = true;
+ rectsMtx.unlock();
+}
+
+void ImageDrawElement::processImage(cv::Mat &image)
+{
+ if(rectsUpdated){
+ rectsMtx.lock();
+ rects = rectsBuffer;
+ rectsUpdated = false;
+ rectsMtx.unlock();
+ }
+ for(size_t i = 0;i<rects.size();i++){
+ cv::Rect2f& rectf = rects[i];
+ cv::Rect rect(rectf.x*image.cols,rectf.y*image.rows,rectf.width*image.cols,rectf.height*image.rows);
+ cv::rectangle(image, rect,cv::Scalar(0,0,255),4);
+ }
+ fireConnectors();
+}
diff --git a/QiaoJiaSystem/YoloServer/ImageDrawElement.h b/QiaoJiaSystem/YoloServer/ImageDrawElement.h
new file mode 100644
index 0000000..03fd9df
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/ImageDrawElement.h
@@ -0,0 +1,20 @@
+#ifndef IMAGEDRAWELEMENT_H
+#define IMAGEDRAWELEMENT_H
+#include <basic/pipe_element/ImageFactoryElement.h>
+#include <mutex>
+
+class ImageDrawElement : public ImageFactoryElement
+{
+public:
+ ImageDrawElement();
+ void setRects(const std::vector<cv::Rect2f> &value);
+
+private:
+ std::mutex rectsMtx;
+ std::vector<cv::Rect2f> rects;
+ std::vector<cv::Rect2f> rectsBuffer;
+ bool rectsUpdated;
+ virtual void processImage(cv::Mat& image);
+};
+
+#endif // IMAGEDRAWELEMENT_H
diff --git a/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp b/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp
new file mode 100644
index 0000000..23c9f92
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp
@@ -0,0 +1,79 @@
+#include "basic/util/resource/ResourcesManager.h"
+#include <string>
+#include <iostream>
+#include <unistd.h>
+#include <thread>
+
+#include <basic/pipe/PipeElement.h>
+#include <basic/pipe_element/ImageShowElement.h>
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ffmpeg/VideoCaptureElement.h>
+#include "ImageDrawElement.h"
+#include "YoloRpcElement.h"
+class Controllor : public PipeController
+{
+public:
+ Controllor(const int index,const std::string& rtsp):m_videoCaptureElement(rtsp,25,1000,0),
+ m_YoloRpcElement(std::to_string(index)+"YoloRpc")
+ {
+ m_rtsp = rtsp;
+ m_videoCaptureElement.registerConnector([&]{
+ if(!m_YoloRpcElement.isBusy()){
+ m_YoloRpcElement.setImage(m_videoCaptureElement.getImage());
+ // paElement.setImage(videoCaptureElement.getImage());
+ // paNumElement.setImage(videoCaptureElement.getImage());
+ m_YoloRpcElement.submit();
+ }
+ if(!m_imageDrawElement.isBusy()){
+ m_imageDrawElement.setImage(m_videoCaptureElement.getImage());
+ m_imageDrawElement.submit();
+ }
+ });
+
+ m_YoloRpcElement.registerConnector([&]{
+ m_imageDrawElement.setRects(m_YoloRpcElement.getRects());
+ });
+
+ m_imageDrawElement.registerConnector([&]{
+ ImageShowElement::showImage(m_rtsp,*m_imageDrawElement.getImage());
+
+ });
+ m_videoCaptureElement.setOutPutInterval(2);
+ registerElement(m_videoCaptureElement);
+ registerElement(m_YoloRpcElement);
+ registerElement(m_imageDrawElement);
+ }
+ virtual ~Controllor()
+ {}
+
+private:
+ std::string m_rtsp;
+ ffmpeg::VideoCaptureElement m_videoCaptureElement;
+ YoloRpcElement m_YoloRpcElement;
+ ImageDrawElement m_imageDrawElement;
+};
+
+using namespace std;
+int main(int argc, char *argv[])
+{
+ SAVE_APP_ARGS
+ Controllor _Controllor(0,"/home/basic/video/201804/day0416/01010002606000000-slice1.mp4");
+ _Controllor.start();
+
+ Controllor _Controllor0(1,"/home/basic/video/201804/day0416/01010002606000000-slice2.mp4");
+ _Controllor0.start();
+ cout << "Hello World!" << endl;
+ Controllor _Controllor1(2,"/home/basic/video/201804/day0416/01010002609000000-slice.mp4");
+ _Controllor1.start();
+ Controllor _Controllor2(3,"/home/basic/video/201804/day0416/01010002611000000-slice.mp4");
+ _Controllor2.start();
+ Controllor _Controllor3(4,"/home/basic/video/201804/night0418/02000000652000100-slice.mp4");
+ _Controllor3.start();
+ Controllor _Controllor4(5,"/home/basic/video/201804/night0418/02000000654000100-slice.mp4");
+ _Controllor4.start();
+ Controllor _Controllor5(6,"/home/basic/video/201804/night0418/02000000659000100-slice.mp4");
+ _Controllor5.start();
+ while(true)
+ {sleep(1);}
+ return 0;
+}
diff --git a/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp b/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp
new file mode 100644
index 0000000..2e1afe5
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp
@@ -0,0 +1,169 @@
+#include "YoloDetectServerI.h"
+
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QString>
+#include <QtCore/QSharedMemory>
+#include <basic/timer_counter/Clocktimer.h>
+
+YoloDetectServerI::YoloDetectServerI():m_thresh(0.5),m_hier_thresh(0.5),m_nms(0.5),names(nullptr),alphabet(nullptr),
+ m_thdInit(init,this),m_bInitThd(false)
+{
+}
+
+YoloDetectServerI::~YoloDetectServerI()
+{}
+
+::YoloDetect::ObjInfos YoloDetectServerI::YoloDetect(::Ice::Int w, ::Ice::Int h, const ::std::string& shM, const ::Ice::Current&)
+{
+ ClockTimer ct("YoloDetectServerI::YoloDetect");
+ ::YoloDetect::ObjInfos objInfos;
+ if(!m_bInitThd) return objInfos;
+ QSharedMemory shareMemory(QString(shM.c_str()));
+ if(shareMemory.attach()){
+ int channel = 3;
+ cv::Mat _mat = bufferToMat(w,h,channel,shareMemory.constData());
+
+// double bttime=what_time_is_it_now();
+ image im = matToImg(_mat);
+// DBG("matToImg : "<<what_time_is_it_now()-bttime);
+// printf("matToImg %f seconds.\n", what_time_is_it_now()-bttime);
+ image sized = letterbox_image(im, m_net->w, m_net->h);
+ layer l = m_net->layers[m_net->n-1];
+
+ float *X = sized.data;
+ //attime=what_time_is_it_now();p->
+ network_predict(m_net, X);
+ //printf("Predicted in %f seconds.\n", what_time_is_it_now()-attime);
+ int nboxes = 0;
+ detection *dets = get_network_boxes(m_net, im.w, im.h, m_thresh, m_hier_thresh, 0, 1, &nboxes);
+ if (m_nms) do_nms_sort(dets, nboxes, l.classes, m_nms);
+ // draw_detections(im, dets, nboxes, m_thresh, names, alphabet, l.classes);
+ for(int i=0;i<nboxes;i++)
+ {
+ ::YoloDetect::ObjInfo objInfo;
+ std::vector<float> vec(80);
+ memcpy(&vec[0],dets[i].prob,sizeof(float)*80);
+ int type = -1;
+ for(int j = 0; j < l.classes; ++j){
+// if(j != 0){
+// continue;
+// }
+ if (dets[i].prob[j] > 0.0f){
+ if (type < 0) {
+ type = j;
+ objInfo.prob = dets[i].prob[j];
+ } else {
+ }
+ } else{
+ }
+ }
+ if(type >= 0){
+// if(type != 0){
+// continue;
+// }
+ objInfo.type = type;
+ objInfo.rcObj.left = (dets[i].bbox.x-dets[i].bbox.w/2.);
+ objInfo.rcObj.top = (dets[i].bbox.y-dets[i].bbox.h/2.);
+ objInfo.rcObj.right = (dets[i].bbox.x+dets[i].bbox.w/2.);
+ objInfo.rcObj.bottom = (dets[i].bbox.y+dets[i].bbox.h/2.);
+ objInfos.push_back(objInfo);
+ }
+
+
+ }
+ free_detections(dets, nboxes);
+ // show_image(im, "Video");
+ // cv::waitKey(10);
+ free_image(im);
+ free_image(sized);
+ //printf("all time use %f seconds.\n", what_time_is_it_now()-bttime);
+ }
+ return objInfos;
+}
+
+int YoloDetectServerI::init(void* arg)
+{
+ YoloDetectServerI* p = (YoloDetectServerI*)arg;
+
+ p->m_thresh = appPref.getFloatData("thresh.detect");
+ cuda_set_device(appPref.getIntData("gpu.index"));
+
+ char *datacfg = "cfg/coco.data";
+ char *cfgfile = "cfg/yolov3.cfg";
+ char *weightfile = "./yolov3.weights";
+
+ double loadtime = what_time_is_it_now();
+ list *options = read_data_cfg(datacfg);
+ char *name_list = option_find_str(options, "names", "data/names.list");
+ p->names = get_labels(name_list);
+
+ p->alphabet = load_alphabet();
+ p->m_net = load_network(cfgfile, weightfile, 0);
+ set_batch_network(p->m_net, 1);
+ printf("load mod use %f seconds.\n", what_time_is_it_now()-loadtime);
+
+ srand(2222222);
+ p->m_bInitThd = true;
+ return 0;
+}
+
+cv::Mat YoloDetectServerI::bufferToMat(const int w,const int h,const int channels,const void* buffer)
+{
+ int nType = -1;
+ switch(channels){case 1:{nType=CV_8UC1;break;}case 2:{nType=CV_8UC2;break;}case 3:{nType=CV_8UC3;break;}default:{nType=CV_8UC3;break;}}
+ cv::Mat mat(h,w,nType,(void*)buffer);
+ return mat;
+}
+
+image YoloDetectServerI::matToImg(cv::Mat& RefImg) {
+ CV_Assert(RefImg.depth() == CV_8U);
+
+ int h = RefImg.rows;
+ int w = RefImg.cols;
+ int channels = RefImg.channels();
+ image im = make_image(w, h, 3);
+ int count = 0;
+ switch(channels){
+ case 1:{
+ cv::MatIterator_<unsigned char> it, end;
+ for (it = RefImg.begin<unsigned char>(), end = RefImg.end<unsigned char>(); it != end; ++it){
+ im.data[count] = im.data[w*h + count] = im.data[w*h*2 + count] = (float)(*it)/255.0;
+
+ ++count;
+ }
+ break;
+ }
+ case 3:{
+ float* desData = im.data;
+ uchar* srcData = RefImg.data;
+
+ int size = w*h;
+ int size2 = size*2;
+ for(int i = 0;i<size;i++){
+ *(desData) = *(srcData + 2) /255.0f;
+ *(desData+size) = *(srcData + 1) /255.0f;
+ *(desData+size2) = *(srcData) /255.0f;
+
+ desData++;
+ srcData+=3;
+ }
+ break;
+ }
+
+ default:
+ printf("Channel number not supported.\n");
+ break;
+ }
+ return im;
+}
+
+YoloDetect::stringData YoloDetectServerI::getCocoData(const Ice::Current &)
+{
+ YoloDetect::stringData retval;
+ std::fstream fs("./data/coco.names");
+ std::string str;
+ while(fs>>str){
+ retval.push_back(str);
+ }
+ return retval;
+}
diff --git a/QiaoJiaSystem/YoloServer/YoloDetectServerI.h b/QiaoJiaSystem/YoloServer/YoloDetectServerI.h
new file mode 100644
index 0000000..ad18554
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/YoloDetectServerI.h
@@ -0,0 +1,40 @@
+#ifndef YOLODETECTSERVERI_H
+#define YOLODETECTSERVERI_H
+#define GPU
+#include "YoloServer.h"
+#include <thread>
+#include <darknet.h>
+#include <opencv2/opencv.hpp>
+#include <basic/util/resource/ResourcesManager.h>
+class YoloDetectServerI : public YoloDetect::YoloDetectServer
+{
+public:
+ YoloDetectServerI();
+ virtual ~YoloDetectServerI();
+ // FaceDetectServer interface
+public:
+ virtual ::YoloDetect::ObjInfos YoloDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent)override;
+ virtual YoloDetect::stringData getCocoData(const Ice::Current &) override;
+private:
+ network *m_net;
+ float m_thresh;
+ float m_hier_thresh;
+ float m_nms;
+ char **names;
+ image **alphabet;
+ bool m_bInitThd;
+ std::thread m_thdInit;
+
+ // ResourcesManager<int> resourcesManager;
+
+private:
+
+ static int init(void* arg);
+ image matToImg(cv::Mat& RefImg);
+ cv::Mat bufferToMat(const int w,const int h,const int channels,const void* buffer);
+
+
+};
+
+
+#endif
diff --git a/QiaoJiaSystem/YoloServer/main.cpp b/QiaoJiaSystem/YoloServer/main.cpp
new file mode 100644
index 0000000..e223edd
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/main.cpp
@@ -0,0 +1,35 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/util/app/AppPreference.hpp>
+#include "YoloDetectServerI.h"
+#include <basic/debug/Debug.h>
+
+#include <basic/util/app/AppConfig.h>
+
+int main(int argc, char **argv) {
+ SAVE_APP_ARGS;
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+ auto ich = Ice::initialize(argc, argv);
+
+// std::string identity =ich->getProperties()->getProperty("user.yolo.identity");
+// std::string gpuIndex =ich->getProperties()->getProperty("user.gpu.index");
+// std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+// float fthresh = atof(ich->getProperties()->getProperty("user.thresh.detect").c_str());
+
+// appPref.setIntData("gpu.index",atol(gpuIndex.c_str()));
+// appPref.setFloatData("thresh.detect",fthresh);
+
+// auto adapter = ich->createObjectAdapter(adapterName);
+// adapter->add(new YoloDetectServerI(), Ice::stringToIdentity(identity));
+// adapter->activate();
+// ich->waitForShutdown();
+ appPref.setIntData("gpu.index", 0);
+ appPref.setFloatData("thresh.detect", 0.7);
+
+ IceRpcServer<YoloDetectServerI> server("yoloServer", 10003, "tcp");
+ server.setMessageSizeMax(1024 * 1024 * 50);
+ server.setPoolInitSize(5);
+ server.setPoolMaxSize(5);
+ server.runWaitShutDown();
+ return 0;
+}
diff --git a/QiaoJiaSystem/YoloServer/rpc/YoloServer.cpp b/QiaoJiaSystem/YoloServer/rpc/YoloServer.cpp
new file mode 100644
index 0000000..490d042
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/rpc/YoloServer.cpp
@@ -0,0 +1,496 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `YoloServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <YoloServer.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+# pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+# pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_YoloDetect_YoloDetectServer_ids[2] =
+{
+ "::Ice::Object",
+ "::YoloDetect::YoloDetectServer"
+};
+const ::std::string iceC_YoloDetect_YoloDetectServer_ops[] =
+{
+ "YoloDetect",
+ "getCocoData",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+const ::std::string iceC_YoloDetect_YoloDetectServer_YoloDetect_name = "YoloDetect";
+const ::std::string iceC_YoloDetect_YoloDetectServer_getCocoData_name = "getCocoData";
+
+}
+
+bool
+YoloDetect::YoloDetectServer::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_YoloDetect_YoloDetectServer_ids, iceC_YoloDetect_YoloDetectServer_ids + 2, s);
+}
+
+::std::vector<::std::string>
+YoloDetect::YoloDetectServer::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector<::std::string>(&iceC_YoloDetect_YoloDetectServer_ids[0], &iceC_YoloDetect_YoloDetectServer_ids[2]);
+}
+
+::std::string
+YoloDetect::YoloDetectServer::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+YoloDetect::YoloDetectServer::ice_staticId()
+{
+ static const ::std::string typeId = "::YoloDetect::YoloDetectServer";
+ return typeId;
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceD_YoloDetect(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ auto istr = inS.startReadParams();
+ int iceP_width;
+ int iceP_height;
+ ::std::string iceP_shareMemory;
+ istr->readAll(iceP_width, iceP_height, iceP_shareMemory);
+ inS.endReadParams();
+ ::YoloDetect::ObjInfos ret = this->YoloDetect(iceP_width, iceP_height, ::std::move(iceP_shareMemory), current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceD_getCocoData(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+ inS.readEmptyParams();
+ ::YoloDetect::stringData ret = this->getCocoData(current);
+ auto ostr = inS.startWriteParams();
+ ostr->writeAll(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_YoloDetect_YoloDetectServer_ops, iceC_YoloDetect_YoloDetectServer_ops + 6, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_YoloDetect_YoloDetectServer_ops)
+ {
+ case 0:
+ {
+ return _iceD_YoloDetect(in, current);
+ }
+ case 1:
+ {
+ return _iceD_getCocoData(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+YoloDetect::YoloDetectServerPrx::_iceI_YoloDetect(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::YoloDetect::ObjInfos>>& outAsync, int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_YoloDetect_YoloDetectServer_YoloDetect_name);
+ outAsync->invoke(iceC_YoloDetect_YoloDetectServer_YoloDetect_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ [&](::Ice::OutputStream* ostr)
+ {
+ ostr->writeAll(iceP_width, iceP_height, iceP_shareMemory);
+ },
+ nullptr);
+}
+
+void
+YoloDetect::YoloDetectServerPrx::_iceI_getCocoData(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::YoloDetect::stringData>>& outAsync, const ::Ice::Context& context)
+{
+ _checkTwowayOnly(iceC_YoloDetect_YoloDetectServer_getCocoData_name);
+ outAsync->invoke(iceC_YoloDetect_YoloDetectServer_getCocoData_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+ nullptr,
+ nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+YoloDetect::YoloDetectServerPrx::_newInstance() const
+{
+ return ::IceInternal::createProxy<YoloDetectServerPrx>();
+}
+
+const ::std::string&
+YoloDetect::YoloDetectServerPrx::ice_staticId()
+{
+ return YoloDetect::YoloDetectServer::ice_staticId();
+}
+
+namespace Ice
+{
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_YoloDetect_YoloDetectServer_YoloDetect_name = "YoloDetect";
+
+const ::std::string iceC_YoloDetect_YoloDetectServer_getCocoData_name = "getCocoData";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::YoloDetect::upCast(::IceProxy::YoloDetect::YoloDetectServer* p) { return p; }
+
+void
+::IceProxy::YoloDetect::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::YoloDetect::YoloDetectServer>& v)
+{
+ ::Ice::ObjectPrx proxy;
+ istr->read(proxy);
+ if(!proxy)
+ {
+ v = 0;
+ }
+ else
+ {
+ v = new ::IceProxy::YoloDetect::YoloDetectServer;
+ v->_copyFrom(proxy);
+ }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::YoloDetect::YoloDetectServer::_iceI_begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_YoloDetect_YoloDetectServer_YoloDetect_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_YoloDetect_YoloDetectServer_YoloDetect_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_YoloDetect_YoloDetectServer_YoloDetect_name, ::Ice::Normal, context);
+ ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+ ostr->write(iceP_width);
+ ostr->write(iceP_height);
+ ostr->write(iceP_shareMemory);
+ result->endWriteParams();
+ result->invoke(iceC_YoloDetect_YoloDetectServer_YoloDetect_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::YoloDetect::ObjInfos
+IceProxy::YoloDetect::YoloDetectServer::end_YoloDetect(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_YoloDetect_YoloDetectServer_YoloDetect_name);
+ ::YoloDetect::ObjInfos ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::YoloDetect::YoloDetectServer::_iceI_begin_getCocoData(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+ _checkTwowayOnly(iceC_YoloDetect_YoloDetectServer_getCocoData_name, sync);
+ ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_YoloDetect_YoloDetectServer_getCocoData_name, del, cookie, sync);
+ try
+ {
+ result->prepare(iceC_YoloDetect_YoloDetectServer_getCocoData_name, ::Ice::Normal, context);
+ result->writeEmptyParams();
+ result->invoke(iceC_YoloDetect_YoloDetectServer_getCocoData_name);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ result->abort(ex);
+ }
+ return result;
+}
+
+::YoloDetect::stringData
+IceProxy::YoloDetect::YoloDetectServer::end_getCocoData(const ::Ice::AsyncResultPtr& result)
+{
+ ::Ice::AsyncResult::_check(result, this, iceC_YoloDetect_YoloDetectServer_getCocoData_name);
+ ::YoloDetect::stringData ret;
+ if(!result->_waitForResponse())
+ {
+ try
+ {
+ result->_throwUserException();
+ }
+ catch(const ::Ice::UserException& ex)
+ {
+ throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+ }
+ }
+ ::Ice::InputStream* istr = result->_startReadParams();
+ istr->read(ret);
+ result->_endReadParams();
+ return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::YoloDetect::YoloDetectServer::_newInstance() const
+{
+ return new YoloDetectServer;
+}
+
+const ::std::string&
+IceProxy::YoloDetect::YoloDetectServer::ice_staticId()
+{
+ return ::YoloDetect::YoloDetectServer::ice_staticId();
+}
+
+YoloDetect::YoloDetectServer::~YoloDetectServer()
+{
+}
+
+::Ice::Object* YoloDetect::upCast(::YoloDetect::YoloDetectServer* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_YoloDetect_YoloDetectServer_ids[2] =
+{
+ "::Ice::Object",
+ "::YoloDetect::YoloDetectServer"
+};
+
+}
+
+bool
+YoloDetect::YoloDetectServer::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+ return ::std::binary_search(iceC_YoloDetect_YoloDetectServer_ids, iceC_YoloDetect_YoloDetectServer_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+YoloDetect::YoloDetectServer::ice_ids(const ::Ice::Current&) const
+{
+ return ::std::vector< ::std::string>(&iceC_YoloDetect_YoloDetectServer_ids[0], &iceC_YoloDetect_YoloDetectServer_ids[2]);
+}
+
+const ::std::string&
+YoloDetect::YoloDetectServer::ice_id(const ::Ice::Current&) const
+{
+ return ice_staticId();
+}
+
+const ::std::string&
+YoloDetect::YoloDetectServer::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+ static const ::std::string typeId = "::YoloDetect::YoloDetectServer";
+ return typeId;
+#else
+ return iceC_YoloDetect_YoloDetectServer_ids[1];
+#endif
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceD_YoloDetect(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ ::Ice::InputStream* istr = inS.startReadParams();
+ ::Ice::Int iceP_width;
+ ::Ice::Int iceP_height;
+ ::std::string iceP_shareMemory;
+ istr->read(iceP_width);
+ istr->read(iceP_height);
+ istr->read(iceP_shareMemory);
+ inS.endReadParams();
+ ::YoloDetect::ObjInfos ret = this->YoloDetect(iceP_width, iceP_height, iceP_shareMemory, current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceD_getCocoData(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+ _iceCheckMode(::Ice::Normal, current.mode);
+ inS.readEmptyParams();
+ ::YoloDetect::stringData ret = this->getCocoData(current);
+ ::Ice::OutputStream* ostr = inS.startWriteParams();
+ ostr->write(ret);
+ inS.endWriteParams();
+ return true;
+}
+
+namespace
+{
+const ::std::string iceC_YoloDetect_YoloDetectServer_all[] =
+{
+ "YoloDetect",
+ "getCocoData",
+ "ice_id",
+ "ice_ids",
+ "ice_isA",
+ "ice_ping"
+};
+
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+ ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_YoloDetect_YoloDetectServer_all, iceC_YoloDetect_YoloDetectServer_all + 6, current.operation);
+ if(r.first == r.second)
+ {
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+
+ switch(r.first - iceC_YoloDetect_YoloDetectServer_all)
+ {
+ case 0:
+ {
+ return _iceD_YoloDetect(in, current);
+ }
+ case 1:
+ {
+ return _iceD_getCocoData(in, current);
+ }
+ case 2:
+ {
+ return _iceD_ice_id(in, current);
+ }
+ case 3:
+ {
+ return _iceD_ice_ids(in, current);
+ }
+ case 4:
+ {
+ return _iceD_ice_isA(in, current);
+ }
+ case 5:
+ {
+ return _iceD_ice_ping(in, current);
+ }
+ default:
+ {
+ assert(false);
+ throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+ }
+ }
+}
+
+void
+YoloDetect::YoloDetectServer::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+ ostr->startSlice(ice_staticId(), -1, true);
+ Ice::StreamWriter< ::YoloDetect::YoloDetectServer, ::Ice::OutputStream>::write(ostr, *this);
+ ostr->endSlice();
+}
+
+void
+YoloDetect::YoloDetectServer::_iceReadImpl(::Ice::InputStream* istr)
+{
+ istr->startSlice();
+ Ice::StreamReader< ::YoloDetect::YoloDetectServer, ::Ice::InputStream>::read(istr, *this);
+ istr->endSlice();
+}
+
+void
+YoloDetect::_icePatchObjectPtr(YoloDetectServerPtr& handle, const ::Ice::ObjectPtr& v)
+{
+ handle = ::YoloDetect::YoloDetectServerPtr::dynamicCast(v);
+ if(v && !handle)
+ {
+ IceInternal::Ex::throwUOE(::YoloDetect::YoloDetectServer::ice_staticId(), v);
+ }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/YoloServer/rpc/YoloServer.h b/QiaoJiaSystem/YoloServer/rpc/YoloServer.h
new file mode 100644
index 0000000..abbebed
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/rpc/YoloServer.h
@@ -0,0 +1,731 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `YoloServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __YoloServer_h__
+#define __YoloServer_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+# if ICE_INT_VERSION / 100 != 307
+# error Ice version mismatch!
+# endif
+# if ICE_INT_VERSION % 100 > 50
+# error Beta header file detected
+# endif
+# if ICE_INT_VERSION % 100 < 0
+# error Ice patch level mismatch!
+# endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace YoloDetect
+{
+
+class YoloDetectServer;
+class YoloDetectServerPrx;
+
+}
+
+namespace YoloDetect
+{
+
+struct RECT
+{
+ float left;
+ float top;
+ float right;
+ float bottom;
+
+ std::tuple<const float&, const float&, const float&, const float&> ice_tuple() const
+ {
+ return std::tie(left, top, right, bottom);
+ }
+};
+
+struct ObjInfo
+{
+ int type;
+ float prob;
+ ::YoloDetect::RECT rcObj;
+
+ std::tuple<const int&, const float&, const ::YoloDetect::RECT&> ice_tuple() const
+ {
+ return std::tie(type, prob, rcObj);
+ }
+};
+
+using ObjInfos = ::std::vector<::YoloDetect::ObjInfo>;
+
+using stringData = ::std::vector<::std::string>;
+
+using Ice::operator<;
+using Ice::operator<=;
+using Ice::operator>;
+using Ice::operator>=;
+using Ice::operator==;
+using Ice::operator!=;
+
+}
+
+namespace YoloDetect
+{
+
+class YoloDetectServer : public virtual ::Ice::Object
+{
+public:
+
+ using ProxyType = YoloDetectServerPrx;
+
+ virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+ virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+ virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::YoloDetect::ObjInfos YoloDetect(int, int, ::std::string, const ::Ice::Current&) = 0;
+ bool _iceD_YoloDetect(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::YoloDetect::stringData getCocoData(const ::Ice::Current&) = 0;
+ bool _iceD_getCocoData(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace YoloDetect
+{
+
+class YoloDetectServerPrx : public virtual ::Ice::Proxy<YoloDetectServerPrx, ::Ice::ObjectPrx>
+{
+public:
+
+ ::YoloDetect::ObjInfos YoloDetect(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::YoloDetect::ObjInfos>(true, this, &YoloDetect::YoloDetectServerPrx::_iceI_YoloDetect, iceP_width, iceP_height, iceP_shareMemory, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto YoloDetectAsync(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::YoloDetect::ObjInfos>>().get_future())
+ {
+ return _makePromiseOutgoing<::YoloDetect::ObjInfos, P>(false, this, &YoloDetect::YoloDetectServerPrx::_iceI_YoloDetect, iceP_width, iceP_height, iceP_shareMemory, context);
+ }
+
+ ::std::function<void()>
+ YoloDetectAsync(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory,
+ ::std::function<void(::YoloDetect::ObjInfos)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::YoloDetect::ObjInfos>(response, ex, sent, this, &YoloDetect::YoloDetectServerPrx::_iceI_YoloDetect, iceP_width, iceP_height, iceP_shareMemory, context);
+ }
+
+ void _iceI_YoloDetect(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::YoloDetect::ObjInfos>>&, int, int, const ::std::string&, const ::Ice::Context&);
+
+ ::YoloDetect::stringData getCocoData(const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makePromiseOutgoing<::YoloDetect::stringData>(true, this, &YoloDetect::YoloDetectServerPrx::_iceI_getCocoData, context).get();
+ }
+
+ template<template<typename> class P = ::std::promise>
+ auto getCocoDataAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+ -> decltype(::std::declval<P<::YoloDetect::stringData>>().get_future())
+ {
+ return _makePromiseOutgoing<::YoloDetect::stringData, P>(false, this, &YoloDetect::YoloDetectServerPrx::_iceI_getCocoData, context);
+ }
+
+ ::std::function<void()>
+ getCocoDataAsync(::std::function<void(::YoloDetect::stringData)> response,
+ ::std::function<void(::std::exception_ptr)> ex = nullptr,
+ ::std::function<void(bool)> sent = nullptr,
+ const ::Ice::Context& context = Ice::noExplicitContext)
+ {
+ return _makeLamdaOutgoing<::YoloDetect::stringData>(response, ex, sent, this, &YoloDetect::YoloDetectServerPrx::_iceI_getCocoData, context);
+ }
+
+ void _iceI_getCocoData(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::YoloDetect::stringData>>&, const ::Ice::Context&);
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ YoloDetectServerPrx() = default;
+ friend ::std::shared_ptr<YoloDetectServerPrx> IceInternal::createProxy<YoloDetectServerPrx>();
+
+ virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits<::YoloDetect::RECT>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 16;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::YoloDetect::RECT, S>
+{
+ static void read(S* istr, ::YoloDetect::RECT& v)
+ {
+ istr->readAll(v.left, v.top, v.right, v.bottom);
+ }
+};
+
+template<>
+struct StreamableTraits<::YoloDetect::ObjInfo>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 24;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::YoloDetect::ObjInfo, S>
+{
+ static void read(S* istr, ::YoloDetect::ObjInfo& v)
+ {
+ istr->readAll(v.type, v.prob, v.rcObj);
+ }
+};
+
+}
+
+namespace YoloDetect
+{
+
+using YoloDetectServerPtr = ::std::shared_ptr<YoloDetectServer>;
+using YoloDetectServerPrxPtr = ::std::shared_ptr<YoloDetectServerPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace YoloDetect
+{
+
+class YoloDetectServer;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::YoloDetect::YoloDetectServer>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::YoloDetect::YoloDetectServer*);
+
+}
+
+}
+
+namespace YoloDetect
+{
+
+class YoloDetectServer;
+::Ice::Object* upCast(::YoloDetect::YoloDetectServer*);
+typedef ::IceInternal::Handle< ::YoloDetect::YoloDetectServer> YoloDetectServerPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::YoloDetect::YoloDetectServer> YoloDetectServerPrx;
+typedef YoloDetectServerPrx YoloDetectServerPrxPtr;
+void _icePatchObjectPtr(YoloDetectServerPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace YoloDetect
+{
+
+struct RECT
+{
+ ::Ice::Float left;
+ ::Ice::Float top;
+ ::Ice::Float right;
+ ::Ice::Float bottom;
+};
+
+struct ObjInfo
+{
+ ::Ice::Int type;
+ ::Ice::Float prob;
+ ::YoloDetect::RECT rcObj;
+};
+
+typedef ::std::vector< ::YoloDetect::ObjInfo> ObjInfos;
+
+typedef ::std::vector< ::std::string> stringData;
+
+}
+
+namespace YoloDetect
+{
+
+class Callback_YoloDetectServer_YoloDetect_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_YoloDetectServer_YoloDetect_Base> Callback_YoloDetectServer_YoloDetectPtr;
+
+class Callback_YoloDetectServer_getCocoData_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_YoloDetectServer_getCocoData_Base> Callback_YoloDetectServer_getCocoDataPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace YoloDetect
+{
+
+class YoloDetectServer : public virtual ::Ice::Proxy<YoloDetectServer, ::IceProxy::Ice::Object>
+{
+public:
+
+ ::YoloDetect::ObjInfos YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_YoloDetect(_iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::YoloDetect::Callback_YoloDetectServer_YoloDetectPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::YoloDetect::Callback_YoloDetectServer_YoloDetectPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, context, del, cookie);
+ }
+
+ ::YoloDetect::ObjInfos end_YoloDetect(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_YoloDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ ::YoloDetect::stringData getCocoData(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return end_getCocoData(_iceI_begin_getCocoData(context, ::IceInternal::dummyCallback, 0, true));
+ }
+
+ ::Ice::AsyncResultPtr begin_getCocoData(const ::Ice::Context& context = ::Ice::noExplicitContext)
+ {
+ return _iceI_begin_getCocoData(context, ::IceInternal::dummyCallback, 0);
+ }
+
+ ::Ice::AsyncResultPtr begin_getCocoData(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getCocoData(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getCocoData(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getCocoData(context, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getCocoData(const ::YoloDetect::Callback_YoloDetectServer_getCocoDataPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getCocoData(::Ice::noExplicitContext, del, cookie);
+ }
+
+ ::Ice::AsyncResultPtr begin_getCocoData(const ::Ice::Context& context, const ::YoloDetect::Callback_YoloDetectServer_getCocoDataPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+ {
+ return _iceI_begin_getCocoData(context, del, cookie);
+ }
+
+ ::YoloDetect::stringData end_getCocoData(const ::Ice::AsyncResultPtr&);
+
+private:
+
+ ::Ice::AsyncResultPtr _iceI_begin_getCocoData(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+ static const ::std::string& ice_staticId();
+
+protected:
+
+ virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace YoloDetect
+{
+
+class YoloDetectServer : public virtual ::Ice::Object
+{
+public:
+
+ typedef YoloDetectServerPrx ProxyType;
+ typedef YoloDetectServerPtr PointerType;
+
+ virtual ~YoloDetectServer();
+
+ virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+ virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+ static const ::std::string& ice_staticId();
+
+ virtual ::YoloDetect::ObjInfos YoloDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_YoloDetect(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual ::YoloDetect::stringData getCocoData(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+ bool _iceD_getCocoData(::IceInternal::Incoming&, const ::Ice::Current&);
+
+ virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+ virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+ virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const YoloDetectServer& lhs, const YoloDetectServer& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const YoloDetectServer& lhs, const YoloDetectServer& rhs)
+{
+ return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits< ::YoloDetect::RECT>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 16;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::YoloDetect::RECT, S>
+{
+ static void write(S* ostr, const ::YoloDetect::RECT& v)
+ {
+ ostr->write(v.left);
+ ostr->write(v.top);
+ ostr->write(v.right);
+ ostr->write(v.bottom);
+ }
+};
+
+template<typename S>
+struct StreamReader< ::YoloDetect::RECT, S>
+{
+ static void read(S* istr, ::YoloDetect::RECT& v)
+ {
+ istr->read(v.left);
+ istr->read(v.top);
+ istr->read(v.right);
+ istr->read(v.bottom);
+ }
+};
+
+template<>
+struct StreamableTraits< ::YoloDetect::ObjInfo>
+{
+ static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+ static const int minWireSize = 24;
+ static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::YoloDetect::ObjInfo, S>
+{
+ static void write(S* ostr, const ::YoloDetect::ObjInfo& v)
+ {
+ ostr->write(v.type);
+ ostr->write(v.prob);
+ ostr->write(v.rcObj);
+ }
+};
+
+template<typename S>
+struct StreamReader< ::YoloDetect::ObjInfo, S>
+{
+ static void read(S* istr, ::YoloDetect::ObjInfo& v)
+ {
+ istr->read(v.type);
+ istr->read(v.prob);
+ istr->read(v.rcObj);
+ }
+};
+
+}
+
+namespace YoloDetect
+{
+
+template<class T>
+class CallbackNC_YoloDetectServer_YoloDetect : public Callback_YoloDetectServer_YoloDetect_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::YoloDetect::ObjInfos&);
+
+ CallbackNC_YoloDetectServer_YoloDetect(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::YoloDetect::YoloDetectServerPrx proxy = ::YoloDetect::YoloDetectServerPrx::uncheckedCast(result->getProxy());
+ ::YoloDetect::ObjInfos ret;
+ try
+ {
+ ret = proxy->end_YoloDetect(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_YoloDetectServer_YoloDetectPtr
+newCallback_YoloDetectServer_YoloDetect(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::YoloDetect::ObjInfos&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_YoloDetectServer_YoloDetect<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_YoloDetectServer_YoloDetectPtr
+newCallback_YoloDetectServer_YoloDetect(T* instance, void (T::*cb)(const ::YoloDetect::ObjInfos&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_YoloDetectServer_YoloDetect<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_YoloDetectServer_YoloDetect : public Callback_YoloDetectServer_YoloDetect_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::YoloDetect::ObjInfos&, const CT&);
+
+ Callback_YoloDetectServer_YoloDetect(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::YoloDetect::YoloDetectServerPrx proxy = ::YoloDetect::YoloDetectServerPrx::uncheckedCast(result->getProxy());
+ ::YoloDetect::ObjInfos ret;
+ try
+ {
+ ret = proxy->end_YoloDetect(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_YoloDetectServer_YoloDetectPtr
+newCallback_YoloDetectServer_YoloDetect(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::YoloDetect::ObjInfos&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_YoloDetectServer_YoloDetect<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_YoloDetectServer_YoloDetectPtr
+newCallback_YoloDetectServer_YoloDetect(T* instance, void (T::*cb)(const ::YoloDetect::ObjInfos&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_YoloDetectServer_YoloDetect<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_YoloDetectServer_getCocoData : public Callback_YoloDetectServer_getCocoData_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception&);
+ typedef void (T::*Sent)(bool);
+ typedef void (T::*Response)(const ::YoloDetect::stringData&);
+
+ CallbackNC_YoloDetectServer_getCocoData(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::YoloDetect::YoloDetectServerPrx proxy = ::YoloDetect::YoloDetectServerPrx::uncheckedCast(result->getProxy());
+ ::YoloDetect::stringData ret;
+ try
+ {
+ ret = proxy->end_getCocoData(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::CallbackNC<T>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T> Callback_YoloDetectServer_getCocoDataPtr
+newCallback_YoloDetectServer_getCocoData(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::YoloDetect::stringData&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_YoloDetectServer_getCocoData<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_YoloDetectServer_getCocoDataPtr
+newCallback_YoloDetectServer_getCocoData(T* instance, void (T::*cb)(const ::YoloDetect::stringData&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+ return new CallbackNC_YoloDetectServer_getCocoData<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_YoloDetectServer_getCocoData : public Callback_YoloDetectServer_getCocoData_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+ typedef IceUtil::Handle<T> TPtr;
+
+ typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+ typedef void (T::*Sent)(bool , const CT&);
+ typedef void (T::*Response)(const ::YoloDetect::stringData&, const CT&);
+
+ Callback_YoloDetectServer_getCocoData(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+ : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+ {
+ }
+
+ virtual void completed(const ::Ice::AsyncResultPtr& result) const
+ {
+ ::YoloDetect::YoloDetectServerPrx proxy = ::YoloDetect::YoloDetectServerPrx::uncheckedCast(result->getProxy());
+ ::YoloDetect::stringData ret;
+ try
+ {
+ ret = proxy->end_getCocoData(result);
+ }
+ catch(const ::Ice::Exception& ex)
+ {
+ ::IceInternal::Callback<T, CT>::exception(result, ex);
+ return;
+ }
+ if(_response)
+ {
+ (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+ }
+ }
+
+private:
+
+ Response _response;
+};
+
+template<class T, typename CT> Callback_YoloDetectServer_getCocoDataPtr
+newCallback_YoloDetectServer_getCocoData(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::YoloDetect::stringData&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_YoloDetectServer_getCocoData<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_YoloDetectServer_getCocoDataPtr
+newCallback_YoloDetectServer_getCocoData(T* instance, void (T::*cb)(const ::YoloDetect::stringData&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+ return new Callback_YoloDetectServer_getCocoData<T, CT>(instance, cb, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/YoloServer/rpc/YoloServer.ice b/QiaoJiaSystem/YoloServer/rpc/YoloServer.ice
new file mode 100644
index 0000000..fe05ff8
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/rpc/YoloServer.ice
@@ -0,0 +1,27 @@
+module YoloDetect
+{
+ struct RECT
+ {
+ float left;
+ float top;
+ float right;
+ float bottom;
+ }
+
+ struct ObjInfo
+ {
+ int type;
+ float prob;
+ RECT rcObj;
+ }
+
+ sequence<ObjInfo> ObjInfos;
+
+ sequence<string> stringData;
+
+ interface YoloDetectServer
+ {
+ ObjInfos YoloDetect(int width, int height, string shareMemory);
+ stringData getCocoData();
+ }
+}
diff --git a/QiaoJiaSystem/YoloServer/rpc/gen.sh b/QiaoJiaSystem/YoloServer/rpc/gen.sh
new file mode 100644
index 0000000..140add8
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/rpc/gen.sh
@@ -0,0 +1 @@
+./../../../BasicPlatForm/libs/Ice-3.7.0/bin/slice2cpp YoloServer.ice
diff --git a/QiaoJiaSystem/build/DataWebServer b/QiaoJiaSystem/build/DataWebServer
new file mode 100644
index 0000000..0478e32
--- /dev/null
+++ b/QiaoJiaSystem/build/DataWebServer
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceDetectServer b/QiaoJiaSystem/build/FaceDetectServer
new file mode 100644
index 0000000..20ac800
--- /dev/null
+++ b/QiaoJiaSystem/build/FaceDetectServer
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceExtractServer b/QiaoJiaSystem/build/FaceExtractServer
new file mode 100644
index 0000000..3dd1825
--- /dev/null
+++ b/QiaoJiaSystem/build/FaceExtractServer
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceSearchServer b/QiaoJiaSystem/build/FaceSearchServer
new file mode 100644
index 0000000..35abdfb
--- /dev/null
+++ b/QiaoJiaSystem/build/FaceSearchServer
Binary files differ
diff --git a/QiaoJiaSystem/build/KeepRight b/QiaoJiaSystem/build/KeepRight
new file mode 100644
index 0000000..ee0badf
--- /dev/null
+++ b/QiaoJiaSystem/build/KeepRight
Binary files differ
diff --git a/QiaoJiaSystem/build/LocalDataDB b/QiaoJiaSystem/build/LocalDataDB
new file mode 100644
index 0000000..da85e28
--- /dev/null
+++ b/QiaoJiaSystem/build/LocalDataDB
Binary files differ
diff --git a/QiaoJiaSystem/build/PerimeterAlarm b/QiaoJiaSystem/build/PerimeterAlarm
new file mode 100644
index 0000000..138700a
--- /dev/null
+++ b/QiaoJiaSystem/build/PerimeterAlarm
Binary files differ
diff --git a/QiaoJiaSystem/build/StructureApp b/QiaoJiaSystem/build/StructureApp
new file mode 100644
index 0000000..ef51c15
--- /dev/null
+++ b/QiaoJiaSystem/build/StructureApp
Binary files differ
diff --git a/QiaoJiaSystem/build/VideoAnalysFromHC b/QiaoJiaSystem/build/VideoAnalysFromHC
new file mode 100644
index 0000000..0f10448
--- /dev/null
+++ b/QiaoJiaSystem/build/VideoAnalysFromHC
Binary files differ
diff --git a/QiaoJiaSystem/build/WebFDSClient.conf b/QiaoJiaSystem/build/WebFDSClient.conf
new file mode 100644
index 0000000..dbe42e9
--- /dev/null
+++ b/QiaoJiaSystem/build/WebFDSClient.conf
@@ -0,0 +1,62 @@
+# connect timeout in seconds
+# default value is 30s
+connect_timeout=30
+
+# network timeout in seconds
+# default value is 30s
+network_timeout=60
+
+# the base path to store log files
+base_path=fastdfs
+
+# tracker_server can ocur more than once, and tracker_server format is
+# "host:port", host can be hostname or ip address
+tracker_server=192.168.1.185:22122
+
+#standard log level as syslog, case insensitive, value list:
+### emerg for emergency
+### alert
+### crit for critical
+### error
+### warn for warning
+### notice
+### info
+### debug
+log_level=info
+
+# if use connection pool
+# default value is false
+# since V4.05
+use_connection_pool = false
+
+# connections whose the idle time exceeds this time will be closed
+# unit: second
+# default value is 3600
+# since V4.05
+connection_pool_max_idle_time = 3600
+
+# if load FastDFS parameters from tracker server
+# since V4.05
+# default value is false
+load_fdfs_parameters_from_tracker=false
+
+# if use storage ID instead of IP address
+# same as tracker.conf
+# valid only when load_fdfs_parameters_from_tracker is false
+# default value is false
+# since V4.05
+use_storage_id = false
+
+# specify storage ids filename, can use relative or absolute path
+# same as tracker.conf
+# valid only when load_fdfs_parameters_from_tracker is false
+# since V4.05
+storage_ids_filename = storage_ids.conf
+
+
+#HTTP settings
+http.tracker_server_port=80
+
+#use "#include" directive to include HTTP other settiongs
+##include http.conf
+
diff --git a/QiaoJiaSystem/build/cfg/coco.data b/QiaoJiaSystem/build/cfg/coco.data
new file mode 100644
index 0000000..d815bc5
--- /dev/null
+++ b/QiaoJiaSystem/build/cfg/coco.data
@@ -0,0 +1,8 @@
+classes= 1
+train = /home/pjreddie/data/coco/trainvalno5k.txt
+#valid = coco_testdev
+valid = data/coco_val_5k.list
+names = data/coco.names
+backup = /home/pjreddie/backup/
+eval=coco
+
diff --git a/QiaoJiaSystem/build/cfg/yolov3-voc.cfg b/QiaoJiaSystem/build/cfg/yolov3-voc.cfg
new file mode 100644
index 0000000..3f3e8df
--- /dev/null
+++ b/QiaoJiaSystem/build/cfg/yolov3-voc.cfg
@@ -0,0 +1,785 @@
+[net]
+# Testing
+ batch=1
+ subdivisions=1
+# Training
+# batch=64
+# subdivisions=16
+width=416
+height=416
+channels=3
+momentum=0.9
+decay=0.0005
+angle=0
+saturation = 1.5
+exposure = 1.5
+hue=.1
+
+learning_rate=0.001
+burn_in=1000
+max_batches = 50200
+policy=steps
+steps=40000,45000
+scales=.1,.1
+
+
+
+[convolutional]
+batch_normalize=1
+filters=32
+size=3
+stride=1
+pad=1
+activation=leaky
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=32
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+######################
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=75
+activation=linear
+
+[yolo]
+mask = 6,7,8
+anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
+classes=20
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[upsample]
+stride=2
+
+[route]
+layers = -1, 61
+
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=75
+activation=linear
+
+[yolo]
+mask = 3,4,5
+anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
+classes=20
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[upsample]
+stride=2
+
+[route]
+layers = -1, 36
+
+
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=75
+activation=linear
+
+[yolo]
+mask = 0,1,2
+anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
+classes=20
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
diff --git a/QiaoJiaSystem/build/cfg/yolov3.cfg b/QiaoJiaSystem/build/cfg/yolov3.cfg
new file mode 100644
index 0000000..5f3ab62
--- /dev/null
+++ b/QiaoJiaSystem/build/cfg/yolov3.cfg
@@ -0,0 +1,789 @@
+[net]
+# Testing
+batch=1
+subdivisions=1
+# Training
+# batch=64
+# subdivisions=16
+width=416
+height=416
+channels=3
+momentum=0.9
+decay=0.0005
+angle=0
+saturation = 1.5
+exposure = 1.5
+hue=.1
+
+learning_rate=0.001
+burn_in=1000
+max_batches = 500200
+policy=steps
+steps=400000,450000
+scales=.1,.1
+
+[convolutional]
+batch_normalize=1
+filters=32
+size=3
+stride=1
+pad=1
+activation=leaky
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=32
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+######################
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=255
+activation=linear
+
+
+[yolo]
+mask = 6,7,8
+anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
+classes=80
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[upsample]
+stride=2
+
+[route]
+layers = -1, 61
+
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=255
+activation=linear
+
+
+[yolo]
+mask = 3,4,5
+anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
+classes=80
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
+
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[upsample]
+stride=2
+
+[route]
+layers = -1, 36
+
+
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=255
+activation=linear
+
+
+[yolo]
+mask = 0,1,2
+anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
+classes=80
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
diff --git a/QiaoJiaSystem/build/config.db b/QiaoJiaSystem/build/config.db
new file mode 100644
index 0000000..26c9a27
--- /dev/null
+++ b/QiaoJiaSystem/build/config.db
Binary files differ
diff --git a/QiaoJiaSystem/build/config.json b/QiaoJiaSystem/build/config.json
new file mode 100644
index 0000000..4fbeb0f
--- /dev/null
+++ b/QiaoJiaSystem/build/config.json
@@ -0,0 +1,23 @@
+{
+ "mainServerIp": "192.168.1.203",
+ "mainServerPort": "3697",
+ "logPath": "/home/dell/work/log/",
+ "DEV_ID": "DSVAD010120181119",
+ "ES_IP": "192.168.1.122",
+ "ES_PORT": 9200,
+ "FaceSeachSleepTime": 60,
+ "TotalLoadSize": "500",
+ "buildAddr": "/home/dell/Apps/QiaoJiaSystem/build/",
+ "cutPath": "/home/dell/work/qiaojia/cut",
+ "erlCookie": "",
+ "erlFatherNode": "",
+ "erlNode": "",
+ "erlPath": "",
+ "loadPath": "/home/dell/work/qiaojia/load",
+ "localPasswd": "123456",
+ "netIfName": "eno1",
+ "srsAddr": "rtmp://192.168.1.122:1934/live/",
+ "webPort": 11111 ,
+ "redis_ip": "127.0.0.1",
+ "redis_buf_len" : 750
+}
diff --git "a/QiaoJiaSystem/build/configjson\350\257\264\346\230\216.txt" "b/QiaoJiaSystem/build/configjson\350\257\264\346\230\216.txt"
new file mode 100644
index 0000000..580e44a
--- /dev/null
+++ "b/QiaoJiaSystem/build/configjson\350\257\264\346\230\216.txt"
@@ -0,0 +1,16 @@
+{
+ "TotalLoadSize" : "70", //涓嬭浇鏂囦欢鐨勬渶澶у瓨鍌ㄧ┖闂�
+ "cutPath" : "/media/basic/000FD0310004A153/Qiaojia/cut/", //瑁佸壀鏂囦欢瀛樺偍鐩綍
+ "loadPath" : "/media/basic/000FD0310004A153/Qiaojia/load/", //涓嬭浇鏂囦欢瀛樺偍鐩綍
+ "erlCookie" : "123456", //erlang闆嗙兢鐨刢ookie
+ "erlFatherNode" : "wp1@192.168.1.181", //erlang闆嗙兢涓昏妭鐐�
+ "erlNode" : "wp5@192.168.1.181", //erlang鑺傜偣鍚嶇О
+ "erlPath" : "/opt/erlang/wp5", //erlang鑺傜偣鎵�鍦ㄨ矾寰�
+ "localPasswd" : "basic", //褰撳墠鏈哄櫒鐨勭敤鎴峰悕
+ "netIfName" : "enp8s0", //褰撳墠鏈哄櫒鐨勭綉缁滃悕锛屼究浜庢煡璇p鍦板潃绛�
+ "webPort" : 8088, //webserver缁檍ava鎺ュ彛鐨勭鍙�
+ "ES_IP":"192.168.1.181", //es闆嗙兢鐨刬p
+ "ES_PORT": 9200, //es闆嗙兢鐨勭鍙�
+ "srsAddr":"rtmp://192.168.1.181:1934/live/", //rtmp鎺ㄦ祦鐨勫熀纭�鍦板潃
+ "buildAddr":"~/Apps/QiaoJiaSystem/build/" //鎵ц鏂囦欢鐨勮矾寰�
+}
diff --git a/QiaoJiaSystem/build/data/coco.names b/QiaoJiaSystem/build/data/coco.names
new file mode 100644
index 0000000..ca76c80
--- /dev/null
+++ b/QiaoJiaSystem/build/data/coco.names
@@ -0,0 +1,80 @@
+person
+bicycle
+car
+motorbike
+aeroplane
+bus
+train
+truck
+boat
+traffic light
+fire hydrant
+stop sign
+parking meter
+bench
+bird
+cat
+dog
+horse
+sheep
+cow
+elephant
+bear
+zebra
+giraffe
+backpack
+umbrella
+handbag
+tie
+suitcase
+frisbee
+skis
+snowboard
+sports ball
+kite
+baseball bat
+baseball glove
+skateboard
+surfboard
+tennis racket
+bottle
+wine glass
+cup
+fork
+knife
+spoon
+bowl
+banana
+apple
+sandwich
+orange
+broccoli
+carrot
+hot dog
+pizza
+donut
+cake
+chair
+sofa
+pottedplant
+bed
+diningtable
+toilet
+tvmonitor
+laptop
+mouse
+remote
+keyboard
+cell phone
+microwave
+oven
+toaster
+sink
+refrigerator
+book
+clock
+vase
+scissors
+teddy bear
+hair drier
+toothbrush
diff --git a/QiaoJiaSystem/build/data/coco9k.map b/QiaoJiaSystem/build/data/coco9k.map
new file mode 100644
index 0000000..5155b65
--- /dev/null
+++ b/QiaoJiaSystem/build/data/coco9k.map
@@ -0,0 +1,80 @@
+5177
+3768
+3802
+3800
+4107
+4072
+4071
+3797
+4097
+2645
+5150
+2644
+3257
+2523
+6527
+6866
+6912
+7342
+7255
+7271
+7217
+6858
+7343
+7233
+3704
+4374
+3641
+5001
+3899
+2999
+2631
+5141
+2015
+1133
+1935
+1930
+5144
+5143
+2371
+3916
+3745
+3640
+4749
+4736
+4735
+3678
+58
+42
+771
+81
+152
+141
+786
+700
+218
+791
+2518
+2521
+3637
+2458
+2505
+2519
+3499
+2837
+3503
+2597
+3430
+2080
+5103
+5111
+5102
+3013
+5096
+1102
+3218
+4010
+2266
+1127
+5122
+2360
diff --git a/QiaoJiaSystem/build/data/labels/100_0.png b/QiaoJiaSystem/build/data/labels/100_0.png
new file mode 100644
index 0000000..77878ec
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_1.png b/QiaoJiaSystem/build/data/labels/100_1.png
new file mode 100644
index 0000000..86181c0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_2.png b/QiaoJiaSystem/build/data/labels/100_2.png
new file mode 100644
index 0000000..5d43046
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_3.png b/QiaoJiaSystem/build/data/labels/100_3.png
new file mode 100644
index 0000000..353401f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_4.png b/QiaoJiaSystem/build/data/labels/100_4.png
new file mode 100644
index 0000000..d22f891
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_5.png b/QiaoJiaSystem/build/data/labels/100_5.png
new file mode 100644
index 0000000..7f65183
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_6.png b/QiaoJiaSystem/build/data/labels/100_6.png
new file mode 100644
index 0000000..18eb173
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_7.png b/QiaoJiaSystem/build/data/labels/100_7.png
new file mode 100644
index 0000000..b45964b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_0.png b/QiaoJiaSystem/build/data/labels/101_0.png
new file mode 100644
index 0000000..8739bc7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_1.png b/QiaoJiaSystem/build/data/labels/101_1.png
new file mode 100644
index 0000000..5a39331
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_2.png b/QiaoJiaSystem/build/data/labels/101_2.png
new file mode 100644
index 0000000..c223477
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_3.png b/QiaoJiaSystem/build/data/labels/101_3.png
new file mode 100644
index 0000000..09f50e3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_4.png b/QiaoJiaSystem/build/data/labels/101_4.png
new file mode 100644
index 0000000..7d7960b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_5.png b/QiaoJiaSystem/build/data/labels/101_5.png
new file mode 100644
index 0000000..08d8003
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_6.png b/QiaoJiaSystem/build/data/labels/101_6.png
new file mode 100644
index 0000000..9d554db
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_7.png b/QiaoJiaSystem/build/data/labels/101_7.png
new file mode 100644
index 0000000..37855f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_0.png b/QiaoJiaSystem/build/data/labels/102_0.png
new file mode 100644
index 0000000..7b8b0fb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_1.png b/QiaoJiaSystem/build/data/labels/102_1.png
new file mode 100644
index 0000000..ade5aa5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_2.png b/QiaoJiaSystem/build/data/labels/102_2.png
new file mode 100644
index 0000000..2068f0b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_3.png b/QiaoJiaSystem/build/data/labels/102_3.png
new file mode 100644
index 0000000..00e494e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_4.png b/QiaoJiaSystem/build/data/labels/102_4.png
new file mode 100644
index 0000000..37637d3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_5.png b/QiaoJiaSystem/build/data/labels/102_5.png
new file mode 100644
index 0000000..a86b69b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_6.png b/QiaoJiaSystem/build/data/labels/102_6.png
new file mode 100644
index 0000000..7d6889e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_7.png b/QiaoJiaSystem/build/data/labels/102_7.png
new file mode 100644
index 0000000..a9a7381
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_0.png b/QiaoJiaSystem/build/data/labels/103_0.png
new file mode 100644
index 0000000..17cc959
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_1.png b/QiaoJiaSystem/build/data/labels/103_1.png
new file mode 100644
index 0000000..175794c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_2.png b/QiaoJiaSystem/build/data/labels/103_2.png
new file mode 100644
index 0000000..415038d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_3.png b/QiaoJiaSystem/build/data/labels/103_3.png
new file mode 100644
index 0000000..1101880
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_4.png b/QiaoJiaSystem/build/data/labels/103_4.png
new file mode 100644
index 0000000..b8bf32e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_5.png b/QiaoJiaSystem/build/data/labels/103_5.png
new file mode 100644
index 0000000..6c81a57
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_6.png b/QiaoJiaSystem/build/data/labels/103_6.png
new file mode 100644
index 0000000..ce580c0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_7.png b/QiaoJiaSystem/build/data/labels/103_7.png
new file mode 100644
index 0000000..1919f01
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_0.png b/QiaoJiaSystem/build/data/labels/104_0.png
new file mode 100644
index 0000000..4ce801b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_1.png b/QiaoJiaSystem/build/data/labels/104_1.png
new file mode 100644
index 0000000..cdc2ba6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_2.png b/QiaoJiaSystem/build/data/labels/104_2.png
new file mode 100644
index 0000000..aa88c84
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_3.png b/QiaoJiaSystem/build/data/labels/104_3.png
new file mode 100644
index 0000000..d574267
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_4.png b/QiaoJiaSystem/build/data/labels/104_4.png
new file mode 100644
index 0000000..71f9662
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_5.png b/QiaoJiaSystem/build/data/labels/104_5.png
new file mode 100644
index 0000000..3159b0e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_6.png b/QiaoJiaSystem/build/data/labels/104_6.png
new file mode 100644
index 0000000..018e0e1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_7.png b/QiaoJiaSystem/build/data/labels/104_7.png
new file mode 100644
index 0000000..39fbe16
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_0.png b/QiaoJiaSystem/build/data/labels/105_0.png
new file mode 100644
index 0000000..388be1a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_1.png b/QiaoJiaSystem/build/data/labels/105_1.png
new file mode 100644
index 0000000..284a130
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_2.png b/QiaoJiaSystem/build/data/labels/105_2.png
new file mode 100644
index 0000000..d378969
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_3.png b/QiaoJiaSystem/build/data/labels/105_3.png
new file mode 100644
index 0000000..f9ebb66
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_4.png b/QiaoJiaSystem/build/data/labels/105_4.png
new file mode 100644
index 0000000..afb260b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_5.png b/QiaoJiaSystem/build/data/labels/105_5.png
new file mode 100644
index 0000000..53274dd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_6.png b/QiaoJiaSystem/build/data/labels/105_6.png
new file mode 100644
index 0000000..6b952ea
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_7.png b/QiaoJiaSystem/build/data/labels/105_7.png
new file mode 100644
index 0000000..02b1b7d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_0.png b/QiaoJiaSystem/build/data/labels/106_0.png
new file mode 100644
index 0000000..7075259
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_1.png b/QiaoJiaSystem/build/data/labels/106_1.png
new file mode 100644
index 0000000..66e73ab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_2.png b/QiaoJiaSystem/build/data/labels/106_2.png
new file mode 100644
index 0000000..aaf88c6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_3.png b/QiaoJiaSystem/build/data/labels/106_3.png
new file mode 100644
index 0000000..bc6b981
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_4.png b/QiaoJiaSystem/build/data/labels/106_4.png
new file mode 100644
index 0000000..b662b7e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_5.png b/QiaoJiaSystem/build/data/labels/106_5.png
new file mode 100644
index 0000000..43b4561
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_6.png b/QiaoJiaSystem/build/data/labels/106_6.png
new file mode 100644
index 0000000..e667664
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_7.png b/QiaoJiaSystem/build/data/labels/106_7.png
new file mode 100644
index 0000000..727f3f6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_0.png b/QiaoJiaSystem/build/data/labels/107_0.png
new file mode 100644
index 0000000..9c8d836
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_1.png b/QiaoJiaSystem/build/data/labels/107_1.png
new file mode 100644
index 0000000..7dc3d2b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_2.png b/QiaoJiaSystem/build/data/labels/107_2.png
new file mode 100644
index 0000000..d27cf78
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_3.png b/QiaoJiaSystem/build/data/labels/107_3.png
new file mode 100644
index 0000000..04b6c22
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_4.png b/QiaoJiaSystem/build/data/labels/107_4.png
new file mode 100644
index 0000000..cbc4515
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_5.png b/QiaoJiaSystem/build/data/labels/107_5.png
new file mode 100644
index 0000000..bc9730c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_6.png b/QiaoJiaSystem/build/data/labels/107_6.png
new file mode 100644
index 0000000..ffbe415
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_7.png b/QiaoJiaSystem/build/data/labels/107_7.png
new file mode 100644
index 0000000..95f81a5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_0.png b/QiaoJiaSystem/build/data/labels/108_0.png
new file mode 100644
index 0000000..ce05b22
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_1.png b/QiaoJiaSystem/build/data/labels/108_1.png
new file mode 100644
index 0000000..70d3895
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_2.png b/QiaoJiaSystem/build/data/labels/108_2.png
new file mode 100644
index 0000000..7a95038
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_3.png b/QiaoJiaSystem/build/data/labels/108_3.png
new file mode 100644
index 0000000..81637b3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_4.png b/QiaoJiaSystem/build/data/labels/108_4.png
new file mode 100644
index 0000000..0ea83f2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_5.png b/QiaoJiaSystem/build/data/labels/108_5.png
new file mode 100644
index 0000000..98d79d8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_6.png b/QiaoJiaSystem/build/data/labels/108_6.png
new file mode 100644
index 0000000..25303aa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_7.png b/QiaoJiaSystem/build/data/labels/108_7.png
new file mode 100644
index 0000000..6fb03a5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_0.png b/QiaoJiaSystem/build/data/labels/109_0.png
new file mode 100644
index 0000000..8169faf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_1.png b/QiaoJiaSystem/build/data/labels/109_1.png
new file mode 100644
index 0000000..16bc989
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_2.png b/QiaoJiaSystem/build/data/labels/109_2.png
new file mode 100644
index 0000000..cf8cf63
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_3.png b/QiaoJiaSystem/build/data/labels/109_3.png
new file mode 100644
index 0000000..5f6757b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_4.png b/QiaoJiaSystem/build/data/labels/109_4.png
new file mode 100644
index 0000000..5d9fdab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_5.png b/QiaoJiaSystem/build/data/labels/109_5.png
new file mode 100644
index 0000000..be6b733
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_6.png b/QiaoJiaSystem/build/data/labels/109_6.png
new file mode 100644
index 0000000..a02a117
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_7.png b/QiaoJiaSystem/build/data/labels/109_7.png
new file mode 100644
index 0000000..1349d93
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_0.png b/QiaoJiaSystem/build/data/labels/110_0.png
new file mode 100644
index 0000000..49a2582
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_1.png b/QiaoJiaSystem/build/data/labels/110_1.png
new file mode 100644
index 0000000..10630cc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_2.png b/QiaoJiaSystem/build/data/labels/110_2.png
new file mode 100644
index 0000000..f9004da
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_3.png b/QiaoJiaSystem/build/data/labels/110_3.png
new file mode 100644
index 0000000..b0d6ae1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_4.png b/QiaoJiaSystem/build/data/labels/110_4.png
new file mode 100644
index 0000000..8f57528
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_5.png b/QiaoJiaSystem/build/data/labels/110_5.png
new file mode 100644
index 0000000..b335e49
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_6.png b/QiaoJiaSystem/build/data/labels/110_6.png
new file mode 100644
index 0000000..450fbb6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_7.png b/QiaoJiaSystem/build/data/labels/110_7.png
new file mode 100644
index 0000000..c7b4754
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_0.png b/QiaoJiaSystem/build/data/labels/111_0.png
new file mode 100644
index 0000000..a0e5883
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_1.png b/QiaoJiaSystem/build/data/labels/111_1.png
new file mode 100644
index 0000000..9c17d57
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_2.png b/QiaoJiaSystem/build/data/labels/111_2.png
new file mode 100644
index 0000000..4771086
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_3.png b/QiaoJiaSystem/build/data/labels/111_3.png
new file mode 100644
index 0000000..bfba021
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_4.png b/QiaoJiaSystem/build/data/labels/111_4.png
new file mode 100644
index 0000000..7a4aeda
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_5.png b/QiaoJiaSystem/build/data/labels/111_5.png
new file mode 100644
index 0000000..180a9c5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_6.png b/QiaoJiaSystem/build/data/labels/111_6.png
new file mode 100644
index 0000000..e1482cd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_7.png b/QiaoJiaSystem/build/data/labels/111_7.png
new file mode 100644
index 0000000..c9355d0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_0.png b/QiaoJiaSystem/build/data/labels/112_0.png
new file mode 100644
index 0000000..d732efe
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_1.png b/QiaoJiaSystem/build/data/labels/112_1.png
new file mode 100644
index 0000000..11243af
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_2.png b/QiaoJiaSystem/build/data/labels/112_2.png
new file mode 100644
index 0000000..c3c4220
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_3.png b/QiaoJiaSystem/build/data/labels/112_3.png
new file mode 100644
index 0000000..f830185
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_4.png b/QiaoJiaSystem/build/data/labels/112_4.png
new file mode 100644
index 0000000..a4b184a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_5.png b/QiaoJiaSystem/build/data/labels/112_5.png
new file mode 100644
index 0000000..02f97a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_6.png b/QiaoJiaSystem/build/data/labels/112_6.png
new file mode 100644
index 0000000..2001b39
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_7.png b/QiaoJiaSystem/build/data/labels/112_7.png
new file mode 100644
index 0000000..9a14a71
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_0.png b/QiaoJiaSystem/build/data/labels/113_0.png
new file mode 100644
index 0000000..e36c84e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_1.png b/QiaoJiaSystem/build/data/labels/113_1.png
new file mode 100644
index 0000000..4c81c21
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_2.png b/QiaoJiaSystem/build/data/labels/113_2.png
new file mode 100644
index 0000000..b29b8d0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_3.png b/QiaoJiaSystem/build/data/labels/113_3.png
new file mode 100644
index 0000000..6233584
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_4.png b/QiaoJiaSystem/build/data/labels/113_4.png
new file mode 100644
index 0000000..d1373f9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_5.png b/QiaoJiaSystem/build/data/labels/113_5.png
new file mode 100644
index 0000000..ecfa110
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_6.png b/QiaoJiaSystem/build/data/labels/113_6.png
new file mode 100644
index 0000000..c4e0d98
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_7.png b/QiaoJiaSystem/build/data/labels/113_7.png
new file mode 100644
index 0000000..55ac8cf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_0.png b/QiaoJiaSystem/build/data/labels/114_0.png
new file mode 100644
index 0000000..9d42671
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_1.png b/QiaoJiaSystem/build/data/labels/114_1.png
new file mode 100644
index 0000000..277eed4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_2.png b/QiaoJiaSystem/build/data/labels/114_2.png
new file mode 100644
index 0000000..9c18af3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_3.png b/QiaoJiaSystem/build/data/labels/114_3.png
new file mode 100644
index 0000000..412f320
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_4.png b/QiaoJiaSystem/build/data/labels/114_4.png
new file mode 100644
index 0000000..65912f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_5.png b/QiaoJiaSystem/build/data/labels/114_5.png
new file mode 100644
index 0000000..fdf7bd2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_6.png b/QiaoJiaSystem/build/data/labels/114_6.png
new file mode 100644
index 0000000..8f6b639
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_7.png b/QiaoJiaSystem/build/data/labels/114_7.png
new file mode 100644
index 0000000..acf9180
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_0.png b/QiaoJiaSystem/build/data/labels/115_0.png
new file mode 100644
index 0000000..4767c45
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_1.png b/QiaoJiaSystem/build/data/labels/115_1.png
new file mode 100644
index 0000000..79f5d39
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_2.png b/QiaoJiaSystem/build/data/labels/115_2.png
new file mode 100644
index 0000000..963c068
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_3.png b/QiaoJiaSystem/build/data/labels/115_3.png
new file mode 100644
index 0000000..bc0d24f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_4.png b/QiaoJiaSystem/build/data/labels/115_4.png
new file mode 100644
index 0000000..a39b0f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_5.png b/QiaoJiaSystem/build/data/labels/115_5.png
new file mode 100644
index 0000000..63e0078
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_6.png b/QiaoJiaSystem/build/data/labels/115_6.png
new file mode 100644
index 0000000..344ef84
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_7.png b/QiaoJiaSystem/build/data/labels/115_7.png
new file mode 100644
index 0000000..c6e743c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_0.png b/QiaoJiaSystem/build/data/labels/116_0.png
new file mode 100644
index 0000000..bf9b263
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_1.png b/QiaoJiaSystem/build/data/labels/116_1.png
new file mode 100644
index 0000000..2fb12a9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_2.png b/QiaoJiaSystem/build/data/labels/116_2.png
new file mode 100644
index 0000000..dd04491
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_3.png b/QiaoJiaSystem/build/data/labels/116_3.png
new file mode 100644
index 0000000..0314e85
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_4.png b/QiaoJiaSystem/build/data/labels/116_4.png
new file mode 100644
index 0000000..cf919a6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_5.png b/QiaoJiaSystem/build/data/labels/116_5.png
new file mode 100644
index 0000000..c9e04ed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_6.png b/QiaoJiaSystem/build/data/labels/116_6.png
new file mode 100644
index 0000000..1d0ab79
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_7.png b/QiaoJiaSystem/build/data/labels/116_7.png
new file mode 100644
index 0000000..1fcdaa6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_0.png b/QiaoJiaSystem/build/data/labels/117_0.png
new file mode 100644
index 0000000..917b4a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_1.png b/QiaoJiaSystem/build/data/labels/117_1.png
new file mode 100644
index 0000000..59cae8a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_2.png b/QiaoJiaSystem/build/data/labels/117_2.png
new file mode 100644
index 0000000..d7c7f33
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_3.png b/QiaoJiaSystem/build/data/labels/117_3.png
new file mode 100644
index 0000000..18679c3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_4.png b/QiaoJiaSystem/build/data/labels/117_4.png
new file mode 100644
index 0000000..bceedf9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_5.png b/QiaoJiaSystem/build/data/labels/117_5.png
new file mode 100644
index 0000000..c0bddab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_6.png b/QiaoJiaSystem/build/data/labels/117_6.png
new file mode 100644
index 0000000..731fd14
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_7.png b/QiaoJiaSystem/build/data/labels/117_7.png
new file mode 100644
index 0000000..c04ed0b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_0.png b/QiaoJiaSystem/build/data/labels/118_0.png
new file mode 100644
index 0000000..4b8dfc6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_1.png b/QiaoJiaSystem/build/data/labels/118_1.png
new file mode 100644
index 0000000..fa886ac
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_2.png b/QiaoJiaSystem/build/data/labels/118_2.png
new file mode 100644
index 0000000..958ff5e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_3.png b/QiaoJiaSystem/build/data/labels/118_3.png
new file mode 100644
index 0000000..241b788
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_4.png b/QiaoJiaSystem/build/data/labels/118_4.png
new file mode 100644
index 0000000..9399152
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_5.png b/QiaoJiaSystem/build/data/labels/118_5.png
new file mode 100644
index 0000000..279c954
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_6.png b/QiaoJiaSystem/build/data/labels/118_6.png
new file mode 100644
index 0000000..9379cb9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_7.png b/QiaoJiaSystem/build/data/labels/118_7.png
new file mode 100644
index 0000000..b34ca8a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_0.png b/QiaoJiaSystem/build/data/labels/119_0.png
new file mode 100644
index 0000000..ae03b91
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_1.png b/QiaoJiaSystem/build/data/labels/119_1.png
new file mode 100644
index 0000000..7794fb6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_2.png b/QiaoJiaSystem/build/data/labels/119_2.png
new file mode 100644
index 0000000..976c49b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_3.png b/QiaoJiaSystem/build/data/labels/119_3.png
new file mode 100644
index 0000000..2e0160e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_4.png b/QiaoJiaSystem/build/data/labels/119_4.png
new file mode 100644
index 0000000..0540927
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_5.png b/QiaoJiaSystem/build/data/labels/119_5.png
new file mode 100644
index 0000000..4649a59
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_6.png b/QiaoJiaSystem/build/data/labels/119_6.png
new file mode 100644
index 0000000..eb5e0fb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_7.png b/QiaoJiaSystem/build/data/labels/119_7.png
new file mode 100644
index 0000000..5615e77
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_0.png b/QiaoJiaSystem/build/data/labels/120_0.png
new file mode 100644
index 0000000..64fd621
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_1.png b/QiaoJiaSystem/build/data/labels/120_1.png
new file mode 100644
index 0000000..e13ecef
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_2.png b/QiaoJiaSystem/build/data/labels/120_2.png
new file mode 100644
index 0000000..b6ae604
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_3.png b/QiaoJiaSystem/build/data/labels/120_3.png
new file mode 100644
index 0000000..13a4c3c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_4.png b/QiaoJiaSystem/build/data/labels/120_4.png
new file mode 100644
index 0000000..af550a8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_5.png b/QiaoJiaSystem/build/data/labels/120_5.png
new file mode 100644
index 0000000..38474e4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_6.png b/QiaoJiaSystem/build/data/labels/120_6.png
new file mode 100644
index 0000000..e356cde
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_7.png b/QiaoJiaSystem/build/data/labels/120_7.png
new file mode 100644
index 0000000..5a585b4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_0.png b/QiaoJiaSystem/build/data/labels/121_0.png
new file mode 100644
index 0000000..2c20381
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_1.png b/QiaoJiaSystem/build/data/labels/121_1.png
new file mode 100644
index 0000000..820c17d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_2.png b/QiaoJiaSystem/build/data/labels/121_2.png
new file mode 100644
index 0000000..fabda00
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_3.png b/QiaoJiaSystem/build/data/labels/121_3.png
new file mode 100644
index 0000000..79ac0b1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_4.png b/QiaoJiaSystem/build/data/labels/121_4.png
new file mode 100644
index 0000000..7ded729
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_5.png b/QiaoJiaSystem/build/data/labels/121_5.png
new file mode 100644
index 0000000..5d59b5a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_6.png b/QiaoJiaSystem/build/data/labels/121_6.png
new file mode 100644
index 0000000..49a63f3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_7.png b/QiaoJiaSystem/build/data/labels/121_7.png
new file mode 100644
index 0000000..fea7b9e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_0.png b/QiaoJiaSystem/build/data/labels/122_0.png
new file mode 100644
index 0000000..76ed270
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_1.png b/QiaoJiaSystem/build/data/labels/122_1.png
new file mode 100644
index 0000000..57f2857
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_2.png b/QiaoJiaSystem/build/data/labels/122_2.png
new file mode 100644
index 0000000..d9f27cd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_3.png b/QiaoJiaSystem/build/data/labels/122_3.png
new file mode 100644
index 0000000..c065790
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_4.png b/QiaoJiaSystem/build/data/labels/122_4.png
new file mode 100644
index 0000000..62b891e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_5.png b/QiaoJiaSystem/build/data/labels/122_5.png
new file mode 100644
index 0000000..276222e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_6.png b/QiaoJiaSystem/build/data/labels/122_6.png
new file mode 100644
index 0000000..0b2924e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_7.png b/QiaoJiaSystem/build/data/labels/122_7.png
new file mode 100644
index 0000000..8708778
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_0.png b/QiaoJiaSystem/build/data/labels/123_0.png
new file mode 100644
index 0000000..95f92aa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_1.png b/QiaoJiaSystem/build/data/labels/123_1.png
new file mode 100644
index 0000000..e0e4fdd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_2.png b/QiaoJiaSystem/build/data/labels/123_2.png
new file mode 100644
index 0000000..6a9c0b0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_3.png b/QiaoJiaSystem/build/data/labels/123_3.png
new file mode 100644
index 0000000..8783377
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_4.png b/QiaoJiaSystem/build/data/labels/123_4.png
new file mode 100644
index 0000000..c9de4f7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_5.png b/QiaoJiaSystem/build/data/labels/123_5.png
new file mode 100644
index 0000000..8deaa3c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_6.png b/QiaoJiaSystem/build/data/labels/123_6.png
new file mode 100644
index 0000000..47ca880
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_7.png b/QiaoJiaSystem/build/data/labels/123_7.png
new file mode 100644
index 0000000..bf3a5d7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_0.png b/QiaoJiaSystem/build/data/labels/124_0.png
new file mode 100644
index 0000000..a54db7c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_1.png b/QiaoJiaSystem/build/data/labels/124_1.png
new file mode 100644
index 0000000..c545361
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_2.png b/QiaoJiaSystem/build/data/labels/124_2.png
new file mode 100644
index 0000000..c5a6a76
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_3.png b/QiaoJiaSystem/build/data/labels/124_3.png
new file mode 100644
index 0000000..37b9e82
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_4.png b/QiaoJiaSystem/build/data/labels/124_4.png
new file mode 100644
index 0000000..0521fe2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_5.png b/QiaoJiaSystem/build/data/labels/124_5.png
new file mode 100644
index 0000000..a5ad765
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_6.png b/QiaoJiaSystem/build/data/labels/124_6.png
new file mode 100644
index 0000000..2dbf0f1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_7.png b/QiaoJiaSystem/build/data/labels/124_7.png
new file mode 100644
index 0000000..0730ca0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_0.png b/QiaoJiaSystem/build/data/labels/125_0.png
new file mode 100644
index 0000000..67e37b2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_1.png b/QiaoJiaSystem/build/data/labels/125_1.png
new file mode 100644
index 0000000..4dc1ea5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_2.png b/QiaoJiaSystem/build/data/labels/125_2.png
new file mode 100644
index 0000000..6f3babe
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_3.png b/QiaoJiaSystem/build/data/labels/125_3.png
new file mode 100644
index 0000000..4c7a26c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_4.png b/QiaoJiaSystem/build/data/labels/125_4.png
new file mode 100644
index 0000000..149eaa9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_5.png b/QiaoJiaSystem/build/data/labels/125_5.png
new file mode 100644
index 0000000..8ae40f7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_6.png b/QiaoJiaSystem/build/data/labels/125_6.png
new file mode 100644
index 0000000..5893043
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_7.png b/QiaoJiaSystem/build/data/labels/125_7.png
new file mode 100644
index 0000000..47bd85b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_0.png b/QiaoJiaSystem/build/data/labels/126_0.png
new file mode 100644
index 0000000..f602708
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_1.png b/QiaoJiaSystem/build/data/labels/126_1.png
new file mode 100644
index 0000000..cb8b76e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_2.png b/QiaoJiaSystem/build/data/labels/126_2.png
new file mode 100644
index 0000000..ccef7a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_3.png b/QiaoJiaSystem/build/data/labels/126_3.png
new file mode 100644
index 0000000..9fcf7ab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_4.png b/QiaoJiaSystem/build/data/labels/126_4.png
new file mode 100644
index 0000000..d3f01bf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_5.png b/QiaoJiaSystem/build/data/labels/126_5.png
new file mode 100644
index 0000000..00c57f1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_6.png b/QiaoJiaSystem/build/data/labels/126_6.png
new file mode 100644
index 0000000..2c2dbb1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_7.png b/QiaoJiaSystem/build/data/labels/126_7.png
new file mode 100644
index 0000000..55ee5a7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_0.png b/QiaoJiaSystem/build/data/labels/32_0.png
new file mode 100644
index 0000000..22be2de
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_1.png b/QiaoJiaSystem/build/data/labels/32_1.png
new file mode 100644
index 0000000..21abfa4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_2.png b/QiaoJiaSystem/build/data/labels/32_2.png
new file mode 100644
index 0000000..eae41b9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_3.png b/QiaoJiaSystem/build/data/labels/32_3.png
new file mode 100644
index 0000000..fcc007e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_4.png b/QiaoJiaSystem/build/data/labels/32_4.png
new file mode 100644
index 0000000..f4c498c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_5.png b/QiaoJiaSystem/build/data/labels/32_5.png
new file mode 100644
index 0000000..16248c9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_6.png b/QiaoJiaSystem/build/data/labels/32_6.png
new file mode 100644
index 0000000..1e50183
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_7.png b/QiaoJiaSystem/build/data/labels/32_7.png
new file mode 100644
index 0000000..81bd1d5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_0.png b/QiaoJiaSystem/build/data/labels/33_0.png
new file mode 100644
index 0000000..d1a1141
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_1.png b/QiaoJiaSystem/build/data/labels/33_1.png
new file mode 100644
index 0000000..a13dd33
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_2.png b/QiaoJiaSystem/build/data/labels/33_2.png
new file mode 100644
index 0000000..57201b2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_3.png b/QiaoJiaSystem/build/data/labels/33_3.png
new file mode 100644
index 0000000..0210160
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_4.png b/QiaoJiaSystem/build/data/labels/33_4.png
new file mode 100644
index 0000000..fd181d1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_5.png b/QiaoJiaSystem/build/data/labels/33_5.png
new file mode 100644
index 0000000..ed4387a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_6.png b/QiaoJiaSystem/build/data/labels/33_6.png
new file mode 100644
index 0000000..1126292
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_7.png b/QiaoJiaSystem/build/data/labels/33_7.png
new file mode 100644
index 0000000..1d67d55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_0.png b/QiaoJiaSystem/build/data/labels/34_0.png
new file mode 100644
index 0000000..7b24cfa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_1.png b/QiaoJiaSystem/build/data/labels/34_1.png
new file mode 100644
index 0000000..39f7edc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_2.png b/QiaoJiaSystem/build/data/labels/34_2.png
new file mode 100644
index 0000000..00c4e87
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_3.png b/QiaoJiaSystem/build/data/labels/34_3.png
new file mode 100644
index 0000000..79d5176
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_4.png b/QiaoJiaSystem/build/data/labels/34_4.png
new file mode 100644
index 0000000..d524830
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_5.png b/QiaoJiaSystem/build/data/labels/34_5.png
new file mode 100644
index 0000000..25a7e43
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_6.png b/QiaoJiaSystem/build/data/labels/34_6.png
new file mode 100644
index 0000000..bf3b613
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_7.png b/QiaoJiaSystem/build/data/labels/34_7.png
new file mode 100644
index 0000000..1148f2d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_0.png b/QiaoJiaSystem/build/data/labels/35_0.png
new file mode 100644
index 0000000..ff572a8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_1.png b/QiaoJiaSystem/build/data/labels/35_1.png
new file mode 100644
index 0000000..1bba494
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_2.png b/QiaoJiaSystem/build/data/labels/35_2.png
new file mode 100644
index 0000000..b7d708e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_3.png b/QiaoJiaSystem/build/data/labels/35_3.png
new file mode 100644
index 0000000..302cc73
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_4.png b/QiaoJiaSystem/build/data/labels/35_4.png
new file mode 100644
index 0000000..9e11a20
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_5.png b/QiaoJiaSystem/build/data/labels/35_5.png
new file mode 100644
index 0000000..9ab56b3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_6.png b/QiaoJiaSystem/build/data/labels/35_6.png
new file mode 100644
index 0000000..d75876c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_7.png b/QiaoJiaSystem/build/data/labels/35_7.png
new file mode 100644
index 0000000..1bbdc9f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_0.png b/QiaoJiaSystem/build/data/labels/36_0.png
new file mode 100644
index 0000000..929660a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_1.png b/QiaoJiaSystem/build/data/labels/36_1.png
new file mode 100644
index 0000000..646e770
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_2.png b/QiaoJiaSystem/build/data/labels/36_2.png
new file mode 100644
index 0000000..ba6603c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_3.png b/QiaoJiaSystem/build/data/labels/36_3.png
new file mode 100644
index 0000000..56e5ba3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_4.png b/QiaoJiaSystem/build/data/labels/36_4.png
new file mode 100644
index 0000000..e87046c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_5.png b/QiaoJiaSystem/build/data/labels/36_5.png
new file mode 100644
index 0000000..5a7672d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_6.png b/QiaoJiaSystem/build/data/labels/36_6.png
new file mode 100644
index 0000000..b16b2a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_7.png b/QiaoJiaSystem/build/data/labels/36_7.png
new file mode 100644
index 0000000..1f94312
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_0.png b/QiaoJiaSystem/build/data/labels/37_0.png
new file mode 100644
index 0000000..44b7f4e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_1.png b/QiaoJiaSystem/build/data/labels/37_1.png
new file mode 100644
index 0000000..36712dc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_2.png b/QiaoJiaSystem/build/data/labels/37_2.png
new file mode 100644
index 0000000..759aed9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_3.png b/QiaoJiaSystem/build/data/labels/37_3.png
new file mode 100644
index 0000000..03253dd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_4.png b/QiaoJiaSystem/build/data/labels/37_4.png
new file mode 100644
index 0000000..ed5e4bd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_5.png b/QiaoJiaSystem/build/data/labels/37_5.png
new file mode 100644
index 0000000..fe20590
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_6.png b/QiaoJiaSystem/build/data/labels/37_6.png
new file mode 100644
index 0000000..11f34eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_7.png b/QiaoJiaSystem/build/data/labels/37_7.png
new file mode 100644
index 0000000..dee9ba3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_0.png b/QiaoJiaSystem/build/data/labels/38_0.png
new file mode 100644
index 0000000..47c51e1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_1.png b/QiaoJiaSystem/build/data/labels/38_1.png
new file mode 100644
index 0000000..3abcc8b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_2.png b/QiaoJiaSystem/build/data/labels/38_2.png
new file mode 100644
index 0000000..47a85e9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_3.png b/QiaoJiaSystem/build/data/labels/38_3.png
new file mode 100644
index 0000000..1af926e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_4.png b/QiaoJiaSystem/build/data/labels/38_4.png
new file mode 100644
index 0000000..783342a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_5.png b/QiaoJiaSystem/build/data/labels/38_5.png
new file mode 100644
index 0000000..20b9222
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_6.png b/QiaoJiaSystem/build/data/labels/38_6.png
new file mode 100644
index 0000000..f68e4d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_7.png b/QiaoJiaSystem/build/data/labels/38_7.png
new file mode 100644
index 0000000..c6ffc54
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_0.png b/QiaoJiaSystem/build/data/labels/39_0.png
new file mode 100644
index 0000000..860f831
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_1.png b/QiaoJiaSystem/build/data/labels/39_1.png
new file mode 100644
index 0000000..021b232
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_2.png b/QiaoJiaSystem/build/data/labels/39_2.png
new file mode 100644
index 0000000..7ac7b15
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_3.png b/QiaoJiaSystem/build/data/labels/39_3.png
new file mode 100644
index 0000000..82baf94
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_4.png b/QiaoJiaSystem/build/data/labels/39_4.png
new file mode 100644
index 0000000..4fb4186
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_5.png b/QiaoJiaSystem/build/data/labels/39_5.png
new file mode 100644
index 0000000..1c613c5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_6.png b/QiaoJiaSystem/build/data/labels/39_6.png
new file mode 100644
index 0000000..e570bcd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_7.png b/QiaoJiaSystem/build/data/labels/39_7.png
new file mode 100644
index 0000000..5cb309f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_0.png b/QiaoJiaSystem/build/data/labels/40_0.png
new file mode 100644
index 0000000..346c633
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_1.png b/QiaoJiaSystem/build/data/labels/40_1.png
new file mode 100644
index 0000000..7dfa7b5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_2.png b/QiaoJiaSystem/build/data/labels/40_2.png
new file mode 100644
index 0000000..a2b0e0f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_3.png b/QiaoJiaSystem/build/data/labels/40_3.png
new file mode 100644
index 0000000..f727425
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_4.png b/QiaoJiaSystem/build/data/labels/40_4.png
new file mode 100644
index 0000000..4c89b55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_5.png b/QiaoJiaSystem/build/data/labels/40_5.png
new file mode 100644
index 0000000..35b4fcd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_6.png b/QiaoJiaSystem/build/data/labels/40_6.png
new file mode 100644
index 0000000..215972b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_7.png b/QiaoJiaSystem/build/data/labels/40_7.png
new file mode 100644
index 0000000..0d8eb55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_0.png b/QiaoJiaSystem/build/data/labels/41_0.png
new file mode 100644
index 0000000..42dd387
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_1.png b/QiaoJiaSystem/build/data/labels/41_1.png
new file mode 100644
index 0000000..0e1da96
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_2.png b/QiaoJiaSystem/build/data/labels/41_2.png
new file mode 100644
index 0000000..31cf47d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_3.png b/QiaoJiaSystem/build/data/labels/41_3.png
new file mode 100644
index 0000000..e512186
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_4.png b/QiaoJiaSystem/build/data/labels/41_4.png
new file mode 100644
index 0000000..150cb57
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_5.png b/QiaoJiaSystem/build/data/labels/41_5.png
new file mode 100644
index 0000000..7ac1a18
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_6.png b/QiaoJiaSystem/build/data/labels/41_6.png
new file mode 100644
index 0000000..4bdd2f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_7.png b/QiaoJiaSystem/build/data/labels/41_7.png
new file mode 100644
index 0000000..50568ba
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_0.png b/QiaoJiaSystem/build/data/labels/42_0.png
new file mode 100644
index 0000000..f41cd84
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_1.png b/QiaoJiaSystem/build/data/labels/42_1.png
new file mode 100644
index 0000000..4aee8e6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_2.png b/QiaoJiaSystem/build/data/labels/42_2.png
new file mode 100644
index 0000000..e045f1d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_3.png b/QiaoJiaSystem/build/data/labels/42_3.png
new file mode 100644
index 0000000..edc194b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_4.png b/QiaoJiaSystem/build/data/labels/42_4.png
new file mode 100644
index 0000000..e417c3e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_5.png b/QiaoJiaSystem/build/data/labels/42_5.png
new file mode 100644
index 0000000..d6593c6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_6.png b/QiaoJiaSystem/build/data/labels/42_6.png
new file mode 100644
index 0000000..ffcaaed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_7.png b/QiaoJiaSystem/build/data/labels/42_7.png
new file mode 100644
index 0000000..4895af7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_0.png b/QiaoJiaSystem/build/data/labels/43_0.png
new file mode 100644
index 0000000..af5295e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_1.png b/QiaoJiaSystem/build/data/labels/43_1.png
new file mode 100644
index 0000000..0e20f34
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_2.png b/QiaoJiaSystem/build/data/labels/43_2.png
new file mode 100644
index 0000000..be2fbb3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_3.png b/QiaoJiaSystem/build/data/labels/43_3.png
new file mode 100644
index 0000000..5183eb1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_4.png b/QiaoJiaSystem/build/data/labels/43_4.png
new file mode 100644
index 0000000..526b500
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_5.png b/QiaoJiaSystem/build/data/labels/43_5.png
new file mode 100644
index 0000000..03d62ff
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_6.png b/QiaoJiaSystem/build/data/labels/43_6.png
new file mode 100644
index 0000000..b245a4c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_7.png b/QiaoJiaSystem/build/data/labels/43_7.png
new file mode 100644
index 0000000..e21688a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_0.png b/QiaoJiaSystem/build/data/labels/44_0.png
new file mode 100644
index 0000000..63e66ff
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_1.png b/QiaoJiaSystem/build/data/labels/44_1.png
new file mode 100644
index 0000000..49f2fe2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_2.png b/QiaoJiaSystem/build/data/labels/44_2.png
new file mode 100644
index 0000000..32fd2de
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_3.png b/QiaoJiaSystem/build/data/labels/44_3.png
new file mode 100644
index 0000000..bb1118f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_4.png b/QiaoJiaSystem/build/data/labels/44_4.png
new file mode 100644
index 0000000..cd80bbd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_5.png b/QiaoJiaSystem/build/data/labels/44_5.png
new file mode 100644
index 0000000..f83e115
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_6.png b/QiaoJiaSystem/build/data/labels/44_6.png
new file mode 100644
index 0000000..1f8ad89
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_7.png b/QiaoJiaSystem/build/data/labels/44_7.png
new file mode 100644
index 0000000..8c5d632
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_0.png b/QiaoJiaSystem/build/data/labels/45_0.png
new file mode 100644
index 0000000..701bdc8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_1.png b/QiaoJiaSystem/build/data/labels/45_1.png
new file mode 100644
index 0000000..976103f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_2.png b/QiaoJiaSystem/build/data/labels/45_2.png
new file mode 100644
index 0000000..4bc50cf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_3.png b/QiaoJiaSystem/build/data/labels/45_3.png
new file mode 100644
index 0000000..335c2c7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_4.png b/QiaoJiaSystem/build/data/labels/45_4.png
new file mode 100644
index 0000000..8fc2738
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_5.png b/QiaoJiaSystem/build/data/labels/45_5.png
new file mode 100644
index 0000000..acc4c09
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_6.png b/QiaoJiaSystem/build/data/labels/45_6.png
new file mode 100644
index 0000000..0077104
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_7.png b/QiaoJiaSystem/build/data/labels/45_7.png
new file mode 100644
index 0000000..d486ccd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_0.png b/QiaoJiaSystem/build/data/labels/46_0.png
new file mode 100644
index 0000000..44fa798
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_1.png b/QiaoJiaSystem/build/data/labels/46_1.png
new file mode 100644
index 0000000..0f35bbb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_2.png b/QiaoJiaSystem/build/data/labels/46_2.png
new file mode 100644
index 0000000..e3355f5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_3.png b/QiaoJiaSystem/build/data/labels/46_3.png
new file mode 100644
index 0000000..9226458
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_4.png b/QiaoJiaSystem/build/data/labels/46_4.png
new file mode 100644
index 0000000..77a841c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_5.png b/QiaoJiaSystem/build/data/labels/46_5.png
new file mode 100644
index 0000000..e86cbaf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_6.png b/QiaoJiaSystem/build/data/labels/46_6.png
new file mode 100644
index 0000000..5011ded
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_7.png b/QiaoJiaSystem/build/data/labels/46_7.png
new file mode 100644
index 0000000..53c8871
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_0.png b/QiaoJiaSystem/build/data/labels/47_0.png
new file mode 100644
index 0000000..9b7c050
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_1.png b/QiaoJiaSystem/build/data/labels/47_1.png
new file mode 100644
index 0000000..75ba112
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_2.png b/QiaoJiaSystem/build/data/labels/47_2.png
new file mode 100644
index 0000000..2f07656
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_3.png b/QiaoJiaSystem/build/data/labels/47_3.png
new file mode 100644
index 0000000..3fd0728
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_4.png b/QiaoJiaSystem/build/data/labels/47_4.png
new file mode 100644
index 0000000..9e503eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_5.png b/QiaoJiaSystem/build/data/labels/47_5.png
new file mode 100644
index 0000000..fddef15
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_6.png b/QiaoJiaSystem/build/data/labels/47_6.png
new file mode 100644
index 0000000..0117b55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_7.png b/QiaoJiaSystem/build/data/labels/47_7.png
new file mode 100644
index 0000000..fff1323
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_0.png b/QiaoJiaSystem/build/data/labels/48_0.png
new file mode 100644
index 0000000..4775310
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_1.png b/QiaoJiaSystem/build/data/labels/48_1.png
new file mode 100644
index 0000000..231cd3f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_2.png b/QiaoJiaSystem/build/data/labels/48_2.png
new file mode 100644
index 0000000..b653e9c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_3.png b/QiaoJiaSystem/build/data/labels/48_3.png
new file mode 100644
index 0000000..d148a75
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_4.png b/QiaoJiaSystem/build/data/labels/48_4.png
new file mode 100644
index 0000000..9e1b0d5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_5.png b/QiaoJiaSystem/build/data/labels/48_5.png
new file mode 100644
index 0000000..f554133
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_6.png b/QiaoJiaSystem/build/data/labels/48_6.png
new file mode 100644
index 0000000..d841928
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_7.png b/QiaoJiaSystem/build/data/labels/48_7.png
new file mode 100644
index 0000000..145ed36
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_0.png b/QiaoJiaSystem/build/data/labels/49_0.png
new file mode 100644
index 0000000..f979710
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_1.png b/QiaoJiaSystem/build/data/labels/49_1.png
new file mode 100644
index 0000000..0cb26d4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_2.png b/QiaoJiaSystem/build/data/labels/49_2.png
new file mode 100644
index 0000000..0684a71
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_3.png b/QiaoJiaSystem/build/data/labels/49_3.png
new file mode 100644
index 0000000..ce89eb7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_4.png b/QiaoJiaSystem/build/data/labels/49_4.png
new file mode 100644
index 0000000..a8f6b14
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_5.png b/QiaoJiaSystem/build/data/labels/49_5.png
new file mode 100644
index 0000000..c7e8033
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_6.png b/QiaoJiaSystem/build/data/labels/49_6.png
new file mode 100644
index 0000000..a091704
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_7.png b/QiaoJiaSystem/build/data/labels/49_7.png
new file mode 100644
index 0000000..f385b75
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_0.png b/QiaoJiaSystem/build/data/labels/50_0.png
new file mode 100644
index 0000000..6af169d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_1.png b/QiaoJiaSystem/build/data/labels/50_1.png
new file mode 100644
index 0000000..a3c0300
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_2.png b/QiaoJiaSystem/build/data/labels/50_2.png
new file mode 100644
index 0000000..1ea6ff6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_3.png b/QiaoJiaSystem/build/data/labels/50_3.png
new file mode 100644
index 0000000..3c0bf1d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_4.png b/QiaoJiaSystem/build/data/labels/50_4.png
new file mode 100644
index 0000000..eb6a9d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_5.png b/QiaoJiaSystem/build/data/labels/50_5.png
new file mode 100644
index 0000000..acdb5ed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_6.png b/QiaoJiaSystem/build/data/labels/50_6.png
new file mode 100644
index 0000000..c74ac5a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_7.png b/QiaoJiaSystem/build/data/labels/50_7.png
new file mode 100644
index 0000000..6d3f530
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_0.png b/QiaoJiaSystem/build/data/labels/51_0.png
new file mode 100644
index 0000000..48bad97
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_1.png b/QiaoJiaSystem/build/data/labels/51_1.png
new file mode 100644
index 0000000..7703a74
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_2.png b/QiaoJiaSystem/build/data/labels/51_2.png
new file mode 100644
index 0000000..804e21b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_3.png b/QiaoJiaSystem/build/data/labels/51_3.png
new file mode 100644
index 0000000..5b08757
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_4.png b/QiaoJiaSystem/build/data/labels/51_4.png
new file mode 100644
index 0000000..30727fb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_5.png b/QiaoJiaSystem/build/data/labels/51_5.png
new file mode 100644
index 0000000..de240ea
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_6.png b/QiaoJiaSystem/build/data/labels/51_6.png
new file mode 100644
index 0000000..c252b01
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_7.png b/QiaoJiaSystem/build/data/labels/51_7.png
new file mode 100644
index 0000000..806f99b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_0.png b/QiaoJiaSystem/build/data/labels/52_0.png
new file mode 100644
index 0000000..a554b31
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_1.png b/QiaoJiaSystem/build/data/labels/52_1.png
new file mode 100644
index 0000000..936c84f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_2.png b/QiaoJiaSystem/build/data/labels/52_2.png
new file mode 100644
index 0000000..57e3f05
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_3.png b/QiaoJiaSystem/build/data/labels/52_3.png
new file mode 100644
index 0000000..6a8f99e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_4.png b/QiaoJiaSystem/build/data/labels/52_4.png
new file mode 100644
index 0000000..91f97f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_5.png b/QiaoJiaSystem/build/data/labels/52_5.png
new file mode 100644
index 0000000..a78504f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_6.png b/QiaoJiaSystem/build/data/labels/52_6.png
new file mode 100644
index 0000000..f52bd2c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_7.png b/QiaoJiaSystem/build/data/labels/52_7.png
new file mode 100644
index 0000000..621b8e0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_0.png b/QiaoJiaSystem/build/data/labels/53_0.png
new file mode 100644
index 0000000..a750615
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_1.png b/QiaoJiaSystem/build/data/labels/53_1.png
new file mode 100644
index 0000000..1c4e097
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_2.png b/QiaoJiaSystem/build/data/labels/53_2.png
new file mode 100644
index 0000000..f523856
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_3.png b/QiaoJiaSystem/build/data/labels/53_3.png
new file mode 100644
index 0000000..85505f8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_4.png b/QiaoJiaSystem/build/data/labels/53_4.png
new file mode 100644
index 0000000..14e8da1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_5.png b/QiaoJiaSystem/build/data/labels/53_5.png
new file mode 100644
index 0000000..79781fc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_6.png b/QiaoJiaSystem/build/data/labels/53_6.png
new file mode 100644
index 0000000..a6e1863
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_7.png b/QiaoJiaSystem/build/data/labels/53_7.png
new file mode 100644
index 0000000..bff5eb6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_0.png b/QiaoJiaSystem/build/data/labels/54_0.png
new file mode 100644
index 0000000..98ce423
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_1.png b/QiaoJiaSystem/build/data/labels/54_1.png
new file mode 100644
index 0000000..643ef36
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_2.png b/QiaoJiaSystem/build/data/labels/54_2.png
new file mode 100644
index 0000000..2c3894e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_3.png b/QiaoJiaSystem/build/data/labels/54_3.png
new file mode 100644
index 0000000..6190fdc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_4.png b/QiaoJiaSystem/build/data/labels/54_4.png
new file mode 100644
index 0000000..92afc20
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_5.png b/QiaoJiaSystem/build/data/labels/54_5.png
new file mode 100644
index 0000000..feab352
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_6.png b/QiaoJiaSystem/build/data/labels/54_6.png
new file mode 100644
index 0000000..c46698f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_7.png b/QiaoJiaSystem/build/data/labels/54_7.png
new file mode 100644
index 0000000..175dbeb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_0.png b/QiaoJiaSystem/build/data/labels/55_0.png
new file mode 100644
index 0000000..644838b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_1.png b/QiaoJiaSystem/build/data/labels/55_1.png
new file mode 100644
index 0000000..b84e0eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_2.png b/QiaoJiaSystem/build/data/labels/55_2.png
new file mode 100644
index 0000000..3896d08
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_3.png b/QiaoJiaSystem/build/data/labels/55_3.png
new file mode 100644
index 0000000..21e9266
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_4.png b/QiaoJiaSystem/build/data/labels/55_4.png
new file mode 100644
index 0000000..d6aed1b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_5.png b/QiaoJiaSystem/build/data/labels/55_5.png
new file mode 100644
index 0000000..1f60c36
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_6.png b/QiaoJiaSystem/build/data/labels/55_6.png
new file mode 100644
index 0000000..2a7f1fb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_7.png b/QiaoJiaSystem/build/data/labels/55_7.png
new file mode 100644
index 0000000..80c527b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_0.png b/QiaoJiaSystem/build/data/labels/56_0.png
new file mode 100644
index 0000000..8a1e0c7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_1.png b/QiaoJiaSystem/build/data/labels/56_1.png
new file mode 100644
index 0000000..a0a81a0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_2.png b/QiaoJiaSystem/build/data/labels/56_2.png
new file mode 100644
index 0000000..367f20e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_3.png b/QiaoJiaSystem/build/data/labels/56_3.png
new file mode 100644
index 0000000..cf56f8f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_4.png b/QiaoJiaSystem/build/data/labels/56_4.png
new file mode 100644
index 0000000..e57cce7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_5.png b/QiaoJiaSystem/build/data/labels/56_5.png
new file mode 100644
index 0000000..c206547
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_6.png b/QiaoJiaSystem/build/data/labels/56_6.png
new file mode 100644
index 0000000..040692a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_7.png b/QiaoJiaSystem/build/data/labels/56_7.png
new file mode 100644
index 0000000..4c27c10
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_0.png b/QiaoJiaSystem/build/data/labels/57_0.png
new file mode 100644
index 0000000..e20a46f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_1.png b/QiaoJiaSystem/build/data/labels/57_1.png
new file mode 100644
index 0000000..17cd262
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_2.png b/QiaoJiaSystem/build/data/labels/57_2.png
new file mode 100644
index 0000000..98fad29
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_3.png b/QiaoJiaSystem/build/data/labels/57_3.png
new file mode 100644
index 0000000..ba80aa0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_4.png b/QiaoJiaSystem/build/data/labels/57_4.png
new file mode 100644
index 0000000..e982243
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_5.png b/QiaoJiaSystem/build/data/labels/57_5.png
new file mode 100644
index 0000000..e947ff8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_6.png b/QiaoJiaSystem/build/data/labels/57_6.png
new file mode 100644
index 0000000..c4ae076
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_7.png b/QiaoJiaSystem/build/data/labels/57_7.png
new file mode 100644
index 0000000..bd4ca16
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_0.png b/QiaoJiaSystem/build/data/labels/58_0.png
new file mode 100644
index 0000000..d9e35f7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_1.png b/QiaoJiaSystem/build/data/labels/58_1.png
new file mode 100644
index 0000000..0dd6dd0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_2.png b/QiaoJiaSystem/build/data/labels/58_2.png
new file mode 100644
index 0000000..b9f1319
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_3.png b/QiaoJiaSystem/build/data/labels/58_3.png
new file mode 100644
index 0000000..0604337
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_4.png b/QiaoJiaSystem/build/data/labels/58_4.png
new file mode 100644
index 0000000..7283e03
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_5.png b/QiaoJiaSystem/build/data/labels/58_5.png
new file mode 100644
index 0000000..2df3db9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_6.png b/QiaoJiaSystem/build/data/labels/58_6.png
new file mode 100644
index 0000000..e120909
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_7.png b/QiaoJiaSystem/build/data/labels/58_7.png
new file mode 100644
index 0000000..e85fc0a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_0.png b/QiaoJiaSystem/build/data/labels/59_0.png
new file mode 100644
index 0000000..09b2120
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_1.png b/QiaoJiaSystem/build/data/labels/59_1.png
new file mode 100644
index 0000000..4b91814
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_2.png b/QiaoJiaSystem/build/data/labels/59_2.png
new file mode 100644
index 0000000..cc302c2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_3.png b/QiaoJiaSystem/build/data/labels/59_3.png
new file mode 100644
index 0000000..6921796
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_4.png b/QiaoJiaSystem/build/data/labels/59_4.png
new file mode 100644
index 0000000..4b77147
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_5.png b/QiaoJiaSystem/build/data/labels/59_5.png
new file mode 100644
index 0000000..4325e62
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_6.png b/QiaoJiaSystem/build/data/labels/59_6.png
new file mode 100644
index 0000000..135da33
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_7.png b/QiaoJiaSystem/build/data/labels/59_7.png
new file mode 100644
index 0000000..353ae33
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_0.png b/QiaoJiaSystem/build/data/labels/60_0.png
new file mode 100644
index 0000000..210e77d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_1.png b/QiaoJiaSystem/build/data/labels/60_1.png
new file mode 100644
index 0000000..507c736
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_2.png b/QiaoJiaSystem/build/data/labels/60_2.png
new file mode 100644
index 0000000..4227322
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_3.png b/QiaoJiaSystem/build/data/labels/60_3.png
new file mode 100644
index 0000000..ac4d026
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_4.png b/QiaoJiaSystem/build/data/labels/60_4.png
new file mode 100644
index 0000000..5cf89ed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_5.png b/QiaoJiaSystem/build/data/labels/60_5.png
new file mode 100644
index 0000000..5ceb7fe
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_6.png b/QiaoJiaSystem/build/data/labels/60_6.png
new file mode 100644
index 0000000..45121a7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_7.png b/QiaoJiaSystem/build/data/labels/60_7.png
new file mode 100644
index 0000000..33eb9e3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_0.png b/QiaoJiaSystem/build/data/labels/61_0.png
new file mode 100644
index 0000000..72bc6bf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_1.png b/QiaoJiaSystem/build/data/labels/61_1.png
new file mode 100644
index 0000000..50def57
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_2.png b/QiaoJiaSystem/build/data/labels/61_2.png
new file mode 100644
index 0000000..a0e9a67
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_3.png b/QiaoJiaSystem/build/data/labels/61_3.png
new file mode 100644
index 0000000..0b7d149
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_4.png b/QiaoJiaSystem/build/data/labels/61_4.png
new file mode 100644
index 0000000..c0b71d8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_5.png b/QiaoJiaSystem/build/data/labels/61_5.png
new file mode 100644
index 0000000..cf39e63
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_6.png b/QiaoJiaSystem/build/data/labels/61_6.png
new file mode 100644
index 0000000..95282d4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_7.png b/QiaoJiaSystem/build/data/labels/61_7.png
new file mode 100644
index 0000000..6da5c02
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_0.png b/QiaoJiaSystem/build/data/labels/62_0.png
new file mode 100644
index 0000000..bb12109
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_1.png b/QiaoJiaSystem/build/data/labels/62_1.png
new file mode 100644
index 0000000..5b82445
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_2.png b/QiaoJiaSystem/build/data/labels/62_2.png
new file mode 100644
index 0000000..d4ca5a6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_3.png b/QiaoJiaSystem/build/data/labels/62_3.png
new file mode 100644
index 0000000..24ddea8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_4.png b/QiaoJiaSystem/build/data/labels/62_4.png
new file mode 100644
index 0000000..34130a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_5.png b/QiaoJiaSystem/build/data/labels/62_5.png
new file mode 100644
index 0000000..823d996
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_6.png b/QiaoJiaSystem/build/data/labels/62_6.png
new file mode 100644
index 0000000..63dd85d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_7.png b/QiaoJiaSystem/build/data/labels/62_7.png
new file mode 100644
index 0000000..7c6158f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_0.png b/QiaoJiaSystem/build/data/labels/63_0.png
new file mode 100644
index 0000000..2d9571e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_1.png b/QiaoJiaSystem/build/data/labels/63_1.png
new file mode 100644
index 0000000..5376e07
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_2.png b/QiaoJiaSystem/build/data/labels/63_2.png
new file mode 100644
index 0000000..746ffa0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_3.png b/QiaoJiaSystem/build/data/labels/63_3.png
new file mode 100644
index 0000000..58bb35a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_4.png b/QiaoJiaSystem/build/data/labels/63_4.png
new file mode 100644
index 0000000..ff1dc1a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_5.png b/QiaoJiaSystem/build/data/labels/63_5.png
new file mode 100644
index 0000000..13e34ce
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_6.png b/QiaoJiaSystem/build/data/labels/63_6.png
new file mode 100644
index 0000000..9407c83
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_7.png b/QiaoJiaSystem/build/data/labels/63_7.png
new file mode 100644
index 0000000..e9c3edf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_0.png b/QiaoJiaSystem/build/data/labels/64_0.png
new file mode 100644
index 0000000..0a3a101
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_1.png b/QiaoJiaSystem/build/data/labels/64_1.png
new file mode 100644
index 0000000..6313960
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_2.png b/QiaoJiaSystem/build/data/labels/64_2.png
new file mode 100644
index 0000000..c49565c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_3.png b/QiaoJiaSystem/build/data/labels/64_3.png
new file mode 100644
index 0000000..c697f9b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_4.png b/QiaoJiaSystem/build/data/labels/64_4.png
new file mode 100644
index 0000000..de194c7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_5.png b/QiaoJiaSystem/build/data/labels/64_5.png
new file mode 100644
index 0000000..9905004
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_6.png b/QiaoJiaSystem/build/data/labels/64_6.png
new file mode 100644
index 0000000..7b91569
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_7.png b/QiaoJiaSystem/build/data/labels/64_7.png
new file mode 100644
index 0000000..b9ebcee
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_0.png b/QiaoJiaSystem/build/data/labels/65_0.png
new file mode 100644
index 0000000..c388066
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_1.png b/QiaoJiaSystem/build/data/labels/65_1.png
new file mode 100644
index 0000000..9f7d7f7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_2.png b/QiaoJiaSystem/build/data/labels/65_2.png
new file mode 100644
index 0000000..6f76694
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_3.png b/QiaoJiaSystem/build/data/labels/65_3.png
new file mode 100644
index 0000000..3593128
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_4.png b/QiaoJiaSystem/build/data/labels/65_4.png
new file mode 100644
index 0000000..23f4814
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_5.png b/QiaoJiaSystem/build/data/labels/65_5.png
new file mode 100644
index 0000000..8eae6d7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_6.png b/QiaoJiaSystem/build/data/labels/65_6.png
new file mode 100644
index 0000000..02fec76
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_7.png b/QiaoJiaSystem/build/data/labels/65_7.png
new file mode 100644
index 0000000..c80822e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_0.png b/QiaoJiaSystem/build/data/labels/66_0.png
new file mode 100644
index 0000000..278a401
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_1.png b/QiaoJiaSystem/build/data/labels/66_1.png
new file mode 100644
index 0000000..47c3735
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_2.png b/QiaoJiaSystem/build/data/labels/66_2.png
new file mode 100644
index 0000000..dfcf8c4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_3.png b/QiaoJiaSystem/build/data/labels/66_3.png
new file mode 100644
index 0000000..d8d69a7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_4.png b/QiaoJiaSystem/build/data/labels/66_4.png
new file mode 100644
index 0000000..842976a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_5.png b/QiaoJiaSystem/build/data/labels/66_5.png
new file mode 100644
index 0000000..991caf8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_6.png b/QiaoJiaSystem/build/data/labels/66_6.png
new file mode 100644
index 0000000..32c5284
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_7.png b/QiaoJiaSystem/build/data/labels/66_7.png
new file mode 100644
index 0000000..14e8609
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_0.png b/QiaoJiaSystem/build/data/labels/67_0.png
new file mode 100644
index 0000000..7f2786a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_1.png b/QiaoJiaSystem/build/data/labels/67_1.png
new file mode 100644
index 0000000..798b421
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_2.png b/QiaoJiaSystem/build/data/labels/67_2.png
new file mode 100644
index 0000000..802aaab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_3.png b/QiaoJiaSystem/build/data/labels/67_3.png
new file mode 100644
index 0000000..9d975ca
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_4.png b/QiaoJiaSystem/build/data/labels/67_4.png
new file mode 100644
index 0000000..94ee577
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_5.png b/QiaoJiaSystem/build/data/labels/67_5.png
new file mode 100644
index 0000000..021a877
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_6.png b/QiaoJiaSystem/build/data/labels/67_6.png
new file mode 100644
index 0000000..c358732
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_7.png b/QiaoJiaSystem/build/data/labels/67_7.png
new file mode 100644
index 0000000..46acdf2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_0.png b/QiaoJiaSystem/build/data/labels/68_0.png
new file mode 100644
index 0000000..9e86a2f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_1.png b/QiaoJiaSystem/build/data/labels/68_1.png
new file mode 100644
index 0000000..d7d3ac3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_2.png b/QiaoJiaSystem/build/data/labels/68_2.png
new file mode 100644
index 0000000..3a48f05
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_3.png b/QiaoJiaSystem/build/data/labels/68_3.png
new file mode 100644
index 0000000..808603a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_4.png b/QiaoJiaSystem/build/data/labels/68_4.png
new file mode 100644
index 0000000..d4f9bd4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_5.png b/QiaoJiaSystem/build/data/labels/68_5.png
new file mode 100644
index 0000000..25d8a96
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_6.png b/QiaoJiaSystem/build/data/labels/68_6.png
new file mode 100644
index 0000000..0059c7f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_7.png b/QiaoJiaSystem/build/data/labels/68_7.png
new file mode 100644
index 0000000..c2aa922
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_0.png b/QiaoJiaSystem/build/data/labels/69_0.png
new file mode 100644
index 0000000..51140e0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_1.png b/QiaoJiaSystem/build/data/labels/69_1.png
new file mode 100644
index 0000000..bcf7311
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_2.png b/QiaoJiaSystem/build/data/labels/69_2.png
new file mode 100644
index 0000000..582b289
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_3.png b/QiaoJiaSystem/build/data/labels/69_3.png
new file mode 100644
index 0000000..e331123
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_4.png b/QiaoJiaSystem/build/data/labels/69_4.png
new file mode 100644
index 0000000..a310f84
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_5.png b/QiaoJiaSystem/build/data/labels/69_5.png
new file mode 100644
index 0000000..ad69668
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_6.png b/QiaoJiaSystem/build/data/labels/69_6.png
new file mode 100644
index 0000000..a7b8f45
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_7.png b/QiaoJiaSystem/build/data/labels/69_7.png
new file mode 100644
index 0000000..7f3200c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_0.png b/QiaoJiaSystem/build/data/labels/70_0.png
new file mode 100644
index 0000000..e0fb76c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_1.png b/QiaoJiaSystem/build/data/labels/70_1.png
new file mode 100644
index 0000000..40c8217
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_2.png b/QiaoJiaSystem/build/data/labels/70_2.png
new file mode 100644
index 0000000..63c811b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_3.png b/QiaoJiaSystem/build/data/labels/70_3.png
new file mode 100644
index 0000000..7c93cf7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_4.png b/QiaoJiaSystem/build/data/labels/70_4.png
new file mode 100644
index 0000000..6033fb1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_5.png b/QiaoJiaSystem/build/data/labels/70_5.png
new file mode 100644
index 0000000..bfcf028
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_6.png b/QiaoJiaSystem/build/data/labels/70_6.png
new file mode 100644
index 0000000..5fe9cdb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_7.png b/QiaoJiaSystem/build/data/labels/70_7.png
new file mode 100644
index 0000000..027af86
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_0.png b/QiaoJiaSystem/build/data/labels/71_0.png
new file mode 100644
index 0000000..679b5e9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_1.png b/QiaoJiaSystem/build/data/labels/71_1.png
new file mode 100644
index 0000000..6f5271b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_2.png b/QiaoJiaSystem/build/data/labels/71_2.png
new file mode 100644
index 0000000..93dc749
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_3.png b/QiaoJiaSystem/build/data/labels/71_3.png
new file mode 100644
index 0000000..03a4bc6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_4.png b/QiaoJiaSystem/build/data/labels/71_4.png
new file mode 100644
index 0000000..3976418
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_5.png b/QiaoJiaSystem/build/data/labels/71_5.png
new file mode 100644
index 0000000..b0c4295
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_6.png b/QiaoJiaSystem/build/data/labels/71_6.png
new file mode 100644
index 0000000..bb8710d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_7.png b/QiaoJiaSystem/build/data/labels/71_7.png
new file mode 100644
index 0000000..68148a9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_0.png b/QiaoJiaSystem/build/data/labels/72_0.png
new file mode 100644
index 0000000..a2edd04
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_1.png b/QiaoJiaSystem/build/data/labels/72_1.png
new file mode 100644
index 0000000..f1e8bcd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_2.png b/QiaoJiaSystem/build/data/labels/72_2.png
new file mode 100644
index 0000000..a9516f1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_3.png b/QiaoJiaSystem/build/data/labels/72_3.png
new file mode 100644
index 0000000..5b94490
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_4.png b/QiaoJiaSystem/build/data/labels/72_4.png
new file mode 100644
index 0000000..83f7dbf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_5.png b/QiaoJiaSystem/build/data/labels/72_5.png
new file mode 100644
index 0000000..5a40ad3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_6.png b/QiaoJiaSystem/build/data/labels/72_6.png
new file mode 100644
index 0000000..b889837
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_7.png b/QiaoJiaSystem/build/data/labels/72_7.png
new file mode 100644
index 0000000..4ec34df
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_0.png b/QiaoJiaSystem/build/data/labels/73_0.png
new file mode 100644
index 0000000..e554432
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_1.png b/QiaoJiaSystem/build/data/labels/73_1.png
new file mode 100644
index 0000000..08d1924
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_2.png b/QiaoJiaSystem/build/data/labels/73_2.png
new file mode 100644
index 0000000..3c87085
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_3.png b/QiaoJiaSystem/build/data/labels/73_3.png
new file mode 100644
index 0000000..11d0f76
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_4.png b/QiaoJiaSystem/build/data/labels/73_4.png
new file mode 100644
index 0000000..ebacf1f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_5.png b/QiaoJiaSystem/build/data/labels/73_5.png
new file mode 100644
index 0000000..d58377d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_6.png b/QiaoJiaSystem/build/data/labels/73_6.png
new file mode 100644
index 0000000..293b96b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_7.png b/QiaoJiaSystem/build/data/labels/73_7.png
new file mode 100644
index 0000000..80f409d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_0.png b/QiaoJiaSystem/build/data/labels/74_0.png
new file mode 100644
index 0000000..cc1d9f3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_1.png b/QiaoJiaSystem/build/data/labels/74_1.png
new file mode 100644
index 0000000..9171332
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_2.png b/QiaoJiaSystem/build/data/labels/74_2.png
new file mode 100644
index 0000000..c08cea8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_3.png b/QiaoJiaSystem/build/data/labels/74_3.png
new file mode 100644
index 0000000..ce8e8c8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_4.png b/QiaoJiaSystem/build/data/labels/74_4.png
new file mode 100644
index 0000000..b112fa6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_5.png b/QiaoJiaSystem/build/data/labels/74_5.png
new file mode 100644
index 0000000..c9a7bbb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_6.png b/QiaoJiaSystem/build/data/labels/74_6.png
new file mode 100644
index 0000000..8f72aac
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_7.png b/QiaoJiaSystem/build/data/labels/74_7.png
new file mode 100644
index 0000000..f85a9f9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_0.png b/QiaoJiaSystem/build/data/labels/75_0.png
new file mode 100644
index 0000000..b1f3ac4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_1.png b/QiaoJiaSystem/build/data/labels/75_1.png
new file mode 100644
index 0000000..9f06109
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_2.png b/QiaoJiaSystem/build/data/labels/75_2.png
new file mode 100644
index 0000000..9224666
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_3.png b/QiaoJiaSystem/build/data/labels/75_3.png
new file mode 100644
index 0000000..eb76489
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_4.png b/QiaoJiaSystem/build/data/labels/75_4.png
new file mode 100644
index 0000000..7dfee15
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_5.png b/QiaoJiaSystem/build/data/labels/75_5.png
new file mode 100644
index 0000000..8b081f6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_6.png b/QiaoJiaSystem/build/data/labels/75_6.png
new file mode 100644
index 0000000..95631cf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_7.png b/QiaoJiaSystem/build/data/labels/75_7.png
new file mode 100644
index 0000000..db915ea
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_0.png b/QiaoJiaSystem/build/data/labels/76_0.png
new file mode 100644
index 0000000..5ceef1d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_1.png b/QiaoJiaSystem/build/data/labels/76_1.png
new file mode 100644
index 0000000..5386831
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_2.png b/QiaoJiaSystem/build/data/labels/76_2.png
new file mode 100644
index 0000000..6c8393a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_3.png b/QiaoJiaSystem/build/data/labels/76_3.png
new file mode 100644
index 0000000..fbe5712
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_4.png b/QiaoJiaSystem/build/data/labels/76_4.png
new file mode 100644
index 0000000..e47a6eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_5.png b/QiaoJiaSystem/build/data/labels/76_5.png
new file mode 100644
index 0000000..f349490
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_6.png b/QiaoJiaSystem/build/data/labels/76_6.png
new file mode 100644
index 0000000..e661143
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_7.png b/QiaoJiaSystem/build/data/labels/76_7.png
new file mode 100644
index 0000000..64d0834
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_0.png b/QiaoJiaSystem/build/data/labels/77_0.png
new file mode 100644
index 0000000..05aab7d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_1.png b/QiaoJiaSystem/build/data/labels/77_1.png
new file mode 100644
index 0000000..64cb608
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_2.png b/QiaoJiaSystem/build/data/labels/77_2.png
new file mode 100644
index 0000000..2da938c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_3.png b/QiaoJiaSystem/build/data/labels/77_3.png
new file mode 100644
index 0000000..14179d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_4.png b/QiaoJiaSystem/build/data/labels/77_4.png
new file mode 100644
index 0000000..894b470
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_5.png b/QiaoJiaSystem/build/data/labels/77_5.png
new file mode 100644
index 0000000..a55e5b6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_6.png b/QiaoJiaSystem/build/data/labels/77_6.png
new file mode 100644
index 0000000..4f0e714
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_7.png b/QiaoJiaSystem/build/data/labels/77_7.png
new file mode 100644
index 0000000..804e8c2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_0.png b/QiaoJiaSystem/build/data/labels/78_0.png
new file mode 100644
index 0000000..e1fede7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_1.png b/QiaoJiaSystem/build/data/labels/78_1.png
new file mode 100644
index 0000000..23b2a74
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_2.png b/QiaoJiaSystem/build/data/labels/78_2.png
new file mode 100644
index 0000000..5471820
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_3.png b/QiaoJiaSystem/build/data/labels/78_3.png
new file mode 100644
index 0000000..bc9659a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_4.png b/QiaoJiaSystem/build/data/labels/78_4.png
new file mode 100644
index 0000000..54b95f9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_5.png b/QiaoJiaSystem/build/data/labels/78_5.png
new file mode 100644
index 0000000..2c67a51
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_6.png b/QiaoJiaSystem/build/data/labels/78_6.png
new file mode 100644
index 0000000..44326f5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_7.png b/QiaoJiaSystem/build/data/labels/78_7.png
new file mode 100644
index 0000000..4d5d8dc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_0.png b/QiaoJiaSystem/build/data/labels/79_0.png
new file mode 100644
index 0000000..f3f4c1e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_1.png b/QiaoJiaSystem/build/data/labels/79_1.png
new file mode 100644
index 0000000..23d960e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_2.png b/QiaoJiaSystem/build/data/labels/79_2.png
new file mode 100644
index 0000000..ce5c52b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_3.png b/QiaoJiaSystem/build/data/labels/79_3.png
new file mode 100644
index 0000000..b80a4f2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_4.png b/QiaoJiaSystem/build/data/labels/79_4.png
new file mode 100644
index 0000000..7fa16f8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_5.png b/QiaoJiaSystem/build/data/labels/79_5.png
new file mode 100644
index 0000000..c67c5bb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_6.png b/QiaoJiaSystem/build/data/labels/79_6.png
new file mode 100644
index 0000000..e89ecd2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_7.png b/QiaoJiaSystem/build/data/labels/79_7.png
new file mode 100644
index 0000000..d964ae4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_0.png b/QiaoJiaSystem/build/data/labels/80_0.png
new file mode 100644
index 0000000..61403c9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_1.png b/QiaoJiaSystem/build/data/labels/80_1.png
new file mode 100644
index 0000000..992338d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_2.png b/QiaoJiaSystem/build/data/labels/80_2.png
new file mode 100644
index 0000000..cfbd431
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_3.png b/QiaoJiaSystem/build/data/labels/80_3.png
new file mode 100644
index 0000000..5de9472
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_4.png b/QiaoJiaSystem/build/data/labels/80_4.png
new file mode 100644
index 0000000..0fecaf1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_5.png b/QiaoJiaSystem/build/data/labels/80_5.png
new file mode 100644
index 0000000..cbf65bd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_6.png b/QiaoJiaSystem/build/data/labels/80_6.png
new file mode 100644
index 0000000..ff54a38
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_7.png b/QiaoJiaSystem/build/data/labels/80_7.png
new file mode 100644
index 0000000..3d6f415
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_0.png b/QiaoJiaSystem/build/data/labels/81_0.png
new file mode 100644
index 0000000..5a2025f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_1.png b/QiaoJiaSystem/build/data/labels/81_1.png
new file mode 100644
index 0000000..511aec0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_2.png b/QiaoJiaSystem/build/data/labels/81_2.png
new file mode 100644
index 0000000..8e2f7e9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_3.png b/QiaoJiaSystem/build/data/labels/81_3.png
new file mode 100644
index 0000000..52edfd4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_4.png b/QiaoJiaSystem/build/data/labels/81_4.png
new file mode 100644
index 0000000..e60c7a9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_5.png b/QiaoJiaSystem/build/data/labels/81_5.png
new file mode 100644
index 0000000..d58df4f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_6.png b/QiaoJiaSystem/build/data/labels/81_6.png
new file mode 100644
index 0000000..d31ba09
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_7.png b/QiaoJiaSystem/build/data/labels/81_7.png
new file mode 100644
index 0000000..0770576
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_0.png b/QiaoJiaSystem/build/data/labels/82_0.png
new file mode 100644
index 0000000..1bc3a98
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_1.png b/QiaoJiaSystem/build/data/labels/82_1.png
new file mode 100644
index 0000000..e5931dc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_2.png b/QiaoJiaSystem/build/data/labels/82_2.png
new file mode 100644
index 0000000..a5f8bb7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_3.png b/QiaoJiaSystem/build/data/labels/82_3.png
new file mode 100644
index 0000000..8b138a9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_4.png b/QiaoJiaSystem/build/data/labels/82_4.png
new file mode 100644
index 0000000..8a57060
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_5.png b/QiaoJiaSystem/build/data/labels/82_5.png
new file mode 100644
index 0000000..f4dc04e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_6.png b/QiaoJiaSystem/build/data/labels/82_6.png
new file mode 100644
index 0000000..2c7073a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_7.png b/QiaoJiaSystem/build/data/labels/82_7.png
new file mode 100644
index 0000000..f4d966d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_0.png b/QiaoJiaSystem/build/data/labels/83_0.png
new file mode 100644
index 0000000..c048782
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_1.png b/QiaoJiaSystem/build/data/labels/83_1.png
new file mode 100644
index 0000000..3515f98
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_2.png b/QiaoJiaSystem/build/data/labels/83_2.png
new file mode 100644
index 0000000..4a13b8d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_3.png b/QiaoJiaSystem/build/data/labels/83_3.png
new file mode 100644
index 0000000..0944ac8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_4.png b/QiaoJiaSystem/build/data/labels/83_4.png
new file mode 100644
index 0000000..8b9f82f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_5.png b/QiaoJiaSystem/build/data/labels/83_5.png
new file mode 100644
index 0000000..67f70ad
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_6.png b/QiaoJiaSystem/build/data/labels/83_6.png
new file mode 100644
index 0000000..0d3c0e1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_7.png b/QiaoJiaSystem/build/data/labels/83_7.png
new file mode 100644
index 0000000..0daab32
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_0.png b/QiaoJiaSystem/build/data/labels/84_0.png
new file mode 100644
index 0000000..ffc3eb4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_1.png b/QiaoJiaSystem/build/data/labels/84_1.png
new file mode 100644
index 0000000..956e5eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_2.png b/QiaoJiaSystem/build/data/labels/84_2.png
new file mode 100644
index 0000000..a1e94fa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_3.png b/QiaoJiaSystem/build/data/labels/84_3.png
new file mode 100644
index 0000000..2369b0c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_4.png b/QiaoJiaSystem/build/data/labels/84_4.png
new file mode 100644
index 0000000..6d82ee8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_5.png b/QiaoJiaSystem/build/data/labels/84_5.png
new file mode 100644
index 0000000..6e95b70
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_6.png b/QiaoJiaSystem/build/data/labels/84_6.png
new file mode 100644
index 0000000..9d62561
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_7.png b/QiaoJiaSystem/build/data/labels/84_7.png
new file mode 100644
index 0000000..accde30
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_0.png b/QiaoJiaSystem/build/data/labels/85_0.png
new file mode 100644
index 0000000..48e9906
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_1.png b/QiaoJiaSystem/build/data/labels/85_1.png
new file mode 100644
index 0000000..3080720
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_2.png b/QiaoJiaSystem/build/data/labels/85_2.png
new file mode 100644
index 0000000..e5a9369
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_3.png b/QiaoJiaSystem/build/data/labels/85_3.png
new file mode 100644
index 0000000..5816c66
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_4.png b/QiaoJiaSystem/build/data/labels/85_4.png
new file mode 100644
index 0000000..7d18ec0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_5.png b/QiaoJiaSystem/build/data/labels/85_5.png
new file mode 100644
index 0000000..f7b5550
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_6.png b/QiaoJiaSystem/build/data/labels/85_6.png
new file mode 100644
index 0000000..7106103
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_7.png b/QiaoJiaSystem/build/data/labels/85_7.png
new file mode 100644
index 0000000..7179daf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_0.png b/QiaoJiaSystem/build/data/labels/86_0.png
new file mode 100644
index 0000000..2412ea1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_1.png b/QiaoJiaSystem/build/data/labels/86_1.png
new file mode 100644
index 0000000..7de1777
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_2.png b/QiaoJiaSystem/build/data/labels/86_2.png
new file mode 100644
index 0000000..aae67da
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_3.png b/QiaoJiaSystem/build/data/labels/86_3.png
new file mode 100644
index 0000000..e932d2e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_4.png b/QiaoJiaSystem/build/data/labels/86_4.png
new file mode 100644
index 0000000..9a580c8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_5.png b/QiaoJiaSystem/build/data/labels/86_5.png
new file mode 100644
index 0000000..6766a5d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_6.png b/QiaoJiaSystem/build/data/labels/86_6.png
new file mode 100644
index 0000000..462e729
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_7.png b/QiaoJiaSystem/build/data/labels/86_7.png
new file mode 100644
index 0000000..7843c12
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_0.png b/QiaoJiaSystem/build/data/labels/87_0.png
new file mode 100644
index 0000000..e7c1285
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_1.png b/QiaoJiaSystem/build/data/labels/87_1.png
new file mode 100644
index 0000000..e0af6e0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_2.png b/QiaoJiaSystem/build/data/labels/87_2.png
new file mode 100644
index 0000000..4bdce94
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_3.png b/QiaoJiaSystem/build/data/labels/87_3.png
new file mode 100644
index 0000000..2d446b9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_4.png b/QiaoJiaSystem/build/data/labels/87_4.png
new file mode 100644
index 0000000..2719131
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_5.png b/QiaoJiaSystem/build/data/labels/87_5.png
new file mode 100644
index 0000000..f635def
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_6.png b/QiaoJiaSystem/build/data/labels/87_6.png
new file mode 100644
index 0000000..25ddeb7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_7.png b/QiaoJiaSystem/build/data/labels/87_7.png
new file mode 100644
index 0000000..b26e702
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_0.png b/QiaoJiaSystem/build/data/labels/88_0.png
new file mode 100644
index 0000000..43b1427
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_1.png b/QiaoJiaSystem/build/data/labels/88_1.png
new file mode 100644
index 0000000..5703b63
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_2.png b/QiaoJiaSystem/build/data/labels/88_2.png
new file mode 100644
index 0000000..b3b565a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_3.png b/QiaoJiaSystem/build/data/labels/88_3.png
new file mode 100644
index 0000000..4afd6dd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_4.png b/QiaoJiaSystem/build/data/labels/88_4.png
new file mode 100644
index 0000000..198f7b0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_5.png b/QiaoJiaSystem/build/data/labels/88_5.png
new file mode 100644
index 0000000..e46b641
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_6.png b/QiaoJiaSystem/build/data/labels/88_6.png
new file mode 100644
index 0000000..81830a0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_7.png b/QiaoJiaSystem/build/data/labels/88_7.png
new file mode 100644
index 0000000..a916e4e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_0.png b/QiaoJiaSystem/build/data/labels/89_0.png
new file mode 100644
index 0000000..b6f9c4b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_1.png b/QiaoJiaSystem/build/data/labels/89_1.png
new file mode 100644
index 0000000..e5e7a1e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_2.png b/QiaoJiaSystem/build/data/labels/89_2.png
new file mode 100644
index 0000000..9f9d361
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_3.png b/QiaoJiaSystem/build/data/labels/89_3.png
new file mode 100644
index 0000000..4404891
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_4.png b/QiaoJiaSystem/build/data/labels/89_4.png
new file mode 100644
index 0000000..802bfe4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_5.png b/QiaoJiaSystem/build/data/labels/89_5.png
new file mode 100644
index 0000000..d77e019
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_6.png b/QiaoJiaSystem/build/data/labels/89_6.png
new file mode 100644
index 0000000..4a4fa6b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_7.png b/QiaoJiaSystem/build/data/labels/89_7.png
new file mode 100644
index 0000000..b3dd798
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_0.png b/QiaoJiaSystem/build/data/labels/90_0.png
new file mode 100644
index 0000000..3e10db1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_1.png b/QiaoJiaSystem/build/data/labels/90_1.png
new file mode 100644
index 0000000..9c4e67e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_2.png b/QiaoJiaSystem/build/data/labels/90_2.png
new file mode 100644
index 0000000..92d0167
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_3.png b/QiaoJiaSystem/build/data/labels/90_3.png
new file mode 100644
index 0000000..9d346a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_4.png b/QiaoJiaSystem/build/data/labels/90_4.png
new file mode 100644
index 0000000..ba6012b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_5.png b/QiaoJiaSystem/build/data/labels/90_5.png
new file mode 100644
index 0000000..b664cd2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_6.png b/QiaoJiaSystem/build/data/labels/90_6.png
new file mode 100644
index 0000000..500c099
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_7.png b/QiaoJiaSystem/build/data/labels/90_7.png
new file mode 100644
index 0000000..3e899a8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_0.png b/QiaoJiaSystem/build/data/labels/91_0.png
new file mode 100644
index 0000000..0ad0d55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_1.png b/QiaoJiaSystem/build/data/labels/91_1.png
new file mode 100644
index 0000000..afbe0f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_2.png b/QiaoJiaSystem/build/data/labels/91_2.png
new file mode 100644
index 0000000..d2c8899
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_3.png b/QiaoJiaSystem/build/data/labels/91_3.png
new file mode 100644
index 0000000..002032d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_4.png b/QiaoJiaSystem/build/data/labels/91_4.png
new file mode 100644
index 0000000..795ce7d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_5.png b/QiaoJiaSystem/build/data/labels/91_5.png
new file mode 100644
index 0000000..1d1eb22
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_6.png b/QiaoJiaSystem/build/data/labels/91_6.png
new file mode 100644
index 0000000..bb31267
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_7.png b/QiaoJiaSystem/build/data/labels/91_7.png
new file mode 100644
index 0000000..70c2cf3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_0.png b/QiaoJiaSystem/build/data/labels/92_0.png
new file mode 100644
index 0000000..e730aed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_1.png b/QiaoJiaSystem/build/data/labels/92_1.png
new file mode 100644
index 0000000..7f9b51d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_2.png b/QiaoJiaSystem/build/data/labels/92_2.png
new file mode 100644
index 0000000..f01916f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_3.png b/QiaoJiaSystem/build/data/labels/92_3.png
new file mode 100644
index 0000000..b850533
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_4.png b/QiaoJiaSystem/build/data/labels/92_4.png
new file mode 100644
index 0000000..ece1682
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_5.png b/QiaoJiaSystem/build/data/labels/92_5.png
new file mode 100644
index 0000000..8216690
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_6.png b/QiaoJiaSystem/build/data/labels/92_6.png
new file mode 100644
index 0000000..9b581fa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_7.png b/QiaoJiaSystem/build/data/labels/92_7.png
new file mode 100644
index 0000000..e57b2e8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_0.png b/QiaoJiaSystem/build/data/labels/93_0.png
new file mode 100644
index 0000000..c21f522
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_1.png b/QiaoJiaSystem/build/data/labels/93_1.png
new file mode 100644
index 0000000..64cbba6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_2.png b/QiaoJiaSystem/build/data/labels/93_2.png
new file mode 100644
index 0000000..a81e1cd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_3.png b/QiaoJiaSystem/build/data/labels/93_3.png
new file mode 100644
index 0000000..273f35c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_4.png b/QiaoJiaSystem/build/data/labels/93_4.png
new file mode 100644
index 0000000..b44e4c6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_5.png b/QiaoJiaSystem/build/data/labels/93_5.png
new file mode 100644
index 0000000..1e96e9b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_6.png b/QiaoJiaSystem/build/data/labels/93_6.png
new file mode 100644
index 0000000..3407e55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_7.png b/QiaoJiaSystem/build/data/labels/93_7.png
new file mode 100644
index 0000000..428e072
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_0.png b/QiaoJiaSystem/build/data/labels/94_0.png
new file mode 100644
index 0000000..baa512b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_1.png b/QiaoJiaSystem/build/data/labels/94_1.png
new file mode 100644
index 0000000..5f1b116
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_2.png b/QiaoJiaSystem/build/data/labels/94_2.png
new file mode 100644
index 0000000..1cd051e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_3.png b/QiaoJiaSystem/build/data/labels/94_3.png
new file mode 100644
index 0000000..a0a7264
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_4.png b/QiaoJiaSystem/build/data/labels/94_4.png
new file mode 100644
index 0000000..26e82bc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_5.png b/QiaoJiaSystem/build/data/labels/94_5.png
new file mode 100644
index 0000000..19c32ec
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_6.png b/QiaoJiaSystem/build/data/labels/94_6.png
new file mode 100644
index 0000000..e753cad
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_7.png b/QiaoJiaSystem/build/data/labels/94_7.png
new file mode 100644
index 0000000..7d4dfb7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_0.png b/QiaoJiaSystem/build/data/labels/95_0.png
new file mode 100644
index 0000000..2b25519
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_1.png b/QiaoJiaSystem/build/data/labels/95_1.png
new file mode 100644
index 0000000..6fea8c2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_2.png b/QiaoJiaSystem/build/data/labels/95_2.png
new file mode 100644
index 0000000..d170be1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_3.png b/QiaoJiaSystem/build/data/labels/95_3.png
new file mode 100644
index 0000000..fe5501e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_4.png b/QiaoJiaSystem/build/data/labels/95_4.png
new file mode 100644
index 0000000..ec87fee
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_5.png b/QiaoJiaSystem/build/data/labels/95_5.png
new file mode 100644
index 0000000..efa9f0b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_6.png b/QiaoJiaSystem/build/data/labels/95_6.png
new file mode 100644
index 0000000..6840b82
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_7.png b/QiaoJiaSystem/build/data/labels/95_7.png
new file mode 100644
index 0000000..85f887d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_0.png b/QiaoJiaSystem/build/data/labels/96_0.png
new file mode 100644
index 0000000..2033d9b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_1.png b/QiaoJiaSystem/build/data/labels/96_1.png
new file mode 100644
index 0000000..c60d36a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_2.png b/QiaoJiaSystem/build/data/labels/96_2.png
new file mode 100644
index 0000000..878dd1b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_3.png b/QiaoJiaSystem/build/data/labels/96_3.png
new file mode 100644
index 0000000..f7429a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_4.png b/QiaoJiaSystem/build/data/labels/96_4.png
new file mode 100644
index 0000000..6dff9da
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_5.png b/QiaoJiaSystem/build/data/labels/96_5.png
new file mode 100644
index 0000000..4869f9d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_6.png b/QiaoJiaSystem/build/data/labels/96_6.png
new file mode 100644
index 0000000..f6a8a69
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_7.png b/QiaoJiaSystem/build/data/labels/96_7.png
new file mode 100644
index 0000000..89b19d4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_0.png b/QiaoJiaSystem/build/data/labels/97_0.png
new file mode 100644
index 0000000..6426224
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_1.png b/QiaoJiaSystem/build/data/labels/97_1.png
new file mode 100644
index 0000000..f9a61f4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_2.png b/QiaoJiaSystem/build/data/labels/97_2.png
new file mode 100644
index 0000000..d1d02ac
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_3.png b/QiaoJiaSystem/build/data/labels/97_3.png
new file mode 100644
index 0000000..7e9e936
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_4.png b/QiaoJiaSystem/build/data/labels/97_4.png
new file mode 100644
index 0000000..21dd17e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_5.png b/QiaoJiaSystem/build/data/labels/97_5.png
new file mode 100644
index 0000000..5e59fa2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_6.png b/QiaoJiaSystem/build/data/labels/97_6.png
new file mode 100644
index 0000000..6f279a4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_7.png b/QiaoJiaSystem/build/data/labels/97_7.png
new file mode 100644
index 0000000..6447e6d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_0.png b/QiaoJiaSystem/build/data/labels/98_0.png
new file mode 100644
index 0000000..3d25931
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_1.png b/QiaoJiaSystem/build/data/labels/98_1.png
new file mode 100644
index 0000000..c76706a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_2.png b/QiaoJiaSystem/build/data/labels/98_2.png
new file mode 100644
index 0000000..6dceadb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_3.png b/QiaoJiaSystem/build/data/labels/98_3.png
new file mode 100644
index 0000000..d3cf1bc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_4.png b/QiaoJiaSystem/build/data/labels/98_4.png
new file mode 100644
index 0000000..5d5addc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_5.png b/QiaoJiaSystem/build/data/labels/98_5.png
new file mode 100644
index 0000000..55479d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_6.png b/QiaoJiaSystem/build/data/labels/98_6.png
new file mode 100644
index 0000000..4d8f3d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_7.png b/QiaoJiaSystem/build/data/labels/98_7.png
new file mode 100644
index 0000000..cec6017
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_0.png b/QiaoJiaSystem/build/data/labels/99_0.png
new file mode 100644
index 0000000..f5975c9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_1.png b/QiaoJiaSystem/build/data/labels/99_1.png
new file mode 100644
index 0000000..3cdfdec
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_2.png b/QiaoJiaSystem/build/data/labels/99_2.png
new file mode 100644
index 0000000..a0dc573
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_3.png b/QiaoJiaSystem/build/data/labels/99_3.png
new file mode 100644
index 0000000..e183f6a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_4.png b/QiaoJiaSystem/build/data/labels/99_4.png
new file mode 100644
index 0000000..bc1a490
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_5.png b/QiaoJiaSystem/build/data/labels/99_5.png
new file mode 100644
index 0000000..c568d5e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_6.png b/QiaoJiaSystem/build/data/labels/99_6.png
new file mode 100644
index 0000000..e274446
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_7.png b/QiaoJiaSystem/build/data/labels/99_7.png
new file mode 100644
index 0000000..f7b9e09
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/make_labels.py b/QiaoJiaSystem/build/data/labels/make_labels.py
new file mode 100644
index 0000000..c8146f6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/make_labels.py
@@ -0,0 +1,23 @@
+import os
+import string
+import pipes
+
+font = 'futura-normal'
+
+def make_labels(s):
+ l = string.printable
+ for word in l:
+ if word == ' ':
+ os.system('convert -fill black -background white -bordercolor white -font %s -pointsize %d label:"\ " 32_%d.png'%(font,s,s/12-1))
+ if word == '@':
+ os.system('convert -fill black -background white -bordercolor white -font %s -pointsize %d label:"\@" 64_%d.png'%(font,s,s/12-1))
+ elif word == '\\':
+ os.system('convert -fill black -background white -bordercolor white -font %s -pointsize %d label:"\\\\\\\\" 92_%d.png'%(font,s,s/12-1))
+ elif ord(word) in [9,10,11,12,13,14]:
+ pass
+ else:
+ os.system("convert -fill black -background white -bordercolor white -font %s -pointsize %d label:%s \"%d_%d.png\""%(font,s,pipes.quote(word), ord(word),s/12-1))
+
+for i in [12,24,36,48,60,72,84,96]:
+ make_labels(i)
+
diff --git a/QiaoJiaSystem/build/data/voc.names b/QiaoJiaSystem/build/data/voc.names
new file mode 100644
index 0000000..8420ab3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/voc.names
@@ -0,0 +1,20 @@
+aeroplane
+bicycle
+bird
+boat
+bottle
+bus
+car
+cat
+chair
+cow
+diningtable
+dog
+horse
+motorbike
+person
+pottedplant
+sheep
+sofa
+train
+tvmonitor
diff --git a/QiaoJiaSystem/build/erl_crash.dump b/QiaoJiaSystem/build/erl_crash.dump
new file mode 100644
index 0000000..f896370
--- /dev/null
+++ b/QiaoJiaSystem/build/erl_crash.dump
@@ -0,0 +1,10393 @@
+=erl_crash_dump:0.3
+Mon Nov 26 19:32:45 2018
+Slogan: Kernel pid terminated (application_controller) ({application_start_failure,kernel,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{k
+System version: Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]
+Compiled: Thu Dec 7 17:08:04 2017
+Taints:
+Atoms: 4844
+Calling Thread: scheduler:2
+=scheduler:1
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=scheduler:2
+Scheduler Sleep Info Flags:
+Scheduler Sleep Info Aux Work: THR_PRGR_LATER_OP
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK | NONEMPTY | UNKNOWN(134217728)
+Current Process: <0.0.0>
+Current Process State: Running
+Current Process Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | TRAP_EXIT
+Current Process Program counter: 0x00007fbf48bd9f10 (init:sleep/1 + 64)
+Current Process CP: 0x0000000000000000 (invalid)
+Current Process Limited Stack Trace:
+0x00007fbf42d77148:SReturn addr 0x48BD6438 (init:boot_loop/2 + 3688)
+0x00007fbf42d77150:SReturn addr 0x894628 (<terminate process normally>)
+=scheduler:3
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=scheduler:4
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=memory
+total: 106591120
+processes: 3394512
+processes_used: 3381992
+system: 103196608
+atom: 132249
+atom_used: 115700
+binary: 231264
+code: 2857091
+ets: 70392
+=hash_table:atom_tab
+size: 3203
+used: 2475
+objs: 4844
+depth: 7
+=index_table:atom_tab
+size: 5120
+limit: 1048576
+entries: 4844
+=hash_table:module_code
+size: 47
+used: 33
+objs: 53
+depth: 3
+=index_table:module_code
+size: 1024
+limit: 65536
+entries: 53
+=hash_table:export_list
+size: 3203
+used: 1461
+objs: 1984
+depth: 5
+=index_table:export_list
+size: 2048
+limit: 524288
+entries: 1984
+=hash_table:export_list
+size: 3203
+used: 1424
+objs: 1918
+depth: 5
+=hash_table:process_reg
+size: 11
+used: 3
+objs: 4
+depth: 2
+=hash_table:fun_table
+size: 397
+used: 223
+objs: 315
+depth: 3
+=hash_table:node_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=hash_table:dist_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=allocated_areas
+sys_misc: 83952322
+static: 2098336
+atom_space: 65552 49003
+atom_table: 66697
+module_table: 39552
+export_table: 126372
+export_list: 349184
+register_table: 180
+fun_table: 3266
+module_refs: 2496
+loaded_code: 2336221
+dist_table: 539
+node_table: 227
+bits_bufs_size: 0
+bif_timer: 0
+link_lh: 0
+process_table: 3145728
+port_table: 12582912
+ets_misc: 49192
+=allocator:sys_alloc
+option e: true
+option m: libc
+option tt: 131072
+option tp: 0
+=allocator:temp_alloc[0]
+versions: 2.1 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option mbsd: 3
+option as: gf
+mbcs blocks: 0 5 5
+mbcs blocks size: 0 10136 10136
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 8825
+temp_free calls: 8825
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option as: af
+mbcs blocks: 0 1 1
+mbcs blocks size: 0 40 40
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option as: af
+mbcs blocks: 0 5 5
+mbcs blocks size: 0 65544 65544
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 44066
+temp_free calls: 44066
+temp_realloc calls: 6
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option as: af
+mbcs blocks: 0 1 1
+mbcs blocks size: 0 40 40
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option as: af
+mbcs blocks: 0 1 1
+mbcs blocks size: 0 40 40
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 1 183 183
+mbcs blocks size: 520 46560 46560
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 295088 295088
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 663
+sl_free calls: 662
+sl_realloc calls: 1
+mseg_alloc calls: 3
+mseg_dealloc calls: 3
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 0
+sl_free calls: 0
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 261 261
+mbcs blocks size: 0 61752 61752
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 295088 295088
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 3244
+sl_free calls: 3244
+sl_realloc calls: 0
+mseg_alloc calls: 11
+mseg_dealloc calls: 11
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 0
+sl_free calls: 0
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 0
+sl_free calls: 0
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 17 22 22
+mbcs blocks size: 132864 140760 140760
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 295088 295088 295088
+mbcs mseg carriers size: 262144
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 39
+std_free calls: 22
+std_realloc calls: 0
+mseg_alloc calls: 1
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 0
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 10 33 33
+mbcs blocks size: 6192 14048 14048
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 117
+std_free calls: 107
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 0
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 0
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 3092 3093 3093
+mbcs blocks size: 103433088 103452384 103452384
+mbcs carriers: 5 5 5
+mbcs mseg carriers: 4
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 155713704 155713704 155713704
+mbcs mseg carriers size: 155189248
+mbcs sys_alloc carriers size: 524456
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 3093
+ll_free calls: 1
+ll_realloc calls: 24
+mseg_alloc calls: 4
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524456 524456 524456
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524456
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option as: aoffcbf
+mbcs blocks: 4641 4641 4641
+mbcs blocks size: 2513016 2527320 2527320
+mbcs carriers: 4 4 4
+mbcs mseg carriers: 3
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 3932328 3932328 3932328
+mbcs mseg carriers size: 3407872
+mbcs sys_alloc carriers size: 524456
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 4641
+ll_free calls: 0
+ll_realloc calls: 97
+mseg_alloc calls: 3
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524456 524456 524456
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524456
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524456 524456 524456
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524456
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 8 29 29
+mbcs blocks size: 66208 69784 69784
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131248 131248 131248
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131248
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 29
+eheap_free calls: 21
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131248 131248 131248
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131248
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option as: aoffcbf
+mbcs blocks: 8 35 35
+mbcs blocks size: 166296 509808 509808
+mbcs carriers: 2 3 3
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 1179824 1441968 1441968
+mbcs mseg carriers size: 1048576
+mbcs sys_alloc carriers size: 131248
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 436
+eheap_free calls: 428
+eheap_realloc calls: 30
+mseg_alloc calls: 2
+mseg_dealloc calls: 1
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131248 131248 131248
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131248
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131248 131248 131248
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131248
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 6 6 6
+mbcs blocks size: 21200 21200 21200
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 6
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 383 383
+mbcs blocks size: 0 145424 145424
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 295088 295088
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 383
+ets_free calls: 383
+ets_realloc calls: 4
+mseg_alloc calls: 1
+mseg_dealloc calls: 1
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+fix type: driver_select_data_state 0 0
+fix type: driver_event_data_state 0 0
+fix type: nlink_sh 0 0
+fix type: monitor_sh 0 0
+fix type: sl_thr_q_element 0 0
+fix type: bif_timer 0 0
+fix type: hl_ptimer 0 0
+fix type: ll_ptimer 0 0
+fix type: msg_ref 0 0
+fix type: proc 704 704
+mbcs blocks: 1 1 1
+mbcs blocks size: 712 712 712
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 1
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 69 69 69
+mbcs blocks size: 16888 16888 16888
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 821
+fix_free calls: 811
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 6 10 10
+mbcs blocks size: 229664 282640 282640
+mbcs carriers: 2 3 3
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 295088 1343664 1343664
+mbcs mseg carriers size: 262144
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 56
+binary_free calls: 50
+binary_realloc calls: 0
+mseg_alloc calls: 3
+mseg_dealloc calls: 2
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 2 22 22
+mbcs blocks size: 1600 9504 9504
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 448
+binary_free calls: 446
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 9 12 12
+mbcs blocks size: 1552 124504 124504
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 295088 295088
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 14
+driver_free calls: 5
+driver_realloc calls: 0
+mseg_alloc calls: 2
+mseg_dealloc calls: 2
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 6 11 11
+mbcs blocks size: 1320 11968 11968
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 1677
+driver_free calls: 1671
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:test_alloc
+option e: false
+=allocator:mseg_alloc[0]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 2
+cache_hits: 5
+segments: 6 8 8
+segments_size: 155713536 157024256 157024256
+segments_watermark: 8
+mseg_alloc calls: 13
+mseg_dealloc calls: 7
+mseg_realloc calls: 0
+mseg_create calls: 8
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[1]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_size: 0 0 0
+segments_watermark: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[2]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 3
+cache_hits: 10
+segments: 4 7 7
+segments_size: 4456448 5242880 5242880
+segments_watermark: 7
+mseg_alloc calls: 17
+mseg_dealloc calls: 13
+mseg_realloc calls: 0
+mseg_create calls: 7
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[3]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_size: 0 0 0
+segments_watermark: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[4]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_size: 0 0 0
+segments_watermark: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc.erts_mmap
+os mmap size used: 162267136
+=allocator:alloc_util
+option mmc: 18446744073709551615
+option ycs: 1048576
+option sac: true
+=allocator:instr
+option m: false
+option s: false
+option t: false
+=proc:<0.0.0>
+State: Running
+Name: init
+Spawned as: otp_ring0:start/2
+Spawned by: []
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 1
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.6.0>, <0.3.0>]
+Reductions: 4522
+Stack+heap: 4185
+OldHeap: 610
+Heap unused: 2391
+OldHeap unused: 463
+Memory: 39176
+Program counter: 0x00007fbf48bd9f10 (init:sleep/1 + 64)
+CP: 0x0000000000000000 (invalid)
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | TRAP_EXIT
+=proc:<0.1.0>
+State: Waiting
+Name: init__boot__on_load_handler
+Spawned as: erlang:apply/2
+Spawned by: <0.0.0>
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 5
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 220
+OldHeap unused: 0
+Memory: 2568
+Program counter: 0x00007fbf48be1b28 (init:on_load_loop/2 + 56)
+CP: 0x0000000000000000 (invalid)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.3.0>
+State: Waiting
+Name: erl_prim_loader
+Spawned as: erlang:apply/2
+Spawned by: <0.2.0>
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>, #Port<0.0>]
+Reductions: 98713
+Stack+heap: 6772
+OldHeap: 6772
+Heap unused: 1481
+OldHeap unused: 6623
+Memory: 109136
+Program counter: 0x00007fbf48c2bc18 (erl_prim_loader:loop/3 + 160)
+CP: 0x0000000000000000 (invalid)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | TRAP_EXIT
+=proc:<0.6.0>
+State: Waiting
+Name: error_logger
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.2.0>
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>]
+Reductions: 317
+Stack+heap: 1598
+OldHeap: 376
+Heap unused: 548
+OldHeap unused: 364
+Memory: 16640
+Program counter: 0x00007fbf514a06e8 (gen_event:fetch_msg/5 + 88)
+CP: 0x0000000000000000 (invalid)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | TRAP_EXIT
+=proc:<0.15.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.14.0>
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 25
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 153
+OldHeap unused: 0
+Memory: 2568
+Program counter: 0x00007fbf42ff3638 (global:loop_the_locker/1 + 752)
+CP: 0x0000000000000000 (invalid)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | TRAP_EXIT
+=port:#Port<0.0>
+Slot: 0
+Connected: <0.3.0>
+Links: <0.3.0>
+Port controls linked-in driver: efile
+=node:'nonode@nohost'
+=no_distribution
+=loaded_modules
+Current code: 2336221
+Old code: 0
+=mod:otp_ring0
+Current size: 1176
+=mod:init
+Current size: 67344
+=mod:prim_eval
+Current size: 640
+=mod:prim_inet
+Current size: 111453
+=mod:prim_file
+Current size: 63499
+=mod:zlib
+Current size: 14936
+=mod:prim_zip
+Current size: 28312
+=mod:erl_prim_loader
+Current size: 81200
+=mod:erlang
+Current size: 89929
+=mod:erts_internal
+Current size: 4344
+=mod:error_handler
+Current size: 4715
+Current attributes: 836C00000001680264000376736E6C000000016E1000818140EB0BAE1F3E7B017B161DB5F21A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00462F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
+=mod:heart
+Current size: 17837
+Current attributes: 836C00000002680264000376736E6C000000016E10006D0D71EFA7B0A279C8F601EADE9CC1F16A68026400086469616C797A65726C0000000168026400116E6F5F696D70726F7065725F6C69737473680264000E73656E645F68656172745F636D6461026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B003E2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
+=mod:error_logger
+Current size: 12982
+Current attributes: 836C00000001680264000376736E6C000000016E10004C7FCFFE18EC4CA6888C36F511970B576A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00452F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
+=mod:gen_event
+Current size: 53819
+Current attributes: 836C00000009680264000376736E6C000000016E1000B4D7193F7E5EF25F18741722BE9045C86A680264000863616C6C6261636B6C0000000168026802640004696E697461016C000000016804640004747970656B00014864000366756E6C000000026804640004747970656B00014864000770726F647563746C000000016803640008616E6E5F747970656B0001486C0000000268036400037661726B000148640008496E6974417267736804640004747970656B0001486400047465726D6A6A6A6804640004747970656B000149640005756E696F6E6C000000036804640004747970656B0001496400057475706C656C00000002680364000461746F6D6B0001496400026F6B6803640008616E6E5F747970656B0001496C0000000268036400037661726B00014964000553746174656804640004747970656B0001496400047465726D6A6A6A6804640004747970656B00014A6400057475706C656C00000003680364000461746F6D6B00014A6400026F6B6803640008616E6E5F747970656B00014A6C0000000268036400037661726B00014A64000553746174656804640004747970656B00014A6400047465726D6A6A680364000461746F6D6B00014A64000968696265726E6174656A6804640004747970656B00014B6400057475706C656C00000002680364000461746F6D6B00014B6400056572726F726803640008616E6E5F747970656B00014B6C0000000268036400037661726B00014B640006526561736F6E6804640004747970656B00014B6400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000C68616E646C655F6576656E7461026C000000016804640004747970656B00014C64000366756E6C000000026804640004747970656B00014C64000770726F647563746C000000026803640008616E6E5F747970656B00014C6C0000000268036400037661726B00014C6400054576656E746804640004747970656B00014C6400047465726D6A6A6803640008616E6E5F747970656B00014C6C0000000268036400037661726B00014C64000553746174656804640004747970656B00014C6400047465726D6A6A6A6804640004747970656B00014D640005756E696F6E6C000000046804640004747970656B00014D6400057475706C656C00000002680364000461746F6D6B00014D6400026F6B6803640008616E6E5F747970656B00014D6C0000000268036400037661726B00014D6400084E657753746174656804640004747970656B00014D6400047465726D6A6A6A6804640004747970656B00014E6400057475706C656C00000003680364000461746F6D6B00014E6400026F6B6803640008616E6E5F747970656B00014E6C0000000268036400037661726B00014E6400084E657753746174656804640004747970656B00014E6400047465726D6A6A680364000461746F6D6B00014E64000968696265726E6174656A6804640004747970656B00014F6400057475706C656C00000005680364000461746F6D6B00014F64000C737761705F68616E646C65726803640008616E6E5F747970656B00014F6C0000000268036400037661726B00014F64000541726773316804640004747970656B00014F6400047465726D6A6A6803640008616E6E5F747970656B00014F6C0000000268036400037661726B00014F6400084E657753746174656804640004747970656B00014F6400047465726D6A6A6803640008616E6E5F747970656B0001506C0000000268036400037661726B00015064000848616E646C6572326804640004747970656B000150640005756E696F6E6C000000026804640004747970656B00015064000461746F6D6A6804640004747970656B0001506400057475706C656C000000026804640004747970656B00015064000461746F6D6A6803640008616E6E5F747970656B0001506C0000000268036400037661726B00015064000249646804640004747970656B0001506400047465726D6A6A6A6A6A6803640008616E6E5F747970656B0001506C0000000268036400037661726B00015064000541726773326804640004747970656B0001506400047465726D6A6A6A680364000461746F6D6B00015164000E72656D6F76655F68616E646C65726A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F63616C6C61026C000000016804640004747970656B00015264000366756E6C000000026804640004747970656B00015264000770726F647563746C000000026803640008616E6E5F747970656B0001526C0000000268036400037661726B000152640007526571756573746804640004747970656B0001526400047465726D6A6A6803640008616E6E5F747970656B0001526C0000000268036400037661726B00015264000553746174656804640004747970656B0001526400047465726D6A6A6A6804640004747970656B000153640005756E696F6E6C000000046804640004747970656B0001536400057475706C656C00000003680364000461746F6D6B0001536400026F6B6803640008616E6E5F747970656B0001536C0000000268036400037661726B0001536400055265706C796804640004747970656B0001536400047465726D6A6A6803640008616E6E5F747970656B0001536C0000000268036400037661726B0001536400084E657753746174656804640004747970656B0001536400047465726D6A6A6A6804640004747970656B0001546400057475706C656C00000004680364000461746F6D6B0001546400026F6B6803640008616E6E5F747970656B0001546C0000000268036400037661726B0001546400055265706C796804640004747970656B0001546400047465726D6A6A6803640008616E6E5F747970656B0001546C0000000268036400037661726B0001546400084E657753746174656804640004747970656B0001546400047465726D6A6A680364000461746F6D6B00015464000968696265726E6174656A6804640004747970656B0001556400057475706C656C00000006680364000461746F6D6B00015564000C737761705F68616E646C65726803640008616E6E5F747970656B0001556C0000000268036400037661726B0001556400055265706C796804640004747970656B0001556400047465726D6A6A6803640008616E6E5F747970656B0001556C0000000268036400037661726B00015564000541726773316804640004747970656B0001556400047465726D6A6A6803640008616E6E5F747970656B0001556C0000000268036400037661726B0001556400084E657753746174656804640004747970656B0001556400047465726D6A6A6803640008616E6E5F747970656B0001566C0000000268036400037661726B00015664000848616E646C6572326804640004747970656B000156640005756E696F6E6C000000026804640004747970656B00015664000461746F6D6A6804640004747970656B0001566400057475706C656C000000026804640004747970656B00015664000461746F6D6A6803640008616E6E5F747970656B0001566C0000000268036400037661726B00015664000249646804640004747970656B0001566400047465726D6A6A6A6A6A6803640008616E6E5F747970656B0001566C0000000268036400037661726B00015664000541726773326804640004747970656B0001566400047465726D6A6A6A6804640004747970656B0001576400057475706C656C00000002680364000461746F6D6B00015764000E72656D6F76655F68616E646C65726803640008616E6E5F747970656B0001576C0000000268036400037661726B0001576400055265706C796804640004747970656B0001576400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F696E666F61026C000000016804640004747970656B00015864000366756E6C000000026804640004747970656B00015864000770726F647563746C000000026803640008616E6E5F747970656B0001586C0000000268036400037661726B000158640004496E666F6804640004747970656B0001586400047465726D6A6A6803640008616E6E5F747970656B0001586C0000000268036400037661726B00015864000553746174656804640004747970656B0001586400047465726D6A6A6A6804640004747970656B000159640005756E696F6E6C000000046804640004747970656B0001596400057475706C656C00000002680364000461746F6D6B0001596400026F6B6803640008616E6E5F747970656B0001596C0000000268036400037661726B0001596400084E657753746174656804640004747970656B0001596400047465726D6A6A6A6804640004747970656B00015A6400057475706C656C00000003680364000461746F6D6B00015A6400026F6B6803640008616E6E5F747970656B00015A6C0000000268036400037661726B00015A6400084E657753746174656804640004747970656B00015A6400047465726D6A6A680364000461746F6D6B00015A64000968696265726E6174656A6804640004747970656B00015B6400057475706C656C00000005680364000461746F6D6B00015B64000C737761705F68616E646C65726803640008616E6E5F747970656B00015B6C0000000268036400037661726B00015B64000541726773316804640004747970656B00015B6400047465726D6A6A6803640008616E6E5F747970656B00015B6C0000000268036400037661726B00015B6400084E657753746174656804640004747970656B00015B6400047465726D6A6A6803640008616E6E5F747970656B00015C6C0000000268036400037661726B00015C64000848616E646C6572326804640004747970656B00015C640005756E696F6E6C000000026804640004747970656B00015C64000461746F6D6A6804640004747970656B00015C6400057475706C656C000000026804640004747970656B00015C64000461746F6D6A6803640008616E6E5F747970656B00015C6C0000000268036400037661726B00015C64000249646804640004747970656B00015C6400047465726D6A6A6A6A6A6803640008616E6E5F747970656B00015C6C0000000268036400037661726B00015C64000541726773326804640004747970656B00015C6400047465726D6A6A6A680364000461746F6D6B00015D64000E72656D6F76655F68616E646C65726A6A6A6A680264000863616C6C6261636B6C00000001680268026400097465726D696E61746561026C000000016804640004747970656B00015E64000366756E6C000000026804640004747970656B00015E64000770726F647563746C000000026803640008616E6E5F747970656B00015E6C0000000268036400037661726B00015E640004417267736804640004747970656B00015E640005756E696F6E6C000000066804640004747970656B00015E6400047465726D6A6804640004747970656B00015E6400057475706C656C00000002680364000461746F6D6B00015E64000473746F706803640008616E6E5F747970656B00015E6C0000000268036400037661726B00015E640006526561736F6E6804640004747970656B00015E6400047465726D6A6A6A680364000461746F6D6B00015F64000473746F70680364000461746F6D6B00015F64000E72656D6F76655F68616E646C65726804640004747970656B0001606400057475706C656C00000002680364000461746F6D6B0001606400056572726F726804640004747970656B0001606400057475706C656C00000002680364000461746F6D6B000160640004455849546803640008616E6E5F747970656B0001606C0000000268036400037661726B000160640006526561736F6E6804640004747970656B0001606400047465726D6A6A6A6A6804640004747970656B0001616400057475706C656C00000002680364000461746F6D6B0001616400056572726F726804640004747970656B0001616400047465726D6A6A6A6A6803640008616E6E5F747970656B0001626C0000000268036400037661726B00016264000553746174656804640004747970656B0001626400047465726D6A6A6A6804640004747970656B0001636400047465726D6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B636F64655F6368616E676561036C000000016804640004747970656B00016464000366756E6C000000026804640004747970656B00016464000770726F647563746C000000036803640008616E6E5F747970656B0001646C0000000268036400037661726B0001646400064F6C6456736E6804640004747970656B000164640005756E696F6E6C000000026804640004747970656B0001646400047465726D6A6804640004747970656B0001646400057475706C656C00000002680364000461746F6D6B000164640004646F776E6804640004747970656B0001646400047465726D6A6A6A6A6803640008616E6E5F747970656B0001656C0000000268036400037661726B00016564000553746174656804640004747970656B0001656400047465726D6A6A6803640008616E6E5F747970656B0001656C0000000268036400037661726B00016564000545787472616804640004747970656B0001656400047465726D6A6A6A6804640004747970656B0001666400057475706C656C00000002680364000461746F6D6B0001666400026F6B6803640008616E6E5F747970656B0001666C0000000268036400037661726B0001666400084E657753746174656804640004747970656B0001666400047465726D6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000D666F726D61745F73746174757361026C000000016804640004747970656B00016764000B626F756E6465645F66756E6C000000026804640004747970656B00016764000366756E6C000000026804640004747970656B00016764000770726F647563746C0000000268036400037661726B0001676400034F707468036400037661726B00016764000A537461747573446174616A68036400037661726B0001676400065374617475736A6C000000056804640004747970656B00016864000A636F6E73747261696E746C00000002680364000461746F6D6B00016864000A69735F737562747970656C0000000268036400037661726B0001686400034F70746804640004747970656B000168640005756E696F6E6C00000002680364000461746F6D6B0001686400066E6F726D616C680364000461746F6D6B0001686400097465726D696E6174656A6A6A6804640004747970656B00016964000A636F6E73747261696E746C00000002680364000461746F6D6B00016964000A69735F737562747970656C0000000268036400037661726B00016964000A537461747573446174616804640004747970656B0001696400046C6973746C000000016804640004747970656B000169640005756E696F6E6C0000000268036400037661726B000169640005504469637468036400037661726B00016964000553746174656A6A6A6A6804640004747970656B00016A64000A636F6E73747261696E746C00000002680364000461746F6D6B00016A64000A69735F737562747970656C0000000268036400037661726B00016A64000550446963746804640004747970656B00016A6400046C6973746C000000016804640004747970656B00016A6400057475706C656C000000026803640008616E6E5F747970656B00016A6C0000000268036400037661726B00016A6400034B65796804640004747970656B00016A6400047465726D6A6A6803640008616E6E5F747970656B00016A6C0000000268036400037661726B00016A64000556616C75656804640004747970656B00016A6400047465726D6A6A6A6A6A6A6804640004747970656B00016B64000A636F6E73747261696E746C00000002680364000461746F6D6B00016B64000A69735F737562747970656C0000000268036400037661726B00016B64000553746174656804640004747970656B00016B6400047465726D6A6A6A6804640004747970656B00016C64000A636F6E73747261696E746C00000002680364000461746F6D6B00016C64000A69735F737562747970656C0000000268036400037661726B00016C6400065374617475736804640004747970656B00016C6400047465726D6A6A6A6A6A6A6A68026400126F7074696F6E616C5F63616C6C6261636B736C00000001680264000D666F726D61745F73746174757361026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00422F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
+=mod:gen
+Current size: 13507
+Current attributes: 836C00000001680264000376736E6C000000016E10001134B4BD76C6A257431EE32DD1D4C2FC6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67656E2E65726C6A
+=mod:proc_lib
+Current size: 34658
+Current attributes: 836C00000001680264000376736E6C000000016E1000E98A4C92109BB3FD70A88946ABD5A03D6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961346802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
+=mod:application_controller
+Current size: 112060
+Current attributes: 836C00000001680264000376736E6C000000016E1000F47343BD6F7E99C1857144D07676EEE76A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B004F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
+=mod:lists
+Current size: 114921
+Current attributes: 836C00000002680264000376736E6C000000016E100035E51F81BE3CBC7B45860F41CF5775D86A68026400086469616C797A65726C0000000168026400116E6F5F696D70726F7065725F6C69737473680264000A756B65796D657267656C61036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961346802640006736F757263656B003E2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F6C697374732E65726C6A
+=mod:gen_server
+Current size: 55426
+Current attributes: 836C00000009680264000376736E6C000000016E10008EA09A5218A03E4B2926B16DCA8A0C4E6A680264000863616C6C6261636B6C0000000168026802640004696E697461016C000000016804640004747970656B00017464000366756E6C000000026804640004747970656B00017464000770726F647563746C000000016803640008616E6E5F747970656B0001746C0000000268036400037661726B000174640004417267736804640004747970656B0001746400047465726D6A6A6A6804640004747970656B000175640005756E696F6E6C000000046804640004747970656B0001756400057475706C656C00000002680364000461746F6D6B0001756400026F6B6803640008616E6E5F747970656B0001756C0000000268036400037661726B00017564000553746174656804640004747970656B0001756400047465726D6A6A6A6804640004747970656B0001756400057475706C656C00000003680364000461746F6D6B0001756400026F6B6803640008616E6E5F747970656B0001756C0000000268036400037661726B00017564000553746174656804640004747970656B0001756400047465726D6A6A6804640004747970656B000175640005756E696F6E6C000000026804640004747970656B00017564000774696D656F75746A680364000461746F6D6B00017564000968696265726E6174656A6A6804640004747970656B0001766400057475706C656C00000002680364000461746F6D6B00017664000473746F706803640008616E6E5F747970656B0001766C0000000268036400037661726B000176640006526561736F6E6804640004747970656B0001766400047465726D6A6A6A680364000461746F6D6B00017664000669676E6F72656A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F63616C6C61036C000000016804640004747970656B00017764000366756E6C000000026804640004747970656B00017764000770726F647563746C000000036803640008616E6E5F747970656B0001776C0000000268036400037661726B000177640007526571756573746804640004747970656B0001776400047465726D6A6A6803640008616E6E5F747970656B0001776C0000000268036400037661726B00017764000446726F6D6804640004747970656B0001776400057475706C656C000000026804640004747970656B0001776400037069646A6803640008616E6E5F747970656B0001776C0000000268036400037661726B0001776400035461676804640004747970656B0001776400047465726D6A6A6A6A6803640008616E6E5F747970656B0001786C0000000268036400037661726B00017864000553746174656804640004747970656B0001786400047465726D6A6A6A6804640004747970656B000179640005756E696F6E6C000000066804640004747970656B0001796400057475706C656C00000003680364000461746F6D6B0001796400057265706C796803640008616E6E5F747970656B0001796C0000000268036400037661726B0001796400055265706C796804640004747970656B0001796400047465726D6A6A6803640008616E6E5F747970656B0001796C0000000268036400037661726B0001796400084E657753746174656804640004747970656B0001796400047465726D6A6A6A6804640004747970656B00017A6400057475706C656C00000004680364000461746F6D6B00017A6400057265706C796803640008616E6E5F747970656B00017A6C0000000268036400037661726B00017A6400055265706C796804640004747970656B00017A6400047465726D6A6A6803640008616E6E5F747970656B00017A6C0000000268036400037661726B00017A6400084E657753746174656804640004747970656B00017A6400047465726D6A6A6804640004747970656B00017A640005756E696F6E6C000000026804640004747970656B00017A64000774696D656F75746A680364000461746F6D6B00017A64000968696265726E6174656A6A6804640004747970656B00017B6400057475706C656C00000002680364000461746F6D6B00017B6400076E6F7265706C796803640008616E6E5F747970656B00017B6C0000000268036400037661726B00017B6400084E657753746174656804640004747970656B00017B6400047465726D6A6A6A6804640004747970656B00017C6400057475706C656C00000003680364000461746F6D6B00017C6400076E6F7265706C796803640008616E6E5F747970656B00017C6C0000000268036400037661726B00017C6400084E657753746174656804640004747970656B00017C6400047465726D6A6A6804640004747970656B00017C640005756E696F6E6C000000026804640004747970656B00017C64000774696D656F75746A680364000461746F6D6B00017C64000968696265726E6174656A6A6804640004747970656B00017D6400057475706C656C00000004680364000461746F6D6B00017D64000473746F706803640008616E6E5F747970656B00017D6C0000000268036400037661726B00017D640006526561736F6E6804640004747970656B00017D6400047465726D6A6A6803640008616E6E5F747970656B00017D6C0000000268036400037661726B00017D6400055265706C796804640004747970656B00017D6400047465726D6A6A6803640008616E6E5F747970656B00017D6C0000000268036400037661726B00017D6400084E657753746174656804640004747970656B00017D6400047465726D6A6A6A6804640004747970656B00017E6400057475706C656C00000003680364000461746F6D6B00017E64000473746F706803640008616E6E5F747970656B00017E6C0000000268036400037661726B00017E640006526561736F6E6804640004747970656B00017E6400047465726D6A6A6803640008616E6E5F747970656B00017E6C0000000268036400037661726B00017E6400084E657753746174656804640004747970656B00017E6400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F6361737461026C000000016804640004747970656B00017F64000366756E6C000000026804640004747970656B00017F64000770726F647563746C000000026803640008616E6E5F747970656B00017F6C0000000268036400037661726B00017F640007526571756573746804640004747970656B00017F6400047465726D6A6A6803640008616E6E5F747970656B00017F6C0000000268036400037661726B00017F64000553746174656804640004747970656B00017F6400047465726D6A6A6A6804640004747970656B000180640005756E696F6E6C000000036804640004747970656B0001806400057475706C656C00000002680364000461746F6D6B0001806400076E6F7265706C796803640008616E6E5F747970656B0001806C0000000268036400037661726B0001806400084E657753746174656804640004747970656B0001806400047465726D6A6A6A6804640004747970656B0001816400057475706C656C00000003680364000461746F6D6B0001816400076E6F7265706C796803640008616E6E5F747970656B0001816C0000000268036400037661726B0001816400084E657753746174656804640004747970656B0001816400047465726D6A6A6804640004747970656B000181640005756E696F6E6C000000026804640004747970656B00018164000774696D656F75746A680364000461746F6D6B00018164000968696265726E6174656A6A6804640004747970656B0001826400057475706C656C00000003680364000461746F6D6B00018264000473746F706803640008616E6E5F747970656B0001826C0000000268036400037661726B000182640006526561736F6E6804640004747970656B0001826400047465726D6A6A6803640008616E6E5F747970656B0001826C0000000268036400037661726B0001826400084E657753746174656804640004747970656B0001826400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F696E666F61026C000000016804640004747970656B00018364000366756E6C000000026804640004747970656B00018364000770726F647563746C000000026803640008616E6E5F747970656B0001836C0000000268036400037661726B000183640004496E666F6804640004747970656B000183640005756E696F6E6C00000002680364000461746F6D6B00018364000774696D656F75746804640004747970656B0001836400047465726D6A6A6A6803640008616E6E5F747970656B0001836C0000000268036400037661726B00018364000553746174656804640004747970656B0001836400047465726D6A6A6A6804640004747970656B000184640005756E696F6E6C000000036804640004747970656B0001846400057475706C656C00000002680364000461746F6D6B0001846400076E6F7265706C796803640008616E6E5F747970656B0001846C0000000268036400037661726B0001846400084E657753746174656804640004747970656B0001846400047465726D6A6A6A6804640004747970656B0001856400057475706C656C00000003680364000461746F6D6B0001856400076E6F7265706C796803640008616E6E5F747970656B0001856C0000000268036400037661726B0001856400084E657753746174656804640004747970656B0001856400047465726D6A6A6804640004747970656B000185640005756E696F6E6C000000026804640004747970656B00018564000774696D656F75746A680364000461746F6D6B00018564000968696265726E6174656A6A6804640004747970656B0001866400057475706C656C00000003680364000461746F6D6B00018664000473746F706803640008616E6E5F747970656B0001866C0000000268036400037661726B000186640006526561736F6E6804640004747970656B0001866400047465726D6A6A6803640008616E6E5F747970656B0001866C0000000268036400037661726B0001866400084E657753746174656804640004747970656B0001866400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C00000001680268026400097465726D696E61746561026C000000016804640004747970656B00018764000366756E6C000000026804640004747970656B00018764000770726F647563746C000000026803640008616E6E5F747970656B0001876C0000000268036400037661726B000187640006526561736F6E6804640004747970656B000187640005756E696F6E6C00000004680364000461746F6D6B0001876400066E6F726D616C680364000461746F6D6B00018764000873687574646F776E6804640004747970656B0001876400057475706C656C00000002680364000461746F6D6B00018764000873687574646F776E6804640004747970656B0001876400047465726D6A6A6804640004747970656B0001886400047465726D6A6A6A6803640008616E6E5F747970656B0001896C0000000268036400037661726B00018964000553746174656804640004747970656B0001896400047465726D6A6A6A6804640004747970656B00018A6400047465726D6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B636F64655F6368616E676561036C000000016804640004747970656B00018B64000366756E6C000000026804640004747970656B00018B64000770726F647563746C000000036803640008616E6E5F747970656B00018B6C0000000268036400037661726B00018B6400064F6C6456736E6804640004747970656B00018B640005756E696F6E6C000000026804640004747970656B00018B6400047465726D6A6804640004747970656B00018B6400057475706C656C00000002680364000461746F6D6B00018B640004646F776E6804640004747970656B00018B6400047465726D6A6A6A6A6803640008616E6E5F747970656B00018B6C0000000268036400037661726B00018B64000553746174656804640004747970656B00018B6400047465726D6A6A6803640008616E6E5F747970656B00018C6C0000000268036400037661726B00018C64000545787472616804640004747970656B00018C6400047465726D6A6A6A6804640004747970656B00018D640005756E696F6E6C000000026804640004747970656B00018D6400057475706C656C00000002680364000461746F6D6B00018D6400026F6B6803640008616E6E5F747970656B00018D6C0000000268036400037661726B00018D6400084E657753746174656804640004747970656B00018D6400047465726D6A6A6A6804640004747970656B00018D6400057475706C656C00000002680364000461746F6D6B00018D6400056572726F726803640008616E6E5F747970656B00018D6C0000000268036400037661726B00018D640006526561736F6E6804640004747970656B00018D6400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000D666F726D61745F73746174757361026C000000016804640004747970656B00018E64000B626F756E6465645F66756E6C000000026804640004747970656B00018E64000366756E6C000000026804640004747970656B00018E64000770726F647563746C0000000268036400037661726B00018E6400034F707468036400037661726B00018E64000A537461747573446174616A68036400037661726B00018E6400065374617475736A6C000000056804640004747970656B00018F64000A636F6E73747261696E746C00000002680364000461746F6D6B00018F64000A69735F737562747970656C0000000268036400037661726B00018F6400034F70746804640004747970656B00018F640005756E696F6E6C00000002680364000461746F6D6B00018F6400066E6F726D616C680364000461746F6D6B00018F6400097465726D696E6174656A6A6A6804640004747970656B00019064000A636F6E73747261696E746C00000002680364000461746F6D6B00019064000A69735F737562747970656C0000000268036400037661726B00019064000A537461747573446174616804640004747970656B0001906400046C6973746C000000016804640004747970656B000190640005756E696F6E6C0000000268036400037661726B000190640005504469637468036400037661726B00019064000553746174656A6A6A6A6804640004747970656B00019164000A636F6E73747261696E746C00000002680364000461746F6D6B00019164000A69735F737562747970656C0000000268036400037661726B00019164000550446963746804640004747970656B0001916400046C6973746C000000016804640004747970656B0001916400057475706C656C000000026803640008616E6E5F747970656B0001916C0000000268036400037661726B0001916400034B65796804640004747970656B0001916400047465726D6A6A6803640008616E6E5F747970656B0001916C0000000268036400037661726B00019164000556616C75656804640004747970656B0001916400047465726D6A6A6A6A6A6A6804640004747970656B00019264000A636F6E73747261696E746C00000002680364000461746F6D6B00019264000A69735F737562747970656C0000000268036400037661726B00019264000553746174656804640004747970656B0001926400047465726D6A6A6A6804640004747970656B00019364000A636F6E73747261696E746C00000002680364000461746F6D6B00019364000A69735F737562747970656C0000000268036400037661726B0001936400065374617475736804640004747970656B0001936400047465726D6A6A6A6A6A6A6A68026400126F7074696F6E616C5F63616C6C6261636B736C00000001680264000D666F726D61745F73746174757361026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00432F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
+=mod:application
+Current size: 9612
+Current attributes: 836C00000003680264000376736E6C000000016E100039DE1853DFECBDB4A498182AD55734A56A680264000863616C6C6261636B6C0000000168026802640005737461727461026C000000016804640004747970656B00014064000366756E6C000000026804640004747970656B00014064000770726F647563746C000000026803640008616E6E5F747970656B0001406C0000000268036400037661726B0001406400095374617274547970656804640009757365725F747970656B00014064000A73746172745F747970656A6A6803640008616E6E5F747970656B0001406C0000000268036400037661726B0001406400095374617274417267736804640004747970656B0001406400047465726D6A6A6A6804640004747970656B000141640005756E696F6E6C000000036804640004747970656B0001416400057475706C656C00000002680364000461746F6D6B0001416400026F6B6804640004747970656B0001416400037069646A6A6804640004747970656B0001416400057475706C656C00000003680364000461746F6D6B0001416400026F6B6804640004747970656B0001416400037069646A6803640008616E6E5F747970656B0001416C0000000268036400037661726B00014164000553746174656804640004747970656B0001416400047465726D6A6A6A6804640004747970656B0001416400057475706C656C00000002680364000461746F6D6B0001416400056572726F726803640008616E6E5F747970656B0001416C0000000268036400037661726B000141640006526561736F6E6804640004747970656B0001416400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000473746F7061016C000000016804640004747970656B00014364000366756E6C000000026804640004747970656B00014364000770726F647563746C000000016803640008616E6E5F747970656B0001436C0000000268036400037661726B00014364000553746174656804640004747970656B0001436400047465726D6A6A6A6804640004747970656B0001446400047465726D6A6A6A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B00442F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
+=mod:application_master
+Current size: 21182
+Current attributes: 836C00000001680264000376736E6C000000016E1000BC11116AA3C54EDFE28A96250EC0F7CE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B004B2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
+=mod:kernel
+Current size: 15203
+Current attributes: 836C00000002680264000376736E6C000000016E10007133686472752CF09B5C4B29004DC8726A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
+=mod:supervisor
+Current size: 78005
+Current attributes: 836C00000003680264000376736E6C000000016E10007628F5DA8AB53477405ED3F141D33CFF6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A680264000863616C6C6261636B6C0000000168026802640004696E697461016C000000016804640004747970656B00017E64000366756E6C000000026804640004747970656B00017E64000770726F647563746C000000016803640008616E6E5F747970656B00017E6C0000000268036400037661726B00017E640004417267736804640004747970656B00017E6400047465726D6A6A6A6804640004747970656B00017F640005756E696F6E6C000000026804640004747970656B00017F6400057475706C656C00000002680364000461746F6D6B00017F6400026F6B6804640004747970656B00017F6400057475706C656C000000026803640008616E6E5F747970656B00017F6C0000000268036400037661726B00017F640008537570466C6167736804640009757365725F747970656B00017F6400097375705F666C6167736A6A6804640004747970656B00017F6400046C6973746C000000016803640008616E6E5F747970656B00017F6C0000000268036400037661726B00017F6400094368696C64537065636804640009757365725F747970656B00017F64000A6368696C645F737065636A6A6A6A6A680364000461746F6D6B00018064000669676E6F72656A6A6A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961356802640006736F757263656B00432F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
+=mod:code
+Current size: 20764
+Current attributes: 836C00000001680264000376736E6C000000016E1000E08E92DA5C4C22F52473AF6A487872486A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B003D2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
+=mod:binary
+Current size: 12858
+Current attributes: 836C00000001680264000376736E6C000000016E100003F9F4263F28BBC6106DB4ECA80DE0FE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961306802640006736F757263656B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F62696E6172792E65726C6A
+=mod:ets
+Current size: 72577
+Current attributes: 836C00000001680264000376736E6C000000016E100063BC752FD967CD9F0928EE0FE96216DE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961326802640006736F757263656B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F6574732E65726C6A
+=mod:filename
+Current size: 43221
+Current attributes: 836C00000001680264000376736E6C000000016E1000E833CDDF95816FC98B6FAD591BEBF1E86A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
+=mod:gb_sets
+Current size: 27961
+Current attributes: 836C00000001680264000376736E6C000000016E100085D06C0C4879E6CAB974E2489DF10A626A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00402F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67625F736574732E65726C6A
+=mod:gb_trees
+Current size: 17032
+Current attributes: 836C00000001680264000376736E6C000000016E100046A2393F013833EAFFECC48059BDBE986A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
+=mod:hipe_unified_loader
+Current size: 45549
+Current attributes: 836C00000001680264000376736E6C000000016E1000AEC66591D1F0FE79B86D70AE7E4CE50E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B004C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
+=mod:os
+Current size: 18314
+Current attributes: 836C00000001680264000376736E6C000000016E1000BCAF143B4F482BEF329FF35693DC37AA6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B003B2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6F732E65726C6A
+=mod:unicode
+Current size: 38763
+Current attributes: 836C00000002680264000376736E6C000000016E100014AF9A5A2F3E07677B81A62CFC3423BF6A68026400086469616C797A65726C0000000168026400116E6F5F696D70726F7065725F6C69737473680264000C646F5F6F5F62696E6172793261026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961356802640006736F757263656B00402F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F756E69636F64652E65726C6A
+=mod:code_server
+Current size: 94705
+Current attributes: 836C00000001680264000376736E6C000000016E1000EAF3A2E1E0ECA23DBA3D3C06A4E5D9736A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00442F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
+=mod:rpc
+Current size: 26139
+Current attributes: 836C00000003680264000376736E6C000000016E100081ABD8B1DEE43D27DE8689BD23CB05DF6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A680264000A646570726563617465646C000000026802640016736166655F6D756C74695F7365727665725F63616C6C61026802640016736166655F6D756C74695F7365727665725F63616C6C61036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F7270632E65726C6A
+=mod:global
+Current size: 113313
+Current attributes: 836C00000002680264000376736E6C000000016E1000352A93924513845E949DC3140FDC886E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
+=mod:inet_db
+Current size: 81409
+Current attributes: 836C00000001680264000376736E6C000000016E10006145303A81171F45174C660812E812A46A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B00402F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
+=mod:inet_config
+Current size: 29475
+Current attributes: 836C00000001680264000376736E6C000000016E1000B2BF24AF51E7B5C3E5398B60ACE6D7946A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B00442F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
+=mod:inet_udp
+Current size: 5184
+Current attributes: 836C00000001680264000376736E6C000000016E100036E688390111A722F6D2ACBB7211DFD46A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
+=mod:inet
+Current size: 73376
+Current attributes: 836C00000001680264000376736E6C000000016E10009BE07117F12F78C8E17E6608CFDD215E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B003D2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
+=mod:inet_parse
+Current size: 44906
+Current attributes: 836C00000001680264000376736E6C000000016E1000EA7F83B4829BD2B638F6A7859D501FD96A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B00432F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
+=mod:inet_gethost_native
+Current size: 33557
+Current attributes: 836C00000002680264000376736E6C000000016E1000DF33C123DA3D5C59B285473F39B29DDF6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B004C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
+=mod:erl_distribution
+Current size: 4507
+Current attributes: 836C00000002680264000376736E6C000000016E1000FF25C4DA21202BD37B56486B509AA4166A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
+=mod:net_kernel
+Current size: 78717
+Current attributes: 836C00000002680264000376736E6C000000016E1000F72EE655757D78037989103C96DF87D56A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B00432F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
+=mod:inet_tcp_dist
+Current size: 24749
+Current attributes: 836C00000001680264000376736E6C000000016E100077EB2B230A5AFEFCED80399E3EEDC2696A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B00462F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F7463705F646973742E65726C6A
+=mod:erl_epmd
+Current size: 24107
+Current attributes: 836C00000002680264000376736E6C000000016E100068F7C63A40C348791A162D077EA51ABD6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968036400016464001265726C616E675F6461656D6F6E5F706F7274620000111168036400016464000E65706D645F646973745F68696768610568036400016464000D65706D645F646973745F6C6F77610568036400016464000E65706D645F6E6F64655F74797065616E68036400016464000C65706D645F706F72745F6E6F620000111168026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F65726C5F65706D642E65726C6A
+=mod:auth
+Current size: 24437
+Current attributes: 836C00000003680264000376736E6C000000016E100065B309FD7869DCD7D26AA10AE8C5A1DE6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A680264000A646570726563617465646C00000003680264000769735F6175746861016802640006636F6F6B69656400015F680264000B6E6F64655F636F6F6B69656400015F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B003D2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F617574682E65726C6A
+=mod:inet_tcp
+Current size: 7068
+Current attributes: 836C00000001680264000376736E6C000000016E1000B46D593BFC2C89C71235422D4AD9AEB26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
+=mod:gen_tcp
+Current size: 7171
+Current attributes: 836C00000001680264000376736E6C000000016E100052566B1DBC6040CA42722A601889F54C6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00402F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
+=mod:io_lib
+Current size: 31343
+Current attributes: 836C00000001680264000376736E6C000000016E10004D342C89413B45904290F5A39C5D9CEA6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
+=mod:io_lib_format
+Current size: 49161
+Current attributes: 836C00000001680264000376736E6C000000016E10000C354469565C6F1370BBFE19A99045C46A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00462F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
+=mod:io_lib_pretty
+Current size: 57771
+Current attributes: 836C00000001680264000376736E6C000000016E10009F452CD29375A4E9138ADC95CB1D20B66A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00462F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
+=mod:epp
+Current size: 102247
+Current attributes: 836C00000001680264000376736E6C000000016E10001F628E9091F310D2288D87F3E0AAD6F96A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961316802640006736F757263656B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F6570702E65726C6A
+=mod:erl_scan
+Current size: 119080
+Current attributes: 836C00000002680264000376736E6C000000016E1000C37F7804BC9DB94EEA3CEF67B921B40A6A680264000A646570726563617465646C00000005680364000F617474726962757465735F696E666F61016400126E6578745F6D616A6F725F72656C65617365680364000F617474726962757465735F696E666F61026400126E6578745F6D616A6F725F72656C65617365680364000D7365745F61747472696275746561036400126E6578745F6D616A6F725F72656C65617365680364000A746F6B656E5F696E666F61016400126E6578745F6D616A6F725F72656C65617365680364000A746F6B656E5F696E666F61026400126E6578745F6D616A6F725F72656C656173656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961326802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
+=fun
+Module: gen
+Uniq: 132519590
+Index: 0
+Address: 0x00007fbf514aefa0
+Refc: 2
+=fun
+Module: gen
+Uniq: 132519590
+Index: 1
+Address: 0x00007fbf514aef30
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 4
+Address: 0x00007fbf48c295c8
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 5
+Address: 0x00007fbf48c29530
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 6
+Address: 0x00007fbf48c294c0
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 4
+Address: 0x00007fbf48c17be0
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 0
+Address: 0x00007fbf48c29718
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 105000069
+Index: 0
+Address: 0x00007fbf514a8ab0
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 5
+Address: 0x00007fbf48c17ad8
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 1
+Address: 0x00007fbf48c296a8
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 105000069
+Index: 1
+Address: 0x00007fbf514a8998
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 2
+Address: 0x00007fbf48c29670
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 105000069
+Index: 2
+Address: 0x00007fbf514a87b8
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 3
+Address: 0x00007fbf48c29638
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 105000069
+Index: 3
+Address: 0x00007fbf514a85c8
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 0
+Address: 0x00007fbf48c17e28
+Refc: 2
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 1
+Address: 0x00007fbf48c17df0
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 2
+Address: 0x00007fbf48c17db8
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 3
+Address: 0x00007fbf48c17d80
+Refc: 1
+=fun
+Module: epp
+Uniq: 130987351
+Index: 2
+Address: 0x00007fbf42b4b1d8
+Refc: 1
+=fun
+Module: epp
+Uniq: 130987351
+Index: 3
+Address: 0x00007fbf42b4b040
+Refc: 1
+=fun
+Module: epp
+Uniq: 130987351
+Index: 0
+Address: 0x00007fbf42b4b768
+Refc: 1
+=fun
+Module: epp
+Uniq: 130987351
+Index: 1
+Address: 0x00007fbf42b4b610
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 1
+Address: 0x00007fbf42fd6928
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 0
+Address: 0x00007fbf42fd6b28
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 3
+Address: 0x00007fbf42fd6790
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 2
+Address: 0x00007fbf42fd68f0
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 5
+Address: 0x00007fbf42fd6608
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 24
+Address: 0x00007fbf42fb18c0
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 4
+Address: 0x00007fbf42fd6738
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 25
+Address: 0x00007fbf42fb1a78
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 26
+Address: 0x00007fbf42fb1b98
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 27
+Address: 0x00007fbf42fb1cf8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 20
+Address: 0x00007fbf42fb1b10
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 21
+Address: 0x00007fbf42fb19f0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 22
+Address: 0x00007fbf42fb1998
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 23
+Address: 0x00007fbf42fb17a0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 16
+Address: 0x00007fbf42fb1ea8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 17
+Address: 0x00007fbf42fb1838
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 18
+Address: 0x00007fbf42fb1718
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 19
+Address: 0x00007fbf42fb1c70
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 12
+Address: 0x00007fbf42fb1dc8
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 11
+Address: 0x00007fbf42ffc7a0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 13
+Address: 0x00007fbf42fb1f70
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 10
+Address: 0x00007fbf42ffc828
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 14
+Address: 0x00007fbf42fb1f38
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 9
+Address: 0x00007fbf42ffc8f0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 15
+Address: 0x00007fbf42fb1f00
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 8
+Address: 0x00007fbf42ffc9f8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 8
+Address: 0x00007fbf42fb2088
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 15
+Address: 0x00007fbf42ffbc70
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 9
+Address: 0x00007fbf42fb1e70
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 14
+Address: 0x00007fbf42ffbdc0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 10
+Address: 0x00007fbf42fb1e38
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 13
+Address: 0x00007fbf42ffc2b8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 11
+Address: 0x00007fbf42fb1e00
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 12
+Address: 0x00007fbf42ffc740
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 4
+Address: 0x00007fbf42fb1fa8
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 3
+Address: 0x00007fbf42ffcf08
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 5
+Address: 0x00007fbf42fb2150
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 2
+Address: 0x00007fbf42ffcf40
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 6
+Address: 0x00007fbf42fb2118
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 1
+Address: 0x00007fbf42ffd0d8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 7
+Address: 0x00007fbf42fb20e0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 0
+Address: 0x00007fbf42ffd268
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 0
+Address: 0x00007fbf42fb2188
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 7
+Address: 0x00007fbf42ffcbd0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 1
+Address: 0x00007fbf42fb2050
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 6
+Address: 0x00007fbf42ffccb8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 2
+Address: 0x00007fbf42fb2018
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 5
+Address: 0x00007fbf42ffce18
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 3
+Address: 0x00007fbf42fb1fe0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 4
+Address: 0x00007fbf42ffce50
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 11
+Address: 0x00007fbf42f50580
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 27
+Address: 0x00007fbf42ffc998
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 10
+Address: 0x00007fbf42f505e8
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 26
+Address: 0x00007fbf42ffbc10
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 9
+Address: 0x00007fbf42f509e0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 25
+Address: 0x00007fbf42fface8
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 8
+Address: 0x00007fbf42f50c80
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 24
+Address: 0x00007fbf42ffae98
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 12
+Address: 0x00007fbf42f504e8
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 3
+Address: 0x00007fbf42f51068
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 19
+Address: 0x00007fbf42ffb238
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 2
+Address: 0x00007fbf42f510a0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 18
+Address: 0x00007fbf42ffb2d0
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 1
+Address: 0x00007fbf42f51218
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 17
+Address: 0x00007fbf42ffb6f8
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 0
+Address: 0x00007fbf42f51388
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 16
+Address: 0x00007fbf42ffbb90
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 7
+Address: 0x00007fbf42f50d48
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 23
+Address: 0x00007fbf42ffaed0
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 6
+Address: 0x00007fbf42f50db0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 22
+Address: 0x00007fbf42ffaf38
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 5
+Address: 0x00007fbf42f50e18
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 21
+Address: 0x00007fbf42ffafa0
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 4
+Address: 0x00007fbf42f50e80
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 20
+Address: 0x00007fbf42ffb000
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 1
+Address: 0x00007fbf514d4030
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 0
+Address: 0x00007fbf514d4068
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 3
+Address: 0x00007fbf514d3f50
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 2
+Address: 0x00007fbf514d3fc0
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 5
+Address: 0x00007fbf514d3bd8
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 4
+Address: 0x00007fbf514d3f18
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 7
+Address: 0x00007fbf514d38c8
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 6
+Address: 0x00007fbf514d3b78
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 9
+Address: 0x00007fbf514d3298
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 8
+Address: 0x00007fbf514d3748
+Refc: 1
+=fun
+Module: io_lib_pretty
+Uniq: 95486190
+Index: 0
+Address: 0x00007fbf42b351b8
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 16
+Address: 0x00007fbf48c3ad10
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 17
+Address: 0x00007fbf48c3aa90
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 18
+Address: 0x00007fbf48c3a6a8
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 19
+Address: 0x00007fbf48c3a678
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 20
+Address: 0x00007fbf48c3a640
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 21
+Address: 0x00007fbf48c3a4a8
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 8
+Address: 0x00007fbf48be21e0
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 22
+Address: 0x00007fbf48c3a2b0
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 6
+Address: 0x00007fbf48be2270
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 8
+Address: 0x00007fbf48c3bbf0
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 7
+Address: 0x00007fbf48be2238
+Refc: 2
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 9
+Address: 0x00007fbf48c3ba88
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 4
+Address: 0x00007fbf48be2948
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 10
+Address: 0x00007fbf48c3b910
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 5
+Address: 0x00007fbf48be2560
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 11
+Address: 0x00007fbf48c3b7a8
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 2
+Address: 0x00007fbf48be2b58
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 12
+Address: 0x00007fbf48c3b640
+Refc: 2
+=fun
+Module: init
+Uniq: 24720724
+Index: 3
+Address: 0x00007fbf48be2af8
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 0
+Address: 0x00007fbf48be2bc8
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 13
+Address: 0x00007fbf48c3b4d8
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 1
+Address: 0x00007fbf48be2b90
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 14
+Address: 0x00007fbf48c3b440
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 38
+Address: 0x00007fbf42b70090
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 15
+Address: 0x00007fbf48c3b290
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 0
+Address: 0x00007fbf48c3c780
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 36
+Address: 0x00007fbf42b70100
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 1
+Address: 0x00007fbf48c3c5e0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 37
+Address: 0x00007fbf42b700c8
+Refc: 1
+=fun
+Module: proc_lib
+Uniq: 32310957
+Index: 2
+Address: 0x00007fbf514b6540
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 2
+Address: 0x00007fbf48c3c478
+Refc: 6
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 34
+Address: 0x00007fbf42b70170
+Refc: 1
+=fun
+Module: proc_lib
+Uniq: 32310957
+Index: 1
+Address: 0x00007fbf514b6700
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 3
+Address: 0x00007fbf48c3c310
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 35
+Address: 0x00007fbf42b70138
+Refc: 1
+=fun
+Module: proc_lib
+Uniq: 32310957
+Index: 0
+Address: 0x00007fbf514b6810
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 4
+Address: 0x00007fbf48c3c170
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 32
+Address: 0x00007fbf42b70218
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 5
+Address: 0x00007fbf48c3c038
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 33
+Address: 0x00007fbf42b701a8
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 8
+Address: 0x00007fbf42aed558
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 6
+Address: 0x00007fbf48c3bed0
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 7
+Address: 0x00007fbf42aed618
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 7
+Address: 0x00007fbf48c3bd68
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 6
+Address: 0x00007fbf42aed650
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 5
+Address: 0x00007fbf42aed6b0
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 4
+Address: 0x00007fbf42aed710
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 3
+Address: 0x00007fbf42aed7d0
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 2
+Address: 0x00007fbf42aed890
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 1
+Address: 0x00007fbf42aed9c0
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 0
+Address: 0x00007fbf42aedaa0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 6
+Address: 0x00007fbf42b70758
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 7
+Address: 0x00007fbf42b706e8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 4
+Address: 0x00007fbf42b70790
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 5
+Address: 0x00007fbf42b707c8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 2
+Address: 0x00007fbf42b70870
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 3
+Address: 0x00007fbf42b70838
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 0
+Address: 0x00007fbf42b708e0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 1
+Address: 0x00007fbf42b708a8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 14
+Address: 0x00007fbf42b70598
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 15
+Address: 0x00007fbf42b70560
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 12
+Address: 0x00007fbf42b70608
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 13
+Address: 0x00007fbf42b705d0
+Refc: 1
+=fun
+Module: code
+Uniq: 37983170
+Index: 0
+Address: 0x00007fbf42f5d9a8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 10
+Address: 0x00007fbf42b70678
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 11
+Address: 0x00007fbf42b70640
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 8
+Address: 0x00007fbf42b706b0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 9
+Address: 0x00007fbf42b70720
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 22
+Address: 0x00007fbf42b70410
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 23
+Address: 0x00007fbf42b703d8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 20
+Address: 0x00007fbf42b70480
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 21
+Address: 0x00007fbf42b70448
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 18
+Address: 0x00007fbf42b704f0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 19
+Address: 0x00007fbf42b704b8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 16
+Address: 0x00007fbf42b70800
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 17
+Address: 0x00007fbf42b70528
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 30
+Address: 0x00007fbf42b70250
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 31
+Address: 0x00007fbf42b701e0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 28
+Address: 0x00007fbf42b702f8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 29
+Address: 0x00007fbf42b70288
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 26
+Address: 0x00007fbf42b70330
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 27
+Address: 0x00007fbf42b702c0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 24
+Address: 0x00007fbf42b703a0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 25
+Address: 0x00007fbf42b70368
+Refc: 1
+=fun
+Module: lists
+Uniq: 113486526
+Index: 0
+Address: 0x00007fbf4307d478
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 117239185
+Index: 0
+Address: 0x00007fbf42ad80a8
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 117239185
+Index: 1
+Address: 0x00007fbf42ad7d40
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 17
+Address: 0x00007fbf42f75ca0
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 16
+Address: 0x00007fbf42f75268
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 5
+Address: 0x00007fbf42f75fd8
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 4
+Address: 0x00007fbf42f75e68
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 7
+Address: 0x00007fbf42f75ec8
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 6
+Address: 0x00007fbf42f75f58
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 1
+Address: 0x00007fbf42f76690
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 0
+Address: 0x00007fbf42f76798
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 3
+Address: 0x00007fbf42f76058
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 2
+Address: 0x00007fbf42f76308
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 13
+Address: 0x00007fbf42f753b0
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 12
+Address: 0x00007fbf42f75460
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 15
+Address: 0x00007fbf42f752a0
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 14
+Address: 0x00007fbf42f75300
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 9
+Address: 0x00007fbf42f75d88
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 8
+Address: 0x00007fbf42f75df0
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 11
+Address: 0x00007fbf42f75b88
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 10
+Address: 0x00007fbf42f75d28
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 4
+Address: 0x00007fbf42fcdc68
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 5
+Address: 0x00007fbf42fcda40
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 6
+Address: 0x00007fbf42fcd708
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 7
+Address: 0x00007fbf42fcd840
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 0
+Address: 0x00007fbf42fce220
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 5
+Address: 0x00007fbf514f8cd0
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 1
+Address: 0x00007fbf42fce128
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 4
+Address: 0x00007fbf514f89e0
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 2
+Address: 0x00007fbf42fcdda8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 7
+Address: 0x00007fbf514f8d38
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 3
+Address: 0x00007fbf42fcdd08
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 6
+Address: 0x00007fbf514f8c28
+Refc: 1
+=fun
+Module: os
+Uniq: 89243364
+Index: 0
+Address: 0x00007fbf42fa8cf8
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 12
+Address: 0x00007fbf42fccd08
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 1
+Address: 0x00007fbf514f9040
+Refc: 1
+=fun
+Module: os
+Uniq: 89243364
+Index: 1
+Address: 0x00007fbf42fa8cc0
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 13
+Address: 0x00007fbf42fccc70
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 0
+Address: 0x00007fbf514f9210
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 14
+Address: 0x00007fbf42fccc18
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 3
+Address: 0x00007fbf514f8b00
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 15
+Address: 0x00007fbf42fcc958
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 2
+Address: 0x00007fbf514f8f80
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 8
+Address: 0x00007fbf42fcd318
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 13
+Address: 0x00007fbf514f8050
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 9
+Address: 0x00007fbf42fcd290
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 12
+Address: 0x00007fbf514f80c8
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 10
+Address: 0x00007fbf42fccf40
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 15
+Address: 0x00007fbf514f7d60
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 11
+Address: 0x00007fbf42fccdc0
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 14
+Address: 0x00007fbf514f7ef8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 9
+Address: 0x00007fbf514f8430
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 8
+Address: 0x00007fbf514f85c8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 11
+Address: 0x00007fbf514f81f0
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 10
+Address: 0x00007fbf514f8318
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 20
+Address: 0x00007fbf514f7530
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 17
+Address: 0x00007fbf514f7b98
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 16
+Address: 0x00007fbf514f7cd8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 19
+Address: 0x00007fbf514f7620
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 18
+Address: 0x00007fbf514f7b18
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 6
+Address: 0x00007fbf430503b8
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 4
+Address: 0x00007fbf43050428
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 5
+Address: 0x00007fbf430503f0
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 7
+Address: 0x00007fbf42fa1970
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 2
+Address: 0x00007fbf43050498
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 6
+Address: 0x00007fbf42fa19a8
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 3
+Address: 0x00007fbf43050460
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 5
+Address: 0x00007fbf42fa19e0
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 0
+Address: 0x00007fbf430508b8
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 4
+Address: 0x00007fbf42fa1d70
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 1
+Address: 0x00007fbf42ac9550
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 1
+Address: 0x00007fbf430504d0
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 3
+Address: 0x00007fbf42fa1e00
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 0
+Address: 0x00007fbf42ac9630
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 2
+Address: 0x00007fbf42fa2000
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 3
+Address: 0x00007fbf42ac8f90
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 1
+Address: 0x00007fbf42fa21f0
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 2
+Address: 0x00007fbf42ac92e0
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 0
+Address: 0x00007fbf42fa27b8
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 5
+Address: 0x00007fbf42ac8e40
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 4
+Address: 0x00007fbf42ac8eb0
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 7
+Address: 0x00007fbf42ac8cd8
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 6
+Address: 0x00007fbf42ac8d88
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 9
+Address: 0x00007fbf42ac89b8
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 8
+Address: 0x00007fbf42ac8b70
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 11
+Address: 0x00007fbf42ac8888
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 10
+Address: 0x00007fbf42ac88c0
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 13
+Address: 0x00007fbf42ac8818
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 12
+Address: 0x00007fbf42ac8850
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 16
+Address: 0x00007fbf4301f5e0
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 4
+Address: 0x00007fbf4302b4d0
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 1
+Address: 0x00007fbf42af5958
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 0
+Address: 0x00007fbf42af5a40
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 1
+Address: 0x00007fbf4302b6b8
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 3
+Address: 0x00007fbf42af58c0
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 0
+Address: 0x00007fbf4302b718
+Refc: 1
+=fun
+Module: application_master
+Uniq: 108510720
+Index: 0
+Address: 0x00007fbf514c4ee8
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 2
+Address: 0x00007fbf42af5920
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 1
+Address: 0x00007fbf430202c0
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 3
+Address: 0x00007fbf4302b508
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 5
+Address: 0x00007fbf42af5790
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 0
+Address: 0x00007fbf430202f8
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 2
+Address: 0x00007fbf4302b610
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 4
+Address: 0x00007fbf42af5860
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 3
+Address: 0x00007fbf43020250
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 7
+Address: 0x00007fbf42af5610
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 2
+Address: 0x00007fbf43020288
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 6
+Address: 0x00007fbf42af56a8
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 5
+Address: 0x00007fbf430201e0
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 4
+Address: 0x00007fbf43020218
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 8
+Address: 0x00007fbf42af55b0
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 7
+Address: 0x00007fbf43020170
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 6
+Address: 0x00007fbf430201a8
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 9
+Address: 0x00007fbf4301fe90
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 8
+Address: 0x00007fbf43020138
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 11
+Address: 0x00007fbf4301f2d0
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 10
+Address: 0x00007fbf4301fb98
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 13
+Address: 0x00007fbf4301ead0
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 12
+Address: 0x00007fbf4301f198
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 15
+Address: 0x00007fbf4301e958
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 14
+Address: 0x00007fbf4301e990
+Refc: 1
+=fun
+Module: erlang
+Uniq: 23316051
+Index: 0
+Address: 0x00007fbf48c58718
+Refc: 1
+=proc_messages:<0.0.0>
+H7FBF42D6FA10:N
+=proc_stack:<0.0.0>
+0x00007fbf42d77148:SReturn addr 0x48BD6438 (init:boot_loop/2 + 3688)
+0x00007fbf42d77150:SReturn addr 0x894628 (<terminate process normally>)
+y0:N
+y1:H7FBF42D6F9B8
+y2:P<0.2.0>
+=proc_heap:<0.0.0>
+7FBF42D6F9B8:tA:A5:state,H7FBF42D41098,N,N,H7FBF42D410A8,P<0.2.0>,H7FBF42D410B8,H7FBF42D410D0,H7FBF42D6FA50,N
+7FBF42D6FA50:lH7FBF42D6FA88|H7FBF42D6FAA0
+7FBF42D6FA88:t2:A8:erl_scan,H7FBF42D6FAF0
+7FBF42D6FAF0:lI47|H7FBF42D6FB58
+7FBF42D6FB58:lI117|H7FBF42D6FBD0
+7FBF42D6FBD0:lI115|H7FBF42D6FC70
+7FBF42D6FC70:lI114|H7FBF42D6FCE8
+7FBF42D6FCE8:lI47|H7FBF42D6FD58
+7FBF42D6FD58:lI108|H7FBF42D6FDC8
+7FBF42D6FDC8:lI105|H7FBF42D6FE38
+7FBF42D6FE38:lI98|H7FBF42D6FEA8
+7FBF42D6FEA8:lI47|H7FBF42D6FF18
+7FBF42D6FF18:lI101|H7FBF42D6FF88
+7FBF42D6FF88:lI114|H7FBF42D6FFF8
+7FBF42D6FFF8:lI108|H7FBF42D70068
+7FBF42D70068:lI97|H7FBF42D700D8
+7FBF42D700D8:lI110|H7FBF42D70148
+7FBF42D70148:lI103|H7FBF42D701B8
+7FBF42D701B8:lI47|H7FBF42D70228
+7FBF42D70228:lI108|H7FBF42D70298
+7FBF42D70298:lI105|H7FBF42D70308
+7FBF42D70308:lI98|H7FBF42D70368
+7FBF42D70368:lI47|H7FBF42D703C8
+7FBF42D703C8:lI115|H7FBF42D70428
+7FBF42D70428:lI116|H7FBF42D70488
+7FBF42D70488:lI100|H7FBF42D704E8
+7FBF42D704E8:lI108|H7FBF42D70548
+7FBF42D70548:lI105|H7FBF42D705A8
+7FBF42D705A8:lI98|H7FBF42D70608
+7FBF42D70608:lI45|H7FBF42D70668
+7FBF42D70668:lI50|H7FBF42D706C8
+7FBF42D706C8:lI46|H7FBF42D70728
+7FBF42D70728:lI56|H7FBF42D70788
+7FBF42D70788:lI47|H7FBF42D707E8
+7FBF42D707E8:lI101|H7FBF42D70848
+7FBF42D70848:lI98|H7FBF42D708A8
+7FBF42D708A8:lI105|H7FBF42D70908
+7FBF42D70908:lI110|H7FBF42D70968
+7FBF42D70968:lI47|H7FBF42D709C8
+7FBF42D709C8:lI101|H7FBF42D70A28
+7FBF42D70A28:lI114|H7FBF42D70A88
+7FBF42D70A88:lI108|H7FBF42D70AE8
+7FBF42D70AE8:lI95|H7FBF42D70B48
+7FBF42D70B48:lI115|H7FBF42D70BA8
+7FBF42D70BA8:lI99|H7FBF42D70C08
+7FBF42D70C08:lI97|H7FBF42D70C68
+7FBF42D70C68:lI110|H7FBF42D70CC8
+7FBF42D70CC8:lI46|H7FBF42D70D28
+7FBF42D70D28:lI98|H7FBF42D70D78
+7FBF42D70D78:lI101|H7FBF42D70DC8
+7FBF42D70DC8:lI97|H7FBF42D70E18
+7FBF42D70E18:lI109|N
+7FBF42D6FAA0:lH7FBF42D6FB00|H7FBF42D6FB18
+7FBF42D6FB00:t2:A3:epp,H7FBF42D6FB68
+7FBF42D6FB68:lI47|H7FBF42D6FBE0
+7FBF42D6FBE0:lI117|H7FBF42D6FC80
+7FBF42D6FC80:lI115|H7FBF42D6FCF8
+7FBF42D6FCF8:lI114|H7FBF42D6FD68
+7FBF42D6FD68:lI47|H7FBF42D6FDD8
+7FBF42D6FDD8:lI108|H7FBF42D6FE48
+7FBF42D6FE48:lI105|H7FBF42D6FEB8
+7FBF42D6FEB8:lI98|H7FBF42D6FF28
+7FBF42D6FF28:lI47|H7FBF42D6FF98
+7FBF42D6FF98:lI101|H7FBF42D70008
+7FBF42D70008:lI114|H7FBF42D70078
+7FBF42D70078:lI108|H7FBF42D700E8
+7FBF42D700E8:lI97|H7FBF42D70158
+7FBF42D70158:lI110|H7FBF42D701C8
+7FBF42D701C8:lI103|H7FBF42D70238
+7FBF42D70238:lI47|H7FBF42D702A8
+7FBF42D702A8:lI108|H7FBF42D70318
+7FBF42D70318:lI105|H7FBF42D70378
+7FBF42D70378:lI98|H7FBF42D703D8
+7FBF42D703D8:lI47|H7FBF42D70438
+7FBF42D70438:lI115|H7FBF42D70498
+7FBF42D70498:lI116|H7FBF42D704F8
+7FBF42D704F8:lI100|H7FBF42D70558
+7FBF42D70558:lI108|H7FBF42D705B8
+7FBF42D705B8:lI105|H7FBF42D70618
+7FBF42D70618:lI98|H7FBF42D70678
+7FBF42D70678:lI45|H7FBF42D706D8
+7FBF42D706D8:lI50|H7FBF42D70738
+7FBF42D70738:lI46|H7FBF42D70798
+7FBF42D70798:lI56|H7FBF42D707F8
+7FBF42D707F8:lI47|H7FBF42D70858
+7FBF42D70858:lI101|H7FBF42D708B8
+7FBF42D708B8:lI98|H7FBF42D70918
+7FBF42D70918:lI105|H7FBF42D70978
+7FBF42D70978:lI110|H7FBF42D709D8
+7FBF42D709D8:lI47|H7FBF42D70A38
+7FBF42D70A38:lI101|H7FBF42D70A98
+7FBF42D70A98:lI112|H7FBF42D70AF8
+7FBF42D70AF8:lI112|H7FBF42D70B58
+7FBF42D70B58:lI46|H7FBF42D70BB8
+7FBF42D70BB8:lI98|H7FBF42D70C18
+7FBF42D70C18:lI101|H7FBF42D70C78
+7FBF42D70C78:lI97|H7FBF42D70CD8
+7FBF42D70CD8:lI109|N
+7FBF42D6FB18:lH7FBF42D6FB78|H7FBF42D6FB90
+7FBF42D6FB78:t2:AD:io_lib_pretty,H7FBF42D6FBF0
+7FBF42D6FBF0:lI47|H7FBF42D6FC90
+7FBF42D6FC90:lI117|H7FBF42D6FD08
+7FBF42D6FD08:lI115|H7FBF42D6FD78
+7FBF42D6FD78:lI114|H7FBF42D6FDE8
+7FBF42D6FDE8:lI47|H7FBF42D6FE58
+7FBF42D6FE58:lI108|H7FBF42D6FEC8
+7FBF42D6FEC8:lI105|H7FBF42D6FF38
+7FBF42D6FF38:lI98|H7FBF42D6FFA8
+7FBF42D6FFA8:lI47|H7FBF42D70018
+7FBF42D70018:lI101|H7FBF42D70088
+7FBF42D70088:lI114|H7FBF42D700F8
+7FBF42D700F8:lI108|H7FBF42D70168
+7FBF42D70168:lI97|H7FBF42D701D8
+7FBF42D701D8:lI110|H7FBF42D70248
+7FBF42D70248:lI103|H7FBF42D702B8
+7FBF42D702B8:lI47|H7FBF42D70328
+7FBF42D70328:lI108|H7FBF42D70388
+7FBF42D70388:lI105|H7FBF42D703E8
+7FBF42D703E8:lI98|H7FBF42D70448
+7FBF42D70448:lI47|H7FBF42D704A8
+7FBF42D704A8:lI115|H7FBF42D70508
+7FBF42D70508:lI116|H7FBF42D70568
+7FBF42D70568:lI100|H7FBF42D705C8
+7FBF42D705C8:lI108|H7FBF42D70628
+7FBF42D70628:lI105|H7FBF42D70688
+7FBF42D70688:lI98|H7FBF42D706E8
+7FBF42D706E8:lI45|H7FBF42D70748
+7FBF42D70748:lI50|H7FBF42D707A8
+7FBF42D707A8:lI46|H7FBF42D70808
+7FBF42D70808:lI56|H7FBF42D70868
+7FBF42D70868:lI47|H7FBF42D708C8
+7FBF42D708C8:lI101|H7FBF42D70928
+7FBF42D70928:lI98|H7FBF42D70988
+7FBF42D70988:lI105|H7FBF42D709E8
+7FBF42D709E8:lI110|H7FBF42D70A48
+7FBF42D70A48:lI47|H7FBF42D70AA8
+7FBF42D70AA8:lI105|H7FBF42D70B08
+7FBF42D70B08:lI111|H7FBF42D70B68
+7FBF42D70B68:lI95|H7FBF42D70BC8
+7FBF42D70BC8:lI108|H7FBF42D70C28
+7FBF42D70C28:lI105|H7FBF42D70C88
+7FBF42D70C88:lI98|H7FBF42D70CE8
+7FBF42D70CE8:lI95|H7FBF42D70D38
+7FBF42D70D38:lI112|H7FBF42D70D88
+7FBF42D70D88:lI114|H7FBF42D70DD8
+7FBF42D70DD8:lI101|H7FBF42D70E28
+7FBF42D70E28:lI116|H7FBF42D70E68
+7FBF42D70E68:lI116|H7FBF42D70EA8
+7FBF42D70EA8:lI121|H7FBF42D70EE8
+7FBF42D70EE8:lI46|H7FBF42D70F18
+7FBF42D70F18:lI98|H7FBF42D70F48
+7FBF42D70F48:lI101|H7FBF42D70F78
+7FBF42D70F78:lI97|H7FBF42D70FA8
+7FBF42D70FA8:lI109|N
+7FBF42D6FB90:lH7FBF42D6FC00|H7FBF42D6FC18
+7FBF42D6FC00:t2:AD:io_lib_format,H7FBF42D6FCA0
+7FBF42D6FCA0:lI47|H7FBF42D6FD18
+7FBF42D6FD18:lI117|H7FBF42D6FD88
+7FBF42D6FD88:lI115|H7FBF42D6FDF8
+7FBF42D6FDF8:lI114|H7FBF42D6FE68
+7FBF42D6FE68:lI47|H7FBF42D6FED8
+7FBF42D6FED8:lI108|H7FBF42D6FF48
+7FBF42D6FF48:lI105|H7FBF42D6FFB8
+7FBF42D6FFB8:lI98|H7FBF42D70028
+7FBF42D70028:lI47|H7FBF42D70098
+7FBF42D70098:lI101|H7FBF42D70108
+7FBF42D70108:lI114|H7FBF42D70178
+7FBF42D70178:lI108|H7FBF42D701E8
+7FBF42D701E8:lI97|H7FBF42D70258
+7FBF42D70258:lI110|H7FBF42D702C8
+7FBF42D702C8:lI103|H7FBF42D70338
+7FBF42D70338:lI47|H7FBF42D70398
+7FBF42D70398:lI108|H7FBF42D703F8
+7FBF42D703F8:lI105|H7FBF42D70458
+7FBF42D70458:lI98|H7FBF42D704B8
+7FBF42D704B8:lI47|H7FBF42D70518
+7FBF42D70518:lI115|H7FBF42D70578
+7FBF42D70578:lI116|H7FBF42D705D8
+7FBF42D705D8:lI100|H7FBF42D70638
+7FBF42D70638:lI108|H7FBF42D70698
+7FBF42D70698:lI105|H7FBF42D706F8
+7FBF42D706F8:lI98|H7FBF42D70758
+7FBF42D70758:lI45|H7FBF42D707B8
+7FBF42D707B8:lI50|H7FBF42D70818
+7FBF42D70818:lI46|H7FBF42D70878
+7FBF42D70878:lI56|H7FBF42D708D8
+7FBF42D708D8:lI47|H7FBF42D70938
+7FBF42D70938:lI101|H7FBF42D70998
+7FBF42D70998:lI98|H7FBF42D709F8
+7FBF42D709F8:lI105|H7FBF42D70A58
+7FBF42D70A58:lI110|H7FBF42D70AB8
+7FBF42D70AB8:lI47|H7FBF42D70B18
+7FBF42D70B18:lI105|H7FBF42D70B78
+7FBF42D70B78:lI111|H7FBF42D70BD8
+7FBF42D70BD8:lI95|H7FBF42D70C38
+7FBF42D70C38:lI108|H7FBF42D70C98
+7FBF42D70C98:lI105|H7FBF42D70CF8
+7FBF42D70CF8:lI98|H7FBF42D70D48
+7FBF42D70D48:lI95|H7FBF42D70D98
+7FBF42D70D98:lI102|H7FBF42D70DE8
+7FBF42D70DE8:lI111|H7FBF42D70E38
+7FBF42D70E38:lI114|H7FBF42D70E78
+7FBF42D70E78:lI109|H7FBF42D70EB8
+7FBF42D70EB8:lI97|H7FBF42D70EF8
+7FBF42D70EF8:lI116|H7FBF42D70F28
+7FBF42D70F28:lI46|H7FBF42D70F58
+7FBF42D70F58:lI98|H7FBF42D70F88
+7FBF42D70F88:lI101|H7FBF42D70FB8
+7FBF42D70FB8:lI97|H7FBF42D70FD8
+7FBF42D70FD8:lI109|N
+7FBF42D6FC18:lH7FBF42D6FCB0|N
+7FBF42D6FCB0:t2:A6:io_lib,H7FBF42D6FD28
+7FBF42D6FD28:lI47|H7FBF42D6FD98
+7FBF42D6FD98:lI117|H7FBF42D6FE08
+7FBF42D6FE08:lI115|H7FBF42D6FE78
+7FBF42D6FE78:lI114|H7FBF42D6FEE8
+7FBF42D6FEE8:lI47|H7FBF42D6FF58
+7FBF42D6FF58:lI108|H7FBF42D6FFC8
+7FBF42D6FFC8:lI105|H7FBF42D70038
+7FBF42D70038:lI98|H7FBF42D700A8
+7FBF42D700A8:lI47|H7FBF42D70118
+7FBF42D70118:lI101|H7FBF42D70188
+7FBF42D70188:lI114|H7FBF42D701F8
+7FBF42D701F8:lI108|H7FBF42D70268
+7FBF42D70268:lI97|H7FBF42D702D8
+7FBF42D702D8:lI110|H7FBF42D70348
+7FBF42D70348:lI103|H7FBF42D703A8
+7FBF42D703A8:lI47|H7FBF42D70408
+7FBF42D70408:lI108|H7FBF42D70468
+7FBF42D70468:lI105|H7FBF42D704C8
+7FBF42D704C8:lI98|H7FBF42D70528
+7FBF42D70528:lI47|H7FBF42D70588
+7FBF42D70588:lI115|H7FBF42D705E8
+7FBF42D705E8:lI116|H7FBF42D70648
+7FBF42D70648:lI100|H7FBF42D706A8
+7FBF42D706A8:lI108|H7FBF42D70708
+7FBF42D70708:lI105|H7FBF42D70768
+7FBF42D70768:lI98|H7FBF42D707C8
+7FBF42D707C8:lI45|H7FBF42D70828
+7FBF42D70828:lI50|H7FBF42D70888
+7FBF42D70888:lI46|H7FBF42D708E8
+7FBF42D708E8:lI56|H7FBF42D70948
+7FBF42D70948:lI47|H7FBF42D709A8
+7FBF42D709A8:lI101|H7FBF42D70A08
+7FBF42D70A08:lI98|H7FBF42D70A68
+7FBF42D70A68:lI105|H7FBF42D70AC8
+7FBF42D70AC8:lI110|H7FBF42D70B28
+7FBF42D70B28:lI47|H7FBF42D70B88
+7FBF42D70B88:lI105|H7FBF42D70BE8
+7FBF42D70BE8:lI111|H7FBF42D70C48
+7FBF42D70C48:lI95|H7FBF42D70CA8
+7FBF42D70CA8:lI108|H7FBF42D70D08
+7FBF42D70D08:lI105|H7FBF42D70D58
+7FBF42D70D58:lI98|H7FBF42D70DA8
+7FBF42D70DA8:lI46|H7FBF42D70DF8
+7FBF42D70DF8:lI98|H7FBF42D70E48
+7FBF42D70E48:lI101|H7FBF42D70E88
+7FBF42D70E88:lI97|H7FBF42D70EC8
+7FBF42D70EC8:lI109|N
+7FBF42D410D0:t2:H7FBF42D41170,H7FBF42D41180
+7FBF42D41180:lI49|H7FBF42D41248
+7FBF42D41248:lI56|N
+7FBF42D41170:lI69|H7FBF42D41238
+7FBF42D41238:lI114|H7FBF42D41310
+7FBF42D41310:lI108|H7FBF42D413B8
+7FBF42D413B8:lI97|H7FBF42D413F8
+7FBF42D413F8:lI110|H7FBF42D41408
+7FBF42D41408:lI103|H7FBF42D41418
+7FBF42D41418:lI47|H7FBF42D41428
+7FBF42D41428:lI79|H7FBF42D41438
+7FBF42D41438:lI84|H7FBF42D41448
+7FBF42D41448:lI80|N
+7FBF42D410B8:t2:A8:starting,A13:applications_loaded
+7FBF42D410A8:lH7FBF42D41148|H7FBF42D41160
+7FBF42D41148:t2:A16:application_controller,P<0.7.0>
+7FBF42D41160:lH7FBF42D41210|H7FBF42D41228
+7FBF42D41210:t2:AC:error_logger,P<0.6.0>
+7FBF42D41228:lH7FBF42D412F8|N
+7FBF42D412F8:t2:AF:erl_prim_loader,P<0.3.0>
+7FBF42D41098:lH7FBF42D41120|H7FBF42D41138
+7FBF42D41120:t2:A5:-root,H7FBF42D411D8
+7FBF42D411D8:lH7FBF42D412A0|N
+7FBF42D412A0:YhF:2F7573722F6C69622F65726C616E67
+7FBF42D41138:lH7FBF42D411E8|H7FBF42D41200
+7FBF42D411E8:t2:A9:-progname,H7FBF42D412C0
+7FBF42D412C0:lH7FBF42D41378|N
+7FBF42D41378:Yh3:65726C
+7FBF42D41200:lH7FBF42D412D0|H7FBF42D412E8
+7FBF42D412D0:t2:A5:-home,H7FBF42D41390
+7FBF42D41390:lH7FBF42D413C8|N
+7FBF42D413C8:Yh9:2F686F6D652F62736B
+7FBF42D412E8:lH7FBF42D413A0|H7FBF42D41008
+7FBF42D413A0:t2:A5:-name,H7FBF42D413E8
+7FBF42D413E8:lH7FBF42D40FC0|N
+7FBF42D40FC0:Yh32:30303936656537372D316635302D343865322D613038612D343235333661373534393730403139322E3136382E312E313234
+7FBF42D41008:lH7FBF42D41070|H7FBF42D41088
+7FBF42D41070:t2:AA:-setcookie,H7FBF42D410E8
+7FBF42D410E8:lH7FBF42D41190|N
+7FBF42D41190:Yh4:31323334
+7FBF42D41088:lH7FBF42D410F8|H7FBF42D41110
+7FBF42D410F8:t2:A7:-mnesia,H7FBF42D411A8
+7FBF42D411A8:lH7FBF42D41258|H7FBF42D41270
+7FBF42D41258:Yh3:646972
+7FBF42D41270:lH7FBF42D41320|N
+7FBF42D41320:Yh32:222F6F70742F65726C616E672F30303936656537372D316635302D343865322D613038612D34323533366137353439373022
+7FBF42D41110:lH7FBF42D411B8|H7FBF42D411C8
+7FBF42D411B8:t1:A8:-noshell
+7FBF42D411C8:lH7FBF42D41280|H7FBF42D41290
+7FBF42D41280:t1:A8:-noinput
+7FBF42D41290:lH7FBF42D41368|N
+7FBF42D41368:t1:A8:-noshell
+7FBF42D6FA10:t3:A4:EXIT,P<0.2.0>,H7FBF42D6FA60
+7FBF42D6FA60:t2:H7FBF42D6FAB0,H7FBF42D6FAC0
+7FBF42D6FAC0:t3:AA:gen_server,A4:call,H7FBF42D6FB38
+7FBF42D6FB38:lA16:application_controller|H7FBF42D6FBB0
+7FBF42D6FBB0:lH7FBF42D6FC38|H7FBF42D6FC50
+7FBF42D6FC38:t2:A10:load_application,A6:stdlib
+7FBF42D6FC50:lA8:infinity|N
+7FBF42D6FAB0:lI123|H7FBF42D6FB28
+7FBF42D6FB28:lI97|H7FBF42D6FBA0
+7FBF42D6FBA0:lI112|H7FBF42D6FC28
+7FBF42D6FC28:lI112|H7FBF42D6FCC8
+7FBF42D6FCC8:lI108|H7FBF42D6FD38
+7FBF42D6FD38:lI105|H7FBF42D6FDA8
+7FBF42D6FDA8:lI99|H7FBF42D6FE18
+7FBF42D6FE18:lI97|H7FBF42D6FE88
+7FBF42D6FE88:lI116|H7FBF42D6FEF8
+7FBF42D6FEF8:lI105|H7FBF42D6FF68
+7FBF42D6FF68:lI111|H7FBF42D6FFD8
+7FBF42D6FFD8:lI110|H7FBF42D70048
+7FBF42D70048:lI95|H7FBF42D700B8
+7FBF42D700B8:lI115|H7FBF42D70128
+7FBF42D70128:lI116|H7FBF42D70198
+7FBF42D70198:lI97|H7FBF42D70208
+7FBF42D70208:lI114|H7FBF42D70278
+7FBF42D70278:lI116|H7FBF42D702E8
+7FBF42D702E8:lI95|H7FBF42D70358
+7FBF42D70358:lI102|H7FBF42D703B8
+7FBF42D703B8:lI97|H7FBF42D70418
+7FBF42D70418:lI105|H7FBF42D70478
+7FBF42D70478:lI108|H7FBF42D704D8
+7FBF42D704D8:lI117|H7FBF42D70538
+7FBF42D70538:lI114|H7FBF42D70598
+7FBF42D70598:lI101|H7FBF42D705F8
+7FBF42D705F8:lI44|H7FBF42D70658
+7FBF42D70658:lI107|H7FBF42D706B8
+7FBF42D706B8:lI101|H7FBF42D70718
+7FBF42D70718:lI114|H7FBF42D70778
+7FBF42D70778:lI110|H7FBF42D707D8
+7FBF42D707D8:lI101|H7FBF42D70838
+7FBF42D70838:lI108|H7FBF42D70898
+7FBF42D70898:lI44|H7FBF42D708F8
+7FBF42D708F8:lI123|H7FBF42D70958
+7FBF42D70958:lI123|H7FBF42D709B8
+7FBF42D709B8:lI115|H7FBF42D70A18
+7FBF42D70A18:lI104|H7FBF42D70A78
+7FBF42D70A78:lI117|H7FBF42D70AD8
+7FBF42D70AD8:lI116|H7FBF42D70B38
+7FBF42D70B38:lI100|H7FBF42D70B98
+7FBF42D70B98:lI111|H7FBF42D70BF8
+7FBF42D70BF8:lI119|H7FBF42D70C58
+7FBF42D70C58:lI110|H7FBF42D70CB8
+7FBF42D70CB8:lI44|H7FBF42D70D18
+7FBF42D70D18:lI123|H7FBF42D70D68
+7FBF42D70D68:lI102|H7FBF42D70DB8
+7FBF42D70DB8:lI97|H7FBF42D70E08
+7FBF42D70E08:lI105|H7FBF42D70E58
+7FBF42D70E58:lI108|H7FBF42D70E98
+7FBF42D70E98:lI101|H7FBF42D70ED8
+7FBF42D70ED8:lI100|H7FBF42D70F08
+7FBF42D70F08:lI95|H7FBF42D70F38
+7FBF42D70F38:lI116|H7FBF42D70F68
+7FBF42D70F68:lI111|H7FBF42D70F98
+7FBF42D70F98:lI95|H7FBF42D70FC8
+7FBF42D70FC8:lI115|H7FBF42D70FE8
+7FBF42D70FE8:lI116|H7FBF42D70FF8
+7FBF42D70FF8:lI97|H7FBF42D71008
+7FBF42D71008:lI114|H7FBF42D71018
+7FBF42D71018:lI116|H7FBF42D71028
+7FBF42D71028:lI95|H7FBF42D71038
+7FBF42D71038:lI99|H7FBF42D71048
+7FBF42D71048:lI104|H7FBF42D71058
+7FBF42D71058:lI105|H7FBF42D71068
+7FBF42D71068:lI108|H7FBF42D71078
+7FBF42D71078:lI100|H7FBF42D71088
+7FBF42D71088:lI44|H7FBF42D71098
+7FBF42D71098:lI110|H7FBF42D710A8
+7FBF42D710A8:lI101|H7FBF42D710B8
+7FBF42D710B8:lI116|H7FBF42D710C8
+7FBF42D710C8:lI95|H7FBF42D710D8
+7FBF42D710D8:lI115|H7FBF42D710E8
+7FBF42D710E8:lI117|H7FBF42D710F8
+7FBF42D710F8:lI112|H7FBF42D71108
+7FBF42D71108:lI44|H7FBF42D71118
+7FBF42D71118:lI123|H7FBF42D71128
+7FBF42D71128:lI115|H7FBF42D71138
+7FBF42D71138:lI104|H7FBF42D71148
+7FBF42D71148:lI117|H7FBF42D71158
+7FBF42D71158:lI116|H7FBF42D71168
+7FBF42D71168:lI100|H7FBF42D71178
+7FBF42D71178:lI111|H7FBF42D71188
+7FBF42D71188:lI119|H7FBF42D71198
+7FBF42D71198:lI110|H7FBF42D711A8
+7FBF42D711A8:lI44|H7FBF42D711B8
+7FBF42D711B8:lI123|H7FBF42D711C8
+7FBF42D711C8:lI102|H7FBF42D711D8
+7FBF42D711D8:lI97|H7FBF42D711E8
+7FBF42D711E8:lI105|H7FBF42D711F8
+7FBF42D711F8:lI108|H7FBF42D71208
+7FBF42D71208:lI101|H7FBF42D71218
+7FBF42D71218:lI100|H7FBF42D71228
+7FBF42D71228:lI95|H7FBF42D71238
+7FBF42D71238:lI116|H7FBF42D71248
+7FBF42D71248:lI111|H7FBF42D71258
+7FBF42D71258:lI95|H7FBF42D71268
+7FBF42D71268:lI115|H7FBF42D71278
+7FBF42D71278:lI116|H7FBF42D71288
+7FBF42D71288:lI97|H7FBF42D71298
+7FBF42D71298:lI114|H7FBF42D712A8
+7FBF42D712A8:lI116|H7FBF42D712B8
+7FBF42D712B8:lI95|H7FBF42D712C8
+7FBF42D712C8:lI99|H7FBF42D712D8
+7FBF42D712D8:lI104|H7FBF42D712E8
+7FBF42D712E8:lI105|H7FBF42D712F8
+7FBF42D712F8:lI108|H7FBF42D71308
+7FBF42D71308:lI100|H7FBF42D71318
+7FBF42D71318:lI44|H7FBF42D71328
+7FBF42D71328:lI110|H7FBF42D71338
+7FBF42D71338:lI101|H7FBF42D71348
+7FBF42D71348:lI116|H7FBF42D71358
+7FBF42D71358:lI95|H7FBF42D71368
+7FBF42D71368:lI107|H7FBF42D71378
+7FBF42D71378:lI101|H7FBF42D71388
+7FBF42D71388:lI114|H7FBF42D71398
+7FBF42D71398:lI110|H7FBF42D713A8
+7FBF42D713A8:lI101|H7FBF42D713B8
+7FBF42D713B8:lI108|H7FBF42D713C8
+7FBF42D713C8:lI44|H7FBF42D713D8
+7FBF42D713D8:lI123|H7FBF42D713E8
+7FBF42D713E8:lI39|H7FBF42D713F8
+7FBF42D713F8:lI69|H7FBF42D71408
+7FBF42D71408:lI88|H7FBF42D71418
+7FBF42D71418:lI73|H7FBF42D71428
+7FBF42D71428:lI84|H7FBF42D71438
+7FBF42D71438:lI39|H7FBF42D71448
+7FBF42D71448:lI44|H7FBF42D71458
+7FBF42D71458:lI110|H7FBF42D71468
+7FBF42D71468:lI111|H7FBF42D71478
+7FBF42D71478:lI100|H7FBF42D71488
+7FBF42D71488:lI105|H7FBF42D71498
+7FBF42D71498:lI115|H7FBF42D714A8
+7FBF42D714A8:lI116|H7FBF42D714B8
+7FBF42D714B8:lI114|H7FBF42D714C8
+7FBF42D714C8:lI105|H7FBF42D714D8
+7FBF42D714D8:lI98|H7FBF42D714E8
+7FBF42D714E8:lI117|H7FBF42D714F8
+7FBF42D714F8:lI116|H7FBF42D71508
+7FBF42D71508:lI105|H7FBF42D71518
+7FBF42D71518:lI111|H7FBF42D71528
+7FBF42D71528:lI110|H7FBF42D71538
+7FBF42D71538:lI125|H7FBF42D71548
+7FBF42D71548:lI125|H7FBF42D71558
+7FBF42D71558:lI125|H7FBF42D71568
+7FBF42D71568:lI125|H7FBF42D71578
+7FBF42D71578:lI125|H7FBF42D71588
+7FBF42D71588:lI44|H7FBF42D71598
+7FBF42D71598:lI123|H7FBF42D715A8
+7FBF42D715A8:lI107|H7FBF42D715B8
+7FBF42D715B8:lI101|H7FBF42D715C8
+7FBF42D715C8:lI114|H7FBF42D715D8
+7FBF42D715D8:lI110|H7FBF42D715E8
+7FBF42D715E8:lI101|H7FBF42D715F8
+7FBF42D715F8:lI108|H7FBF42D71608
+7FBF42D71608:lI44|H7FBF42D71618
+7FBF42D71618:lI115|H7FBF42D71628
+7FBF42D71628:lI116|H7FBF42D71638
+7FBF42D71638:lI97|H7FBF42D71648
+7FBF42D71648:lI114|H7FBF42D71658
+7FBF42D71658:lI116|H7FBF42D71668
+7FBF42D71668:lI44|H7FBF42D71678
+7FBF42D71678:lI91|H7FBF42D71688
+7FBF42D71688:lI110|H7FBF42D71698
+7FBF42D71698:lI111|H7FBF42D716A8
+7FBF42D716A8:lI114|H7FBF42D716B8
+7FBF42D716B8:lI109|H7FBF42D716C8
+7FBF42D716C8:lI97|H7FBF42D716D8
+7FBF42D716D8:lI108|H7FBF42D716E8
+7FBF42D716E8:lI44|H7FBF42D716F8
+7FBF42D716F8:lI91|H7FBF42D71708
+7FBF42D71708:lI93|H7FBF42D71718
+7FBF42D71718:lI93|H7FBF42D71728
+7FBF42D71728:lI125|H7FBF42D71738
+7FBF42D71738:lI125|H7FBF42D71748
+7FBF42D71748:lI125|N
+=proc_stack:<0.1.0>
+0x00007fbf511c07e0:SReturn addr 0x894628 (<terminate process normally>)
+y0:A5:false
+y1:N
+=proc_heap:<0.1.0>
+=proc_stack:<0.3.0>
+0x00007fbf42dbe118:SReturn addr 0x894628 (<terminate process normally>)
+y0:N
+y1:H7FBF42D59858
+y2:P<0.2.0>
+y3:H7FBF42DBB260
+y4:A8:infinity
+=proc_heap:<0.3.0>
+7FBF42D59858:lH7FBF42D59868|H7FBF42D59878
+7FBF42D59868:lI47|H7FBF42D59888
+7FBF42D59888:lI117|H7FBF42D598A8
+7FBF42D598A8:lI115|H7FBF42D598C8
+7FBF42D598C8:lI114|H7FBF42D598E8
+7FBF42D598E8:lI47|H7FBF42D59908
+7FBF42D59908:lI108|H7FBF42D59928
+7FBF42D59928:lI105|H7FBF42D59948
+7FBF42D59948:lI98|H7FBF42D59968
+7FBF42D59968:lI47|H7FBF42D59988
+7FBF42D59988:lI101|H7FBF42D599A8
+7FBF42D599A8:lI114|H7FBF42D599C8
+7FBF42D599C8:lI108|H7FBF42D599E8
+7FBF42D599E8:lI97|H7FBF42D59A08
+7FBF42D59A08:lI110|H7FBF42D59A28
+7FBF42D59A28:lI103|H7FBF42D59A48
+7FBF42D59A48:lI47|H7FBF42D59A68
+7FBF42D59A68:lI108|H7FBF42D59A88
+7FBF42D59A88:lI105|H7FBF42D59AA8
+7FBF42D59AA8:lI98|H7FBF42D59AC8
+7FBF42D59AC8:lI47|H7FBF42D59AE8
+7FBF42D59AE8:lI107|H7FBF42D59B08
+7FBF42D59B08:lI101|H7FBF42D59B28
+7FBF42D59B28:lI114|H7FBF42D59B48
+7FBF42D59B48:lI110|H7FBF42D59B68
+7FBF42D59B68:lI101|H7FBF42D59B88
+7FBF42D59B88:lI108|H7FBF42D59BA8
+7FBF42D59BA8:lI45|H7FBF42D59BC8
+7FBF42D59BC8:lI52|H7FBF42D59BE8
+7FBF42D59BE8:lI46|H7FBF42D59C08
+7FBF42D59C08:lI50|H7FBF42D59C28
+7FBF42D59C28:lI47|H7FBF42D59C48
+7FBF42D59C48:lI101|H7FBF42D59C68
+7FBF42D59C68:lI98|H7FBF42D59C88
+7FBF42D59C88:lI105|H7FBF42D59CA8
+7FBF42D59CA8:lI110|N
+7FBF42D59878:lH7FBF42D59898|N
+7FBF42D59898:lI47|H7FBF42D598B8
+7FBF42D598B8:lI117|H7FBF42D598D8
+7FBF42D598D8:lI115|H7FBF42D598F8
+7FBF42D598F8:lI114|H7FBF42D59918
+7FBF42D59918:lI47|H7FBF42D59938
+7FBF42D59938:lI108|H7FBF42D59958
+7FBF42D59958:lI105|H7FBF42D59978
+7FBF42D59978:lI98|H7FBF42D59998
+7FBF42D59998:lI47|H7FBF42D599B8
+7FBF42D599B8:lI101|H7FBF42D599D8
+7FBF42D599D8:lI114|H7FBF42D599F8
+7FBF42D599F8:lI108|H7FBF42D59A18
+7FBF42D59A18:lI97|H7FBF42D59A38
+7FBF42D59A38:lI110|H7FBF42D59A58
+7FBF42D59A58:lI103|H7FBF42D59A78
+7FBF42D59A78:lI47|H7FBF42D59A98
+7FBF42D59A98:lI108|H7FBF42D59AB8
+7FBF42D59AB8:lI105|H7FBF42D59AD8
+7FBF42D59AD8:lI98|H7FBF42D59AF8
+7FBF42D59AF8:lI47|H7FBF42D59B18
+7FBF42D59B18:lI115|H7FBF42D59B38
+7FBF42D59B38:lI116|H7FBF42D59B58
+7FBF42D59B58:lI100|H7FBF42D59B78
+7FBF42D59B78:lI108|H7FBF42D59B98
+7FBF42D59B98:lI105|H7FBF42D59BB8
+7FBF42D59BB8:lI98|H7FBF42D59BD8
+7FBF42D59BD8:lI45|H7FBF42D59BF8
+7FBF42D59BF8:lI50|H7FBF42D59C18
+7FBF42D59C18:lI46|H7FBF42D59C38
+7FBF42D59C38:lI56|H7FBF42D59C58
+7FBF42D59C58:lI47|H7FBF42D59C78
+7FBF42D59C78:lI101|H7FBF42D59C98
+7FBF42D59C98:lI98|H7FBF42D59CB8
+7FBF42D59CB8:lI105|H7FBF42D59CC8
+7FBF42D59CC8:lI110|N
+7FBF42DBB260:t9:A5:state,A5:efile,N,A4:none,p<0.0>,A8:infinity,A9:undefined,A4:true,H7FBF42D59830
+7FBF42D59830:t4:AA:prim_state,A5:false,A9:undefined,A9:undefined
+=proc_dictionary:<0.6.0>
+H7FBF42D7F590
+H7FBF42D7F5A8
+=proc_stack:<0.6.0>
+0x00007fbf42d6ee60:SReturn addr 0x514B1318 (proc_lib:init_p_do_apply/3 + 56)
+y0:A5:false
+y1:N
+y2:H7FBF42D6DD58
+y3:AC:error_logger
+y4:P<0.2.0>
+0x00007fbf42d6ee90:SReturn addr 0x894628 (<terminate process normally>)
+y0:SCatch 0x514B1338 (proc_lib:init_p_do_apply/3 + 88)
+=proc_heap:<0.6.0>
+7FBF42D6DD58:lH7FBF42D6DD10|N
+7FBF42D6DD10:t5:A7:handler,AC:error_logger,A5:false,H7FBF42D6DCD8,A5:false
+7FBF42D6DCD8:t3:I4,I0,H7FBF42D6DCC8
+7FBF42D6DCC8:lH7FBF42D6DC88|H7FBF42D6D9C8
+7FBF42D6DC88:t2:H7FBF42D6DC70,H7FBF42D6DA98
+7FBF42D6DA98:t3:AB:info_report,P<0.0.0>,H7FBF42D6DAB8
+7FBF42D6DAB8:t3:P<0.7.0>,A8:std_info,H7FBF42D6DAD8
+7FBF42D6DAD8:lH7FBF42D6DB08|H7FBF42D6DAE8
+7FBF42D6DB08:t2:AB:application,A6:kernel
+7FBF42D6DAE8:lH7FBF42D6DB20|H7FBF42D6DAF8
+7FBF42D6DB20:t2:A6:exited,H7FBF42D6DB50
+7FBF42D6DB50:t2:H7FBF42D6DB68,H7FBF42D6DB80
+7FBF42D6DB80:t3:A6:kernel,A5:start,H7FBF42D6DC20
+7FBF42D6DC20:lA6:normal|H7FBF42D6DC10
+7FBF42D6DC10:lN|N
+7FBF42D6DB68:t2:A8:shutdown,H7FBF42D6DBA0
+7FBF42D6DBA0:t3:A15:failed_to_start_child,A7:net_sup,H7FBF42D6DBC0
+7FBF42D6DBC0:t2:A8:shutdown,H7FBF42D6DBD8
+7FBF42D6DBD8:t3:A15:failed_to_start_child,AA:net_kernel,H7FBF42D6DBF8
+7FBF42D6DBF8:t2:A4:EXIT,AE:nodistribution
+7FBF42D6DAF8:lH7FBF42D6DB38|N
+7FBF42D6DB38:t2:A4:type,A9:permanent
+7FBF42D6DC70:t2:H7FBF42D6DC30,H7FBF42D6DC50
+7FBF42D6DC50:t3:I19,I32,I44
+7FBF42D6DC30:t3:I2018,I11,I26
+7FBF42D6D9C8:lH7FBF42D6D988|H7FBF42D6BD10
+7FBF42D6D988:t2:H7FBF42D6D970,H7FBF42D6D1D8
+7FBF42D6D1D8:t3:AC:error_report,P<0.9.0>,H7FBF42D6D1F8
+7FBF42D6D1F8:t3:P<0.9.0>,AC:crash_report,H7FBF42D6D218
+7FBF42D6D218:lH7FBF42D6D228|H7FBF42D6D920
+7FBF42D6D228:lH7FBF42D6D2F8|H7FBF42D6D238
+7FBF42D6D2F8:t2:AC:initial_call,H7FBF42D6D430
+7FBF42D6D430:t3:A12:application_master,A4:init,H7FBF42D6D8E0
+7FBF42D6D8E0:lAB:Argument__1|H7FBF42D6D8D0
+7FBF42D6D8D0:lAB:Argument__2|H7FBF42D6D8C0
+7FBF42D6D8C0:lAB:Argument__3|H7FBF42D6D8B0
+7FBF42D6D8B0:lAB:Argument__4|N
+7FBF42D6D238:lH7FBF42D6D310|H7FBF42D6D248
+7FBF42D6D310:t2:A3:pid,P<0.9.0>
+7FBF42D6D248:lH7FBF42D6D328|H7FBF42D6D258
+7FBF42D6D328:t2:AF:registered_name,N
+7FBF42D6D258:lH7FBF42D6D340|H7FBF42D6D268
+7FBF42D6D340:t2:AA:error_info,H7FBF42D6D450
+7FBF42D6D450:t3:A4:exit,H7FBF42D6D480,H7FBF42D6D498
+7FBF42D6D498:lH7FBF42D6D510|H7FBF42D6D4A8
+7FBF42D6D510:t4:A12:application_master,A4:init,I4,H7FBF42D6D580
+7FBF42D6D580:lH7FBF42D6D5D8|H7FBF42D6D590
+7FBF42D6D5D8:t2:A4:file,H7FBF42D6D880
+7FBF42D6D880:lI97|H7FBF42D6D870
+7FBF42D6D870:lI112|H7FBF42D6D860
+7FBF42D6D860:lI112|H7FBF42D6D850
+7FBF42D6D850:lI108|H7FBF42D6D840
+7FBF42D6D840:lI105|H7FBF42D6D830
+7FBF42D6D830:lI99|H7FBF42D6D820
+7FBF42D6D820:lI97|H7FBF42D6D810
+7FBF42D6D810:lI116|H7FBF42D6D800
+7FBF42D6D800:lI105|H7FBF42D6D7F0
+7FBF42D6D7F0:lI111|H7FBF42D6D7E0
+7FBF42D6D7E0:lI110|H7FBF42D6D7D0
+7FBF42D6D7D0:lI95|H7FBF42D6D7C0
+7FBF42D6D7C0:lI109|H7FBF42D6D7B0
+7FBF42D6D7B0:lI97|H7FBF42D6D7A0
+7FBF42D6D7A0:lI115|H7FBF42D6D790
+7FBF42D6D790:lI116|H7FBF42D6D780
+7FBF42D6D780:lI101|H7FBF42D6D770
+7FBF42D6D770:lI114|H7FBF42D6D760
+7FBF42D6D760:lI46|H7FBF42D6D750
+7FBF42D6D750:lI101|H7FBF42D6D740
+7FBF42D6D740:lI114|H7FBF42D6D730
+7FBF42D6D730:lI108|N
+7FBF42D6D590:lH7FBF42D6D5F0|N
+7FBF42D6D5F0:t2:A4:line,I134
+7FBF42D6D4A8:lH7FBF42D6D538|N
+7FBF42D6D538:t4:A8:proc_lib,AF:init_p_do_apply,I3,H7FBF42D6D5A0
+7FBF42D6D5A0:lH7FBF42D6D608|H7FBF42D6D5B0
+7FBF42D6D608:t2:A4:file,H7FBF42D6D720
+7FBF42D6D720:lI112|H7FBF42D6D710
+7FBF42D6D710:lI114|H7FBF42D6D700
+7FBF42D6D700:lI111|H7FBF42D6D6F0
+7FBF42D6D6F0:lI99|H7FBF42D6D6E0
+7FBF42D6D6E0:lI95|H7FBF42D6D6D0
+7FBF42D6D6D0:lI108|H7FBF42D6D6C0
+7FBF42D6D6C0:lI105|H7FBF42D6D6B0
+7FBF42D6D6B0:lI98|H7FBF42D6D6A0
+7FBF42D6D6A0:lI46|H7FBF42D6D690
+7FBF42D6D690:lI101|H7FBF42D6D680
+7FBF42D6D680:lI114|H7FBF42D6D670
+7FBF42D6D670:lI108|N
+7FBF42D6D5B0:lH7FBF42D6D620|N
+7FBF42D6D620:t2:A4:line,I240
+7FBF42D6D480:t2:H7FBF42D6D4D8,H7FBF42D6D4F0
+7FBF42D6D4F0:t3:A6:kernel,A5:start,H7FBF42D6D8A0
+7FBF42D6D8A0:lA6:normal|H7FBF42D6D890
+7FBF42D6D890:lN|N
+7FBF42D6D4D8:t2:A8:shutdown,H7FBF42D6D560
+7FBF42D6D560:t3:A15:failed_to_start_child,A7:net_sup,H7FBF42D6D5C0
+7FBF42D6D5C0:t2:A8:shutdown,H7FBF42D6D638
+7FBF42D6D638:t3:A15:failed_to_start_child,AA:net_kernel,H7FBF42D6D658
+7FBF42D6D658:t2:A4:EXIT,AE:nodistribution
+7FBF42D6D268:lH7FBF42D6D358|H7FBF42D6D278
+7FBF42D6D358:t2:A9:ancestors,H7FBF42D6D910
+7FBF42D6D910:lP<0.8.0>|N
+7FBF42D6D278:lH7FBF42D6D370|H7FBF42D6D288
+7FBF42D6D370:t2:A8:messages,H7FBF42D6D470
+7FBF42D6D470:lH7FBF42D6D4B8|N
+7FBF42D6D4B8:t3:A4:EXIT,P<0.10.0>,A6:normal
+7FBF42D6D288:lH7FBF42D6D388|H7FBF42D6D298
+7FBF42D6D388:t2:A5:links,H7FBF42D6D900
+7FBF42D6D900:lP<0.8.0>|H7FBF42D6D8F0
+7FBF42D6D8F0:lP<0.7.0>|N
+7FBF42D6D298:lH7FBF42D6D3A0|H7FBF42D6D2A8
+7FBF42D6D3A0:t2:AA:dictionary,N
+7FBF42D6D2A8:lH7FBF42D6D3B8|H7FBF42D6D2B8
+7FBF42D6D3B8:t2:A9:trap_exit,A4:true
+7FBF42D6D2B8:lH7FBF42D6D3D0|H7FBF42D6D2C8
+7FBF42D6D3D0:t2:A6:status,A7:running
+7FBF42D6D2C8:lH7FBF42D6D3E8|H7FBF42D6D2D8
+7FBF42D6D3E8:t2:A9:heap_size,I376
+7FBF42D6D2D8:lH7FBF42D6D400|H7FBF42D6D2E8
+7FBF42D6D400:t2:AA:stack_size,I27
+7FBF42D6D2E8:lH7FBF42D6D418|N
+7FBF42D6D418:t2:AA:reductions,I117
+7FBF42D6D920:lN|N
+7FBF42D6D970:t2:H7FBF42D6D930,H7FBF42D6D950
+7FBF42D6D950:t3:I19,I32,I44
+7FBF42D6D930:t3:I2018,I11,I26
+7FBF42D6BD10:lH7FBF42D6BD20|H7FBF42D6BD38
+7FBF42D6BD20:t2:H7FBF42D6BD48,H7FBF42D6BD60
+7FBF42D6BD60:t3:AC:error_report,P<0.9.0>,H7FBF42D6BDE8
+7FBF42D6BDE8:t3:P<0.11.0>,A11:supervisor_report,H7FBF42D6BE68
+7FBF42D6BE68:lH7FBF42D6BF28|H7FBF42D6BF40
+7FBF42D6BF28:t2:AA:supervisor,H7FBF42D6BFF8
+7FBF42D6BFF8:t2:A5:local,AA:kernel_sup
+7FBF42D6BF40:lH7FBF42D6C010|H7FBF42D6C028
+7FBF42D6C010:t2:AC:errorContext,AB:start_error
+7FBF42D6C028:lH7FBF42D6C0D0|H7FBF42D6C0E8
+7FBF42D6C0D0:t2:A6:reason,H7FBF42D6C178
+7FBF42D6C178:t2:A8:shutdown,H7FBF42D6C218
+7FBF42D6C218:t3:A15:failed_to_start_child,AA:net_kernel,H7FBF42D6C2E0
+7FBF42D6C2E0:t2:A4:EXIT,AE:nodistribution
+7FBF42D6C0E8:lH7FBF42D6C190|N
+7FBF42D6C190:t2:A8:offender,H7FBF42D6C238
+7FBF42D6C238:lH7FBF42D6C2F8|H7FBF42D6C310
+7FBF42D6C2F8:t2:A3:pid,A9:undefined
+7FBF42D6C310:lH7FBF42D6C388|H7FBF42D6C3A0
+7FBF42D6C388:t2:A2:id,A7:net_sup
+7FBF42D6C3A0:lH7FBF42D6C420|H7FBF42D6C438
+7FBF42D6C420:t2:A6:mfargs,H7FBF42D6C4D8
+7FBF42D6C4D8:t3:A10:erl_distribution,AA:start_link,N
+7FBF42D6C438:lH7FBF42D6C4F8|H7FBF42D6C510
+7FBF42D6C4F8:t2:AC:restart_type,A9:permanent
+7FBF42D6C510:lH7FBF42D6C5C8|H7FBF42D6C5E0
+7FBF42D6C5C8:t2:A8:shutdown,A8:infinity
+7FBF42D6C5E0:lH7FBF42D6C6C8|N
+7FBF42D6C6C8:t2:AA:child_type,AA:supervisor
+7FBF42D6BD48:t2:H7FBF42D6BDA8,H7FBF42D6BDC8
+7FBF42D6BDC8:t3:I19,I32,I44
+7FBF42D6BDA8:t3:I2018,I11,I26
+7FBF42D6BD38:lH7FBF42D6BD80|H7FBF42D6BD98
+7FBF42D6BD80:t2:H7FBF42D6BE08,H7FBF42D6BE20
+7FBF42D6BE20:t3:AC:error_report,P<0.9.0>,H7FBF42D6BEB8
+7FBF42D6BEB8:t3:P<0.19.0>,A11:supervisor_report,H7FBF42D6BF50
+7FBF42D6BF50:lH7FBF42D6C038|H7FBF42D6C050
+7FBF42D6C038:t2:AA:supervisor,H7FBF42D6C0F8
+7FBF42D6C0F8:t2:A5:local,A7:net_sup
+7FBF42D6C050:lH7FBF42D6C110|H7FBF42D6C128
+7FBF42D6C110:t2:AC:errorContext,AB:start_error
+7FBF42D6C128:lH7FBF42D6C1A8|H7FBF42D6C1C0
+7FBF42D6C1A8:t2:A6:reason,H7FBF42D6C248
+7FBF42D6C248:t2:A4:EXIT,AE:nodistribution
+7FBF42D6C1C0:lH7FBF42D6C260|N
+7FBF42D6C260:t2:A8:offender,H7FBF42D6C320
+7FBF42D6C320:lH7FBF42D6C3B0|H7FBF42D6C3C8
+7FBF42D6C3B0:t2:A3:pid,A9:undefined
+7FBF42D6C3C8:lH7FBF42D6C448|H7FBF42D6C460
+7FBF42D6C448:t2:A2:id,AA:net_kernel
+7FBF42D6C460:lH7FBF42D6C520|H7FBF42D6C538
+7FBF42D6C520:t2:A6:mfargs,H7FBF42D6C5F0
+7FBF42D6C5F0:t3:AA:net_kernel,AA:start_link,H7FBF42D6C6E0
+7FBF42D6C6E0:lH7FBF42D6C7B8|N
+7FBF42D6C7B8:lA32:0096ee77-1f50-48e2-a08a-42536a754970@192.168.1.124|H7FBF42D6C870
+7FBF42D6C870:lA9:longnames|N
+7FBF42D6C538:lH7FBF42D6C610|H7FBF42D6C628
+7FBF42D6C610:t2:AC:restart_type,A9:permanent
+7FBF42D6C628:lH7FBF42D6C6F0|H7FBF42D6C708
+7FBF42D6C6F0:t2:A8:shutdown,I2000
+7FBF42D6C708:lH7FBF42D6C7C8|N
+7FBF42D6C7C8:t2:AA:child_type,A6:worker
+7FBF42D6BE08:t2:H7FBF42D6BE78,H7FBF42D6BE98
+7FBF42D6BE98:t3:I19,I32,I44
+7FBF42D6BE78:t3:I2018,I11,I26
+7FBF42D6BD98:lH7FBF42D6BE40|H7FBF42D6BE58
+7FBF42D6BE40:t2:H7FBF42D6BED8,H7FBF42D6BEF0
+7FBF42D6BEF0:t3:AC:error_report,P<0.9.0>,H7FBF42D6BFA0
+7FBF42D6BFA0:t3:P<0.22.0>,AC:crash_report,H7FBF42D6C060
+7FBF42D6C060:lH7FBF42D6C138|H7FBF42D6C148
+7FBF42D6C138:lH7FBF42D6C1D0|H7FBF42D6C1E8
+7FBF42D6C1D0:t2:AC:initial_call,H7FBF42D6C278
+7FBF42D6C278:t3:AA:net_kernel,A4:init,H7FBF42D6C330
+7FBF42D6C330:lAB:Argument__1|N
+7FBF42D6C1E8:lH7FBF42D6C298|H7FBF42D6C2B0
+7FBF42D6C298:t2:A3:pid,P<0.22.0>
+7FBF42D6C2B0:lH7FBF42D6C340|H7FBF42D6C358
+7FBF42D6C340:t2:AF:registered_name,N
+7FBF42D6C358:lH7FBF42D6C3D8|H7FBF42D6C3F0
+7FBF42D6C3D8:t2:AA:error_info,H7FBF42D6C470
+7FBF42D6C470:t3:A4:exit,H7FBF42D6C548,H7FBF42D6C560
+7FBF42D6C560:lH7FBF42D6C638|H7FBF42D6C660
+7FBF42D6C638:t4:AA:gen_server,A7:init_it,I6,H7FBF42D6C718
+7FBF42D6C718:lH7FBF42D6C7E0|H7FBF42D6C7F8
+7FBF42D6C7E0:t2:A4:file,H7FBF42D6C880
+7FBF42D6C880:lI103|H7FBF42D6C920
+7FBF42D6C920:lI101|H7FBF42D6C990
+7FBF42D6C990:lI110|H7FBF42D6C9E8
+7FBF42D6C9E8:lI95|H7FBF42D6CA30
+7FBF42D6CA30:lI115|H7FBF42D6CA60
+7FBF42D6CA60:lI101|H7FBF42D6CA90
+7FBF42D6CA90:lI114|H7FBF42D6CAC0
+7FBF42D6CAC0:lI118|H7FBF42D6CAF0
+7FBF42D6CAF0:lI101|H7FBF42D6CB20
+7FBF42D6CB20:lI114|H7FBF42D6CB50
+7FBF42D6CB50:lI46|H7FBF42D6CB80
+7FBF42D6CB80:lI101|H7FBF42D6CBB0
+7FBF42D6CBB0:lI114|H7FBF42D6CBE0
+7FBF42D6CBE0:lI108|N
+7FBF42D6C7F8:lH7FBF42D6C890|N
+7FBF42D6C890:t2:A4:line,I344
+7FBF42D6C660:lH7FBF42D6C728|N
+7FBF42D6C728:t4:A8:proc_lib,AF:init_p_do_apply,I3,H7FBF42D6C808
+7FBF42D6C808:lH7FBF42D6C8A8|H7FBF42D6C8C0
+7FBF42D6C8A8:t2:A4:file,H7FBF42D6C930
+7FBF42D6C930:lI112|H7FBF42D6C9A0
+7FBF42D6C9A0:lI114|H7FBF42D6C9F8
+7FBF42D6C9F8:lI111|H7FBF42D6CA40
+7FBF42D6CA40:lI99|H7FBF42D6CA70
+7FBF42D6CA70:lI95|H7FBF42D6CAA0
+7FBF42D6CAA0:lI108|H7FBF42D6CAD0
+7FBF42D6CAD0:lI105|H7FBF42D6CB00
+7FBF42D6CB00:lI98|H7FBF42D6CB30
+7FBF42D6CB30:lI46|H7FBF42D6CB60
+7FBF42D6CB60:lI101|H7FBF42D6CB90
+7FBF42D6CB90:lI114|H7FBF42D6CBC0
+7FBF42D6CBC0:lI108|N
+7FBF42D6C8C0:lH7FBF42D6C940|N
+7FBF42D6C940:t2:A4:line,I240
+7FBF42D6C548:t2:A5:error,A6:badarg
+7FBF42D6C3F0:lH7FBF42D6C490|H7FBF42D6C4A8
+7FBF42D6C490:t2:A9:ancestors,H7FBF42D6C570
+7FBF42D6C570:lA7:net_sup|H7FBF42D6C670
+7FBF42D6C670:lAA:kernel_sup|H7FBF42D6C750
+7FBF42D6C750:lP<0.10.0>|N
+7FBF42D6C4A8:lH7FBF42D6C580|H7FBF42D6C598
+7FBF42D6C580:t2:A8:messages,N
+7FBF42D6C598:lH7FBF42D6C680|H7FBF42D6C698
+7FBF42D6C680:t2:A5:links,H7FBF42D6C760
+7FBF42D6C760:lp<0.337>|H7FBF42D6C818
+7FBF42D6C818:lP<0.19.0>|N
+7FBF42D6C698:lH7FBF42D6C770|H7FBF42D6C788
+7FBF42D6C770:t2:AA:dictionary,H7FBF42D6C828
+7FBF42D6C828:lH7FBF42D6C8D0|N
+7FBF42D6C8D0:t2:A9:longnames,A4:true
+7FBF42D6C788:lH7FBF42D6C838|H7FBF42D6C850
+7FBF42D6C838:t2:A9:trap_exit,A4:true
+7FBF42D6C850:lH7FBF42D6C8E8|H7FBF42D6C900
+7FBF42D6C8E8:t2:A6:status,A7:running
+7FBF42D6C900:lH7FBF42D6C958|H7FBF42D6C970
+7FBF42D6C958:t2:A9:heap_size,I987
+7FBF42D6C970:lH7FBF42D6C9B0|H7FBF42D6C9C8
+7FBF42D6C9B0:t2:AA:stack_size,I27
+7FBF42D6C9C8:lH7FBF42D6CA08|N
+7FBF42D6CA08:t2:AA:reductions,I995
+7FBF42D6C148:lN|N
+7FBF42D6BED8:t2:H7FBF42D6BF60,H7FBF42D6BF80
+7FBF42D6BF80:t3:I19,I32,I44
+7FBF42D6BF60:t3:I2018,I11,I26
+7FBF42D6BE58:lH7FBF42D6BF10|N
+7FBF42D6BF10:t2:H7FBF42D6BFC0,H7FBF42D6BFD8
+7FBF42D6BFD8:t3:A8:info_msg,P<0.9.0>,H7FBF42D6C0B0
+7FBF42D6C0B0:t3:P<0.22.0>,H7FBF42D6C158,H7FBF42D6C168
+7FBF42D6C168:lH7FBF42D6C208|N
+7FBF42D6C208:lI105|H7FBF42D6C2D0
+7FBF42D6C2D0:lI110|H7FBF42D6C378
+7FBF42D6C378:lI101|H7FBF42D6C410
+7FBF42D6C410:lI116|H7FBF42D6C4C8
+7FBF42D6C4C8:lI95|H7FBF42D6C5B8
+7FBF42D6C5B8:lI116|H7FBF42D6C6B8
+7FBF42D6C6B8:lI99|H7FBF42D6C7A8
+7FBF42D6C7A8:lI112|N
+7FBF42D6C158:lI80|H7FBF42D6C1F8
+7FBF42D6C1F8:lI114|H7FBF42D6C2C0
+7FBF42D6C2C0:lI111|H7FBF42D6C368
+7FBF42D6C368:lI116|H7FBF42D6C400
+7FBF42D6C400:lI111|H7FBF42D6C4B8
+7FBF42D6C4B8:lI99|H7FBF42D6C5A8
+7FBF42D6C5A8:lI111|H7FBF42D6C6A8
+7FBF42D6C6A8:lI108|H7FBF42D6C798
+7FBF42D6C798:lI58|H7FBF42D6C860
+7FBF42D6C860:lI32|H7FBF42D6C910
+7FBF42D6C910:lI126|H7FBF42D6C980
+7FBF42D6C980:lI116|H7FBF42D6C9D8
+7FBF42D6C9D8:lI112|H7FBF42D6CA20
+7FBF42D6CA20:lI58|H7FBF42D6CA50
+7FBF42D6CA50:lI32|H7FBF42D6CA80
+7FBF42D6CA80:lI116|H7FBF42D6CAB0
+7FBF42D6CAB0:lI104|H7FBF42D6CAE0
+7FBF42D6CAE0:lI101|H7FBF42D6CB10
+7FBF42D6CB10:lI32|H7FBF42D6CB40
+7FBF42D6CB40:lI110|H7FBF42D6CB70
+7FBF42D6CB70:lI97|H7FBF42D6CBA0
+7FBF42D6CBA0:lI109|H7FBF42D6CBD0
+7FBF42D6CBD0:lI101|H7FBF42D6CBF0
+7FBF42D6CBF0:lI32|H7FBF42D6CC00
+7FBF42D6CC00:lI48|H7FBF42D6CC10
+7FBF42D6CC10:lI48|H7FBF42D6CC20
+7FBF42D6CC20:lI57|H7FBF42D6CC30
+7FBF42D6CC30:lI54|H7FBF42D6CC40
+7FBF42D6CC40:lI101|H7FBF42D6CC50
+7FBF42D6CC50:lI101|H7FBF42D6CC60
+7FBF42D6CC60:lI55|H7FBF42D6CC70
+7FBF42D6CC70:lI55|H7FBF42D6CC80
+7FBF42D6CC80:lI45|H7FBF42D6CC90
+7FBF42D6CC90:lI49|H7FBF42D6CCA0
+7FBF42D6CCA0:lI102|H7FBF42D6CCB0
+7FBF42D6CCB0:lI53|H7FBF42D6CCC0
+7FBF42D6CCC0:lI48|H7FBF42D6CCD0
+7FBF42D6CCD0:lI45|H7FBF42D6CCE0
+7FBF42D6CCE0:lI52|H7FBF42D6CCF0
+7FBF42D6CCF0:lI56|H7FBF42D6CD00
+7FBF42D6CD00:lI101|H7FBF42D6CD10
+7FBF42D6CD10:lI50|H7FBF42D6CD20
+7FBF42D6CD20:lI45|H7FBF42D6CD30
+7FBF42D6CD30:lI97|H7FBF42D6CD40
+7FBF42D6CD40:lI48|H7FBF42D6CD50
+7FBF42D6CD50:lI56|H7FBF42D6CD60
+7FBF42D6CD60:lI97|H7FBF42D6CD70
+7FBF42D6CD70:lI45|H7FBF42D6CD80
+7FBF42D6CD80:lI52|H7FBF42D6CD90
+7FBF42D6CD90:lI50|H7FBF42D6CDA0
+7FBF42D6CDA0:lI53|H7FBF42D6CDB0
+7FBF42D6CDB0:lI51|H7FBF42D6CDC0
+7FBF42D6CDC0:lI54|H7FBF42D6CDD0
+7FBF42D6CDD0:lI97|H7FBF42D6CDE0
+7FBF42D6CDE0:lI55|H7FBF42D6CDF0
+7FBF42D6CDF0:lI53|H7FBF42D6CE00
+7FBF42D6CE00:lI52|H7FBF42D6CE10
+7FBF42D6CE10:lI57|H7FBF42D6CE20
+7FBF42D6CE20:lI55|H7FBF42D6CE30
+7FBF42D6CE30:lI48|H7FBF42D6CE40
+7FBF42D6CE40:lI64|H7FBF42D6CE50
+7FBF42D6CE50:lI49|H7FBF42D6CE60
+7FBF42D6CE60:lI57|H7FBF42D6CE70
+7FBF42D6CE70:lI50|H7FBF42D6CE80
+7FBF42D6CE80:lI46|H7FBF42D6CE90
+7FBF42D6CE90:lI49|H7FBF42D6CEA0
+7FBF42D6CEA0:lI54|H7FBF42D6CEB0
+7FBF42D6CEB0:lI56|H7FBF42D6CEC0
+7FBF42D6CEC0:lI46|H7FBF42D6CED0
+7FBF42D6CED0:lI49|H7FBF42D6CEE0
+7FBF42D6CEE0:lI46|H7FBF42D6CEF0
+7FBF42D6CEF0:lI49|H7FBF42D6CF00
+7FBF42D6CF00:lI50|H7FBF42D6CF10
+7FBF42D6CF10:lI52|H7FBF42D6CF20
+7FBF42D6CF20:lI32|H7FBF42D6CF30
+7FBF42D6CF30:lI115|H7FBF42D6CF40
+7FBF42D6CF40:lI101|H7FBF42D6CF50
+7FBF42D6CF50:lI101|H7FBF42D6CF60
+7FBF42D6CF60:lI109|H7FBF42D6CF70
+7FBF42D6CF70:lI115|H7FBF42D6CF80
+7FBF42D6CF80:lI32|H7FBF42D6CF90
+7FBF42D6CF90:lI116|H7FBF42D6CFA0
+7FBF42D6CFA0:lI111|H7FBF42D6CFB0
+7FBF42D6CFB0:lI32|H7FBF42D6CFC0
+7FBF42D6CFC0:lI98|H7FBF42D6CFD0
+7FBF42D6CFD0:lI101|H7FBF42D6CFE0
+7FBF42D6CFE0:lI32|H7FBF42D6CFF0
+7FBF42D6CFF0:lI105|H7FBF42D6D000
+7FBF42D6D000:lI110|H7FBF42D6D010
+7FBF42D6D010:lI32|H7FBF42D6D020
+7FBF42D6D020:lI117|H7FBF42D6D030
+7FBF42D6D030:lI115|H7FBF42D6D040
+7FBF42D6D040:lI101|H7FBF42D6D050
+7FBF42D6D050:lI32|H7FBF42D6D060
+7FBF42D6D060:lI98|H7FBF42D6D070
+7FBF42D6D070:lI121|H7FBF42D6D080
+7FBF42D6D080:lI32|H7FBF42D6D090
+7FBF42D6D090:lI97|H7FBF42D6D0A0
+7FBF42D6D0A0:lI110|H7FBF42D6D0B0
+7FBF42D6D0B0:lI111|H7FBF42D6D0C0
+7FBF42D6D0C0:lI116|H7FBF42D6D0D0
+7FBF42D6D0D0:lI104|H7FBF42D6D0E0
+7FBF42D6D0E0:lI101|H7FBF42D6D0F0
+7FBF42D6D0F0:lI114|H7FBF42D6D100
+7FBF42D6D100:lI32|H7FBF42D6D110
+7FBF42D6D110:lI69|H7FBF42D6D120
+7FBF42D6D120:lI114|H7FBF42D6D130
+7FBF42D6D130:lI108|H7FBF42D6D140
+7FBF42D6D140:lI97|H7FBF42D6D150
+7FBF42D6D150:lI110|H7FBF42D6D160
+7FBF42D6D160:lI103|H7FBF42D6D170
+7FBF42D6D170:lI32|H7FBF42D6D180
+7FBF42D6D180:lI110|H7FBF42D6D190
+7FBF42D6D190:lI111|H7FBF42D6D1A0
+7FBF42D6D1A0:lI100|H7FBF42D6D1B0
+7FBF42D6D1B0:lI101|N
+7FBF42D6BFC0:t2:H7FBF42D6C070,H7FBF42D6C090
+7FBF42D6C090:t3:I19,I32,I44
+7FBF42D6C070:t3:I2018,I11,I26
+7FBF42D7F590:t2:AD:$initial_call,H7FBF514B6980
+7FBF514B6980:t3:A9:gen_event,A7:init_it,I6
+7FBF42D7F5A8:t2:AA:$ancestors,H7FBF42D7F5E0
+7FBF42D7F5E0:lP<0.2.0>|N
+=proc_stack:<0.15.0>
+0x00007fbf42d7e248:SReturn addr 0x42FFB838 (global:'-init_the_locker_fun/1-fun-0-'/1 + 328)
+y0:H7FBF42D7DD68
+y1:A8:infinity
+0x00007fbf42d7e260:SReturn addr 0x894628 (<terminate process normally>)
+y0:N
+=proc_heap:<0.15.0>
+7FBF42D7DD68:t7:A5:multi,N,N,N,AD:nonode@nohost,A5:false,A5:false
+=atoms
+character
+'-tokens/4-fun-0-'
+'-tokens/4-fun-1-'
+'-options/1-fun-0-'
+'-default_option/1-fun-0-'
+'-scan1/5-fun-12-'
+'-scan1/5-fun-1-'
+'-scan1/5-fun-0-'
+'-scan1/5-fun-4-'
+'-scan1/5-fun-8-'
+'-scan1/5-fun-6-'
+'-scan1/5-fun-7-'
+'-scan1/5-fun-11-'
+'-scan1/5-fun-3-'
+'-scan1/5-fun-5-'
+'-scan1/5-fun-9-'
+'-scan1/5-fun-2-'
+'-scan1/5-fun-10-'
+'-scan_atom/6-fun-0-'
+'-scan_variable/6-fun-0-'
+'-scan_newline/5-fun-0-'
+'-scan_nl_spcs/6-fun-0-'
+'-scan_nl_tabs/6-fun-0-'
+'-scan_nl_white_space/6-fun-0-'
+'-scan_spcs/6-fun-0-'
+'-scan_tabs/6-fun-0-'
+'-skip_white_space/6-fun-0-'
+'-scan_white_space/6-fun-0-'
+'-scan_char/5-fun-1-'
+'-scan_char/5-fun-0-'
+'-scan_string/6-fun-0-'
+'-scan_qatom/6-fun-0-'
+'-scan_number/6-fun-1-'
+'-scan_number/6-fun-0-'
+'-scan_based_int/6-fun-0-'
+'-scan_fraction/6-fun-0-'
+'-scan_exponent_sign/6-fun-0-'
+'-scan_exponent/6-fun-0-'
+'-skip_comment/6-fun-0-'
+'-scan_comment/6-fun-0-'
+after
+let
+of
+catch
+when
+nl_tabs
+spcs
+nl_spcs
+scan_error
+tok3
+tok2
+comment
+scan_comment
+skip_comment
+float_end
+scan_exponent
+scan_exponent_sign
+scan_fraction
+scan_based_int
+scan_number
+escape_char
+scan_esc_end
+scan_hex
+scan_escape
+scan_string1
+scan_string_col
+scan_string_no_col
+scan_string0
+scan_qatom
+char_error
+scan_string
+scan_char
+scan_white_space
+skip_white_space
+scan_tabs
+scan_spcs
+newline_end
+scan_nl_white_space
+scan_nl_tabs
+scan_nl_spcs
+scan_newline
+set_text
+scan_dot
+scan_name
+scan_variable
+scan_atom
+'#'
+'&'
+'@'
+'\\'
+'^'
+'`'
+'~'
+'|'
+'||'
+'<-'
+'<='
+':'
+'::'
+':='
+'='
+'=>'
+'->'
+'..'
+'...'
+white_space
+';'
+scan1
+string1
+tokens1
+set_attr
+attr_info
+expand_opt
+reserved_word_fun
+opts
+return_white_spaces
+return_comments
+string_thing
+set_attribute
+attributes_info
+token_info
+category
+end_location
+continuation_location
+erl_scan_continuation
+no_col
+'FILE'
+'MODULE'
+'MODULE_STRING'
+'BASE_MODULE'
+'BASE_MODULE_STRING'
+'MACHINE'
+'-internal_open/2-fun-0-'
+'-read_encoding/2-after$^0/0-0-'
+'-fake_reader/1-fun-0-'
+'-read_encoding_from_file/2-after$^0/0-0-'
+'-reader/2-fun-0-'
+'-com_enc_end/1-lc$^0/1-0-'
+set_line
+'-interpret_file_attr/3-fun-0-'
+map_anno
+interpret_file_attr
+interpret_file_attribute
+line1
+start_loc
+add_line
+location
+loc
+loc_anno
+fname_join
+expand_var1
+expand_var
+wait_epp_reply
+epp_reply
+stringify
+stringify1
+token_src
+expand_arg
+expand_macro
+'>>'
+']'
+'}'
+end
+'<<'
+'['
+begin
+case
+cond
+try
+'{'
+macro_arg
+count_args
+store_arg
+macro_args
+bind_args
+symbol
+text
+'LINE'
+get_macro_uses
+check_uses
+expand_macro1
+expand_macros
+macro_expansion
+macro_pars
+skip_else
+invalid_unicode
+skip_toks
+new_location
+scan_endif
+scan_elif
+scan_if
+scan_else
+scan_ifndef
+scan_ifdef
+scan_include_lib
+find_lib_dir
+scan_include
+scan_undef
+'?'
+macro_ref
+macro_uses
+append_list
+scan_define_cont
+var
+scan_define
+scan_extends
+'.'
+scan_module_1
+extends
+scan_module
+include_lib
+else
+define
+endif
+elif
+ifndef
+ifdef
+if
+scan_toks
+leave_file
+file_name
+'('
+','
+')'
+set_generated
+enter_file_reply
+enter_file2
+path_open
+enter_file
+wait_req_skip
+wait_req_scan
+close_file
+epp_request
+wait_request
+abstract
+user_predef
+integer
+predef_macros
+init_server
+restore_typed_record_fields
+typed_record_field
+normalize_typed_record_fields
+com_encoding
+com_enc_end
+com_enc
+com_space
+com_sep
+com_oding
+com_c
+com
+com_nl
+reader
+read_encoding_from_file
+fake_reader
+set_encoding
+in_comment_only
+read_encoding
+encoding_to_string
+not_typed
+typed
+attribute
+missing_parenthesis
+cannot_parse
+premature_end
+include
+illegal
+circular
+mismatch
+bad
+arg_error
+'NYI'
+redefine
+redefine_predef
+macro_defs
+parse_form
+parse_erl_form
+scan_erl_form
+get_bool
+extra
+internal_open
+includes
+macros
+'-print/8-fun-0-'
+get_option
+indent
+while_fail
+last_depth
+cind_element
+cind_tail
+cind_list
+cind_rec
+cind_field
+cind_fields_tail
+cind_record
+no_good
+cind_tag_tuple
+cind
+printable_char
+printable_unicode
+valid_utf8
+printable_bin1
+printable_bin
+list_length_tail
+list_length
+print_length_list1
+print_length_list
+print_length_field
+print_length_fields
+print_length_record
+print_length_tuple
+print_length_map_pair
+print_length_map_pairs
+print_length_map
+print_length
+write_list
+write_field
+write_fields_tail
+write_fields
+pp_binary
+pp_element
+pp_tail
+pp_list
+rec_indent
+field
+pp_field
+pp_fields_tail
+pp_record
+pp_tag_tuple
+map_pair
+bin
+pp
+max_cs
+record_print_fun
+max_chars
+'-fwrite_g/1-lc$^0/1-0-'
+'-fwrite_g/1-lc$^1/1-1-'
+lowercase
+cond_lowercase
+flat_trunc
+char
+prefixed_integer
+unprefixed_integer
+string_field
+cdata_to_chars
+iolist_to_chars
+log2floor
+int_pow
+int_ceil
+insert_exp
+insert_decimal
+generate
+fixup
+scale
+fwrite_g_1
+mantissa_exponent
+float_data
+float_f
+fwrite_f
+float_exp
+float_man
+float_e
+fwrite_e
+column
+base
+uniconv
+decr_pc
+pcount
+collect_cc
+field_value
+field_width
+collect_cseq
+print_strings
+print_encoding
+print_pad_char
+print_precision
+left
+print_field_width
+width
+strings
+precision
+pad_char
+encoding
+control_char
+adjust
+binrev
+get_until
+collect_line_list
+collect_line_bin
+collect_line1
+collect_chars_list
+collect_chars1
+collect_chars
+cafu
+count_and_find_utf8
+nl
+printable_unicode_list
+printable_latin1_list
+deep_unicode_char_list
+deep_char_list
+deep_latin1_char_list
+char_list
+latin1_char_list
+write_char_as_latin1
+write_latin1_char
+write_unicode_char
+write_char
+string_char
+write_string1
+unicode_as_latin1
+write_string_as_latin1
+write_latin1_string
+write_unicode_string
+unicode_as_unicode
+write_string
+name_char
+name_chars
+reserved_word
+quote_atom
+write_atom
+write_binary_body
+write_binary
+write_map_assoc
+write_map_body
+write_map
+write_ref
+write_port
+write_tail
+fwrite_g
+add_modifier
+do_format_prompt
+format_prompt
+indentation
+build_text
+unscan
+unscan_format
+scan
+scan_format
+fread
+fwrite
+'Argument__2'
+'Argument__3'
+'Argument__4'
+'Argument__1'
+try_connect
+connect1
+'0096ee77-1f50-48e2-a08a-42536a754970'
+'1234'
+next_random
+make_info
+random_cookie
+raw_write_file_info
+create_cookie
+check_cookie1
+check_cookie
+check_attributes
+make_error
+raw_read_file_info
+read_cookie
+cookies
+init_cookie
+auth_reply
+ddd_server
+hello
+echo
+distribution_not_started
+node_cookie
+cookie
+pang
+pong
+ping
+no_reg_reply_from_epmd
+epmd_close
+already_registered
+parse_name
+parse_line
+scan_line
+scan_names
+names_loop
+do_get_names
+wait_for_close
+select_best_version
+best_version
+wait_for_port_reply_name
+wait_for_port_reply_cont2
+wait_for_port_reply_cont
+wait_for_port_reply
+get_port
+garbage_from_epmd
+wait_for_reg_reply
+epmd_dist_low
+epmd_dist_high
+do_register_node
+epmd_port
+get_epmd_port
+r4
+client_info_req
+alive
+names
+port_please1
+eaddrinuse
+'-do_accept/7-fun-0-'
+'-do_accept/7-fun-1-'
+'-do_accept/7-fun-2-'
+'-do_accept/7-fun-3-'
+'-do_accept/7-fun-4-'
+'-do_setup/7-fun-0-'
+'-do_setup/7-fun-1-'
+'-do_setup/7-fun-2-'
+'-do_setup/7-fun-3-'
+split_stat
+is_node_name
+mask
+get_ifs
+check_ip
+get_tcp_address
+splitnode
+inet_dist_connect_options
+handshake_we_started
+reset_timer
+port_please
+do_setup
+gen_setup
+get_remote_id
+dist_nodelay
+handshake_other_started
+hs_data
+no_node
+do_accept
+gen_accept_connection
+flush_controller
+accept_loop
+gen_accept
+inet_dist_listen_options
+inet_dist_use_interface
+inet_dist_listen_max
+inet_dist_listen_min
+do_listen
+register_node
+gen_listen
+family
+gen_select
+invalid_key
+short
+bad_node
+ok_pending
+nok_pending
+already_pending
+'-terminate/2-fun-1-'
+'-terminate/2-fun-2-'
+'-handle_info/2-fun-0-'
+'-handle_info/2-fun-1-'
+'-init_node/2-fun-0-'
+'-create_hostpart/2-fun-0-'
+'-print_info/0-fun-0-'
+'-async_gen_server_reply/2-fun-0-'
+async_gen_server_reply
+async_reply
+getnode
+nformat
+fetch
+fmt_address
+display_info
+print_info
+restart_ticker
+all_atoms
+reply_waiting1
+reply_waiting
+get_nodes_info
+get_node_info
+net_setuptime
+connecttime
+set_node
+duplicate_name
+sync_cookie
+start_protos
+childspecs
+proto_dist
+create_hostpart
+long
+create_name
+init_node
+get_proto_mod
+unsupported_address_type
+select_mod
+net_address
+setup
+spawn_func
+bye
+aux_ticker1
+aux_ticker
+start_aux_ticker
+ticker_loop
+get_up_nodes
+get_nodes
+disconnect_pid
+do_disconnect
+mk_monitor_nodes_error
+bad_option_value
+options_not_a_list
+unknown_options
+check_options
+option_value_mismatch
+check_opt
+mark_sys_dist_nodedown
+up_nodedown
+up_pending_nodedown
+pending_nodedown
+get_conn
+ticker_exit
+pending_own_exit
+conn_own_exit
+accept_exit
+listen_exit
+do_handle_exit
+aux_tick
+transition_period_end
+unsupported_protocol
+controller
+accept_connection
+registered_send
+badcookie
+bad_request
+inserted
+remarked
+accept_pending
+is_pending
+change_initiated
+shorter
+longer
+unchanged
+ongoing_change_to
+tick_change
+up_pending
+publish_on_nodes
+is_auth
+not_implemented
+tick
+ticker
+nodistribution
+connection
+never
+dist_auto_connect
+passive_connect_monitor
+barred_connection
+sys_dist
+do_connect
+hidden_connect_node
+connect_node
+update_publish_nodes
+publish_on_node
+hidden_connect
+ticktime_res
+get_net_ticktime
+new_ticktime
+set_net_ticktime
+verbose
+nodes_info
+node_info
+kernel_apply
+'0096ee77-1f50-48e2-a08a-42536a754970@192.168.1.124'
+net_sup_dynamic
+net_ticktime
+ticktime
+lname
+start_p
+protocol_childspecs
+epmd_module
+no_epmd
+could_not_start_server
+inet_gethost_native_sup
+'-handle_message/2-fun-0-'
+'-restart_port/1-fun-0-'
+pick_names
+ndx
+pick_addresses_v6
+pick_addresses_v4
+expand_default_name
+malformed_response
+getit
+soft_restart
+debug_level
+gethost_poolsize
+get_poolsize
+gethost_extra_args
+gethost_prioritize
+get_extra_args
+do_open_port
+get_rid
+pick_client
+pick_request
+find_request
+do_handle_call
+restart_port
+handle_message
+ign_req_index
+ign_requests
+num_requests
+rid
+run_once
+start_raw
+server_init
+'-services/2-fun-0-'
+'-rpc/2-fun-0-'
+'-hosts/2-fun-0-'
+'-resolv/2-fun-0-'
+'-host_conf_linux/2-fun-0-'
+'-host_conf_freebsd/2-fun-0-'
+'-host_conf_bsdos/2-fun-0-'
+'-nsswitch_conf/2-fun-0-'
+'-protocols/2-fun-0-'
+'-netmasks/2-fun-0-'
+'-networks/2-fun-0-'
+'-ntoa_done/2-fun-0-'
+'-ntoa_done/2-fun-1-'
+'-ntoa_done/1-fun-0-'
+split_mid_comma
+split_comma
+split_end
+split_mid
+dig_to_hex
+dig_to_dec
+ntoa_done
+dup
+hex_to_int
+ipv6_addr_done
+ipv6_addr
+ipv4_field
+ipv4strict_addr
+strip0
+is_dom2
+is_dom_ldh
+is_dom1
+is_vis1
+port_proto
+collect_line
+parse_cs
+skip
+parse_fd
+networks
+netmasks
+protocols
+delete_options
+noname
+services
+not_owner
+eafnosupport
+'-setopts/2-lc$^0/1-0-'
+'-getopts/2-lc$^0/1-0-'
+'-getifaddrs/0-fun-0-'
+'-getiflist/0-fun-0-'
+'-ifget/2-fun-0-'
+'-ifset/2-fun-0-'
+'-getif/0-fun-0-'
+'-getif/1-fun-0-'
+'-gethostname/0-fun-0-'
+'-bindx/3-lc$^1/1-1-'
+'-ii/3-fun-0-'
+'-ii/3-lc$^0/1-0-'
+'-ii/3-fun-1-'
+'-info_lines/3-lc$^0/1-0-'
+'-i_line/3-lc$^0/1-0-'
+'-h_line/1-lc$^0/1-0-'
+'-port_list/1-fun-0-'
+udp_sync_input
+tcp_sync_input
+tcp_controlling_process
+tcp_close
+exbadseq
+exbadport
+port_list
+sctp_sockets
+udp_sockets
+tcp_sockets
+fmt_port
+enotconn
+fmt_addr
+listening
+fmt_status
+sent
+local_address
+foreign_address
+upper
+hh_field
+h_field
+h_line
+i_line
+info_lines
+smax
+ii
+change_bindx_0_port
+set_bindx_port
+gethostbyaddr_tm_native
+gethostbyaddr_self
+gethostbyname_string
+gethostbyname_self
+gethostbyname_tm_native
+wins
+getaddrs_tm
+binary2filename
+filename2binary
+add_opt
+sctp_opt_ifaddr
+sctp_opt
+translate_ip
+sctp_opts
+sctp_options
+udp_add
+udp_opt
+list_add
+backlog
+list_opt
+listen_opts
+inet_default_listen_options
+listen_options
+con_add
+ifaddr
+con_opt
+connect_opts
+inet_default_connect_options
+connect_options
+stats
+strict_address
+parse_strict_address
+parse_address
+ipv6strict_address
+parse_ipv6strict_address
+ipv4strict_address
+parse_ipv4strict_address
+ipv6_address
+parse_ipv6_address
+parse_ipv4_address
+ntoa
+getaddrs
+getll
+gethostbyaddr_tm
+nostring
+gethostbyname_tm
+popf
+pushf
+withsocket
+getif
+udp_closed
+optuniquify
+udp_controlling_process
+controlling_process
+udp_close
+udp_opts
+getaddr_tm
+getaddr
+getserv
+bad_encoding
+on
+not_string
+'-init/0-fun-0-'
+'-set_hostname/1-fun-0-'
+'-load_hosts/2-fun-0-'
+address
+'-win32_load1/3-fun-0-'
+'-win32_load1/3-fun-1-'
+scan_inetrc
+parse_inetrc_skip_line
+parse_inetrc
+inet_warnings
+try_get_rc
+inetrc
+read_inetrc
+valid_type
+extract_cfg_files1
+registry
+extract_cfg_files
+read_rc
+win32_get_strings
+split_line
+win32_split_line
+expand
+win32_load1
+change_key
+nt
+win32_load_from_registry
+load_hosts
+load_resolv
+set_search_dom
+inet_dns_when_nis
+add_dns_lookup
+nsswitch_conf
+host_conf_linux
+host_conf_freebsd
+host_conf_bsdos
+sunos
+netbsd
+freebsd
+'bsd/os'
+do_load_resolv
+nonames
+longnames
+shortnames
+sname
+erl_dist_mode
+gethostbyname
+formerr
+nxdomain
+'-add_hosts/1-fun-0-'
+'-res_check_option/2-fun-4-'
+'-res_check_option/2-fun-2-'
+'-res_check_option/2-fun-3-'
+'-res_check_option/2-fun-0-'
+'-res_check_option/2-fun-1-'
+'-res_update_conf/0-fun-0-'
+'-res_update_hosts/0-fun-0-'
+'-res_cache_answer/1-fun-0-'
+'-lookup_type/2-lc$^0/1-0-'
+'-lookup_cname/1-lc$^0/1-0-'
+'-res_hostent_by_domain/3-fun-0-'
+'-res_lookup_type/3-lc$^0/1-0-'
+'-res_gethostbyaddr/2-fun-0-'
+'-handle_call/3-lc$^1/1-2-'
+'-handle_call/3-lc$^0/1-1-'
+'-handle_call/3-lc$^2/1-3-'
+'-handle_call/3-lc$^3/1-0-'
+chars
+'-do_add_host/5-lc$^0/1-0-'
+'-do_add_host/5-lc$^1/1-1-'
+'-do_del_host/3-lc$^0/1-0-'
+'-rc_opt_req/1-lc$^0/1-0-'
+'-do_refresh_cache/4-fun-0-'
+'-delete_older/5-fun-0-'
+'-lists_subtract/2-fun-0-'
+lists_keydelete
+lists_subtract
+lists_delete
+delete_older
+delete_n_oldest
+alloc_entry
+do_refresh_cache
+stop_timer
+init_timer
+stripdot_1
+stripdot
+hex
+dnib
+dn_in_addr_arpa
+dn_ip6_int
+tolower
+lower_rr
+filter_rr
+match_rr
+do_lookup_rr
+start_time
+times
+cache_rr
+do_add_rr
+is_reqname
+is_res_set
+set_socks_methods
+rc_reqname
+clear_search
+clear_ns
+rc_opt_req
+handle_calls
+handle_rc_list
+do_del_host
+do_add_host
+handle_set_file
+refresh_timeout
+listdel
+load_hosts_file
+reset_db
+inet_hosts_file_byaddr
+inet_hosts_byaddr
+inet_cache
+lookup_socket
+unregister_socket
+register_socket
+dnt
+dnip
+ent_gethostbyaddr
+res_gethostbyaddr
+ptr
+gethostbyaddr
+res_lookup_type
+res_hostent_by_domain
+lookup_rr
+cname
+lookup_cname
+lookup_type
+hostent_by_domain
+hostent
+aaaa
+make_hostent
+get_searchlist
+getbysearch
+dots
+getbyname
+dns_rec
+res_cache_answer
+del_rr
+dns_rr
+add_rr
+db_get
+res_update
+res_hosts_file_tm
+set_hosts_file_tm
+res_hosts_file_info
+res_update_hosts
+res_resolv_conf_tm
+set_resolv_conf_tm
+res_resolv_conf_info
+res_update_conf
+hostname
+methods
+noproxy
+server
+socks_option
+res_check_search
+res_check_ns
+res_check_list
+res_check_option_absfile
+visible_string
+res_check_option
+res_recurse
+alt_nameserver
+hosts_file_name
+nameserver
+resolv_conf_name
+res_optname
+res_set
+res_id
+next_id
+res_option
+host
+get_rc_hosts
+get_rc_ns
+get_rc_noproxy
+res_domain
+res_search
+res_edns
+res_inet6
+res_usevc
+inet_hosts_byname
+res_alt_ns
+res_ns
+res_hosts_file
+res_resolv_conf
+res_retry
+res_udp_payload_size
+res_timeout
+cache_refresh_interval
+res_lookup
+socks5_server
+socks5_noproxy
+cache_size
+socks5_port
+cache_refresh
+socks5_methods
+get_rc
+valid_lookup
+dns
+yp
+nis
+nisplus
+translate_lookup
+add_rc_list
+add_rc_bin
+consult
+add_rc
+sctp_module
+set_sctp_module
+udp_module
+set_udp_module
+tcp_module
+set_tcp_module
+set_cache_refresh
+set_cache_size
+del_socks_noproxy
+add_socks_noproxy
+del_socks_methods
+add_socks_methods
+set_socks_port
+set_socks_server
+inet_hosts_file_byname
+get_hosts_file
+hosts_file
+set_hosts_file
+resolv_conf
+set_resolv_conf
+udp_payload_size
+set_udp_payload_size
+edns
+set_edns
+usevc
+set_usevc
+set_inet6
+retry
+set_retry
+set_timeout
+recurse
+set_recurse
+set_lookup
+domain
+set_domain
+set_hostname
+del_search
+ins_search
+add_search
+del_alt_ns
+ins_alt_ns
+alt_nameservers
+add_alt_ns
+del_ns
+ins
+ins_ns
+nameservers
+listop
+add_ns
+clear_hosts
+del_host
+add_host
+hosts
+add_hosts
+resolv
+add_resolv
+'$5'
+'$4'
+'$3'
+allow
+'-register_name/2-fun-0-'
+'-register_name/3-fun-0-'
+'-check_dupname/2-lc$^0/1-0-'
+'-unregister_name/1-fun-0-'
+'-re_register_name/2-fun-0-'
+'-re_register_name/3-fun-0-'
+'-register_name_external/2-fun-0-'
+'-register_name_external/3-fun-0-'
+'-trans/4-after$^0/0-0-'
+'-trans_all_known/1-after$^0/0-0-'
+'-check_replies/3-lc$^0/1-0-'
+'-resolved/5-fun-0-'
+'-resolved/5-fun-1-'
+'-resolved/5-fun-2-'
+'-resolved/5-fun-3-'
+'-resolved/5-fun-4-'
+'-start_resolver/2-fun-0-'
+'-do_ops/5-lc$^1/1-1-'
+'-do_ops/5-lc$^0/1-0-'
+'-do_ops/5-fun-0-'
+'-do_ops/5-lc$^2/1-2-'
+'-do_ops/5-lc$^3/1-3-'
+'-do_ops/5-fun-1-'
+'-do_ops/5-lc$^4/1-4-'
+'-do_ops/5-fun-2-'
+'-sync_others/1-fun-0-'
+'-sync_others/1-fun-1-'
+'-del_name/2-lc$^1/1-1-'
+'-del_name/2-lc$^0/1-0-'
+locker_exited
+'-init_the_locker_fun/1-fun-0-'
+'-exclude_known/2-lc$^0/1-0-'
+'-delete_lock/2-fun-0-'
+'-pid_locks/1-fun-0-'
+'-pid_locks/1-lc$^0/1-0-'
+'-send_again/1-fun-0-'
+'-start_sync/2-fun-0-'
+'-sync_init/2-fun-0-'
+'-sync_loop/2-fun-0-'
+'-start_the_registrar/0-fun-0-'
+'-do_monitor/1-fun-0-'
+allow_tuple_fun
+do_monitor
+unexpected_message
+loop_the_registrar
+start_the_registrar
+get_own_nodes_with_errors
+get_own_nodes
+check_sync_nodes
+synced
+sync_loop
+sync_init
+start_sync
+new_node_name
+change_our_node_name
+send_again
+uniform
+seed
+random_seed
+random_sleep
+get_names
+handle_nodedown
+rpid_is_locking
+pid_locks
+delete_lock
+pid_is_locking
+unlink_pid
+dounlink_ext
+dolink_ext
+notify_all_name
+global_name_conflict
+random_notify_name
+random_exit_name
+minmax
+resolve_it
+exchange_names
+reset_node_state
+kill_resolver
+cancel_locker
+split_node
+is_node_local
+remove_node2
+remove_node
+find_node_tag2
+find_node_tag
+the_boss
+delete_global_lock
+call_fun
+exclude_known
+random_element
+update_locker_known
+lock_rejected
+locker_failed
+locker_succeeded
+rejected
+locker_trace
+delete_nonode
+not_ok
+lock_nodes_safely
+locker_lock_id
+select_node
+him
+no_fun
+lock_set
+cancel
+remove_from_known
+do_trace
+the_locker_message
+loop_the_locker
+init_the_locker_fun
+start_the_locker
+delete_global_name
+delete_global_name2
+delete_global_name_keep_pid
+del_name
+extra_info
+lock_still_set
+insert_global_name
+sync_other
+global_connect_retries
+sync_others
+do_ops
+kill_monitor_proc
+rem_lock
+remove_lock
+handle_del_lock
+is_lock_set
+is_global_lock_set
+ins_lock
+insert_lock
+can_set_lock
+handle_set_lock
+ins_name_ext
+ins_name
+resend_pre_connect
+resolver
+start_resolver
+do_whereis
+cancel_resolved_locker
+ops
+added
+add_to_known
+lock
+resolve
+wait_lock
+lock_id
+pre_connect
+his_the_locker
+prot_vsn
+check_replies
+local_lock_check
+set_lock_on_nodes
+lock_on_known_nodes
+set_lock_known
+send_high_level_trace
+wait_high_level_trace
+nodes_changed
+to_external
+symmetric_partition
+high_level_trace
+registrar_died
+locker_died
+new_resolver
+no_longer_a_pid
+locker
+trace_message
+extra_nodedown
+new_nodes
+sync_tag_his
+exit_resolver
+exchange
+exchange_ops
+save_ops
+resolved
+lock_is_set
+init_connect
+sync_tag_my
+in_sync
+async_del_name
+async_del_lock
+get_names_ext
+high_level_trace_start
+high_level_trace_stop
+get_protocol_version
+high_level_trace_get
+get_synced
+get_known
+register_ext
+trans_all_known
+connect_all
+no_trace
+global_pid_ids
+global_names_ext
+global_locks
+trans
+del_lock
+set_lock
+unregister_name_external
+register_name_external
+global_names
+registered_names
+re_register_name
+global_multi_name_action
+global_pid_names
+check_dupname
+registrar
+node_disconnected
+'-handle_cast/2-fun-0-'
+'-handle_call_call/6-fun-0-'
+'-proxy_user/0-fun-0-'
+'-do_call/3-fun-0-'
+'-do_multicall/5-fun-0-'
+'-async_call/4-fun-0-'
+'-parallel_eval/1-lc$^0/1-0-'
+pinfo
+build_args
+pmap
+map_nodes
+parallel_eval
+promise_reply
+do_yield
+nb_yield
+async_call
+safe_multi_server_call
+multi_server_call
+do_multicall
+multicall
+eval_everywhere
+rpc_check
+rpc_check_t
+local_call
+proxy_user_flush
+proxy_user_loop
+rex_proxy_user
+proxy_user
+set_group_leader
+handle_call_call
+nonexisting_name
+sbcast
+block_call
+beam_flatten
+beam_dict
+beam_block
+core_pp
+core_lib
+beam_except
+core_parse
+beam_receive
+cerl_clauses
+beam_dead
+beam_split
+beam_bool
+core_lint
+rec_env
+v3_codegen
+v3_core
+beam_disasm
+beam_listing
+beam_jump
+sys_pre_attributes
+erl_bifs
+sys_core_fold_lists
+v3_kernel
+cerl_trees
+core_scan
+sys_core_inline
+beam_utils
+v3_kernel_pp
+beam_a
+beam_z
+v3_life
+sys_pre_expand
+beam_validator
+cerl_inline
+sys_core_dsetel
+beam_bsm
+beam_peep
+beam_trim
+beam_type
+beam_clean
+beam_asm
+cerl
+sys_core_fold
+cerl_sets
+beam_opcodes
+on_load_failure
+sticky_directory
+bad_name
+bad_directory
+'-start_link/1-fun-0-'
+'-init/3-fun-0-'
+'-get_user_lib_dirs_1/1-lc$^0/1-0-'
+'-handle_call/3-fun-5-'
+'-handle_call/3-lc$^0/1-0-'
+'-choose_bundles/1-lc$^0/1-0-'
+'-choose_bundles/1-lc$^1/1-1-'
+'-vsn_to_num/1-lc$^0/1-0-'
+'-is_vsn/1-fun-0-'
+'-is_numstr/1-fun-0-'
+'-exclude/2-lc$^0/1-0-'
+'-archive_subdirs/1-fun-0-'
+'-try_archive_subdirs/3-fun-0-'
+'-stick_dir/3-fun-0-'
+'-stick_dir/3-fun-1-'
+'-handle_on_load/4-fun-0-'
+'-finish_on_load/3-lc$^0/1-0-'
+'-finish_on_load_1/5-lc$^0/1-0-'
+'-finish_on_load_report/2-fun-0-'
+to_atom
+strip_mod_info
+all_l
+finish_on_load_report
+finish_on_load_1
+finish_on_load
+pending_on_load_1
+pending_on_load
+handle_on_load
+cpc_init
+cpc_request_gc
+cpc_request
+cpc_sched_kill
+cpc_sched_kill_waiting
+cpc_handle_cpc
+cpc_list_rm
+cpc_handle_down
+cpc_recv
+cpc_kill
+cpc_static
+check_proc_code
+do_soft_purge
+do_purge
+mod_to_bin
+load_file_1
+int_list
+hipe_result_to_status
+try_load_module_3
+try_load_module_2
+try_load_module_1
+try_load_module
+modp
+do_load_binary
+get_mods
+sticky
+'bad request to code'
+priv
+do_dir
+lookup_name
+delete_name_dir
+delete_name
+replace_name
+del_ebin
+check_pars
+replace_path1
+insert_old_shadowed
+del_path1
+try_archive_subdirs
+all_archive_subdirs
+archive_subdirs
+insert_name
+code_names
+init_namedb
+maybe_update
+do_add
+do_check_path
+check_path
+get_name2
+get_name1
+get_name
+exclude
+get_arg
+add_pa_pz
+add1
+strip_path
+excl
+exclude_pa_pz
+pz
+pa
+add_loader_path
+try_ebin_dirs
+choose
+split2
+split1
+is_numstr
+is_vsn
+vsn_to_num
+create_bundle
+choose_bundles
+filter_mods
+locate_mods
+update_cache
+rehash_cache
+code_cache
+create_cache
+do_mod_call
+app
+obj
+unknown_system_msg
+change_code
+resume
+do_sys_cmd
+suspend_loop
+gen_reply
+code_call
+split_paths
+get_user_lib_dirs_1
+get_user_lib_dirs
+any_native_code_loaded
+code_path_cache
+no_cache
+'-characters_to_binary_int/3-fun-0-'
+'-i_trans/1-fun-1-'
+'-i_trans/1-fun-2-'
+'-i_trans/1-fun-5-'
+'-i_trans/1-fun-0-'
+'-i_trans/1-fun-3-'
+'-i_trans/1-fun-4-'
+'-i_trans/1-fun-6-'
+'-i_trans/1-fun-7-'
+'-i_trans_chk/1-fun-1-'
+'-i_trans_chk/1-fun-2-'
+'-i_trans_chk/1-fun-5-'
+'-i_trans_chk/1-fun-0-'
+'-i_trans_chk/1-fun-3-'
+'-i_trans_chk/1-fun-4-'
+'-i_trans_chk/1-fun-6-'
+'-i_trans_chk/1-fun-7-'
+'-o_trans/1-fun-1-'
+'-o_trans/1-fun-2-'
+'-o_trans/1-fun-3-'
+'-o_trans/1-fun-4-'
+'-o_trans/1-fun-7-'
+'-o_trans/1-fun-8-'
+'-o_trans/1-fun-0-'
+'-o_trans/1-fun-5-'
+'-o_trans/1-fun-6-'
+'-o_trans/1-fun-9-'
+'-o_trans/1-fun-10-'
+do_i_utf32_little
+do_i_utf32_big
+do_i_utf16_little
+do_i_utf16_big
+do_i_utf8
+do_i_utf32_little_chk
+do_i_utf32_big_chk
+do_i_utf16_little_chk
+do_i_utf16_big_chk
+do_i_utf8_chk
+do_o_binary2
+do_o_binary
+o_trans
+i_trans_chk
+i_trans
+ml_map
+cbv
+utf32
+utf16
+encoding_to_bom
+bom_to_encoding
+do_characters_to_list
+new_stacktrace
+'-unix_cmd/1-fun-0-'
+'-start_port/0-fun-0-'
+validate1
+validate
+mk_cmd
+unix_get_data
+start_port_srv_loop
+start_port_srv_handle
+start_port_srv
+os_cmd_port_creator
+start_port
+unix_cmd
+windows
+cmd
+extensions
+reverse_element
+split_path
+can_be_full_name
+to_lower
+verify_executable
+find_executable1
+find_executable
+local_address_not_found
+assertion_failed
+'-load_native_code/3-after$^0/0-0-'
+'-post_beam_load/2-after$^0/0-0-'
+'-load_module/4-after$^0/0-0-'
+'-load/3-after$^0/0-0-'
+set_native_address_in_fe
+'-load_common/5-fun-0-'
+'-calculate_addresses/3-lc$^0/1-0-'
+load_fe
+'-offsets_to_addresses/2-lc$^0/1-0-'
+'-export_funs/5-lc$^0/1-0-'
+'-patch_consts/4-fun-0-'
+'-sort_and_write/5-fun-0-'
+'-sort_on_representation/1-lc$^0/1-0-'
+write_u32
+'-write_word_fun/1-fun-1-'
+write_u64
+'-write_word_fun/1-fun-0-'
+'-enter_datum/4-lc$^0/1-1-'
+'-enter_datum/4-lc$^1/1-0-'
+'-patch_to_emu_step1/1-lc$^0/1-0-'
+'-mark_referred_from/1-fun-0-'
+redirect_referred_from
+'-redirect/1-fun-0-'
+'-remove_refs_from/1-fun-0-'
+update_code_size
+enter_code
+assert_local_patch
+mfa_to_address
+find_na_or_make_stub
+get_native_address
+redirect
+mark_referred_from
+get_refs_from
+patch_to_emu_step2
+invalidate_funinfo_native_addresses
+patch_to_emu_step1
+patch_to_emu
+address_to_mfa_lth
+add_ref
+constant_not_found
+find_const
+write_u8
+write_bytes
+write_words
+bytes_to_32
+term_to_word
+merge_term
+enter_datum
+enter_data
+alloc_data
+create_data_segment
+primop_address
+bif_address
+write_word_fun
+patch_insn
+patch_instr
+sort_on_representation
+sort_and_write
+sorted
+patch_label_or_labels
+patch_consts
+load_mfa
+patch_load_mfa
+get_fe
+fun_to_address
+patch_closure
+c_const
+constant
+local_function
+remote_function
+patch_load_address
+enter_sdesc
+patch_sdesc
+atom_to_word
+patch_atom
+patch_offset
+patch_all_offsets
+patch_all
+patch_call_insn
+patch_mfa_call_list
+patch_bif_call_list
+patch_call
+remote
+load_address
+load_atom
+sdesc
+x86_abs_pcrel
+patch
+set_native_address
+set_funinfo_native_address
+export_funs
+closure
+find_closure_refs
+find_closure_patches
+offsets_to_addresses
+calculate_addresses
+fundef
+trampoline_map_lookup
+trampoline_map_get
+mk_trampoline_map
+add_callee_mfas
+no_erts_trampolines
+needs_trampolines
+find_callee_mfas
+hipe_assert_code_area
+closures_to_patch
+check_crc
+load_common
+load_nosmp
+hipe_patch_closures
+load_module_nosmp
+version_check
+post_beam_load
+bad_crc
+no_native
+load_native_code
+word_size
+arm
+ppc64
+powerpc
+ultrasparc
+map_1
+iterator_1_from
+iterator_1
+from_orddict
+enter
+update_1
+get_1
+is_defined_1
+lookup_1
+fold_1
+is_subset_2
+is_subset_1
+is_subset
+difference_2
+difference_1
+difference
+is_disjoint_1
+is_disjoint
+intersection_list
+intersection_2
+intersection_1
+intersection
+union_list
+balance_revlist_1
+balance_revlist
+push
+union_2
+union_1
+mk_set
+union
+iterator_from
+iterator
+to_list_1
+largest_1
+largest
+take_largest1
+take_largest
+smallest_1
+smallest
+take_smallest1
+take_smallest
+delete_1
+delete_any
+from_ordset
+balance_list_1
+balance_list
+balance
+key_exists
+insert_1
+is_member_1
+is_member
+singleton
+is_empty
+source_file_not_found
+'-basenameb/2-lc$^0/1-0-'
+'-unix_splitb/1-lc$^0/1-0-'
+'-win32_splitb/1-lc$^2/1-3-'
+'-win32_splitb/1-lc$^1/1-2-'
+'-win32_splitb/1-lc$^0/1-1-'
+'-win32_splitb/1-lc$^3/1-0-'
+filename_string_to_binary
+major_os_type
+make_abs_path
+readable_file
+try_rule
+source_by_rules
+get_source_file
+d
+export_all
+outdir
+filter_options
+try_file
+source_search_rules
+find_src
+separators
+win32_nativename
+nativename
+win32_split
+unix_split
+win32_splitb
+fix_driveletter
+unix_splitb
+rootname2
+rootname
+maybe_remove_dirsep
+join1b
+join1
+extension
+dirjoin1
+dirjoin
+fstrip
+skip_prefix
+basename1
+basenameb
+win_basenameb
+absname_join
+read_only
+the
+generated
+a
+parse_transform
+transformed
+be
+should
+real
+with
+called
+transform_error
+'-foldl/3-after$^0/0-0-'
+'-foldr/3-after$^0/0-0-'
+blog_terms
+'-tab2file/3-fun-0-'
+log_terms
+'-tab2file/3-fun-1-'
+'-tab2file/3-after$^0/0-0-'
+'-file2tab/2-after$^0/0-0-'
+'-file2tab/2-fun-0-'
+'-file2tab/2-fun-1-'
+'-table/2-fun-1-'
+'-table/2-fun-0-'
+'-table/2-fun-2-'
+'-table/2-fun-3-'
+'-table/2-fun-4-'
+'-table/2-fun-5-'
+'-table/2-fun-6-'
+'-table/2-fun-7-'
+'-table/2-fun-8-'
+'-table/2-lc$^1/1-1-'
+'-table/2-lc$^0/1-0-'
+'-table/2-fun-9-'
+'-qlc_next/2-fun-0-'
+'-qlc_prev/2-fun-0-'
+'-qlc_select/1-fun-0-'
+'-i/0-fun-0-'
+'-hform/6-lc$^0/1-0-'
+re_match
+print_re_num
+re_display
+re_search
+substr
+do_display_item
+do_display_items
+do_display
+print_number
+strip
+right
+nonl
+line_string
+get_line
+put_chars
+choice
+'(c)ontinue (q)uit (p)Digits (k)ill /Regexp -->'
+'EOT (q)uit (p)Digits (k)ill /Regexp -->'
+eot
+pad_right
+hform
+is_reg
+prinfo2
+prinfo
+tabs
+mem
+i
+listify
+default_option
+n_objects
+traverse
+options
+qlc_select
+qlc_prev
+qlc_next
+is_unique_objects
+is_sorted_key
+num_of_objects
+table_info
+pre_fun
+post_fun
+info_fun
+format_fun
+key_equality
+lookup_fun
+first_next
+last_prev
+tabfile_info
+cannot_create_table
+create_tab
+load_table
+scan_for_endinfo
+md5_and_convert
+major_version
+minor
+major
+get_header_data
+chunk
+wrap_chunk
+bchunk
+wrap_bchunk
+verify_header_mandatory
+count_mandatory
+verify
+parse_f2t_opts
+invalid_object_count
+checksum_error
+do_read_and_verify
+read_error
+unsupported_file_version
+repaired
+file2tab
+object_count
+md5sum
+parse_ft_info_options
+malformed_option
+unknown_option
+parse_ft_options
+md5terms
+ft_options_to_list
+dump_file
+eaccess
+count
+filetab_options
+extended_info
+badtab
+tab2file
+do_filter
+tab2list
+init_table_sub
+end_of_input
+init_table_continue
+init_table
+test_ms
+from_ets
+to_dets
+to_ets
+from_dets
+do_foldr
+transform_from_shell
+fun_data
+fun2ms
+repair_continuation
+match_spec_run
+insert_replaced
+get_opts_replace
+badopt
+trim_all
+trim
+get_opts_split
+splitat
+do_insert
+do_replace
+do_split
+'-load_code_server_prerequisites/0-lc$^0/1-0-'
+'-set_primary_archive/4-lc$^0/1-0-'
+'-load_native_code_for_all_loaded/1-fun-0-'
+load_all_native_1
+load_all_native
+chunk_name
+load_native_code_for_all_loaded
+has_ext
+filter2
+decorate
+build
+clash
+is_cached
+which2
+which
+minimal
+do_s
+compiler
+do_stick_dirs
+load_code_server_prerequisites
+stick
+interactive
+get_mode
+rehash
+replace_path
+del_path
+add_pathsa
+add_pathsz
+add_paths
+add_patha
+add_pathz
+add_path
+is_sticky
+unstick_mod
+stick_mod
+unstick_dir
+stick_dir
+priv_dir
+compiler_dir
+dir
+lib_dir
+root_dir
+all_loaded
+get_object_code
+soft_purge
+purge
+load_native_sticky
+load_native_partial
+load_binary
+load_abs
+already_present
+'-update_chsp/2-fun-0-'
+'-terminate_dynamic_children/3-fun-0-'
+'-terminate_dynamic_children/3-fun-1-'
+'-terminate_dynamic_children/3-fun-2-'
+'-terminate_dynamic_children/3-fun-3-'
+'-monitor_dynamic_children/2-fun-0-'
+'-monitor_dynamic_children/2-fun-1-'
+'-wait_dynamic_children/5-fun-0-'
+invalid_module
+'-validMods/1-fun-0-'
+report_progress
+nb_children
+mfargs
+restart_type
+child_type
+extract_child
+supervisor_report
+errorContext
+offender
+inPeriod
+add_restart
+child_to_spec
+invalid_modules
+dynamic
+validMods
+invalid_shutdown
+validShutdown
+invalid_mfa
+validFunc
+validName
+invalid_child_type
+validChildType
+missing_id
+missing_start
+do_check_childspec
+invalid_child_spec
+check_childspec
+duplicate_child_name
+check_startspec
+supname
+invalid_period
+validPeriod
+invalid_intensity
+validIntensity
+invalid_strategy
+validStrategy
+do_check_flags
+check_flags
+strategy
+period
+intensity
+set_flags
+init_state
+remove_child
+do_replace_child
+replace_child
+is_element
+is_dynamic_pid
+get_dynamic_child
+split_child
+del_child
+state_del_child
+is_set
+dynamic_child_args
+dynamics_db
+add_element
+save_dynamic_child
+save_child
+del_element
+wait_dynamic_children
+monitor_dynamic_children
+fold
+terminate_dynamic_children
+monitor_child
+brutal_kill
+terminate_children
+store
+rest_for_one
+reached_max_restart_intensity
+apply_after
+try_again
+child_terminated
+do_restart
+handle_start_child
+update_chsp
+update_childspec1
+update_childspec
+bad_flags
+invalid_type
+count_child
+specs
+supervisors
+workers
+restarting
+do_start_child_i
+do_start_child
+failed_to_start_child
+start_children
+bad_start_spec
+init_dynamic
+start_spec
+init_children
+supervisor_data
+simple_one_for_one
+get_callback_module
+try_again_restart
+check_childspecs
+count_children
+which_children
+get_childspec
+delete_child
+restart_child
+start_child
+distribution_not_changed
+one_for_all
+kernel_safe_sup
+one_for_one
+global_groups
+is_gg_changed
+global_groups_removed
+global_groups_added
+global_groups_changed
+do_global_groups_change
+is_dist_changed
+distribution_changed
+do_distribution_change
+start_pg2
+start_disk_log
+boot_server_slaves
+get_boot_args
+start_boot_server
+start_dist_ac
+nostick
+get_code_args
+worker
+bad_config
+get_error_logger_type
+shutdown_error
+'-terminate/2-lc$^0/1-0-'
+'-kill_children/1-fun-0-'
+exit_after
+set_timer
+kill_all_procs_1
+kill_all_procs
+kill_children
+terminate_child
+terminate_child_i
+get_child_i
+prep_stop
+loop_it
+start_supervisor
+start_the_app
+start_it_new
+bad_return
+start_it_old
+bad_keys
+child
+terminate_loop
+main_loop
+io_request
+init_loop
+get_child
+'-ensure_all_started/2-lc$^0/1-0-'
+permit_only_loaded_application
+permit
+takeover_application
+ensure_started
+ensure_all_started
+load1
+'-decode_msg/8-fun-0-'
+'-do_multi_call/4-fun-0-'
+'-handle_msg/6-fun-0-'
+'-handle_msg/6-fun-1-'
+'-handle_common_reply/7-fun-0-'
+'-handle_common_reply/7-fun-1-'
+'-reply/5-fun-0-'
+get_debug
+could_not_find_registered_name
+name_to_pid
+process_was_not_started_by_proc_lib
+get_parent
+process_not_registered_via
+process_not_registered_globally
+process_not_registered
+get_proc_name
+dbg_opts
+print_log
+handle_common_reply
+try_terminate
+try_handle_call
+try_dispatch
+start_monitor
+rec_nodes_rest
+rec_nodes
+send_nodes
+do_multi_call
+do_send
+decode_msg
+unregister_name
+bad_return_value
+multi_call
+do_abcast
+abcast
+'$gen_cast'
+cast_msg
+do_cast
+'$gen_call'
+'-concat/1-fun-0-'
+'-filter/2-lc$^0/1-0-'
+rufmerge2_2
+rufmerge2_1
+ufmerge2_2
+ufmerge2_1
+rufmergel
+ufmergel
+ufsplit_2
+ufsplit_1_1
+ufsplit_1
+rfmerge2_2
+rfmerge2_1
+fmerge2_2
+fmerge2_1
+rfmergel
+fmergel
+fsplit_2_1
+fsplit_2
+fsplit_1_1
+fsplit_1
+rukeymerge2_2
+rukeymerge2_1
+ukeymerge2_2
+ukeymerge2_1
+rukeymerge3_21_3
+rukeymerge3_12_3
+rukeymerge3_2
+rukeymerge3_1
+ukeymerge3_21_3
+ukeymerge3_12_3
+ukeymerge3_2
+ukeymerge3_1
+rukeymergel
+ukeymergel
+ukeysplit_2
+ukeysplit_1_1
+ukeysplit_1
+rkeymerge2_2
+rkeymerge2_1
+keymerge2_2
+keymerge2_1
+rkeymerge3_21_3
+rkeymerge3_12_3
+rkeymerge3_2
+rkeymerge3_1
+keymerge3_21_3
+keymerge3_12_3
+keymerge3_2
+keymerge3_1
+rkeymergel
+keymergel
+keysplit_2_1
+keysplit_2
+keysplit_1_1
+keysplit_1
+rumerge2_2
+rumerge2_1
+umerge2_2
+umerge2_1
+rumerge3_21_3
+rumerge3_12_3
+rumerge3_2
+rumerge3_1
+umerge3_21_3
+umerge3_12_3
+umerge3_2
+umerge3_1
+rumergel
+umergel
+usplit_2_1
+desc
+usplit_2
+usplit_1_1
+asc
+usplit_1
+rmerge2_2
+rmerge2_1
+merge2_2
+merge2_1
+rmerge3_21_3
+rmerge3_12_3
+rmerge3_2
+rmerge3_1
+merge3_21_3
+merge3_12_3
+merge3_2
+merge3_1
+rmergel
+mergel
+split_2_1
+split_2
+split_1_1
+split_1
+dropwhile
+takewhile
+mapfoldr
+mapfoldl
+filtermap
+partition
+foldr
+flatmap
+rumerge3
+umerge3
+rumerge
+umerge
+usort_1
+usort
+keymap
+rukeymerge
+ukeymerge
+ukeysort_1
+ukeysort
+rkeymerge
+keymerge
+keysort_1
+keystore2
+keytake
+keyreplace3
+keydelete3
+flatlength
+do_flatten
+thing_to_list
+rmerge
+rmerge3
+merge3
+sort_1
+zipwith3
+zipwith
+unzip3
+zip3
+sublist_2
+sublist
+duplicate
+sum
+seq_loop
+seq
+droplast
+suffix
+prefix
+nthtail
+nth
+open_file
+only_loaded
+'configuration must be a list ended by <dot><whitespace>'
+'-start/1-fun-0-'
+'-loaded_applications/0-fun-0-'
+'-get_all_env/1-fun-0-'
+'-handle_call/3-fun-2-'
+'-handle_call/3-fun-4-'
+keystore
+'-handle_call/3-fun-3-'
+'-handle_call/3-fun-0-'
+'-handle_call/3-fun-1-'
+'-terminate/2-fun-0-'
+'-load/2-fun-0-'
+'-unload/2-fun-0-'
+'-check_start_cond/4-fun-0-'
+'-start_appl/3-fun-0-'
+'-prim_parse/2-fun-0-'
+'-do_change_apps/3-fun-0-'
+'-do_change_apps/3-fun-1-'
+'-get_cmd_env/1-fun-0-'
+'-add_env/2-fun-0-'
+'-do_config_diff/3-fun-0-'
+'-check_conf/0-fun-0-'
+'-reply_to_requester/3-fun-0-'
+default_encoding
+read_encoding_from_binary
+file_binary_to_list
+test_make_apps
+test_do_change_appl
+test_change_apps
+update_permissions
+reply_to_requester
+exited
+info_exited
+started_at
+info_started
+config_error
+strip_comment
+only_ws
+parse_file
+done
+tokens
+scan_file
+load_file
+dirname
+basename
+check_conf_sys
+config
+check_conf
+do_config_diff
+application_not_found
+module_not_defined
+sort
+do_config_change
+do_prep_config_change
+check_user
+del_env
+add_env
+get_env_key
+merge_app_env
+change_app_env
+merge_env
+get_env_i
+handle_make_term_error
+make_term
+conv
+get_cmd_env
+get_opt
+do_change_appl
+is_loaded_app
+do_change_apps
+invalid_options
+badstartspec
+invalid_name
+make_appl_i
+parse_term
+splitwith
+prim_parse
+prim_consult
+format_error
+non_existing
+where_is_file
+make_appl
+bad_application
+get_appl_name
+get_restart_type
+nd
+invalid_restart_type
+validRestartType
+keyreplaceadd
+ksd
+keysearchdelete
+stopped
+stop_appl
+start_appl
+cast
+init_starter
+spawn_starter
+do_start
+check_start_cond
+do_load_application
+get_loaded
+del_cntrl
+ac_application_run
+notify_cntrl_started
+cntrl
+shutdown_func
+application_terminated
+match_delete
+keyreplace
+ac_application_not_run
+not_running
+stop_it
+failover
+takeover
+ac_load_application_reply
+ac_start_application_reply
+ac_change_application_req
+application_start_failure
+transient
+temporary
+handle_application_started
+application_started
+handle_cast
+loading
+start_p_false
+persistent
+permissions
+ac_start_application_req
+distributed_application
+ac_application_unloaded
+noreply
+ac_load_application_req
+not_started
+ac_application_stopped
+keydelete
+check_para
+check_distributed
+distributed
+check_para_kernel
+check_conf_data
+'load error'
+enter_loop
+unset_env
+get_value
+set_env
+permit_application
+get_application_module
+get_application
+get_master
+start_type
+get_all_key
+get_pid_all_key
+appl_data
+appl
+start_phases
+get_key
+get_pid_key
+'$2'
+'$1'
+get_all_env
+get_pid_all_env
+get_env
+get_pid_env
+config_change
+prep_config_change
+change_application_data
+control_application
+ac_tab
+loaded_applications
+which_applications
+stop_application
+bad_environment_value
+start_boot_application
+start_application
+unload_application
+load_application
+'-format_exception/4-fun-0-'
+'-pp_fun/1-fun-0-'
+'-do_stop/2-fun-0-'
+modifier
+format_tag
+pp_fun
+format_mfa
+format_exception
+format_rep
+format_report
+unlimited
+badrpc
+proc_info
+get_my_name
+translate_process_info
+get_process_info
+no_trap
+adjacents
+visit
+max_neighbours
+neighbours
+get_initial_call
+make_neighbour_report
+neighbour
+make_neighbour_reports1
+linked_info
+get_dictionary
+clean_dict
+get_cleaned_dictionary
+ancestors
+get_ancestors
+my_info_1
+my_info
+crash_report
+trans_init
+raw_init_call
+raw_initial_call
+translate_initial_call
+make_dummy_args
+sync_wait_mon
+ack
+sync_wait
+exit_p
+init_p_do_apply
+'$initial_call'
+'$ancestors'
+ensure_link
+wake_up
+spawn_opt_mon
+spawn_mon
+check_for_monitor
+init_p
+'-call/4-fun-0-'
+'-stop/3-fun-0-'
+spawn_opts
+register_name
+name_register
+whereis_name
+where
+do_for_proc
+wait_resp
+do_call
+init_it2
+do_spawn
+already_started
+bad_module
+module_not_found
+'-fetch_msg/5-fun-0-'
+'-do_unlink/2-fun-0-'
+parent_terminated
+'-terminate_supervised/4-fun-0-'
+code_change
+'-system_code_change/4-fun-0-'
+'-system_get_state/1-lc$^0/1-0-'
+'-system_replace_state/2-lc$^0/1-0-'
+'-the_handlers/1-lc$^0/1-0-'
+'-get_modules/1-lc$^0/1-0-'
+'-format_status/2-lc$^0/1-0-'
+optional_callbacks
+callbacks
+behaviour_info
+items
+format_status_header
+stop_handlers
+the_handlers
+format_status
+'function not exported'
+'module could not be loaded'
+is_loaded
+report_error
+gen_event_EXIT
+report_terminate
+do_terminate
+server_call_update
+replace
+server_call
+new_handler
+do_swap
+remove_handler
+server_update
+server_notify
+swapped
+split_and_terminate
+s_s_h
+server_swap_handler
+server_delete_handler
+server_add_sup_handler
+handler
+server_add_handler
+print_event
+system_replace_state
+system_get_state
+zf
+system_code_change
+system_terminate
+system_continue
+filter
+terminate_supervised
+do_unlink
+reply
+terminate_server
+get_modules
+handle_debug
+handle_system_msg
+fetch_msg
+wake_hib
+call1
+swap_sup_handler
+sync_notify
+add_sup_handler
+via
+debug_options
+init_it
+nolink
+'no callback module'
+bad_query
+no_log_file
+allready_have_logfile
+display2
+add_node
+tag_event
+handle_event2
+lost_messages
+swap
+handle_call
+handle_info
+handle_event
+go_back
+which_handlers
+simple_logger
+delete_report_handler
+add_handler
+add_report_handler
+delete_handler
+logfile
+swap_handler
+error_info
+info_report
+std_info
+std_warning
+warning_report
+format
+error_msg
+stop_error
+report_problem
+send_shutdown
+check_callback
+check_system
+get_heart_cmd
+send_heart_cmd
+send_heart_beat
+do_cycle_port_program
+check_schedulers
+validate_options
+no_reboot_shutdown
+port_terminated
+bad_options
+bad_cmd
+bad_callback
+wait_ack
+bad_heart_flag
+check_start_heart
+get_heart_timeouts
+port_problem
+start_portprogram
+wait
+cycle
+get_options
+set_options
+clear_callback
+get_callback
+set_callback
+clear_cmd
+get_cmd
+set_cmd
+start_error
+no_heart
+wait_for_init_ack
+'$handle_undefined_function'
+call_undefined_function_handler
+stub_function
+raise_undef_exception
+'no -init_debug flag'
+'no -mode flag'
+erlangrc
+start_boot
+applications_loaded
+pool_master
+take_over_monitor
+rsh_starter
+timer_server
+stdlib
+load
+init_kernel_started
+mod
+maxP
+maxT
+tty
+included_applications
+applications
+ddll_server
+os_server
+rex
+net_sup
+kernel_sup
+global_name_server
+fixtable_server
+file_server_2
+boot_server
+modules
+vsn
+description
+start_link
+modules_loaded
+win32reg
+sys
+supervisor_bridge
+supervisor
+sofs
+slave
+shell_default
+shell
+sets
+rand
+queue
+qlc_pt
+qlc
+proplists
+proc_lib
+pool
+otp_internal
+ordsets
+orddict
+ms_transform
+log_mf_h
+lib
+io_lib_pretty
+io_lib_fread
+io_lib_format
+io_lib
+gen_fsm
+gen_event
+gen
+gb_trees
+gb_sets
+filename
+filelib
+file_sorter
+eval_bits
+escript
+error_logger_tty_h
+error_logger_file_h
+erl_tar
+erl_pp
+erl_posix_msg
+erl_lint
+erl_internal
+erl_expand_records
+erl_compile
+erl_bits
+erl_anno
+epp
+edlin_expand
+edlin
+digraph_utils
+digraph
+dict
+dets_v9
+dets_v8
+dets_utils
+dets_sup
+dets_server
+dets
+calendar
+c
+beam_lib
+base64
+array
+wrap_log_reader
+user_sup
+user_drv
+standard_error
+rpc
+ram_file
+pg2
+net_adm
+net
+kernel_config
+kernel
+inet_udp
+inet_tcp_dist
+inet_sctp
+inet_res
+inet_parse
+inet_hosts
+inet_gethost_native
+inet_dns
+inet_db
+inet_config
+inet6_udp
+inet6_tcp_dist
+inet6_sctp
+hipe_unified_loader
+group
+global_search
+global_group
+gen_udp
+gen_tcp
+gen_sctp
+file_server
+file_io_server
+erl_reply
+erl_epmd
+erl_distribution
+erl_boot_server
+dist_util
+dist_ac
+disk_log_sup
+disk_log_server
+disk_log_1
+disk_log
+code_server
+application_starter
+application_master
+application_controller
+application
+preloaded
+'no -boot flag'
+noinput
+noshell
+mnesia
+setcookie
+home
+progname
+root
+'no -path flag'
+'no -id flag'
+'no -hosts flag'
+'no -loader flag'
+'-noinput'
+'-noshell'
+'-mnesia'
+'-setcookie'
+'-name'
+'-home'
+'-progname'
+std_low_alloc
+ll_low_alloc
+mseg_alloc
+'-spawn_opt/5-fun-0-'
+gc_info
+sched_wall_time
+receive_allocator
+insert_info
+instance
+insert_instance
+mk_res_list
+get_alloc_info
+atom_space
+loaded_code
+module_refs
+fun_table
+export_list
+export_table
+module_table
+process_table
+link_lh
+ets_misc
+atom_table
+aa_mem_data
+schedulers
+receive_emd
+eheap_alloc
+binary_alloc
+ets_alloc
+fix_alloc
+au_mem_data
+is_low_alloc
+fix_types
+fix_proc
+accessor_bif_timer
+bif_timer
+hl_ptimer
+ll_ptimer
+msg_ref
+nlink_sh
+monitor_sh
+proc
+get_fix_proc
+sbcs
+mbcs_pool
+mbcs
+blocks_size
+get_blocks_size
+memory_is_supported
+get_memval
+need_mem_info
+need_mem_info_list
+get_mem_data
+memory_result_list
+rvrs
+processor_node
+cput_i2e_tag
+cput_i2e_tag_map
+cput_i2e
+cput_e2i
+logical
+core
+thread
+processor
+cput_e2i_clvl
+internal_cpu_topology
+get_cookie
+auth
+set_cookie
+ignored
+passive_cnct
+send_nosuspend
+fun_info_1
+disconnect
+disconnect_node
+is_well_formed_list
+crasher
+remote_spawn_error
+fault
+no_link
+gen_server
+garbage_collect_message_area
+get_gc_opts
+get_cpc_opts
+bitsize
+einal
+clean
+file_not_found
+'no server found'
+ebusy
+no_multi_get
+invalid_current_directory
+'-start/3-fun-0-'
+'-handle_get_files/4-fun-0-'
+'-handle_get_file/3-fun-0-'
+'-handle_get_file/3-fun-1-'
+'-handle_set_primary_archive/5-fun-0-'
+'-handle_release_archives/1-fun-0-'
+'-handle_list_dir/2-fun-0-'
+'-handle_list_dir/2-fun-1-'
+'-handle_read_file_info/2-fun-0-'
+'-handle_read_file_info/2-fun-1-'
+'-handle_read_link_info/2-fun-0-'
+'-handle_read_link_info/2-fun-1-'
+'-handle_get_cwd/2-fun-0-'
+'-handle_get_cwd/2-fun-1-'
+'-efile_multi_get_file_from_port2/8-fun-0-'
+'-prim_get_file/2-fun-0-'
+'-prim_list_dir/2-fun-0-'
+'-prim_read_file_info/3-fun-0-'
+'-open_archive/4-fun-0-'
+'-ensure_virtual_dirs/6-fun-0-'
+'-ensure_virtual_dirs/6-fun-1-'
+'-foldl_archive/3-fun-0-'
+'-load_prim_archive/3-fun-0-'
+load_prim_archive
+real_path
+normalize
+win32_pathtype
+unix_pathtype
+ose
+pathtype
+absname_vr
+relative
+volumerelative
+absolute
+absname
+ipv4_addr
+ipv4_address
+ipv4_list
+string_split2
+string_split
+string_match
+no_match
+no_split
+do_name_split
+name_split
+path_join
+path_split
+to_strs
+keyins
+keysort
+deep_member
+send_all
+win32
+is_basename
+clear_cache
+cache_new
+foldl_archive
+ensure_virtual_dirs
+open_archive
+apply_archive
+prim_get_cwd
+archive_read_file_info
+prim_read_file_info
+archive_list_dir
+prim_list_dir
+archive_get_file
+archive
+prim_get_file
+prim_set_primary_archive
+cache
+release
+primary
+prim_do_release_archives
+prim_release_archives
+loader_debug
+prim_init
+port_error
+ll_close
+ll_open_set_bind
+ll_udp_open
+ll_tcp_connect
+udp_options
+tcp_timeout
+tcp_options
+inet_stop_port
+inet_get_cwd
+inet_read_link_info
+inet_read_file_info
+inet_list_dir
+inet_send_and_rcv
+inet_get_file_from_port1
+inet_get_file_from_port
+inet_timeout_handler
+inet_exit_port
+find_collect
+find_loop
+connect_master
+find_master
+efile_timeout_handler
+efile_exit_port
+noport
+efile_stop_port
+efile_get_cwd
+efile_read_file_info
+efile_list_dir
+efile_release_archives
+efile_set_primary_archive
+efile_get_file_from_port3
+'prim_load port died'
+efile_get_file_from_port2
+efile_get_file_from_port
+efile_par_get_file
+emfile
+efile_multi_get_file_from_port2
+min
+efile_multi_get_file_from_port
+handle_timeout
+handle_exit
+handle_stop
+handle_get_cwd
+handle_read_link_info
+handle_read_file_info
+handle_list_dir
+handle_release_archives
+handle_set_primary_archive
+handle_get_file
+handle_get_files
+bad_state
+error_report
+std_error
+enotdir
+enoent
+check_file_result
+release_archives
+set_primary_archive
+get_path
+init_ack
+efile
+prim_state
+'-filter_fun/0-fun-0-'
+'-include_acc/3-fun-0-'
+'-get_zip_input/1-fun-0-'
+'-get_zip_input/1-fun-1-'
+'-get_cd_loop/11-fun-0-'
+'-get_cd_loop/11-fun-1-'
+'-get_cd_loop/11-fun-2-'
+pwrite_binary
+pwrite_iolist
+skipper
+skip_iolist
+splitter
+split_iolist
+local_file_header_from_bin
+bad_cd_file_header
+cd_file_header_from_bin
+dos_date_time_to_datetime
+add_extra_info
+cd_file_header_to_file_info
+eocd_and_comment_from_bin
+binary_io
+set_file_info
+prim_file_io
+find_eocd_header
+seek
+bad_eocd
+get_end_of_central_dir
+get_filename_from_b2
+bad_central_directory
+cd_file_header
+get_file_header
+get_cd_loop
+eocd
+get_central_dir
+offset_over_z_data_descriptor
+unsupported_compression
+get_z_all
+bad_local_file_header
+bad_local_file_offset
+local_file_header
+get_z_file
+get_zip_input
+lists_foldl
+include_acc
+illegal_filter
+primzip_file
+do_foldl
+foldl
+primzip
+do_open
+filter_fun_throw
+filter_fun
+prim_zip
+'-compress/1-after$^0/0-0-'
+'-uncompress/1-after$^0/0-0-'
+'-zip/1-after$^0/0-0-'
+'-unzip/1-after$^0/0-0-'
+'-gzip/1-after$^0/0-0-'
+'-gunzip/1-after$^0/0-0-'
+need_dictionary
+arg_mem
+arg_bitsz
+arg_method
+filtered
+huffman_only
+rle
+arg_strategy
+best_speed
+best_compression
+arg_level
+full
+arg_flush
+collect
+gunzip
+gzip
+unzip
+deflated
+zip
+data_error
+uncompress
+finish
+default
+compress
+getQSize
+getBufSize
+setBufSize
+inflateEnd
+inflate_has_more
+stream_end
+inflateChunk
+inflate
+inflateReset
+inflateSync
+inflateSetDictionary
+inflateInit
+deflateEnd
+deflate
+deflateParams
+deflateReset
+deflateSetDictionary
+deflateInit
+zlib
+use_threads
+'-sendfile/8-after$^0/0-0-'
+'-get_cwd_int/2-fun-0-'
+'-altname_int/2-fun-0-'
+'-read_link_int/2-fun-0-'
+'-read_link_all_int/2-fun-0-'
+'-list_dir_int/2-fun-0-'
+'-list_dir_all_int/2-fun-0-'
+'-list_dir_response/2-lc$^0/1-0-'
+'-drv_close/1-after$^0/0-0-'
+'-drv_command/4-after$^0/0-0-'
+'-drv_command_nt/3-after$^0/0-0-'
+to_seconds
+from_seconds
+plgv
+pathname
+premature_end_of_list
+lists_split
+transform_ldata
+get_uint32
+get_uint64
+sint64
+int_to_int64bytes
+int_to_int32bytes
+file_access
+other
+device
+regular
+symlink
+file_type
+transform_info
+translate_response
+cur
+bof
+lseek_position
+delayed_write
+read_ahead
+open_mode
+port_died
+bad_response_from_port
+drv_get_response
+drv_command_nt
+drv_command
+drv_close
+drv_open
+handle_fname_response_all
+fname
+handle_fname_response
+list_dir_convert_all
+no_translation
+list_dir_convert
+lfname
+list_dir_response
+list_dir_all_int
+list_dir_all
+list_dir_int
+list_dir
+read_link_info_int
+read_link_info
+read_link_all_int
+read_link_all
+read_link_int
+read_link
+make_symlink_int
+make_symlink
+make_link_int
+make_link
+file_info_validate_ctime
+file_info_validate_mtime
+universal
+posix
+file_info_validate_atime
+write_file_info_int
+write_file_info
+altname_int
+altname
+read_file_info_int
+del_dir_int
+del_dir
+make_dir_int
+make_dir
+rename_int
+delete_int
+set_cwd_int
+set_cwd
+get_cwd_int
+get_cwd
+translate_sendfile_flags
+lock_socket
+inet6_tcp
+inet_tcp
+sendfile
+write_file
+read_file
+ipread_s32bu_p32bu
+copy_opened
+truncate
+position
+pread_int
+pread
+enomem
+read_line
+sync
+datasync
+pwrite_int
+pwrite
+allocate
+random
+sequential
+will_need
+dont_need
+no_reuse
+advise
+file_descriptor
+open_int_setopts
+open_int
+bound
+connecting
+accepting
+multicast
+no_pointtopoint
+no_broadcast
+down
+up
+ssl
+term
+busy
+eprotonosupport
+'-bindx/3-lc$^0/1-0-'
+'-comp_ifaddrs/2-lc$^0/1-0-'
+ctl_cmd
+get_ip6
+get_ip4
+get_ip
+get_addrs
+ip6_to_bytes
+ip4_to_bytes
+ip_to_bytes
+utf8_to_characters
+nil
+tree
+ktree_keys
+ktree_update
+ktree_insert
+ktree_get
+is_defined
+ktree_is_defined
+ktree_empty
+len
+split
+rev
+build_iflist
+build_ifaddrs_opts
+build_ifaddrs
+encode_ifname
+enc_time
+dec_status
+dec_stats
+decode_stats
+recv_cnt
+recv_max
+recv_avg
+recv_dvi
+send_cnt
+send_max
+send_avg
+send_oct
+recv_oct
+enc_stats
+encode_stats
+dec_subs
+decode_subs
+enc_subs
+encode_subs
+encode_ifopt_val
+encode_ifopts
+decode_ifopts
+dec_ifopt
+enc_ifopt
+mtu
+broadaddr
+type_ifopt
+merge_fields
+merge_options
+need_template
+dec
+dec_opt_val
+decode_opt_val
+enc_opts
+encode_opts
+enc_opt_val
+encode_opt_val
+enum_name
+enum_val
+enum_names
+enum_vals
+borlist
+dec_value_tuple
+decode
+dec_value
+enc_value_2
+enc_value_tuple
+enc_value_1
+enc_value_default
+enc_value
+loopback
+bool8
+linkaddr
+ether
+sockaddr
+binary_or_uint
+uint8
+uint16
+uint24
+uint32
+sctp_assoc_id
+enum
+bitenumlist
+type_value_2
+type_value_record
+type_value_tuple
+type_value_1
+type_value_default
+record
+type_value
+int
+ip
+uint
+type_opt_1
+type_opt
+dec_opt
+keepalive
+nodelay
+multicast_if
+multicast_ttl
+multicast_loop
+add_membership
+drop_membership
+header
+deliver
+exit_on_close
+high_watermark
+low_watermark
+send_timeout
+delay_send
+read_packets
+send_timeout_close
+high_msgq_watermark
+low_msgq_watermark
+show_econnreset
+enc_opt
+is_sockopt_val
+attach
+detach
+unrecv
+getservbyport1
+getservbyport
+getservbyname1
+getservbyname
+gethostname
+getstatus
+getprotocol
+gettype
+getindex
+ignorefd
+getfd
+getstat
+subscribe
+ifset
+ifget
+getiflist
+netmask
+dstaddr
+pointtopoint
+broadcast
+getifaddrs_ifget
+hwaddr
+comp_ifaddrs_add
+comp_ifaddrs
+enotsup
+getifaddrs
+chgopts
+chgopt
+getopts
+getopt
+setopt
+socknames
+setsockname
+sockname
+peernames
+setpeername
+peername
+recvfrom0
+recvfrom
+async_recv
+recv0
+recv
+sendmsg
+sendto
+peeloff
+listen
+async_accept
+accept_opts
+accept0
+accept
+async_connect
+connect0
+bindx
+add
+addr
+bind
+close_port
+send_pend
+close_pend_loop
+subs_empty_out_q
+shutdown_1
+read
+write
+read_write
+drv2protocol
+protocol2drv
+dgram
+seqpacket
+enc_type
+inet
+inet6
+enc_family
+bool
+fdopen
+prim_inet
+prim_eval
+shutdown_timeout
+not_allowed
+badrecord
+starting
+'-bs2as/1-fun-0-'
+'-bs2ss/1-fun-0-'
+'-boot/1-fun-0-'
+'-notify/1-fun-0-'
+'-get_pids/1-lc$^0/1-0-'
+'-do_boot/2-fun-0-'
+'-par_load_modules/2-lc$^0/1-0-'
+'-par_load_modules/2-fun-0-'
+'-patch_path/2-lc$^0/1-0-'
+'-patch_dir/2-lc$^0/1-1-'
+'-patch_dir/2-lc$^1/1-0-'
+'-shutdown_timer/1-fun-0-'
+'-start_on_load_handler_process/0-fun-0-'
+'-run_on_load_handlers/2-fun-0-'
+on_load_function_failed
+on_load_handler_returned_ok
+spawn_monitor
+running_on_load_handler
+on_load_loop
+on_load_handler_init
+start_on_load_handler_process
+on_load_done
+run_on_load
+run_on_load_handlers
+archive_extension
+objfile_extension
+search
+concat
+set_argument
+get_argument1
+to_strings
+get_flag_args
+get_flag_list
+get_flag
+get_args
+check
+start_arg
+start_arg2
+eval_arg
+flag
+start_extra_arg
+end_args
+arg
+parse_boot_args
+timer
+flush_timout
+'-shutdown_time'
+shutdown_timer
+load_module
+load_mod_code
+load_mod
+exprs
+new_bindings
+erl_eval
+parse_exprs
+erl_parse
+dot
+erl_scan
+start_it
+start_em
+start_in_kernel
+join
+funny_splitwith
+funny_split
+directory
+file_info
+read_file_info
+patch_dir
+patch_path
+get_var_val
+get_var_value
+extract_var
+add_var
+fix_path
+make_path
+'cannot load'
+get_files
+par_load_modules
+load_modules
+'unexpected command in bootfile'
+kernelProcess
+preLoaded
+primLoad
+path
+embedded
+kernel_load_completed
+eval_script
+script
+get_file
+'bootfile format error'
+'cannot get bootfile'
+not_found
+get_boot
+'-pz'
+'-pa'
+path_flags
+bootfile
+'-boot_var'
+init__boot__on_load_handler
+init_debug_flag
+'-init_debug'
+'-mode'
+'-root'
+do_boot
+'-path'
+'-id'
+'-hosts'
+'-loader'
+prim_load_flags
+add_to_kernel
+set_path
+erl_prim_loader
+start_prim_loader
+sleep
+kernel_pid
+terminate
+del
+sub
+remove_refs_from
+hipe_bifs
+purge_all_hipe_refs
+do_unload
+unload
+kill_all_ports
+kill_em
+get_pids
+kill_all_pids
+resend
+shutdown_loop
+shutdown_kernel_pid
+shutdown
+heart
+get_heart
+shutdown_pids
+stop_heart
+clear_system
+do_stop
+stopping
+set_flag
+'-config'
+'-boot'
+user
+do_handle_msg
+new_state
+handle_msg
+loop
+new_kernelpid
+garb_boot_loop
+foreach
+started
+progress
+boot_loop
+crash
+first198
+halt_string
+things_to_string
+flatten
+printable_list
+to_string
+state
+relaxed
+strict
+code_path_choice
+flags_to_atoms_again
+map
+b2s
+b2a
+s
+eval
+prepare_run_args
+reboot
+request
+wait_until_started
+notify_when_started
+make_permanent
+ensure_loaded
+fetch_loaded
+get_status
+bs2ss
+bs2as
+script_id
+get_argument
+get_plain_arguments
+get_arguments
+debug
+fatal
+init
+boot
+otp_ring0
+'TRACE'
+'DELETE'
+'PUT'
+'POST'
+'HEAD'
+'GET'
+'OPTIONS'
+'Proxy-Connection'
+'Keep-Alive'
+'Cookie'
+'X-Forwarded-For'
+'Set-Cookie2'
+'Set-Cookie'
+'Accept-Ranges'
+'Last-Modified'
+'Expires'
+'Etag'
+'Content-Type'
+'Content-Range'
+'Content-Md5'
+'Content-Location'
+'Content-Length'
+'Content-Language'
+'Content-Encoding'
+'Content-Base'
+'Allow'
+'Www-Authenticate'
+'Warning'
+'Vary'
+'Server'
+'Retry-After'
+'Public'
+'Proxy-Authenticate'
+'Location'
+'Age'
+'User-Agent'
+'Referer'
+'Range'
+'Proxy-Authorization'
+'Max-Forwards'
+'If-Unmodified-Since'
+'If-Range'
+'If-None-Match'
+'If-Match'
+'If-Modified-Since'
+'Host'
+'From'
+'Authorization'
+'Accept-Language'
+'Accept-Encoding'
+'Accept-Charset'
+'Accept'
+'Via'
+'Upgrade'
+'Transfer-Encoding'
+'Pragma'
+'Date'
+'Connection'
+'Cache-Control'
+process_low
+process_normal
+process_high
+process_max
+characters_to_list_trap_4
+characters_to_list_trap_3
+characters_to_list_trap_2
+characters_to_list_trap_1
+characters_to_utf8_trap
+md5_trap
+shutdown_ack_sent
+shutdown_received
+shutdown_sent
+shutdown_pending
+established
+cookie_echoed
+cookie_wait
+empty
+unconfirmed
+sackdelay_disable
+sackdelay_enable
+pmtud_disable
+pmtud_enable
+hb_demand
+hb_disable
+hb_enable
+partial_delivery_aborted
+wrong_anc_data
+short_recv
+addr_confirmed
+addr_made_prim
+addr_added
+addr_removed
+addr_unreachable
+addr_available
+cant_assoc
+shutdown_comp
+comm_lost
+comm_up
+abort
+addr_over
+unordered
+sctp_paddrinfo
+sctp_assoc_value
+sctp_event_subscribe
+sctp_paddrparams
+sctp_setadaptation
+sctp_setpeerprim
+sctp_prim
+sctp_assocparams
+sctp_pdapi_event
+sctp_adaptation_event
+sctp_shutdown_event
+sctp_send_failed
+sctp_remote_error
+sctp_paddr_change
+sctp_assoc_change
+sctp_sndrcvinfo
+sctp_get_peer_addr_info
+sctp_status
+sctp_delayed_ack_time
+sctp_events
+sctp_default_send_param
+sctp_peer_addr_params
+sctp_adaptation_layer
+sctp_primary_addr
+sctp_set_peer_primary_addr
+sctp_maxseg
+sctp_i_want_mapped_v4_addr
+sctp_disable_fragments
+sctp_nodelay
+sctp_autoclose
+sctp_initmsg
+sctp_associnfo
+sctp_rtoinfo
+netns
+ipv6_v6only
+tos
+dontroute
+reuseaddr
+sndbuf
+recbuf
+linger
+multi
+once
+mode
+buffer
+sctp_error
+sctp_passive
+sctp
+empty_out_q
+udp_error
+udp_passive
+tcp_error
+tcp_closed
+tcp_passive
+inet_reply
+inet_async
+einval
+udp
+tcp
+select_trap
+'count_trap\000'
+delete_trap
+linux
+unix
+hash
+map_info
+fun_info_mfa
+take
+cmp_term
+update
+remove
+merge
+keys
+is_key
+from_list
+find
+to_list
+maps
+map_size
+is_map
+inspect
+unsetenv
+printable_range
+binary_to_float
+float_to_binary
+integer_to_binary
+binary_to_integer
+delete_element
+insert_element
+finish_loading
+prepare_loading
+dt_append_vm_tag_data
+dt_prepend_vm_tag_data
+dt_restore_tag
+dt_spread_tag
+dt_get_tag_data
+dt_get_tag
+dt_put_tag
+posixtime_to_universaltime
+universaltime_to_posixtime
+check_old_code
+native_name_encoding
+file
+is_translatable
+internal_normalize_utf8
+internal_native2name
+internal_name2native
+prim_file
+nif_error
+decode_unsigned
+encode_unsigned
+referenced_byte_size
+list_to_bin
+bin_to_list
+part
+at
+longest_common_suffix
+longest_common_prefix
+matches
+compile_pattern
+binary_part
+finish_after_on_load
+call_on_load_function
+load_nif
+setopts
+give_away
+dflag_unicode_io
+binary_to_existing_atom
+binary_to_atom
+atom_to_binary
+bin_is_7bit
+characters_to_list
+characters_to_binary
+decode_packet
+update_element
+bitstring_to_list
+list_to_bitstring
+bit_size
+byte_size
+tuple_size
+is_bitstring
+list_to_existing_atom
+iolist_to_binary
+iolist_size
+make_fun
+to_float
+to_integer
+string
+is_boolean
+get_module_info
+warning_map
+hibernate
+is_module_native
+make_stub_module
+module_md5
+get_chunk
+lock_counters
+dump_links
+dump_monitors
+instructions
+dist_ext_to_term
+set_internal_state
+get_internal_state
+flat_size
+same
+disassemble
+erts_debug
+keyfind
+keysearch
+keymember
+reverse
+lists
+run
+format_error_int
+loaded_drivers
+try_unload
+try_load
+erl_ddll
+getpid
+putenv
+os
+match_spec_run_r
+match_spec_compile
+select_delete
+select_reverse
+select_count
+select
+update_counter
+slot
+safe_fixtable
+rename
+insert_new
+insert
+prev
+member
+match_object
+last
+lookup_element
+lookup
+is_compiled_ms
+delete_object
+delete_all_objects
+delete
+match_spec_test
+is_record
+is_function
+is_binary
+is_reference
+is_port
+is_pid
+is_number
+is_integer
+is_float
+is_tuple
+is_list
+is_atom
+subtract
+'--'
+append
+'++'
+send
+'!'
+is_builtin
+get_stacktrace
+raise
+is_process_alive
+demonitor
+fun_to_list
+port_to_list
+ref_to_list
+system_profile
+system_monitor
+system_info
+system_flag
+append_element
+make_tuple
+read_timer
+cancel_timer
+send_after
+start_timer
+pow
+atan2
+sqrt
+log10
+log2
+log
+exp
+erfc
+erf
+atanh
+atan
+asinh
+asin
+acosh
+acos
+tanh
+tan
+sinh
+sin
+cosh
+cos
+math
+bump_reductions
+resume_process
+suspend_process
+seq_trace_print
+seq_trace_info
+seq_trace
+trace_delivered
+trace_info
+trace_pattern
+port_get_data
+port_set_data
+system_check
+is_system_process
+time_unit
+map_hashmap_children
+map_type
+map_to_tuple_keys
+check_process_code
+request_system_task
+port_connect
+port_close
+port_control
+port_command
+port_call
+port_info
+dist_exit
+setnode
+spawn_opt
+whereis
+unlink
+universaltime_to_localtime
+universaltime
+tuple_to_list
+trunc
+tl
+time
+term_to_binary
+statistics
+split_binary
+spawn_link
+spawn
+setelement
+self
+round
+registered
+put
+purge_module
+process_info
+process_flag
+pre_loaded
+pid_to_list
+open_port
+system_time
+monotonic_time
+now
+nodes
+monitor_node
+function_exported
+module_loaded
+md5_final
+md5_update
+md5_init
+unique_integer
+make_ref
+localtime_to_universaltime
+localtime
+list_to_tuple
+list_to_pid
+list_to_integer
+list_to_float
+list_to_binary
+list_to_atom
+link
+length
+is_alive
+integer_to_list
+hd
+phash2
+phash
+halt
+get_keys
+get
+garbage_collect
+fun_info
+float_to_list
+float
+external_size
+erase
+element
+display_nl
+display_string
+display
+delete_module
+date
+crc32_combine
+crc32
+binary_to_term
+binary_to_list
+atom_to_list
+adler32_combine
+adler32
+abs
+yield
+yes
+x86
+xor
+write_concurrency
+wordsize
+scheduler_wall_time
+warning_msg
+warning
+wall_clock
+waiting
+visible
+version
+values
+value
+unload_cancelled
+unloaded_only
+unloading
+unloaded
+unless_suspending
+uniq
+unblock
+utf8
+used
+use_stdio
+urun
+unregister
+unicode
+ungreedy
+undef
+ucp
+ucompile
+type
+tuple
+try_clause
+trap_exit
+tracer
+trace_control_word
+traced
+trace_ts
+trace
+tpkt
+total_run_queue_lengths
+total_heap_size
+total_active_tasks
+total
+timestamp
+'*'
+timeout_value
+time_offset
+threads
+thread_pool_size
+this
+term_to_binary_trap
+table
+'SYSTEM'
+system_architecture
+system_version
+system_limit
+system_error
+system
+sys_misc
+suspending
+suspended
+suspend
+sunrm
+strict_monotonic_timestamp
+stream
+stop
+stderr_to_stdout
+static
+status
+start
+stack_size
+ssl_tls
+spawn_driver
+spawn_executable
+sl_alloc
+size
+silent
+shared
+separate
+set_tcw_fake
+set_tcw
+set_seq_token
+set_on_spawn
+set_on_link
+set_on_first_spawn
+set_on_first_link
+set_data
+set_cpu_topology
+set
+serial
+sequential_trace_token
+sequential_tracer
+sensitive
+seconds
+scope
+scientific
+scheme
+schedulers_online
+scheduler_id
+scheduler
+save_calls
+safe
+runtime
+running_procs
+running_ports
+running
+runnable_procs
+runnable_ports
+runnable
+run_queue_lengths
+run_queue
+return_trace
+return_to
+return_from
+restart
+reset
+report_errors
+rem
+reload
+registered_name
+register
+refc
+reductions
+recent_size
+receive
+reason
+ready_async
+ready_output
+ready_input
+read_concurrency
+re_run_trap
+re_pattern
+re
+raw
+queue_size
+quantify
+purify
+public
+ptab_list_continue
+protection
+protected
+profile
+proc_sig
+procs
+process_dump
+process_limit
+process_display
+process_count
+processes_used
+processes
+process
+private
+priority
+print
+positive
+port_op
+port_limit
+port_count
+ports
+port
+pid
+permanent
+pending_reload
+pending_process
+pending_driver
+pending
+pause
+'+'
+parallelism
+packet_size
+packet
+owner
+overlapped_io
+output
+out_exiting
+out_exited
+out
+ose_ti_proc
+ose_process_type
+ose_process_prio
+ose_pri_proc
+ose_phantom
+ose_int_proc
+ose_bg_proc
+os_version
+os_type
+os_pid
+orelse
+ordered_set
+or
+opt
+open_error
+open
+on_load
+old_heap_size
+old_heap_block_size
+ok
+offset
+objects
+nouse_stdio
+notsup
+notify
+notempty_atstart
+notempty
+noteol
+notbol
+notalive
+not_purged
+not_pending
+not_loaded_by_this_process
+not_loaded
+not_a_list
+not
+no_start_optimize
+no_network
+no_integer
+no_float
+nosuspend
+noproc
+nofile
+noeol
+nodeup
+nodedown_reason
+nodedown
+node_type
+node
+nocookie
+noconnection
+noconnect
+no_auto_capture
+none
+nomatch
+no
+next
+newline
+new_uniq
+new_index
+new
+never_utf
+net_kernel_terminated
+net_kernel
+'/='
+'=/='
+native_addresses
+native
+namelist
+named_table
+name
+nano_seconds
+multiline
+multi_scheduling
+more
+monotonic_timestamp
+monotonic
+monitors
+monitor_nodes
+monitor
+monitored_by
+module_info
+module
+'-'
+minor_version
+min_bin_vheap_size
+min_heap_size
+milli_seconds
+micro_seconds
+meta_match_spec
+meta
+merge_trap
+messages
+message_queue_len
+message_binary
+message
+memory_types
+memory_internal
+memory
+md5
+mbuf_size
+max_processes
+max_tables
+maximum
+max
+match_spec
+match_limit_recursion
+match_limit
+match
+machine
+'<'
+low
+long_schedule
+long_gc
+local
+load_failure
+load_cancelled
+loaded
+little
+list_to_binary_continue
+list
+links
+linked_in_driver
+line_length
+line_delimiter
+line
+lf
+'=<'
+ldflags
+latin1
+last_calls
+large_heap
+label
+known
+kill_ports
+killed
+kill
+keypos
+io
+is_seq_trace
+is_constant
+invalid
+instruction_counts
+internal_status
+internal_error
+internal
+input
+initial_call
+info_msg
+info
+index
+inconsistent
+incomplete
+inactive
+in_exiting
+in
+ignore
+if_clause
+id
+httph_bin
+http_bin
+http_error
+http_eoh
+http_header
+http_request
+http_response
+https
+httph
+http
+hipe_architecture
+high
+hide
+hidden
+heir
+heart_port
+heap_type
+heap_sizes
+heap_size
+heap_block_size
+have_dt_utag
+group_leader
+grun
+'>'
+global
+getting_unlinked
+getting_linked
+gather_system_check_result
+gather_sched_wall_time_result
+gather_io_bytes
+gather_gc_info_result
+getenv
+get_tcw
+get_seq_token
+get_data
+generational
+'>='
+gc_start
+gc_end
+garbage_collection
+garbage_collecting
+function_clause
+functions
+function
+fullsweep_if_old_binaries
+fullsweep_after
+free
+format_cpu_topology
+force
+flush_monitor_messages
+flush
+flags
+firstline
+first
+fd
+fcgi
+external
+exports
+exiting
+existing
+exit_status
+exclusive
+exact_reductions
+event
+'ETS-TRANSFER'
+ets
+erts_internal
+error_logger
+error_handler
+'ERROR'
+erlang
+'=='
+'=:='
+extended
+exception_trace
+exception_from
+eol
+eof
+env
+endian
+enabled
+enable_trace
+emulator
+elib_malloc
+dupnames
+duplicate_bag
+dunlink
+dsend_continue_trap
+dsend
+driver_options
+driver
+dotall
+dollar_endonly
+'$_'
+'$$'
+dmonitor_p
+dmonitor_node
+dlink
+div
+'/'
+dist_cmd
+dist
+display_items
+disabled
+disable_trace
+dirty_cpu_schedulers_online
+dictionary
+dgroup_leader
+depth
+dexit
+delay_trap
+decimals
+debug_flags
+data
+current_stacktrace
+current_location
+current_function
+creation
+crlf
+cr
+cpu_timestamp
+cpu
+copy
+control
+context_switches
+const
+cons
+connection_closed
+connected
+connect
+convert_time_unit
+config_h
+compressed
+compile
+compat_rel
+compact
+command
+code
+closed
+close
+clock_service
+clear
+characters_to_list_int
+characters_to_binary_int
+'CHANGE'
+cflags
+cdr
+cd
+catchlevel
+caseless
+case_clause
+capture
+caller
+call_time
+call_count
+busy_port
+busy_dist_port
+build_type
+bsr_unicode
+bsr_anycrlf
+bsr
+bsl
+breakpoint
+break_ignored
+bxor
+bor
+bnot
+bm
+blocked
+block
+binary_to_term_trap
+binary_to_list_continue
+binary_matches_trap
+binary_match_trap
+binary_longest_suffix_trap
+binary_longest_prefix_trap
+binary_copy_trap
+binary_bin_to_list_trap
+binary
+bif_timer_server
+bif_return_trap
+big
+band
+bag
+badsig
+badmatch
+badmap
+badkey
+badfun
+badfile
+badarity
+badarith
+badarg
+backtrace_depth
+backtrace
+awaiting_unload
+awaiting_load
+await_sched_wall_time_modifications
+await_result
+await_proc_exit
+await_port_send_result
+attributes
+atom_used
+atom
+asynchronous
+async
+asn1
+arity
+arg0
+args
+apply
+anycrlf
+any
+andthen
+andalso
+and
+anchored
+amd64
+already_loaded
+allow_passive_connect
+allow_gc
+alloc_util_allocators
+allocator_sizes
+allocator
+allocated_areas
+allocated
+alloc_sizes
+alloc_info
+all_names
+all_but_first
+all
+active_tasks
+active
+accessor
+ac
+absoluteURI
+abs_path
+aborted
+'EXIT'
+'UP'
+'DOWN'
+undefined_lambda
+undefined_function
+nocatch
+undefined
+exit
+error
+throw
+return
+call
+normal
+timeout
+infinity
+fun
+''
+'$end_of_table'
+'nonode@nohost'
+'_'
+true
+false
+=end
diff --git a/QiaoJiaSystem/build/fastDfsClient.conf b/QiaoJiaSystem/build/fastDfsClient.conf
new file mode 100644
index 0000000..dbe42e9
--- /dev/null
+++ b/QiaoJiaSystem/build/fastDfsClient.conf
@@ -0,0 +1,62 @@
+# connect timeout in seconds
+# default value is 30s
+connect_timeout=30
+
+# network timeout in seconds
+# default value is 30s
+network_timeout=60
+
+# the base path to store log files
+base_path=fastdfs
+
+# tracker_server can ocur more than once, and tracker_server format is
+# "host:port", host can be hostname or ip address
+tracker_server=192.168.1.185:22122
+
+#standard log level as syslog, case insensitive, value list:
+### emerg for emergency
+### alert
+### crit for critical
+### error
+### warn for warning
+### notice
+### info
+### debug
+log_level=info
+
+# if use connection pool
+# default value is false
+# since V4.05
+use_connection_pool = false
+
+# connections whose the idle time exceeds this time will be closed
+# unit: second
+# default value is 3600
+# since V4.05
+connection_pool_max_idle_time = 3600
+
+# if load FastDFS parameters from tracker server
+# since V4.05
+# default value is false
+load_fdfs_parameters_from_tracker=false
+
+# if use storage ID instead of IP address
+# same as tracker.conf
+# valid only when load_fdfs_parameters_from_tracker is false
+# default value is false
+# since V4.05
+use_storage_id = false
+
+# specify storage ids filename, can use relative or absolute path
+# same as tracker.conf
+# valid only when load_fdfs_parameters_from_tracker is false
+# since V4.05
+storage_ids_filename = storage_ids.conf
+
+
+#HTTP settings
+http.tracker_server_port=80
+
+#use "#include" directive to include HTTP other settiongs
+##include http.conf
+
diff --git a/QiaoJiaSystem/build/killAll.sh b/QiaoJiaSystem/build/killAll.sh
new file mode 100644
index 0000000..cd8febb
--- /dev/null
+++ b/QiaoJiaSystem/build/killAll.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+pkill Face
+pkill YoloServer
+pkill DataWebServ
+pkill VideoAnalys
+pkill RecordVideo
+pkill beam.smp
+pkill srs
diff --git a/QiaoJiaSystem/build/runAll.sh b/QiaoJiaSystem/build/runAll.sh
new file mode 100644
index 0000000..ca3a136
--- /dev/null
+++ b/QiaoJiaSystem/build/runAll.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+
+MYLDPATH="~/Apps"
+MY3RDLIBSPATH="~/Apps/BasicPlatForm/libs/"
+MYLOGPATH="~/work/log/"
+
+#todo
+#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib:/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${MY3RDLIBSPATH}/hcTool/HCNetSDK64/lib:${MY3RDLIBSPATH}/hcTool/HCNetSDK64/lib/HCNetSDKCom:${MY3RDLIBSPATH}/ffmpeg/lib:${MY3RDLIBSPATH}/opencv/lib:${MY3RDLIBSPATH}/Casia_Face/FaceSdk/lib/gpu:${MY3RDLIBSPATH}/FastDFS/lib:${MY3RDLIBSPATH}/Ice-3.7.0/lib64:${MY3RDLIBSPATH}/DarkNet/lib:${MY3RDLIBSPATH}/libopenssl/lib:${MY3RDLIBSPATH}/uniview/lib
+
+startFunc() {
+ PROC=`ps aux | grep "$1" | grep -v grep | grep -v tail`
+ if [ -z "${PROC}" ]; then
+ date +%D-%T" $1 start"
+ nohup ./$1 > ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T` &
+ return 1
+ else
+ echo "$1 is exists"
+ return 0
+ fi
+}
+
+#start FaceExtractServer
+startFunc FaceExtractServer
+
+#start FaceDetectServer
+startFunc FaceDetectServer
+
+#start YoloServer
+startFunc YoloServer
+
+#start FaceSearchServer
+startFunc FaceSearchServer
+
+#start RecordVideo
+startFunc RecordVideo
+
+#start DataWebServer
+#startFunc DataWebServer
+sh runWebSer.sh
+
+
+#start VideoAnalysFromHC
+VideoAnalysPROC=`ps aux | grep "VideoAnalysFromHC" | grep -v grep | grep -v tail`
+if [ -z "${VideoAnalysPROC}" ]; then
+ date +%D-%T" VideoAnalysFromHC start"
+ nohup ./VideoAnalysFromHC 2> /dev/null > ${MYLOGPATH}/LogVideoAnalysFromHC`date +%Y-%m-%d_%T` &
+else
+ echo "VideoAnalysFromHC is exists"
+fi
+
+
diff --git a/QiaoJiaSystem/build/runTestCutImage.sh b/QiaoJiaSystem/build/runTestCutImage.sh
new file mode 100644
index 0000000..75e412a
--- /dev/null
+++ b/QiaoJiaSystem/build/runTestCutImage.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+echo " " > LogTest
+
+for ((i=0; i<1000; ++i))
+do
+ ./TestFile >> LogTest
+ echo ${i}"\\n\\n" >> LogTest
+done
\ No newline at end of file
diff --git a/QiaoJiaSystem/build/runWebSer.sh b/QiaoJiaSystem/build/runWebSer.sh
new file mode 100644
index 0000000..1551af9
--- /dev/null
+++ b/QiaoJiaSystem/build/runWebSer.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+MYLDPATH="/home/basic/Apps"
+MYLOGPATH="/media/basic/75756d46-005d-486f-af00-4eb766e304c2/log"
+
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${MYLDPATH}/BasicPlatForm/libs/hcTool/HCNetSDK64/lib:${MYLDPATH}/BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom:${MYLDPATH}/BasicPlatForm/libs/ffmpeg/lib:${MYLDPATH}/BasicPlatForm/libs/opencv/lib:${MYLDPATH}/BasicPlatForm/libs/Casia_Face/FaceSdk/lib/gpu:${MYLDPATH}/BasicPlatForm/libs/FastDFS/lib:${MYLDPATH}/BasicPlatForm/libs/Ice-3.7.0/lib64:${MYLDPATH}/BasicPlatForm/libs/DarkNet/lib:${MYLDPATH}/BasicPlatForm/libs/libopenssl/lib
+
+DataWebPROC=`ps aux | grep "DataWebServer" | grep -v grep | grep -v tail`
+if [ -z "${DataWebPROC}" ]; then
+ date +%D-%T" DataWebServer start"
+ nohup ./DataWebServer > ${MYLOGPATH}/LogDataWebServer`date +%Y-%m-%d_%T` &
+else
+ echo "DataWebServer is exists"
+fi
\ No newline at end of file
diff --git a/QiaoJiaSystem/build/scpToSer.sh b/QiaoJiaSystem/build/scpToSer.sh
new file mode 100644
index 0000000..cb63d59
--- /dev/null
+++ b/QiaoJiaSystem/build/scpToSer.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+CUR_PATH=`pwd`
+#echo ${CUR_PATH}"/"${SENDFILE}
+#scp ${CUR_PATH}"/"${SENDFILE} basic@192.168.1.185:/home/basic/Apps/QiaoJiaSystem/build
+
+
+sendFile() {
+ echo $1
+ des_pass=123
+ expect -c "
+ spawn scp ${CUR_PATH}"/"$1 basic@192.168.1.203:/home/basic/Apps/QiaoJiaSystem/build
+ expect \"password:\"
+ send \"${des_pass}\r\"
+ expect eof
+ "
+}
+
+
+#todo
+#sudo apt install expect
+#spawn scp target/aaa-0.0.1.war root@192.168.1.30:/home/GameUser/MagicvesselUserWeb/aaa-release.war
+
+if [ "$1" = "1" ]; then
+ date +%D-%T" test"
+ sendFile DataWebServer
+ sendFile FaceDetectServer
+ sendFile FaceExtractServer
+ sendFile FaceSearchServer
+ sendFile syncDBClient
+ sendFile RecordVideo
+ sendFile VideoAnalysFromHC
+ sendFile YoloServer
+ sendFile killAll.sh
+ #sendFile runAll.sh
+ #sendFile runWebSer.sh
+else
+ SENDFILE=$1
+ sendFile ${SENDFILE}
+fi
diff --git a/QiaoJiaSystem/build/startAllServer.sh b/QiaoJiaSystem/build/startAllServer.sh
new file mode 100644
index 0000000..0a84f80
--- /dev/null
+++ b/QiaoJiaSystem/build/startAllServer.sh
@@ -0,0 +1,44 @@
+
+#ps -aux | grep elasticsearch | grep "\-d"
+#bash /home/basic/es_start.sh &
+
+echo `whoami` >> /home/basic/restart.log
+
+ES_PROC=`ps -aux | grep elasticsearch | grep "\-d"`
+if [ -z "${ES_PROC}" ]; then
+ bash /home/basic/es_start.sh &
+else
+ echo "es is exists"
+fi
+
+#ps -aux |grep fdfs
+#echo "123" | sudo -S bash /home/basic/fdfs_start.sh &
+Fdfs_PROC=`ps -aux |grep fdfs | grep -v grep`
+if [ -z "${Fdfs_PROC}" ]; then
+ echo "123" | sudo -S bash /home/basic/fdfs_start.sh &
+else
+ echo "fdfs is exists"
+fi
+
+#ps -aux |grep nginx | grep process
+#echo "123" | sudo -S bash /home/basic/nginx_start.sh &
+Nginx_PROC=`ps -aux |grep nginx | grep process`
+if [ -z "${Nginx_PROC}" ]; then
+ echo "123" | sudo -S bash /home/basic/nginx_start.sh &
+else
+ echo "nginx is exists"
+fi
+
+cd /home/basic/Apps/QiaoJiaSystem/build/
+echo "123" | sudo -S bash ./runAll.sh &
+
+cd /opt/tomcat7/apache-tomcat-7.0.90/bin
+#ps -aux |grep tomcat |grep start
+#nohup echo "123" | sudo -S ./catalina.sh start &
+Tomcat_PROC=`ps -aux |grep tomcat |grep start`
+if [ -z "${Tomcat_PROC}" ]; then
+ nohup echo "123" | sudo -S ./startup.sh start &
+else
+ echo "tomcat is exists"
+fi
+
diff --git a/QiaoJiaSystem/build/startHC.sh b/QiaoJiaSystem/build/startHC.sh
new file mode 100644
index 0000000..cd3cb74
--- /dev/null
+++ b/QiaoJiaSystem/build/startHC.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/bsk/work/development/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib:/home/bsk/work/development/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom
+./VideoAnalysFromHC 2> /dev/null
diff --git a/QiaoJiaSystem/build/syncDBClient b/QiaoJiaSystem/build/syncDBClient
new file mode 100644
index 0000000..913497d
--- /dev/null
+++ b/QiaoJiaSystem/build/syncDBClient
Binary files differ
diff --git a/QiaoJiaSystem/build/testLoadDB.sh b/QiaoJiaSystem/build/testLoadDB.sh
new file mode 100644
index 0000000..9748db1
--- /dev/null
+++ b/QiaoJiaSystem/build/testLoadDB.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/bash
+
+for ((i=1;i<=10;i++));do
+time ./syncDBClient "{"\"clusterID\"":"\"\"","\"clusterName\"":"\"\"","\"cookie\"":"\"1234\"","\"nodeName\"":"\"cfe40e7e-f054-4f8f-bac8-60fcca231d44@192.168.1.124\"","\"path\"":"\"/opt/erlang/cfe40e7e-f054-4f8f-bac8-60fcca231d44\"","\"syncTpye\"":null,"\"tableName\"":"\"t1232\""}" | grep "load ok" &
+sleep 3s
+time ./syncDBClient "{"\"clusterID\"":"\"\"","\"clusterName\"":"\"\"","\"cookie\"":"\"1234\"","\"nodeName\"":"\"cfe40e7e-f054-4f8f-bac8-60fcca231d44@192.168.1.124\"","\"path\"":"\"/opt/erlang/cfe40e7e-f054-4f8f-bac8-60fcca231d44\"","\"syncTpye\"":null,"\"tableName\"":"\"t1233\""}" | grep "load ok" &
+sleep 3s
+time ./syncDBClient "{"\"clusterID\"":"\"\"","\"clusterName\"":"\"\"","\"cookie\"":"\"1234\"","\"nodeName\"":"\"cfe40e7e-f054-4f8f-bac8-60fcca231d44@192.168.1.124\"","\"path\"":"\"/opt/erlang/cfe40e7e-f054-4f8f-bac8-60fcca231d44\"","\"syncTpye\"":null,"\"tableName\"":"\"t1234\""}" | grep "load ok" &
+sleep 3s
+echo "wait loop 30s\n\n"
+sleep 10s
+done
+
+echo "test End"
+
+
+
diff --git a/QiaoJiaSystem/build/test_cpu_mem.sh b/QiaoJiaSystem/build/test_cpu_mem.sh
new file mode 100644
index 0000000..bb7100f
--- /dev/null
+++ b/QiaoJiaSystem/build/test_cpu_mem.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+interval=3
+if [ "$1" != "" ]
+then
+ interval=$1
+fi
+ echo "妫�鏌ユ椂闂撮棿闅�(鍗曚綅绉�)锛�"$interval
+ datetime=`date +'%Y%m%d'`
+ echo""> info_cpu$datetime
+ while :
+ do
+ echo `date +'%Y%m%d %H:%M:%S'` >> info_cpu$datetime
+ cat /proc/meminfo | grep -E 'MemTotal|MemFree|Cached' |grep -v SwapCached|xargs >>info_cpu$datetime
+ ps -fe|grep TeamViewer |grep -v grep
+ if [ $? -ne 0 ]
+ then
+ echo "TeamViewer is not runing....."
+ else
+ top -p $(pgrep TeamViewer) -b -n 1 >> info_cpu$datetime
+ echo "TeamViewer is runing....."
+ fi
+
+ echo "------------------cpu Info Up-----------------" >> info_cpu$datetime
+ echo "------------------nvida Info Down-------------------" >> info_cpu$datetime
+ nvidia-smi >> info_cpu$datetime
+ sleep $interval
+ echo "-------------------------------------" >> info_cpu$datetime
+ done
diff --git a/QiaoJiaSystem/build/yolov3.weights b/QiaoJiaSystem/build/yolov3.weights
new file mode 100644
index 0000000..a5ed716
--- /dev/null
+++ b/QiaoJiaSystem/build/yolov3.weights
Binary files differ
diff --git a/QiaoJiaSystem/runPath.sh b/QiaoJiaSystem/runPath.sh
new file mode 100644
index 0000000..7036d19
--- /dev/null
+++ b/QiaoJiaSystem/runPath.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/basic/Apps/BasicPlatForm/libs/hcTool/HCNetSDK64/lib:/home/basic/Apps/BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom:/home/basic/Apps/BasicPlatForm/libs/ffmpeg/lib:/home/basic/Apps/BasicPlatForm/libs/opencv/lib:/home/basic/Apps/BasicPlatForm/libs/Casia_Face/FaceSdk/lib/gpu:/home/basic/Apps/BasicPlatForm/libs/FastDFS/lib:/home/basic/Apps/BasicPlatForm/libs/Ice-3.7.0/lib64:/home/basic/Apps/BasicPlatForm/libs/DarkNet/lib:/home/basic/Apps/BasicPlatForm/libs/libopenssl/lib
--
Gitblit v1.8.0