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();
需要注意的是,以上示例代码仅供参考,具体实现还需要根据实际需求进行修改。同时,在
进行黑白名单配置时,还需要注意以下几点:
总之,在进行黑白名单配置时,需要根据实际需求和使用场景进行综合考虑和调整,以达到最佳的管理效果。
海康威视的车牌识别系统通常使用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来进行黑白名单的配置。下面是具体的步骤和示例代码:
首先需要创建设备对象,并登录设备,示例代码如下:
HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
hCNetSDK.NET_DVR_Init();
int lUserID = hCNetSDK.NET_DVR_Login_V30(ip, port, username, password, lpDeviceInfo);
可以调用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