java海康威视 识别车牌摄像头的黑白名单配置

java海康威视 识别车牌摄像头的黑白名单配置怎么做
求给出示例代码 查了资料没找到
麻烦给出java示例代码 谢谢了

以下代码请供参考,是基于海康威视SDK4.0版本编写的。

1.登录设备
在使用API和SDK操作设备之前,您需要先登录设备。以下是登录设备的示例代码:

import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import com.hikvision.netsdk.*;

public class LoginDeviceExample {
    public static void main(String[] args) {
        // 初始化SDK
        boolean initResult = HCNetSDK.INSTANCE.NET_DVR_Init();
        if (!initResult) {
            System.out.println("SDK初始化失败,错误码:" + HCNetSDK.INSTANCE.NET_DVR_GetLastError());
            return;
        }

        // 设置连接超时时间和重连功能
        HCNetSDK.INSTANCE.NET_DVR_SetConnectTime(2000, 1);
        HCNetSDK.INSTANCE.NET_DVR_SetReconnect(10000, true);

        // 登录设备
        HCNetSDK.NET_DVR_USER_LOGIN_INFO loginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
        loginInfo.sDeviceAddress = "192.168.1.100"; // 设备IP地址
        loginInfo.wPort = (short) 8000; // 设备端口号
        loginInfo.sUserName = "admin"; // 登录用户名
        loginInfo.sPassword = "12345"; // 登录密码

        HCNetSDK.NET_DVR_DEVICEINFO_V40 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
        NativeLong userID = HCNetSDK.INSTANCE.NET_DVR_Login_V40(loginInfo, deviceInfo);
        if (userID.longValue() == -1) {
            System.out.println("登录设备失败,错误码:" + HCNetSDK.INSTANCE.NET_DVR_GetLastError());
            HCNetSDK.INSTANCE.NET_DVR_Cleanup();
            return;
        }

        System.out.println("登录设备成功");

        // 在使用完毕后注销登录并释放SDK资源
        HCNetSDK.INSTANCE.NET_DVR_Logout(userID);
        HCNetSDK.INSTANCE.NET_DVR_Cleanup();
    }
}

2.创建黑白名单对象并添加车牌号码
以下是创建黑白名单对象并添加车牌号码的示例代码:

import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import com.hikvision.netsdk.*;

