package com.netsdk.demo.customize;
|
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.ToolKits;
|
import com.netsdk.lib.enumeration.EM_EVENT_IVS_TYPE;
|
import com.netsdk.lib.structure.*;
|
import com.netsdk.lib.utils.Initialization;
|
import com.sun.jna.Pointer;
|
import java.io.File;
|
import java.util.Objects;
|
|
/**
|
* @author 291189
|
* @version 1.0
|
* @description 抓拍&识别摄像机SDK Java
|
* @date 2021/8/24 14:04
|
*/
|
public class FacebodyDetectInfoDemo extends Initialization {
|
|
|
int channel=0;
|
NetSDKLib.LLong attachHandle=new NetSDKLib.LLong(0);
|
/**
|
* 订阅智能任务
|
*/
|
public NetSDKLib.LLong AttachEventRealLoadPic() {
|
// 先退订,设备不会对重复订阅作校验,重复订阅后会有重复的事件返回
|
if(attachHandle.longValue()!=0){
|
this.DetachEventRealLoadPic();
|
}
|
|
// 需要图片
|
int bNeedPicture = 1;
|
attachHandle = netSdk.CLIENT_RealLoadPictureEx(loginHandle, channel, NetSDKLib.EVENT_IVS_ALL, bNeedPicture,
|
AnalyzerDataCB.getInstance(), null, null);
|
if (attachHandle.longValue() != 0) {
|
System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Success\n", channel);
|
} else {
|
System.out.printf("Ch[%d] CLIENT_RealLoadPictureEx Failed!LastError = %s\n", channel,
|
ToolKits.getErrorCode());
|
}
|
|
return attachHandle;
|
}
|
/**
|
* 报警事件(智能)回调
|
*/
|
private static class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack {
|
private final File picturePath;
|
private static AnalyzerDataCB instance;
|
|
private AnalyzerDataCB() {
|
picturePath = new File("./AnalyzerPicture/");
|
if (!picturePath.exists()) {
|
picturePath.mkdirs();
|
}
|
}
|
|
public static AnalyzerDataCB getInstance() {
|
if (instance == null) {
|
synchronized (AnalyzerDataCB.class) {
|
if (instance == null) {
|
instance = new AnalyzerDataCB();
|
}
|
}
|
}
|
return instance;
|
}
|
|
public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize,
|
Pointer dwUser, int nSequence, Pointer reserved) {
|
if (lAnalyzerHandle == null || lAnalyzerHandle.longValue() == 0) {
|
return -1;
|
}
|
|
/**
|
EVENT_IVS_FACEBODY_DETECT 0x00000281 // 人像检测事件(对应 DEV_EVENT_FACEBODY_DETECT_INFO)
|
#define EVENT_IVS_FACEBODY_ANALYSE 0x00000282 // 人像识别事件(对应 DEV_EVENT_FACEBODY_ANALYSE_INFO)
|
|
|
|
*/
|
|
switch (Objects.requireNonNull(EM_EVENT_IVS_TYPE.getEventType(dwAlarmType))) {
|
case EVENT_IVS_FACEBODY_DETECT : // 人像检测事件 DEV_EVENT_FACEBODY_DETECT_INFO
|
System.out.println("人像检测事件");
|
|
DEV_EVENT_FACEBODY_DETECT_INFO detect=new DEV_EVENT_FACEBODY_DETECT_INFO();
|
|
|
ToolKits.GetPointerData(pAlarmInfo, detect);
|
|
System.out.println("detect:"+detect);
|
|
FACE_TRAIT stuFaceTrait = detect.stuFaceTrait;// 人脸特征
|
System.out.println("stuFaceTrait:"+stuFaceTrait);
|
|
BODY_TRAIT stuBodyTrait = detect.stuBodyTrait;// 人体特征
|
System.out.println("stuBodyTrait:"+stuBodyTrait);
|
|
NetSDKLib.NET_EVENT_IMAGE_OFFSET_INFO stuBodyImage = detect.stuBodyImage; // 人体图片信息
|
System.out.println("stuBodyImage:"+stuBodyImage);
|
|
NetSDKLib.NET_EVENT_IMAGE_OFFSET_INFO stuFaceImage = detect.stuFaceImage; // 人脸图片信息
|
System.out.println("stuFaceImage:"+stuFaceImage);
|
|
NetSDKLib.NET_EVENT_IMAGE_OFFSET_INFO stuSceneImage = detect.stuSceneImage;// 全景图片信息
|
System.out.println("stuSceneImage:"+stuSceneImage);
|
|
OBJECT_RELATED_INFO stuFaceObject = detect.stuFaceObject;// 人脸关联信息
|
System.out.println("stuFaceObject:"+stuFaceObject);
|
|
OBJECT_RELATED_INFO stuBodyObject = detect.stuBodyObject; // 人体关联信息
|
System.out.println("stuBodyObject:"+stuBodyObject);
|
break;
|
|
case EVENT_IVS_FACEBODY_ANALYSE:{ // 人像识别事件(对应 DEV_EVENT_FACEBODY_ANALYSE_INFO)
|
System.out.println("人像识别事件");
|
DEV_EVENT_FACEBODY_ANALYSE_INFO analyse=new DEV_EVENT_FACEBODY_ANALYSE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, analyse);
|
System.out.println("analyse:"+analyse);
|
|
FACE_TRAIT stuFaceTrait1 = analyse.stuFaceTrait;// 人脸特征
|
System.out.println("stuFaceTrait:"+stuFaceTrait1);
|
BODY_TRAIT stuBodyTrait1 = analyse.stuBodyTrait;// 人体特征
|
System.out.println("stuBodyTrait1:"+stuBodyTrait1);
|
|
NetSDKLib.NET_EVENT_IMAGE_OFFSET_INFO stuBodyImage1 = analyse.stuBodyImage;
|
|
//人体图片信息
|
if ( stuBodyImage1.nLength > 0) {
|
String bodyPicture = picturePath + "\\" + System.currentTimeMillis() + "body.jpg";
|
ToolKits.savePicture(pBuffer, stuBodyImage1.nOffSet, stuBodyImage1.nLength, bodyPicture);
|
}
|
|
NetSDKLib.NET_EVENT_IMAGE_OFFSET_INFO stuFaceImage1 = analyse.stuFaceImage;// 人脸图片信息
|
|
if ( stuFaceImage1.nLength > 0) {
|
String facePicture = picturePath + "\\" + System.currentTimeMillis() + "face.jpg";
|
ToolKits.savePicture(pBuffer, stuFaceImage1.nOffSet, stuFaceImage1.nLength, facePicture);
|
}
|
NetSDKLib.NET_EVENT_IMAGE_OFFSET_INFO stuSceneImage1 = analyse.stuSceneImage;// 全景图片信息
|
|
if ( stuSceneImage1.nLength > 0) {
|
String sencePicture = picturePath + "\\" + System.currentTimeMillis() + "sence.jpg";
|
ToolKits.savePicture(pBuffer, stuSceneImage1.nOffSet, stuSceneImage1.nLength, sencePicture);
|
}
|
|
|
break;
|
}
|
default:
|
System.out.println("其他事件--------------------"+ dwAlarmType);
|
break;
|
}
|
|
return 0;
|
}
|
}
|
|
/**
|
* 停止侦听智能事件
|
*/
|
public void DetachEventRealLoadPic() {
|
if (this.attachHandle.longValue() != 0) {
|
netSdk.CLIENT_StopLoadPic(this.attachHandle);
|
}
|
}
|
/**
|
* 加载测试内容
|
*/
|
public void RunTest() {
|
CaseMenu menu = new CaseMenu();
|
menu.addItem(new CaseMenu.Item(this, "订阅智能事件", "AttachEventRealLoadPic"));
|
menu.addItem(new CaseMenu.Item(this, "停止侦听智能事件", "DetachEventRealLoadPic"));
|
menu.run();
|
}
|
|
public static void main(String[] args) {
|
FacebodyDetectInfoDemo facebodyDetectInfoDemo=new FacebodyDetectInfoDemo();
|
|
Initialization.InitTest("172.29.5.1", 37777, "admin", "admin123");
|
|
facebodyDetectInfoDemo.RunTest();
|
|
Initialization.LoginOut();
|
}
|
|
|
}
|