首页 > 编程问答 >如何在 Python 中从 Milesight TrafficX 摄像头、Post(MQTT、TCP/IP、HTTP) 获取数据?

如何在 Python 中从 Milesight TrafficX 摄像头、Post(MQTT、TCP/IP、HTTP) 获取数据?

时间:2024-07-28 15:05:32浏览次数:22  
标签:python api http tcp mqtt

你好,祝你度过愉快的一天或一夜, 我有这个 Milesight TrafficX 摄像头 已启动并正在运行,仪表板中有一个名为 POST 的设置,您可以在下图中看到: Mile sight Dashboard showing POST setting 我想要的是知道如何设置这些设置(基于实际上我的意思是)能够在我的Python代码中接收数据。 无论协议如何,数据都将如下所示: Mile sight dashboard post Data setting over view

完整的数据演示:

<!-- 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 摄像机。

步骤:

  1. 启用 MQTT 摄像机:

    • 在 TrafficX 摄像机的网络设置中,启用 MQTT 客户端功能。
    • 设置 MQTT 代理的地址(例如,提到的 HiveMQ 代理)和端口号。
    • 配置身份验证详细信息(用户名和密码),如果代理需要的话。
    • 配置“主题”设置。这是摄像机发布数据的位置。可以使用建议的主题,例如 /trafficx/{cameraID}/lpr
  2. 设置 MQTT 客户端(Python):

    • 安装 Paho MQTT Python 客户端库: pip install paho-mqtt
    • 创建一个 Python 脚本,连接到的 MQTT 代理:
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()
  1. 测试: 运行 Python 脚本。当摄像机检测到事件并发布数据时,应该在控制台中看到 JSON 格式的输出。

2. 使用 HTTP POST 请求

可以将 TrafficX 摄像机配置为将数据作为 HTTP POST 请求发送到的 Python 服务器。

步骤:

  1. 设置摄像机:

    • 在摄像机的网络设置中,找到“HTTP POST”部分。
    • 将的 Python 服务器的 IP 地址和端口号输入到“URL”字段。
    • 选择“POST”作为方法。
    • 可以选择设置身份验证标头(如果需要)。
  2. 创建 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()
  1. 运行服务器: 运行 Python 脚本。的服务器现在正在侦听来自摄像机的 HTTP POST 请求。

3. 使用 TCP/IP 连接

使用 TCP/IP 协议需要更底层的网络编程。

步骤:

  1. 配置摄像机:

    • 在摄像机的网络设置中,找到“TCP/IP”部分。
    • 输入 Python 服务器的 IP 地址和端口号。
    • 选择适当的协议和数据格式(例如,JSON)。
  2. 创建 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}")
  1. 运行服务器: 运行 Python 脚本。的服务器现在正在侦听来自摄像机的 TCP 连接。

其他注意事项:

  • 确保的 Python 脚本和 TrafficX 摄像机位于同一网络上,或者它们之间有网络路由。
  • 查看 Milesight TrafficX 摄像机的文档,了解有关配置每个协议选项的详细信息。
  • 对于更复杂的用例,可能需要使用多线程或异步编程技术来处理来自摄像机的多个连接或大量数据。

标签:python,api,http,tcp,mqtt
From: 78803120

相关文章

  • 如何循环使用按钮输入,在python中的不同选项之间循环?
    我有一个循环,它采用三路开关输入并在相机开机时选择一个选项:#SetGPIOinputswitchColorOne=pyb.Pin("P9",pyb.Pin.IN,pyb.Pin.PULL_UP)switchColorTwo=pyb.Pin("P7",pyb.Pin.IN,pyb.Pin.PULL_UP)#SetcolorpalletebyswitchifswitchColorOne.value()==0:......
  • SSL 证书验证失败 - 雅虎财经 API - Python
    我正在尝试从雅虎财经获取数据,但收到SSL错误。代码如下:importrequestsresponse=requests.get("https://query1.finance.yahoo.com/v8/finance/chart/META",verify=True)print(response.status_code)出现以下错误:urllib3.exceptions.SSLError:[SSL:CERTIFICATE_......
  • 【学习笔记】Matlab和python双语言的学习(熵权法)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、熵权法的基本概念二、熵权法的基本步骤1、构建决策矩阵2、数据标准化3、计算指标的比重4、计算信息熵5、计算权重6、计算综合得分三、代码实现----Matlab四、代码实现----python总结......
  • 【python】网络通信编程例子
    以下是一个简单的Python示例,展示了如何在Linux下使用套接字进行基本的网络通信,包括创建服务器和客户端。服务器端代码importsocket#创建一个IPv4TCP套接字server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#绑定服务器地址和端口server_addr......
  • 如何将Python版本从3.9降级到3.7?
    我正在开发RaspberryPi。这些是我的操作系统信息:pi@raspberrypi:~$uname-marmv7lpi@raspberrypi:~$cat/etc/os-releasePRETTY_NAME="RaspbianGNU/Linux11(bullseye)"NAME="RaspbianGNU/Linux"VERSION_ID="11"VERSION="11(bullseye)......
  • Python终端输出彩色字符方法
    colorama是一个python专门用来在控制台、命令行输出彩色文字的模块,完全兼容linux和windows各个版本。 1.Python3.x中安装colorama模块: pipinstallcolorama'''可用格式常数:【颜色RED,GREEN都需要大写】Fore:BLACK,RED,GREEN,YELLOW,BLUE,MAGENTA,CYAN,WHI......
  • 我无法安装 pygame 模块,所以我尝试观看视频,它告诉我这样做。在那个视频中他得到了 pyt
    c:\User\admin>piplistSyntaxError:unexpectedcharacterafterlinecontinuationcharacter我试图获取python模块列表,但出现语法错误出现SyntaxError:unexpectedcharacterafterlinecontinuationcharacter错误是因为你的用户名中包含一个特殊字符......
  • python第五节--conda命令
    这里写自定义目录标题基本命令环境管理包管理环境文件环境变量Conda配置高级操作常见问题基本命令检查Conda版本:conda--version更新Conda:condaupdateconda环境管理创建新环境:condacreate--namemyenv创建包含特定Python版本的新环境:conda......
  • 如何使用python向另一台计算机发送请求
    基本上我有一个聊天室,我将把它变成一个网络(我知道这听起来没有多大意义),但基本上我想知道是否可以让python脚本捕获计算机上的所有传出请求并将其发送到另一台计算机(c2)。然后我希望c2自己发出请求。这是对我正在做的事情的淡化解释,但任何帮助都会很棒!当然可以!虽然从头......
  • 使用 Axios HTTP 客户端通过 GET 请求调用 FastAPI 后端时收到 422 错误响应
    我正在尝试从我的Vue3客户端(使用GETJavaScriptHTTP客户端)向FastAPI服务器发出axios请求,但我收到422unprocessableentity错误响应。据我了解,这种错误消息与错误的输入有关。这是vue3代码:import{authToken}from"../main.js"expo......