你好,祝你度过愉快的一天或一夜, 我有这个 Milesight TrafficX 摄像头 已启动并正在运行,仪表板中有一个名为 POST 的设置,您可以在下图中看到: 我想要的是知道如何设置这些设置(基于实际上我的意思是)能够在我的Python代码中接收数据。 无论协议如何,数据都将如下所示:
完整的数据演示:
<!-- language: python -->
{
"event_type": "event_type",
"device_name": "device_name",
"GPS": "GPS",
"time": "time",
"detection_region": "detection_region",
"license_plate": "license_plate",
"country_region": "country_region",
"plate_type": "plate_type",
"plate_color": "plate_color",
"vehicle_type": "vehicle_type",
"vehicle_color": "vehicle_color",
"vehicle_brand": "vehicle_brand",
"direction": "direction",
"event_data":
[
...
]
"license_plate_coordinates": "license_plate_coordinates",
"vehicle_coordinates": "vehicle_coordinates",
"snapshot": "snapshot"
}
我几乎做过我想到的或在空荡荡的互联网上想到的所有愚蠢的事情,也许其中很多都是不相关的,但是我做到了,我要告诉大家:
- 我确实想使用 MQTT,并且遇到了 mqtt 代理 我不知道我是否成功配置,甚至我无法看到使用优秀的(android棒棒糖看起来哈哈)项目的数据 MQTT EXPLORER
我在milesight文档中找到了一些零SEO的资源,当我之前搜索时甚至没有出现在谷歌中,我将在此处留下链接,因此您不必自己查找,以防您想花精力回答我(并且将不胜感激:
你可以在上一篇文章中看到的让我失望并让我问另一个问题的标题是文章: LPR摄像机与NVR(VMS)之间的集成 , 这让我(我不知道,即使这是一个正确的问题),我的电脑和那个 VMS 或 NVR 有什么区别?他们应该如何能够捕获数据而我却不能?我的意思应该是有办法的。它是否有某种服务器或我无法在电脑上运行的东西?怎么可能不能用电脑做某事?
-
我还尝试安装 VMS(视频管理系统)应用程序,例如
AGENT DVR
和
geniusvision
看看它们是否可以是否捕获数据,但代理 dvr 有很多设置,无法实现(而且它是有限版本,不知道与它是否有任何关系),并且天才视觉有一个社区许可证可以激活,这导致我遇到了一些无法注册社区许可证的情况,并且还删除了该许可证。
-i 还在 python 中使用
python -m http.server
运行了一个 http 服务器,并将其链接放入相机 http 设置中,这导致我遇到(现在怎么办?)情况 - 还下载了 Postman 发送 get或使用文章中的变量发布请求(最后一个未编号的链接),但也可以进一步发送数据包。
- 还尝试使用 python 建立 TCP/IP 连接,但我不知道要作为数据包发送什么。
- tbh 还安装了 Wireshark 来监听摄像机 IP,但那时我只是觉得我的整个概念以及我正在做的事情和我想去的地方都是错误的,所以我还没有。
At最后,这是我所有的设置,如果我需要购买任何东西,请随时提出建议:
- Windows 11 pro 23H2 build 22631.3958
- 相机在另一个城市,我路由了它,所以我可以 ping 它并且它也可以告诉我
你可以看到我的悲惨程度(如果这个词存在的话),所以我将彻底接受任何相关和不相关的帮助,甚至是一个没有任何信息的友好的简短对话,非常感谢。
当然,我可以帮助从 Milesight TrafficX 摄像机中获取数据。选择了正确的方向,使用 MQTT、TCP/IP 或 HTTP 协议都可以实现的目标。以下是每种方法的分步指南:
1. 使用 MQTT 协议
MQTT 是一种轻量级的消息传递协议,非常适合物联网设备,例如的 TrafficX 摄像机。
步骤:
-
启用 MQTT 摄像机:
- 在 TrafficX 摄像机的网络设置中,启用 MQTT 客户端功能。
- 设置 MQTT 代理的地址(例如,提到的 HiveMQ 代理)和端口号。
- 配置身份验证详细信息(用户名和密码),如果代理需要的话。
-
配置“主题”设置。这是摄像机发布数据的位置。可以使用建议的主题,例如
/trafficx/{cameraID}/lpr
。
-
设置 MQTT 客户端(Python):
-
安装 Paho MQTT Python 客户端库:
pip install paho-mqtt
- 创建一个 Python 脚本,连接到的 MQTT 代理:
-
安装 Paho MQTT Python 客户端库:
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
client.subscribe("/trafficx/{cameraID}/lpr") # 替换为的主题
def on_message(client, userdata, msg):
data = json.loads(msg.payload.decode())
print(f"Received message: {data}")
# 处理接收到的数据
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set("your_username", "your_password") # 如果需要
client.connect("your_mqtt_broker_address", 1883, 60) # 替换为的代理地址和端口
client.loop_forever()
- 测试: 运行 Python 脚本。当摄像机检测到事件并发布数据时,应该在控制台中看到 JSON 格式的输出。
2. 使用 HTTP POST 请求
可以将 TrafficX 摄像机配置为将数据作为 HTTP POST 请求发送到的 Python 服务器。
步骤:
-
设置摄像机:
- 在摄像机的网络设置中,找到“HTTP POST”部分。
- 将的 Python 服务器的 IP 地址和端口号输入到“URL”字段。
- 选择“POST”作为方法。
- 可以选择设置身份验证标头(如果需要)。
-
创建 Python HTTP 服务器:
-
使用
http.server
模块或 Flask/Django 等框架创建一个简单的 HTTP 服务器。以下是一个使用http.server
的示例:
-
使用
from http.server import BaseHTTPRequestHandler, HTTPServer
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length).decode()
data = json.loads(post_data)
print(f"Received data: {data}")
# 处理接收到的数据
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.end_headers()
self.wfile.write(b"Data received successfully")
if __name__ == "__main__":
server_address = ('', 8000) # 替换为想要的端口
httpd = HTTPServer(server_address, RequestHandler)
print("Starting server...")
httpd.serve_forever()
- 运行服务器: 运行 Python 脚本。的服务器现在正在侦听来自摄像机的 HTTP POST 请求。
3. 使用 TCP/IP 连接
使用 TCP/IP 协议需要更底层的网络编程。
步骤:
-
配置摄像机:
- 在摄像机的网络设置中,找到“TCP/IP”部分。
- 输入 Python 服务器的 IP 地址和端口号。
- 选择适当的协议和数据格式(例如,JSON)。
-
创建 Python TCP 服务器:
-
使用
socket
模块创建一个 TCP 服务器,该服务器侦听来自摄像机的连接。
-
使用
import socket
import json
HOST = '' # 监听所有可用接口
PORT = 65432 # 替换为想要的端口
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
while True:
data = conn.recv(1024).decode()
if not data:
break
try:
data = json.loads(data)
print(f"Received data: {data}")
# 处理接收到的数据
except json.JSONDecodeError:
print(f"Received invalid JSON: {data}")
- 运行服务器: 运行 Python 脚本。的服务器现在正在侦听来自摄像机的 TCP 连接。
其他注意事项:
- 确保的 Python 脚本和 TrafficX 摄像机位于同一网络上,或者它们之间有网络路由。
- 查看 Milesight TrafficX 摄像机的文档,了解有关配置每个协议选项的详细信息。
- 对于更复杂的用例,可能需要使用多线程或异步编程技术来处理来自摄像机的多个连接或大量数据。