您当前的位置: 首页 >  网络

命运之手

暂无认证

  • 2浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【SDK】Android海康网络SDK实现人脸和车牌等报警图片抓拍功能

命运之手 发布时间:2022-03-30 10:56:31 ,浏览量:2

说明

本Demo在海康官网SDK的基础上,做了模块化和接口再封装,让代码变得更加简洁好用

官网的SDK是在C语言基础上直接翻译过来的,使用起来稍微有些繁琐

核心代码

暂时只对初始化、登录、布警、报警图片获取等功能做了简化


    @Override
    protected void onPermissionResult() {
        //初始化
        boolean initRet = HCNetSDKJNAInstance.getInstance().NET_DVR_Init();
        Console.info("HikNetSDK", "Init", initRet);
        //登录
        int userId = HikNetSDK.login("192.168.5.2", "8000", "admin", "aodun2012");
        Console.info("HikNetSDK", "Login", userId);
        //布警
        int alarmHandle = HikNetSDK.setupAlarm(userId);
        Console.info("HikNetSDK", "SetupAlarm", alarmHandle);
        //报警事件回调
        boolean setupAlarmEventCallbackRet = HikNetSDK.setupAlarmEventCallback((command, alarmer, pAlarmInfo, bufferLength, pUser) -> {
            String time = Times.now();
            String ip = new String(alarmer.sDeviceIP).trim();
            Console.info("HikNetSDK", "AlarmEventCallback", time, ip, "0x" + Integer.toHexString(command));
            //人脸抓拍
            if (command == HCNetSDKByJNA.COMM_UPLOAD_FACESNAP_RESULT) {
                HCNetSDKByJNA.NET_VCA_FACESNAP_RESULT result = new HCNetSDKByJNA.NET_VCA_FACESNAP_RESULT(pAlarmInfo);
                result.read();
                Console.info("HikNetSDK", "FACESNAP_RESULT", result.dwFacePicLen, result.dwBackgroundPicLen);
                byte[] faceBytes = result.pBuffer1.getPointer().getByteArray(0, result.dwFacePicLen);
                String facePicFile = AndroidFile.getAndroidExternalFile("1.jpg");
                Files.writeToFile(facePicFile, faceBytes);
                byte[] backgroundBytes = result.pBuffer2.getPointer().getByteArray(0, result.dwBackgroundPicLen);
                String backgroundPicFile = AndroidFile.getAndroidExternalFile("2.jpg");
                Files.writeToFile(backgroundPicFile, backgroundBytes);
            }
            //交通抓拍
            if (command == HCNetSDKByJNA.COMM_UPLOAD_PLATE_RESULT) {
                HCNetSDKByJNA.NET_DVR_PLATE_RESULT result = new HCNetSDKByJNA.NET_DVR_PLATE_RESULT(pAlarmInfo);
                result.read();
                byte[] plateNumberBytes = result.struPlateInfo.sLicense;
                String plate = new String(plateNumberBytes).trim();
                Console.info("HikNetSDK", "PLATE_RESULT", plate, result.dwCarPicLen, result.dwFarCarPicLen);
                byte[] plateBytes = result.pBuffer1.getPointer().getByteArray(0, result.dwCarPicLen);
                String platePicFile = AndroidFile.getAndroidExternalFile("3.jpg");
                Files.writeToFile(platePicFile, plateBytes);
                byte[] backgroundBytes = result.pBuffer2.getPointer().getByteArray(0, result.dwFarCarPicLen);
                String backgroundPicFile = AndroidFile.getAndroidExternalFile("4.jpg");
                Files.writeToFile(backgroundPicFile, backgroundBytes);
            }
        });
        Console.info("HikNetSDK", "SetupAlarmEventCallback", setupAlarmEventCallbackRet);
    }


	package com.hcnetsdk;
	
	import com.hcnetsdk.jna.HCNetSDKByJNA;
	import com.hcnetsdk.jna.HCNetSDKJNAInstance;
	import com.hik.netsdk.SimpleDemo.Control.DevManageGuider;
	import com.hikvision.netsdk.HCNetSDK;
	import com.hikvision.netsdk.NET_DVR_SETUPALARM_PARAM;
	import com.sun.jna.Pointer;
	
	@SuppressWarnings("all")
	public class HikNetSDK {
	
	    //登录
	    public static int login(String ip, String port, String username, String password) {
	        DevManageGuider.DevNetInfo info = new DevManageGuider.DevNetInfo();
	        info.m_szIp = ip;
	        info.m_szPort = port;
	        info.m_szUserName = username;
	        info.m_szPassword = password;
	        int userId = login(info);
	        return userId;
	    }
	
	    //登录
	    protected static int login(DevManageGuider.DevNetInfo struDevNetInfo) {
	        HCNetSDKByJNA.NET_DVR_USER_LOGIN_INFO loginInfo = new HCNetSDKByJNA.NET_DVR_USER_LOGIN_INFO();
	        System.arraycopy(struDevNetInfo.m_szIp.getBytes(), 0, loginInfo.sDeviceAddress, 0, struDevNetInfo.m_szIp.length());
	        System.arraycopy(struDevNetInfo.m_szUserName.getBytes(), 0, loginInfo.sUserName, 0, struDevNetInfo.m_szUserName.length());
	        System.arraycopy(struDevNetInfo.m_szPassword.getBytes(), 0, loginInfo.sPassword, 0, struDevNetInfo.m_szPassword.length());
	        loginInfo.wPort = (short) Integer.parseInt(struDevNetInfo.m_szPort);
	        HCNetSDKByJNA.NET_DVR_DEVICEINFO_V40 deviceInfo = new HCNetSDKByJNA.NET_DVR_DEVICEINFO_V40();
	        loginInfo.write();
	        int userId = HCNetSDKJNAInstance.getInstance().NET_DVR_Login_V40(loginInfo.getPointer(), deviceInfo.getPointer());
	        return userId;
	    }
	
	    //布警
	    public static int setupAlarm(int userId) {
	        NET_DVR_SETUPALARM_PARAM struSetupAlarmParam = new NET_DVR_SETUPALARM_PARAM();
	        struSetupAlarmParam.byAlarmInfoType = 0;
	        struSetupAlarmParam.byLevel = 1;
	        int alarmHandle = HCNetSDK.getInstance().NET_DVR_SetupAlarmChan_V41(userId, struSetupAlarmParam);
	        return alarmHandle;
	    }
	
	    //监听报警事件
	    public static boolean setupAlarmEventCallback(HCNetSDKByJNA.FMSGCallBack callback) {
	        boolean ret = HCNetSDKJNAInstance.getInstance().NET_DVR_SetDVRMessageCallBack_V30(callback, Pointer.NULL);
	        return ret;
	    }
	}

源码下载

海康网络SDK-Android

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0874s