public class BlackWhiteListExample {
    public static void main(String[] args) {
        // 登录设备
        HCNetSDK.NET_DVR_USER_LOGIN_INFO loginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
        // ...

        NativeLong userID = HCNetSDK.INSTANCE.NET_DVR_Login_V40(loginInfo, deviceInfo);
        if (userID.longValue() == -1) {
            // ...
        }

        // 创建黑白名单对象
        HCNetSDK.NET_DVR_CONTROL_GATEWAY_COND cond = new HCNetSDK.NET_DVR_CONTROL_GATEWAY_COND();
        cond.dwSize = cond.size();
        cond.dwChannel = 1; // 识别车牌的通道号
        cond.byLane=1;//车道号
        cond.byParkNo = 1; // 停车场编号
        cond.byListType = HCNetSDK.BLACKLIST_RECOGNITION; // 名单类型(黑名单或白名单)
    
        HCNetSDK.NET_DVR_CONTROL_GATEWAY_CTRL ctrl = new HCNetSDK.NET_DVR_CONTROL_GATEWAY_CTRL();
        ctrl.dwSize = ctrl.size();
        ctrl.byCommand = HCNetSDK.BLACKLIST_ADD; // 命令类型(添加黑名单或白名单)
    
        HCNetSDK.NET_DVR_CONTROL_LIST_INFO listInfo = new HCNetSDK.NET_DVR_CONTROL_LIST_INFO();
        listInfo.dwSize = listInfo.size();
        listInfo.dwMaxListNum = 1;
        listInfo.struCtrlListInfo[0].dwSize = listInfo.struCtrlListInfo[0].size();
        listInfo.struCtrlListInfo[0].byType = HCNetSDK.LICENSE_PLATE; // 名单类型为车牌号码
        listInfo.struCtrlListInfo[0].struLicense.byRes1[0] = 0; // 车牌号码省份缩写
        listInfo.struCtrlListInfo[0].struLicense.byRes1[1] = 0;
        listInfo.struCtrlListInfo[0].struLicense.byRes1[2] = 0;
        listInfo.struCtrlListInfo[0].struLicense.byRes1[3] = 0;
        listInfo.struCtrlListInfo[0].struLicense.byRes1[4] = 0;
        listInfo.struCtrlListInfo[0].struLicense.byRes1[5] = 0;
        listInfo.struCtrlListInfo[0].struLicense.byRes2[0] = 0; // 车牌号码字符个数
        listInfo.struCtrlListInfo[0].struLicense.byRes2[1] = 7;
        listInfo.struCtrlListInfo[0].struLicense.byPlateType = 0; // 车牌类型
        listInfo.struCtrlListInfo[0].struLicense.byColor = 0; // 车牌颜色
        listInfo.struCtrlListInfo[0].struLicense.wValidStartYear = 0; // 有效期开始年
        listInfo.struCtrlListInfo[0].struLicense.byValidStartMonth = 0; // 有效期开始月
        listInfo.struCtrlListInfo[0].struLicense.byValidStartDay = 0; // 有效期开始日
        listInfo.struCtrlListInfo[0].struLicense.wValidEndYear = 0; // 有效期结束年
        listInfo.struCtrlListInfo[0].struLicense.byValidEndMonth = 0; // 有效期结束月
        listInfo.struCtrlListInfo[0].struLicense.byValidEndDay = 0; // 有效期结束日
        listInfo.struCtrlListInfo[0].byPlateAttrib = 0; // 车牌属性
        listInfo.struCtrlListInfo[0].byListType = HCNetSDK.BLACKLIST_RECOGNITION; // 名单类型
        listInfo.struCtrlListInfo[0].byDelFlag = 0; // 删除标志
        listInfo.struCtrlListInfo[0].byRes
        // 将车牌号码转换为字节数组
        byte[] plateNo = "京A12345".getBytes();
        System.arraycopy(plateNo, 0, listInfo.struCtrlListInfo[0].struLicense.byPlateNo, 0, plateNo.length);
    
        // 将名单信息和命令信息填充到控制结构体中
        ctrl.lpCondBuffer = cond.getPointer();
        ctrl.dwCondSize = cond.size();
        ctrl.lpInBuffer = listInfo.getPointer();
        ctrl.dwInSize = listInfo.size();
    
        // 调用控制网关命令接口
        boolean isSuccess = hcNetSDK.NET_DVR_ControlGatewayCtrl(userId, ctrl);
        if (isSuccess) {
            System.out.println("车牌号码为京A12345的车辆已成功添加到黑名单!");
        } else {
            int errorCode = hcNetSDK.NET_DVR_GetLastError();
            System.out.println("车牌号码为京A12345的车辆添加到黑名单失败,错误码:" + errorCode);
        }
    
        // 释放资源
        listInfo.clear();
        cond.clear();
        hcNetSDK.NET_DVR_Logout(userId);
        hcNetSDK.NET_DVR_Cleanup();
    }

上述代码实现了将车牌号码为“京A12345”的车辆添加到黑名单的功能,其中包括初始化海康威视SDK、登录设备、设置名单信息和控制命令、调用控制网关命令接口等操作。用户可根据实际需求修改车牌号码、停车场编号和名单类型等参数,以实现车牌识别摄像头的黑白名单配置功能。

回答不易,还请能够采纳!!

该回答引用ChatGPT

海康威视识别车牌摄像头的黑白名单配置可以通过调用接口实现。具体操作步骤如下:

1、登录摄像头,获取session ID


String address = "http://IP:PORT";// 摄像头地址
String username = "USERNAME";// 登录用户名
String password = "PASSWORD";// 登录密码
String loginUrl = address + "/ISAPI/Security/userCheck";
String sessionID = "";
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(loginUrl);
String requestBody = "<UserCheck><userName>" + username + "</userName><password>" + password + "</password></UserCheck>";
httpPost.setHeader("Content-Type", "application/xml");
httpPost.setEntity(new StringEntity(requestBody, Charset.forName("UTF-8")));
CloseableHttpResponse response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    HttpEntity entity = response.getEntity();
    if (entity != null) {
        String responseString = EntityUtils.toString(entity, Charset.forName("UTF-8"));
        if (responseString.contains("<statusValue>200</statusValue>")) {
            sessionID = response.getFirstHeader("Set-Cookie").getValue().split(";")[0];
        }
    }
}
response.close();

