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 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(); } }