1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package com.netsdk.demo.customize;
 
import com.netsdk.demo.BaseDemo;
import com.netsdk.demo.util.CaseMenu;
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.ToolKits;
import com.netsdk.lib.Utils;
import com.netsdk.lib.callback.impl.DefaultAnalyseTaskResultCallBack;
import com.netsdk.lib.enumeration.EM_DATA_SOURCE_TYPE;
import com.netsdk.module.AnalyseTaskModule;
import com.netsdk.module.entity.AddAnalyseTaskResult;
import com.netsdk.module.entity.PushAnalysePictureInfo;
import com.sun.jna.Memory;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
 
import static com.netsdk.lib.NetSDKLib.EVENT_IVS_FACEANALYSIS;
 
/**
 * @author 47081
 * @version 1.0
 * @description 图片智能分析demo, 1:1,1:n
 * @date 2020/10/21
 */
public class PictureAnalyseDemo extends BaseDemo {
    private final AnalyseTaskModule analyseTaskModule;
    //任务id
    private int taskId;
 
    public PictureAnalyseDemo() {
        super();
        analyseTaskModule = new AnalyseTaskModule(getNetSdkApi());
    }
 
    /**
     * 1:1,图片比对
     */
    public void matchPicture() {
        try {
            int result = analyseTaskModule.matchImage(getLoginHandler(), new FileInputStream(new File("D:/shanyu.jpg")), new FileInputStream(new File("D:/test.jpg")), 3000);
            System.out.println(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 添加智能分析任务
     */
    public void addTask() {
        NetSDKLib.NET_PUSH_PICFILE_INFO inParam = new NetSDKLib.NET_PUSH_PICFILE_INFO();
        //立刻启动
        inParam.emStartRule = NetSDKLib.EM_ANALYSE_TASK_START_RULE.EM_ANALYSE_TASK_START_NOW;
        //配置分析规则
        //分析规则条数
        inParam.stuRuleInfo.nRuleCount = 1;
        //大类类型,目标检测/目标识别
        inParam.stuRuleInfo.stuRuleInfos[0].emClassType = NetSDKLib.EM_SCENE_CLASS_TYPE.EM_SENCE_CLASS_FACERECOGNITION;
        //规则类型,人脸分析EVENT_IVS_FACEANALYSIS
        inParam.stuRuleInfo.stuRuleInfos[0].dwRuleType = EVENT_IVS_FACEANALYSIS;
 
        //检测物体类型个数
        inParam.stuRuleInfo.stuRuleInfos[0].nObjectTypeNum = 1;
        //检测物体类型列表,检测人脸
        inParam.stuRuleInfo.stuRuleInfos[0].emObjectTypes[0] = NetSDKLib.EM_ANALYSE_OBJECT_TYPE.EM_ANALYSE_OBJECT_TYPE_HUMANFACE;
        //规则配置
        NetSDKLib.NET_FACEANALYSIS_RULE_INFO info = new NetSDKLib.NET_FACEANALYSIS_RULE_INFO();
 
        //检测区顶点数
        info.nDetectRegionPoint = 4;
        info.stuDetectRegion[0].nX = 0;
        info.stuDetectRegion[0].nY = 0;
        info.stuDetectRegion[1].nX = 0;
        info.stuDetectRegion[1].nY = 8192;
        info.stuDetectRegion[2].nX = 8192;
        info.stuDetectRegion[2].nY = 8192;
        info.stuDetectRegion[3].nX = 8192;
        info.stuDetectRegion[3].nY = 0;
        //灵敏度,1-10
        info.nSensitivity = 2;
        //布控组
        info.nLinkGroupNum = 1;
        //布控组启用
        info.stuLinkGroup[0].bEnable = true;
        //人脸库id
        System.arraycopy("1".getBytes(Charset.forName(Utils.getPlatformEncode())), 0, info.stuLinkGroup[0].szGroupID, 0, "1".getBytes(Charset.forName(Utils.getPlatformEncode())).length);
        //陌生人布控模式,未启用
        info.stuStrangerMode.bEnable = false;
        //启用相似度
        info.stuLinkGroup[0].bShowPlate = true;
        info.stuLinkGroup[0].bySimilarity = 20;
        //尺寸过滤
        info.bSizeFileter = false;
        //是否开启人脸属性识别
        info.bFeatureEnable = false;
        info.nFaceFeatureNum = 0;
        info.bFeatureFilter = false;
        info.nMinQuality = 50;
        inParam.stuRuleInfo.stuRuleInfos[0].pReserved = new Memory(info.size());
        ToolKits.SetStructDataToPointer(info, inParam.stuRuleInfo.stuRuleInfos[0].pReserved, 0);
        AddAnalyseTaskResult result = analyseTaskModule.addAnalyseTask(getLoginHandler(), EM_DATA_SOURCE_TYPE.EM_DATA_SOURCE_PUSH_PICFILE, inParam, 3000);
        if (result.isResult()) {
            taskId = result.getTaskId();
        }
    }
 
    public void attachAnalyseTask() {
        setAttachHandler(analyseTaskModule.attachAnalyseTaskResult(getLoginHandler(), new int[]{taskId}, new int[]{}, true, DefaultAnalyseTaskResultCallBack.getSingleInstance(), 3000, null));
    }
 
    public void startAnalyseTask() {
        analyseTaskModule.startAnalyseTask(getLoginHandler(), taskId, 3000);
    }
 
    /**
     * 主动推送图片
     */
    public void pushPicture() {
        List<PushAnalysePictureInfo> infos = new ArrayList<>();
        //推送的图片最好是jg,100k以下
        infos.add(new PushAnalysePictureInfo("D:/liyang(3).jpg", "test"));
        infos.add(new PushAnalysePictureInfo("D:/test.jpg", "test1"));
        infos.add(new PushAnalysePictureInfo("D:/shanyu.jpg", "test2"));
        analyseTaskModule.pushAnalysePicture(getLoginHandler(), taskId, 1, infos, 3000);
    }
 
    public void dettachAnalyseTask() {
        analyseTaskModule.detachAnalyseTaskResult(getLoginHandler());
    }
 
    public void removeTask() {
        analyseTaskModule.removeAnalyseTask(getLoginHandler(), taskId, 3000);
    }
 
    /**
     * demo调用顺序
     * 1.添加目标识别任务
     * 2.订阅智能分析任务
     * 3.推送图片
     * 等待回调事件上报
     * 4.取消订阅
     * 5.删除任务
     * 6.1:1
     *
     * @param args
     */
    public static void main(String[] args) {
        String ip = "172.12.245.69";
        int port = 37777;
        String username = "admin";
        String password = "admin123";
        PictureAnalyseDemo demo = new PictureAnalyseDemo();
        demo.init();
 
        if (demo.login(ip, port, username, password)) {
            //登录成功后
            demo.addItem(new CaseMenu.Item(demo, "1:1", "matchPicture"));
            demo.addItem(new CaseMenu.Item(demo, "添加目标识别任务", "addTask"));
            demo.addItem(new CaseMenu.Item(demo, "订阅智能分析任务", "attachAnalyseTask"));
            //demo.addItem(new CaseMenu.Item(demo, "启动智能分析任务", "startAnalyseTask"));
            demo.addItem(new CaseMenu.Item(demo, "推送图片", "pushPicture"));
            demo.addItem(new CaseMenu.Item(demo, "取消订阅", "dettachAnalyseTask"));
            demo.addItem(new CaseMenu.Item(demo, "移除任务", "removeTask"));
            demo.run();
            demo.logout();
        }
        demo.clean();
    }
 
}