package com.netsdk.demo.customize;
|
|
import static com.netsdk.lib.Utils.getOsPrefix;
|
|
import java.io.File;
|
import java.io.UnsupportedEncodingException;
|
import java.util.Objects;
|
import java.util.Scanner;
|
|
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.enumeration.EM_FOLLOW_CAR_ALARM_IMAGE_TYPE;
|
import com.netsdk.lib.enumeration.EM_LEAVEDETECTION_STATE;
|
import com.netsdk.lib.enumeration.EM_LEAVEDETECTION_TRIGGER_MODE;
|
import com.netsdk.lib.structure.DEV_EVENT_FOLLOW_CAR_ALARM_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_PLAY_MOBILEPHONE_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_QSYTRAFFICCARWEIGHT_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_SLEEP_DETECT_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_SMARTMOTION_HUMAN_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_SMARTMOTION_VEHICLE_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_MOTORCYCLE_FORBID;
|
import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_NONMOTORINMOTORROUTE_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_NONMOTOR_HOLDUMBRELLA_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_NONMOTOR_OVERLOAD_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_NONMOTOR_RUN_REDLIGHT_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_NON_MOTOR_RETROGRADE_INFO;
|
import com.netsdk.lib.structure.DEV_EVENT_VEHICLE_DISTANCE_NEAR_INFO;
|
import com.netsdk.lib.structure.NET_FOLLOW_CAR_ALARM_IMAGE_INFO;
|
import com.netsdk.lib.structure.NET_SMARTDETECT_HUMAN_OBJECT;
|
import com.netsdk.lib.structure.NET_SMARTDETECT_VEHICLE_OBJECT;
|
import com.netsdk.lib.NetSDKLib.DEV_EVENT_MANSTAND_DETECTION_INFO;
|
import com.netsdk.lib.NetSDKLib.LLong;
|
import com.netsdk.lib.NetSDKLib.NET_DETECT_PLATE_INFO;
|
import com.sun.jna.Pointer;
|
import com.sun.jna.ptr.IntByReference;
|
|
/**
|
* 事件:立体视觉区域内人数统计事件、跟车报警事件
|
*
|
* @author 251823
|
*/
|
public class SomeEventDemo {
|
|
static NetSDKLib netsdkApi = NetSDKLib.NETSDK_INSTANCE;
|
static NetSDKLib configApi = NetSDKLib.CONFIG_INSTANCE;
|
|
private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
|
// 登陆句柄
|
private static LLong loginHandle = new LLong(0);
|
// 智能订阅句柄
|
private LLong attachHandle = new NetSDKLib.LLong(0);
|
|
|
private static class DisconnectCallback implements NetSDKLib.fDisConnect {
|
private static DisconnectCallback instance = new DisconnectCallback();
|
|
private DisconnectCallback() {
|
}
|
|
public static DisconnectCallback getInstance() {
|
return instance;
|
}
|
|
public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s:%d] Disconnect!\n", pchDVRIP, nDVRPort);
|
}
|
}
|
|
private static class HaveReconnectCallback implements NetSDKLib.fHaveReConnect {
|
private static HaveReconnectCallback instance = new HaveReconnectCallback();
|
|
private HaveReconnectCallback() {
|
}
|
|
public static HaveReconnectCallback getInstance() {
|
return instance;
|
}
|
|
public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s:%d] HaveReconnected!\n", pchDVRIP, nDVRPort);
|
}
|
}
|
|
public void EndTest() {
|
System.out.println("End Test");
|
if (loginHandle.longValue() != 0) {
|
netsdkApi.CLIENT_Logout(loginHandle);
|
}
|
System.out.println("See You...");
|
|
netsdkApi.CLIENT_Cleanup();
|
System.exit(0);
|
}
|
|
public void InitTest() {
|
// 初始化SDK库
|
netsdkApi.CLIENT_Init(DisconnectCallback.getInstance(), null);
|
|
// 设置断线自动重练功能
|
netsdkApi.CLIENT_SetAutoReconnect(HaveReconnectCallback.getInstance(), null);
|
|
// 向设备登入
|
int nSpecCap = 0;
|
IntByReference nError = new IntByReference(0);
|
loginHandle = netsdkApi.CLIENT_LoginEx2(address, port, username, password, nSpecCap, null, deviceInfo, nError);
|
|
if (loginHandle.longValue() == 0) {
|
System.err.printf("Login Device [%s:%d] Failed ! Last Error[%x]\n", address, port,
|
netsdkApi.CLIENT_GetLastError());
|
EndTest();
|
return;
|
}
|
|
System.out.printf("Login Device [%s:%d] Success. \n", address, port);
|
}
|
|
// 编码格式
|
public static String encode;
|
|
static {
|
String osPrefix = getOsPrefix();
|
if (osPrefix.toLowerCase().startsWith("win32-amd64")) {
|
encode = "GBK";
|
} else if (osPrefix.toLowerCase().startsWith("linux-amd64")) {
|
encode = "UTF-8";
|
}
|
}
|
|
|
/**
|
* 选择通道
|
*/
|
private int channel = 0;
|
|
public void setChannelID() {
|
System.out.println("请输入通道,从0开始计数,-1表示全部");
|
Scanner sc = new Scanner(System.in);
|
this.channel = sc.nextInt();
|
}
|
|
/**
|
* 订阅智能任务
|
*/
|
public void AttachEventRealLoadPic() {
|
// 先退订,设备不会对重复订阅作校验,重复订阅后会有重复的事件返回
|
this.DetachEventRealLoadPic();
|
// 需要图片
|
int bNeedPicture = 1;
|
attachHandle = netsdkApi.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());
|
}
|
}
|
|
/**
|
* 报警事件(智能)回调
|
*/
|
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(LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize,
|
Pointer dwUser, int nSequence, Pointer reserved) {
|
if (lAnalyzerHandle == null || lAnalyzerHandle.longValue() == 0) {
|
return -1;
|
}
|
|
switch (Objects.requireNonNull(EM_EVENT_IVS_TYPE.getEventType(dwAlarmType))) {
|
case EVENT_IVS_MAN_NUM_DETECTION : {// 立体视觉区域内人数统计事件(对应 DEV_EVENT_MANNUM_DETECTION_INFO)
|
NetSDKLib.DEV_EVENT_MANNUM_DETECTION_INFO msg = new NetSDKLib.DEV_EVENT_MANNUM_DETECTION_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.println(" 立体视觉区域内人数统计事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID +
|
" 区域人员列表数量:" + msg.nManListCount + " 人员身高:" + msg.stuManList[0].nStature+" 变化前人数:"+
|
msg.nPrevNumber+" 当前人数:"+msg.nCurrentNumber+" 事件关联ID:"+new String(msg.szSourceID) +" 规则名称:"+new String(msg.szRuleName));
|
break;
|
}
|
case EVENT_IVS_FOLLOW_CAR_ALARM : {// 跟车报警事件(对应 DEV_EVENT_FOLLOW_CAR_ALARM_INFO)
|
DEV_EVENT_FOLLOW_CAR_ALARM_INFO msg = new DEV_EVENT_FOLLOW_CAR_ALARM_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.println(" 跟车报警事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID);
|
//跟车图片信息
|
System.out.println("跟车图片信息:---------");
|
System.out.println("跟车图片信息个数:"+msg.nImageInfoNum);
|
NET_FOLLOW_CAR_ALARM_IMAGE_INFO[] stuImageInfo = msg.stuImageInfo;
|
for (int i = 0; i < msg.nImageInfoNum; i++) {
|
int a = i+1;
|
System.out.println(a+"图片类型:"+EM_FOLLOW_CAR_ALARM_IMAGE_TYPE.getNoteByValue(stuImageInfo[i].emImageType));
|
String picture = picturePath + "\\" +"NET_FOLLOW_CAR_ALARM_IMAGE_INFO"+ System.currentTimeMillis() +".jpg";
|
ToolKits.savePicture(pBuffer, stuImageInfo[i].dwoffset, stuImageInfo[i].dwLength, picture);
|
}
|
//GPS信息
|
System.out.println("GPS信息:---------");
|
NetSDKLib.NET_GPS_STATUS_INFO stuGPS = msg.stuCustomInfo.stuGPS;
|
System.out.println(" 定位时间:"+stuGPS.revTime+" 设备序列号:"+new String(stuGPS.DvrSerial)+" 经度"+stuGPS.longitude+" 纬度"+stuGPS.latidude);
|
//交通车辆信息
|
System.out.println("交通车辆信息:---------");
|
try {
|
System.out.println(" 车牌号码:"+new String(msg.stTrafficCar.szPlateNumber,encode));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
break;
|
}
|
case EVENT_IVS_MAN_STAND_DETECTION : //立体视觉站立事件(对应DEV_EVENT_MANSTAND_DETECTION_INFO)
|
{
|
DEV_EVENT_MANSTAND_DETECTION_INFO msg = new DEV_EVENT_MANSTAND_DETECTION_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.printf("【立体视觉站立事件】 UTC:%s 通道号:%d ",msg.UTC, msg.nChannelID);
|
break;
|
}
|
case EVENT_IVS_LEAVEDETECTION: {// 离岗检测事件(对应 DEV_EVENT_IVS_LEAVE_INFO)
|
NetSDKLib.DEV_EVENT_IVS_LEAVE_INFO msg = new NetSDKLib.DEV_EVENT_IVS_LEAVE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.printf("【离岗检测事件】 时间(UTC):%s 通道号:%d 开始时间:%s 结束时间:%s \n", msg.UTC, msg.nChannelID,
|
msg.stuObject.stuStartTime, msg.stuObject.stuEndTime);
|
System.out.println("离岗的触发模式:"+EM_LEAVEDETECTION_TRIGGER_MODE.getNoteByValue(msg.emTriggerMode));
|
System.out.println("检测状态:"+EM_LEAVEDETECTION_STATE.getNoteByValue(msg.emState));
|
System.out.println("stuSceneImage 是否有效:"+msg.bSceneImage);
|
// 全景广角图
|
if (msg.stuSceneImage != null && msg.stuSceneImage.nLength > 0) {
|
String bigPicture = picturePath + "\\" + "EVENT_IVS_LEAVEDETECTION" + System.currentTimeMillis()
|
+ ".jpg";
|
ToolKits.savePicture(pBuffer, msg.stuSceneImage.nOffSet, msg.stuSceneImage.nLength, bigPicture);
|
}
|
break;
|
}
|
case EVENT_IVS_FACERECOGNITION: // 目标识别事件
|
{
|
NetSDKLib.DEV_EVENT_FACERECOGNITION_INFO msg = new NetSDKLib.DEV_EVENT_FACERECOGNITION_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.println("szName : " + new String(msg.szName).trim() + "\n" );
|
break;
|
|
}
|
case EVENT_IVS_HIGH_TOSS_DETECT: ///< 高空抛物检测事件
|
{
|
NetSDKLib.DEV_EVENT_HIGH_TOSS_DETECT_INFO msg = new NetSDKLib.DEV_EVENT_HIGH_TOSS_DETECT_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\"+"EVENT_IVS_HIGH_TOSS_DETECT" + System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.println(" 高空抛物检测事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID);
|
System.out.println("是否上传大图:"+msg.bIsGlobalScene);
|
if(msg.bIsGlobalScene) {
|
if (msg.stuImageInfo != null && msg.stuImageInfo.nLength > 0) {
|
String bigPicture = picturePath + "\\" + "stuImageInfo" + System.currentTimeMillis()
|
+ ".jpg";
|
ToolKits.savePicture(pBuffer, msg.stuImageInfo.nOffSet, msg.stuImageInfo.nLength, bigPicture);
|
}
|
}
|
|
break;
|
}
|
case EVENT_IVS_VEHICLE_DISTANCE_NEAR: // 安全驾驶车距过近报警事件
|
{
|
DEV_EVENT_VEHICLE_DISTANCE_NEAR_INFO msg = new DEV_EVENT_VEHICLE_DISTANCE_NEAR_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
try {
|
System.out.println(" 【安全驾驶车距过近报警事件】 时间(UTC):" + msg.UTC+" 司机ID:" + new String(msg.szDriverID,encode)+" 违章关联视频FTP上传路径:" + new String(msg.szVideoPath,encode));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
break;
|
}
|
case EVENT_IVS_SLEEP_DETECT: // 睡觉检测事件
|
{
|
DEV_EVENT_SLEEP_DETECT_INFO msg = new DEV_EVENT_SLEEP_DETECT_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.printf("【睡觉检测事件】 时间(UTC):"+ msg.UTC+" 通道号:"+msg.nChannelID);
|
System.out.println("stuSceneImage 是否有效:"+msg.bSceneImage);
|
// 全景广角图
|
if (msg.stuSceneImage != null && msg.stuSceneImage.nLength > 0) {
|
String bigPicture = picturePath + "\\" + "EVENT_IVS_SLEEP_DETECT" + System.currentTimeMillis()
|
+ ".jpg";
|
ToolKits.savePicture(pBuffer, msg.stuSceneImage.nOffSet, msg.stuSceneImage.nLength, bigPicture);
|
}
|
break;
|
}
|
case EVENT_IVS_PLAY_MOBILEPHONE: // 玩手机事件
|
{
|
DEV_EVENT_PLAY_MOBILEPHONE_INFO msg = new DEV_EVENT_PLAY_MOBILEPHONE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.printf("【玩手机事件】 时间(UTC):"+ msg.UTC+" 通道号:"+msg.nChannelID);
|
System.out.println("stuSceneImage 是否有效:"+msg.bSceneImage);
|
// 全景广角图
|
if (msg.stuSceneImage != null && msg.stuSceneImage.nLength > 0) {
|
String bigPicture = picturePath + "\\" + "EVENT_IVS_PLAY_MOBILEPHONE" + System.currentTimeMillis()
|
+ ".jpg";
|
ToolKits.savePicture(pBuffer, msg.stuSceneImage.nOffSet, msg.stuSceneImage.nLength, bigPicture);
|
}
|
break;
|
}
|
case EVENT_IVS_TRAFFIC_NONMOTOR_OVERLOAD: // 非机动车超载事件 (对应 DEV_EVENT_TRAFFIC_NONMOTOR_OVERLOAD_INFO)
|
{
|
DEV_EVENT_TRAFFIC_NONMOTOR_OVERLOAD_INFO msg = new DEV_EVENT_TRAFFIC_NONMOTOR_OVERLOAD_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" +"EVENT_IVS_TRAFFIC_NONMOTOR_OVERLOAD"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.printf("【非机动车超载事件】 时间(UTC):"+ msg.UTC+" 通道号:"+msg.nChannelID);
|
break;
|
}
|
case EVENT_IVS_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT: // 非机动车未戴安全帽事件 (对应 DEV_EVENT_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT_INFO)
|
{
|
DEV_EVENT_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT_INFO msg = new DEV_EVENT_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" +"EVENT_IVS_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.printf("【非机动车未戴安全帽事件】 时间(UTC):"+ msg.UTC+" 通道号:"+msg.nChannelID);
|
break;
|
}
|
case EVENT_IVS_TRAFFIC_NONMOTORINMOTORROUTE: // 非机动车占机动车车道事件(对应 DEV_EVENT_TRAFFIC_NONMOTORINMOTORROUTE_INFO)
|
{
|
DEV_EVENT_TRAFFIC_NONMOTORINMOTORROUTE_INFO msg = new DEV_EVENT_TRAFFIC_NONMOTORINMOTORROUTE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" +"EVENT_IVS_TRAFFIC_NONMOTORINMOTORROUTE"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.printf("【非机动车占机动车车道事件】 时间(UTC):"+ msg.UTC+" 通道号:"+msg.nChannelID);
|
break;
|
}
|
case EVENT_IVS_TRAFFIC_NONMOTOR_HOLDUMBRELLA: // 非机动车装载伞具(对应 DEV_EVENT_TRAFFIC_NONMOTOR_HOLDUMBRELLA_INFO)
|
{
|
DEV_EVENT_TRAFFIC_NONMOTOR_HOLDUMBRELLA_INFO msg = new DEV_EVENT_TRAFFIC_NONMOTOR_HOLDUMBRELLA_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" +"EVENT_IVS_TRAFFIC_NONMOTOR_HOLDUMBRELLA"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.printf("【非机动车装载伞具】 时间(UTC):"+ msg.UTC+" 通道号:"+msg.nChannelID);
|
break;
|
}
|
case EVENT_IVS_TRAFFIC_NONMOTOR_RUN_REDLIGHT: // 非机动车闯红灯 (对应 DEV_EVENT_TRAFFIC_NONMOTOR_RUN_REDLIGHT_INFO )
|
{
|
DEV_EVENT_TRAFFIC_NONMOTOR_RUN_REDLIGHT_INFO msg = new DEV_EVENT_TRAFFIC_NONMOTOR_RUN_REDLIGHT_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" +"EVENT_IVS_TRAFFIC_NONMOTOR_RUN_REDLIGHT"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.printf("【非机动车闯红灯】 时间(UTC):"+ msg.UTC+" 通道号:"+msg.nChannelID);
|
break;
|
}
|
case EVENT_IVS_TRAFFIC_NON_MOTOR_RETROGRADE: // 非机动车逆行事件(对应 DEV_EVENT_TRAFFIC_NON_MOTOR_RETROGRADE_INFO)
|
{
|
DEV_EVENT_TRAFFIC_NON_MOTOR_RETROGRADE_INFO msg = new DEV_EVENT_TRAFFIC_NON_MOTOR_RETROGRADE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" +"EVENT_IVS_TRAFFIC_NON_MOTOR_RETROGRADE"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.printf("【非机动车逆行事件】 时间(UTC):"+ msg.UTC+" 通道号:"+msg.nChannelID);
|
break;
|
}
|
case EVENT_IVS_GASSTATION_VEHICLE_DETECT: // 加油站车辆检测事件
|
{
|
int num = 0;
|
NetSDKLib.DEV_EVENT_GASSTATION_VEHICLE_DETECT_INFO msg = new NetSDKLib.DEV_EVENT_GASSTATION_VEHICLE_DETECT_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
switch (msg.stuDetectVehicleInfo.emAction) {
|
case 1:
|
num = 1;
|
System.out.println(new String(msg.szName).trim() + "车辆进入检测区域" + " 事件发生的时间:" + msg.UTC + " 通道号:" + msg.nChannelID );
|
break;
|
case 2:
|
num = 1;
|
System.out.println(new String(msg.szName).trim() + "车辆离开检测区域" + " 事件发生的时间:" + msg.UTC + " 通道号:" + msg.nChannelID );
|
break;
|
case 3:
|
num = 0;
|
System.out.println(new String(msg.szName).trim() + "车辆正在加油" + " 事件发生的时间:" + msg.UTC + " 通道号:" + msg.nChannelID);
|
break;
|
}
|
if (num == 1) {
|
System.out.println(new String(msg.szName).trim() + "有空车位");
|
} else {
|
System.out.println(new String(msg.szName).trim() + "目前无车位请等待");
|
}
|
// 检测到的车牌信息
|
NET_DETECT_PLATE_INFO stuDetectPlateInfo = msg.stuDetectPlateInfo;
|
System.out.println("车牌类型:"+stuDetectPlateInfo.emPlateType);
|
System.out.println("车牌颜色:"+stuDetectPlateInfo.emPlateColor);
|
try {
|
System.out.println("车牌号:"+new String(stuDetectPlateInfo.szPlateNumber,"GBK"));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
//车牌抠图
|
if(msg.stuDetectPlateInfo.stuPlateImage.nLength>0){
|
String strFileName = picturePath + "\\" + System.currentTimeMillis() + "plate.jpg";
|
ToolKits.savePicture(pBuffer,msg.stuDetectPlateInfo.stuPlateImage.nLength, msg.stuDetectPlateInfo.stuPlateImage.nOffset, strFileName);
|
System.out.println("strFileName : " + strFileName);
|
}
|
|
/*//全景图
|
if(msg.bIsGlobalScene && msg.stuSceneImage.nLength>0){
|
String strFileName = path + "\\" + System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer , msg.stuSceneImage.nLength ,msg.stuSceneImage.nOffset, strFileName);
|
System.out.println("strFileName : " + strFileName);
|
}
|
//车身图
|
else if(msg.stuDetectVehicleInfo.stuVehicleImage.nLength>0){
|
String strFileName = path + "\\" + System.currentTimeMillis() + "car.jpg";
|
ToolKits.savePicture(pBuffer, msg.stuDetectVehicleInfo.stuVehicleImage.nLength, msg.stuDetectVehicleInfo.stuVehicleImage.nOffset, strFileName);
|
System.out.println("strFileName : " + strFileName);
|
}
|
//车牌抠图
|
else if(msg.stuDetectPlateInfo.stuPlateImage.nLength>0){
|
String strFileName = path + "\\" + System.currentTimeMillis() + "plate.jpg";
|
ToolKits.savePicture(pBuffer,msg.stuDetectPlateInfo.stuPlateImage.nLength, msg.stuDetectPlateInfo.stuPlateImage.nOffset, strFileName);
|
System.out.println("strFileName : " + strFileName);
|
}*/
|
break;
|
}
|
case EVENT_IVS_QSYTRAFFICCARWEIGHT: // 交通卡口称重事件(对应 DEV_EVENT_QSYTRAFFICCARWEIGHT_INFO)
|
{
|
DEV_EVENT_QSYTRAFFICCARWEIGHT_INFO msg = new DEV_EVENT_QSYTRAFFICCARWEIGHT_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" +"EVENT_IVS_QSYTRAFFICCARWEIGHT"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.println("【交通卡口称重事件】 时间(UTC):"+ msg.stJunctionInfo.UTC+" 通道号:"+msg.stJunctionInfo.nChannelID);
|
System.out.println(" 超重信息, 单位千克:"+ msg.stCarWeightInfo.nOverWeight);
|
System.out.println(" 总重信息, 单位千克:"+ msg.stCarWeightInfo.nTotalWeight);
|
System.out.println(" 称重卡口测量上报的速度, 单位km/h:"+ msg.stCarWeightInfo.nSpeed);
|
break;
|
}
|
case EVENT_ALARM_SMARTMOTION_HUMAN: // 智能视频移动侦测事件(人), (对应 DEV_EVENT_SMARTMOTION_HUMAN_INFO)
|
{
|
DEV_EVENT_SMARTMOTION_HUMAN_INFO msg = new DEV_EVENT_SMARTMOTION_HUMAN_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" +"EVENT_ALARM_SMARTMOTION_HUMAN"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.println("【智能视频移动侦测事件(人)】 时间(UTC):"+ msg.UTC.toString()+" 通道号:"+msg.nChannelID);
|
System.out.println(" 智能动检(人)对象个数:"+ msg.nHumanObjectNum);
|
NET_SMARTDETECT_HUMAN_OBJECT[] stuHumanObject = msg.stuHumanObject;
|
for (int i = 0; i < msg.nHumanObjectNum; i++) {
|
System.out.println(" 人动检ID:"+stuHumanObject[i].nHumanID);
|
System.out.println(" 人的位置:"+stuHumanObject[i].stuRect.toString());
|
}
|
break;
|
}
|
case EVENT_ALARM_SMARTMOTION_VEHICLE: // 智能视频移动侦测事件(车), (对应 DEV_EVENT_SMARTMOTION_VEHICLE_INFO)
|
{
|
DEV_EVENT_SMARTMOTION_VEHICLE_INFO msg = new DEV_EVENT_SMARTMOTION_VEHICLE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" +"EVENT_ALARM_SMARTMOTION_VEHICLE"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.println("【智能视频移动侦测事件(车)】 时间(UTC):"+ msg.UTC.toString()+" 通道号:"+msg.nChannelID);
|
System.out.println(" 智能动检(车)对象个数:"+ msg.nVehicleObjectNum);
|
NET_SMARTDETECT_VEHICLE_OBJECT[] stuVehicleObject = msg.stuVehicleObject;
|
for (int i = 0; i < msg.nVehicleObjectNum; i++) {
|
System.out.println(" 车动检ID:"+stuVehicleObject[i].nVehicleID);
|
System.out.println(" 车的位置:"+stuVehicleObject[i].stuRect.toString());
|
}
|
break;
|
}
|
case EVENT_IVS_TRAFFIC_MOTORCYCLE_FORBID: // 禁摩事件 (对应 DEV_EVENT_TRAFFIC_MOTORCYCLE_FORBID)
|
{
|
DEV_EVENT_TRAFFIC_MOTORCYCLE_FORBID msg = new DEV_EVENT_TRAFFIC_MOTORCYCLE_FORBID();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.println("【禁摩事件】 时间(UTC):"+ msg.UTC.toString()+" 通道号:"+msg.nChannelID+" 对应车道号: "+msg.nLane);
|
if(dwBufSize>0) {
|
String Picture = picturePath + "\\" +"EVENT_IVS_TRAFFIC_MOTORCYCLE_FORBID"+ System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
}
|
|
break;
|
}
|
default:
|
System.out.println("其他事件--------------------"+ dwAlarmType);
|
break;
|
}
|
|
return 0;
|
}
|
}
|
|
/**
|
* 停止侦听智能事件
|
*/
|
public void DetachEventRealLoadPic() {
|
if (attachHandle.longValue() != 0) {
|
netsdkApi.CLIENT_StopLoadPic(attachHandle);
|
}
|
}
|
|
/******************************** 测试控制台 ***************************************/
|
|
// 配置登陆地址,端口,用户名,密码
|
String address = "10.33.121.50"; //10.35.222.115 172.29.4.17
|
int port = 37777;
|
String username = "admin";
|
String password = "admin";
|
|
public static void main(String[] args) {
|
SomeEventDemo demo = new SomeEventDemo();
|
demo.InitTest();
|
demo.RunTest();
|
demo.EndTest();
|
|
}
|
|
/**
|
* 加载测试内容
|
*/
|
public void RunTest() {
|
CaseMenu menu = new CaseMenu();
|
menu.addItem(new CaseMenu.Item(this, "选择通道", "setChannelID"));
|
menu.addItem(new CaseMenu.Item(this, "订阅智能事件", "AttachEventRealLoadPic"));
|
menu.addItem(new CaseMenu.Item(this, "停止侦听智能事件", "DetachEventRealLoadPic"));
|
menu.run();
|
}
|
|
/******************************** 结束 ***************************************/
|
}
|