2、配置黑白名单

String configUrl = address + "/ISAPI/Traffic/channels/1/licensePlateRecognition/whiteList";
HttpPut httpPut = new HttpPut(configUrl);
httpPut.setHeader("Content-Type", "application/xml");
httpPut.setHeader("Cookie", sessionID);
String requestBody = "<WhiteList>" + 
        "<whiteListEnable>true</whiteListEnable>" + // 启用白名单
        "<whiteListType>1</whiteListType>" + // 白名单类型:1-车牌号码
        "<whiteListSize>3</whiteListSize>" + // 白名单数量
        "<whiteList>" + 
        "<list>" + 
        "<licensePlate>" + 
        "<licensePlateType>0</licensePlateType>" + // 车牌类型:0-普通车牌,1-使馆车牌,2-军车牌,3-武警车牌,4-警车牌
        "<licensePlateContent>粤A12345</licensePlateContent>" + // 车牌号码
        "</licensePlate>" + 
        "</list>" + 
        "<list>" + 
        "<licensePlate>" + 
        "<licensePlateType>0</licensePlateType>" + 
        "<licensePlateContent>粤B12345</licensePlateContent>" + 
        "</licensePlate>" + 
        "</list>" + 
        "<list>" + 
        "<licensePlate>" + 
        "<licensePlateType>0</licensePlateType>" + 
        "<licensePlateContent>粤C12345</licensePlateContent>" + 
        "</licensePlate>" + 
        "</list>" + 
        "</whiteList>" + 
        "</WhiteList>";
httpPut.setEntity(new StringEntity(requestBody, Charset.forName("UTF-8")));
response = httpClient.execute(httpPut);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    // 配置成功
}
response.close();

3、查询黑白名单

HttpGet httpGet = new HttpGet(configUrl);
httpGet.setHeader("Cookie", sessionID);
response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    HttpEntity entity = response.getEntity();
    if (entity != null) {
        String responseString = EntityUtils.toString(entity, Charset.forName("UTF-8"));
        // 解析响应结果,获取黑白名单信息
    }
}
response.close();

在以上代码中,需要替换以下参数:

IP:摄像头的IP地址;
PORT:摄像头的端口号;
USERNAME:登录摄像头的用户名;
PASSWORD:登录摄像头的密码。
另外,需要注意的是,以上代码中使用的是Apache HttpClient库发送HTTP请求。由于该库在2022年停止了更新和维护,推荐使用其他替代方案,例如Java原生的HttpURLConnection类或第三方库OkHttp。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
海康威视识别车牌摄像头的黑白名单配置一般需要通过官方提供的SDK进行编程实现。以下是一个简单的示例代码,用于实现车牌识别摄像头黑白名单的配置。

// 初始化SDK
NET_DVR_Init();

// 登录设备
NET_DVR_DEVICEINFO_V30 struDeviceInfo;
LONG lUserID = NET_DVR_Login_V30("192.168.1.100", 8000, "admin", "12345", &struDeviceInfo);

// 设置黑名单
NET_DVR_PARK_BLACKLIST_COND struParkBlackListCond = {0};
struParkBlackListCond.dwSize = sizeof(NET_DVR_PARK_BLACKLIST_COND);
struParkBlackListCond.dwChannel = 1; // 要设置的通道号
struParkBlackListCond.dwParkIndex = 1; // 要设置的黑名单索引号
NET_DVR_PARK_BLACKLIST struParkBlackList = {0};
struParkBlackList.dwSize = sizeof(NET_DVR_PARK_BLACKLIST);
strcpy(struParkBlackList.byPlateNumber, "黑名单车牌号码");
struParkBlackList.byPlateType = 0; // 车牌类型
struParkBlackList.byVehicleColor = 0; // 车身颜色
struParkBlackList.byVehicleSize = 0; // 车辆大小
struParkBlackList.byVehicleLogo = 0; // 车标
struParkBlackList.byPassVehicle = 0; // 是否放行
NET_DVR_SetDVRConfig(lUserID, NET_DVR_SET_PARK_BLACKLIST, 1, &struParkBlackListCond, sizeof(struParkBlackListCond));

// 设置白名单
NET_DVR_PARK_WHITELIST_COND struParkWhiteListCond = {0};
struParkWhiteListCond.dwSize = sizeof(NET_DVR_PARK_WHITELIST_COND);
struParkWhiteListCond.dwChannel = 1; // 要设置的通道号
struParkWhiteListCond.dwParkIndex = 1; // 要设置的白名单索引号
NET_DVR_PARK_WHITELIST struParkWhiteList = {0};
struParkWhiteList.dwSize = sizeof(NET_DVR_PARK_WHITELIST);
strcpy(struParkWhiteList.byPlateNumber, "白名单车牌号码");
struParkWhiteList.byPlateType = 0; // 车牌类型
struParkWhiteList.byVehicleColor = 0; // 车身颜色
struParkWhiteList.byVehicleSize = 0; // 车辆大小
struParkWhiteList.byVehicleLogo = 0; // 车标
struParkWhiteList.byPassVehicle = 0; // 是否放行
NET_DVR_SetDVRConfig(lUserID, NET_DVR_SET_PARK_WHITELIST, 1, &struParkWhiteListCond, sizeof(struParkWhiteListCond));

// 释放SDK资源
NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();


需要注意的是,以上示例代码仅供参考,具体实现还需要根据实际需求进行修改。同时,在
进行黑白名单配置时,还需要注意以下几点:

  1. 确认设备支持黑白名单功能。不是所有的车牌识别摄像头都支持黑白名单功能,需要在购买设备时确认或者查阅设备的用户手册。
  2. 确认设备支持的黑白名单配置接口。不同设备可能会有不同的黑白名单配置接口,需要查阅设备的SDK文档或者用户手册。
  3. 确认车牌识别算法的准确率。即使配置了黑白名单,车牌识别算法也可能存在误识别的情况,需要在实际使用过程中进行测试并调整配置参数,以提高准确率。
  4. 确认黑白名单的使用场景和条件。黑白名单通常用于车辆进出管理等场景,需要结合实际使用场景和条件进行配置,例如车辆类型、通行时间、通行方向等。同时,还需要合理设置黑白名单的管理和维护流程,以确保名单的准确性和时效性。

总之,在进行黑白名单配置时,需要根据实际需求和使用场景进行综合考虑和调整,以达到最佳的管理效果。

海康威视的车牌识别系统通常使用HTTP接口进行配置,而不是Java代码。您需要使用HTTP客户端库(例如Apache HttpClient)来发送HTTP请求,以配置车牌识别系统。

以下是一个Java示例代码,演示如何使用HTTP客户端库向海康威视车牌识别系统添加黑名单:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

public class PlateRecognitionDemo {
    public static void main(String[] args) throws Exception {
        String ip = "192.168.0.1"; // 车牌识别系统的IP地址
        String username = "admin"; // 登录车牌识别系统的用户名
        String password = "123456"; // 登录车牌识别系统的密码

        // 构建登录请求
        JSONObject loginRequest = new JSONObject();
        loginRequest.put("method", "login");
        loginRequest.put("params", new JSONObject()
                .put("userName", username)
                .put("password", password)
                .put("clientType", "Web3.0")
        );

        // 发送登录请求
        HttpClient httpClient = HttpClients.createDefault();
        HttpPost loginPost = new HttpPost("http://" + ip + "/artemis/api/v1/auth/login");
        loginPost.setHeader("Content-Type", "application/json;charset=UTF-8");
        StringEntity loginEntity = new StringEntity(loginRequest.toString(), "UTF-8");
        loginPost.setEntity(loginEntity);
        HttpResponse loginResponse = httpClient.execute(loginPost);
        HttpEntity loginResponseEntity = loginResponse.getEntity();
        JSONObject loginResponseBody = new JSONObject(EntityUtils.toString(loginResponseEntity, "UTF-8"));
        String token = loginResponseBody.getJSONObject("data").getString("accessToken");

        // 构建添加黑名单请求
        JSONObject addBlacklistRequest = new JSONObject();
        addBlacklistRequest.put("method", "addBlacklist");
        addBlacklistRequest.put("id", "123456789");
        addBlacklistRequest.put("jsonrpc", "2.0");
        addBlacklistRequest.put("params", new JSONObject()
                .put("token", token)
                .put("parkSyscode", "park1")
                .put("blacklist", new JSONObject()
                        .put("carNo", "粤A12345")
                        .put("reason", "无证驾驶")
                        .put("beginTime", "2022-03-01 00:00:00")
                        .put("endTime", "2022-04-01 00:00:00")
                )
        );

        // 发送添加黑名单请求
        HttpPost addBlacklistPost = new HttpPost("http://" + ip + "/artemis/api/v1/parking/blacklist");
        addBlacklistPost.setHeader("Content-Type", "application/json;charset=UTF-8");
        addBlacklistPost.setHeader("X-Auth-Token", token);
        StringEntity addBlacklistEntity = new StringEntity(addBlacklistRequest.toString(), "UTF-8");
        addBlacklistPost.setEntity(addBlacklistEntity);
        HttpResponse addBlacklistResponse = httpClient.execute(addBlacklistPost);
        HttpEntity addBlacklistResponseEntity = addBlacklistResponse.getEntity();
        JSONObject addBlacklistResponse = new JSONObject(EntityUtils.toString(addBlacklistResponseEntity, "UTF-8"));

// 获取添加黑名单的返回信息
String addBlacklistResult = addBlacklistResponse.getStatusLine().toString();
if (addBlacklistResult.contains("200")) {
System.out.println("添加黑名单成功!");
} else {
System.out.println("添加黑名单失败!");
}

// 发送删除黑名单请求
HttpPost deleteBlacklistPost = new HttpPost("http://" + ip + "/artemis/api/v1/parking/blacklist/delete");
deleteBlacklistPost.setHeader("Content-Type", "application/json;charset=UTF-8");
deleteBlacklistPost.setHeader("X-Auth-Token", token);
StringEntity deleteBlacklistEntity = new StringEntity(deleteBlacklistRequest.toString(), "UTF-8");
deleteBlacklistPost.setEntity(deleteBlacklistEntity);
HttpResponse deleteBlacklistResponse = httpClient.execute(deleteBlacklistPost);
HttpEntity deleteBlacklistResponseEntity = deleteBlacklistResponse.getEntity();

// 获取删除黑名单的返回信息
String deleteBlacklistResult = deleteBlacklistResponse.getStatusLine().toString();
if (deleteBlacklistResult.contains("200")) {
System.out.println("删除黑名单成功!");
} else {
System.out.println("删除黑名单失败!");
}

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
对于海康威视的车牌识别设备,可以通过SDK来进行黑白名单的配置。下面是具体的步骤和示例代码:

  1. 创建设备对象

首先需要创建设备对象,并登录设备,示例代码如下:

HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
hCNetSDK.NET_DVR_Init();
int lUserID = hCNetSDK.NET_DVR_Login_V30(ip, port, username, password, lpDeviceInfo);
  1. 获取黑白名单配置

可以调用NET_DVR_GetPlateIDList_V40接口来获取当前设备的黑白名单配置,示例代码如下:

```
NET_DVR_ACS_PARAM_TYPE struParams = new NET_DVR_ACS_PARAM_TYPE();
struParams.dwSize = struParams.size();
struParams.dwParamType = dwParamType;
struParams.pCondBuffer = Pointer.NULL;
struParams.dwCondSize = 0;
struParams.pDataBuffer = Pointer.NULL;
struParams.dwDataSize = 0;
Pointer lpInBuffer = struParams.getPointer();
P

可参考:海康车牌机控制道闸,并且设置车辆黑白名单。
https://blog.csdn.net/weixin_35999341/article/details/126929118