建网站大概多少费用,网站系统改教程,2014网站设计,seo职业发展需求背景
给一个客户对接人脸识别的设备#xff0c;最后需要通知服务端进行一些消息推送。
简单例子 # 作者 陈老师
# https://v.iiar.cn
import json
import paho.mqtt.client as mqtt
import requests
from flask import Flask, requestapp Flask(__name__)# MQTT配置
mq…需求背景
给一个客户对接人脸识别的设备最后需要通知服务端进行一些消息推送。
简单例子 # 作者 陈老师
# https://v.iiar.cn
import json
import paho.mqtt.client as mqtt
import requests
from flask import Flask, requestapp Flask(__name__)# MQTT配置
mq_broker 127.0.0.1 # MQTT测试服务器
mq_port 1883 # 非加密端口
zt ddddddef http_post(data):url http://127.0.0.1:6688/api/user/mqtt_msgtry:res requests.post(url, jsondata)print(res.text)except Exception as e:print(e)# MQTT连接回调函数
def on_connect(client, userdata, flags, rc):if rc 0:client.subscribe(zt)print(MQTT连接成功)else:print(fMQTT连接失败返回码{rc})# 处理接收到的MQTT消息
def on_message(client, userdata, msg):mqtt_message msg.payload.decode() # 解析MQTT消息print(收到消息, mqtt_message)http_post(json.loads(mqtt_message))# 连接MQTT服务器
mq mqtt.Client()
mq.on_connect on_connect
mq.on_message on_message
mq.connect(mq_broker, mq_port, 60)
# 启动MQTT客户端线程
mq.loop_start()def send_mqtt_msg(text):mq.publish(zt, text)app.route(/, methods[POST])
def index():data request.jsonprint(给机器发消息, data)t json.dumps(data)t json.loads(t)send_mqtt_msg(t)return ok# 调试模式运行
if __name__ __main__:# debugTrue,app.run(port6699, host0.0.0.0)# 安装依赖
# pip install -r requirements.txt# 导出依赖库
# pip freeze requirements.txt
所需安装拓展
requirements.txt
blinker1.9.0
certifi2024.8.30
charset-normalizer3.4.0
click8.1.7
Flask3.1.0
idna3.10
importlib_metadata8.5.0
itsdangerous2.2.0
Jinja23.1.4
MarkupSafe3.0.2
paho-mqtt2.1.0
requests2.32.3
urllib32.2.3
Werkzeug3.1.3
zipp3.21.0
实际应用例子
# 作者 陈老师
# https://v.iiar.cn
import json
from datetime import datetime
import paho.mqtt.client as mqtt
import requests
from flask import Flask, requestapp Flask(__name__)# MQTT配置
mq_broker 127.0.0.1 # MQTT测试服务器
mq_port 1883 # 非加密端口
sb 123456789 # 我的设备号
zt ffungxi_{sb}_downLink # 发给设备
zt2 ffungxi_{sb}_upLink # 设备上报def http_post(data): # 接收mqtt回调的apiurl http://127.0.0.1:6688/api/user/mqtt_msgtry:res requests.post(url, jsondata)print(res.text)except Exception as e:print(e)# MQTT连接回调函数
def on_connect(client, userdata, flags, rc):if rc 0:client.subscribe(zt)client.subscribe(zt2)print(MQTT连接成功)else:print(fMQTT连接失败返回码{rc})# 处理接收到的MQTT消息
def on_message(client, userdata, msg):mqtt_message msg.payload.decode() # 解析MQTT消息try:data json.loads(mqtt_message)except json.JSONDecodeError:print(无效的JSON数据)returnif msg.topic zt:if data[cmd] heartD:returnprint(发给设备, mqtt_message)elif msg.topic zt2:if data[cmd] heartU:bot_heartbeat()returnelif data[cmd] strangerRecordU: # 陌生人returnelif data[cmd] verifiedRecordU: # 人脸库的# http_post([data])check_successfully(data[data])print(设备上报, mqtt_message)# 连接MQTT服务器
mq mqtt.Client()
mq.on_connect on_connect
mq.on_message on_message
mq.connect(mq_broker, mq_port, 60)
# 启动MQTT客户端线程
mq.loop_start()def send_mqtt_msg(text):mq.publish(zt, text)# 机器返回心跳
def bot_heartbeat():r {cmd: heartD,time: datetime.now().strftime(%Y-%m-%d %H:%M:%S)}t json.dumps(r)send_mqtt_msg(t)def check_successfully(data):data data[0]user_id data[num] # 用户idname data[name] # 用户名img data[liveImageBase64] # 扫脸图片verifiedCode data[verifiedCode] # 识别状态bot_time data[time] # 机器里识别时间personType data[personType]if personType 1 and verifiedCode 0: # 通过passsend_data {user_id: user_id,name: name,img: img,verifiedCode: verifiedCode,bot_time: bot_time,personType: personType}# print(bot_time)http_post(send_data)app.route(/, methods[POST])
def index():data request.jsonprint(给机器发消息, data)t json.dumps(data)t json.loads(t)send_mqtt_msg(t)return ok# 调试模式运行
if __name__ __main__:# debugTrue,app.run(port6699, host0.0.0.0)# 安装依赖
# pip install -r requirements.txt# 导出依赖库
# pip freeze requirements.txt
详细说明文档
由chatGPT整理
中文解释文档
1. 项目简介
该项目实现了一个基于 MQTT 协议和 Flask 框架的应用。它的功能主要包括
接收来自设备的上报消息如人脸识别结果、心跳等。向设备发送下行指令如心跳响应等。通过HTTP请求将接收到的数据转发到本地服务器进行处理。
该应用集成了 MQTT 客户端库 paho.mqtt.client用于与设备进行通信并使用 Flask 框架提供一个HTTP接口接收外部发送的消息并转发给设备。
2. 主要功能 MQTT通信 设备通过MQTT协议发送上报消息如人脸识别结果、心跳等服务器接收并进行处理。服务器可以向设备发送下行消息如心跳响应、命令等。 HTTP接口 服务器提供一个HTTP接口POST /接收外部请求通过MQTT协议向设备发送消息。 人脸识别处理 设备通过MQTT上报人脸识别结果服务器将识别结果转发给本地API进行进一步的处理如存储、通知等。
3. 主要模块
3.1 MQTT配置
mq_broker 127.0.0.1 # MQTT测试服务器
mq_port 1883 # 非加密端口
sb 123456789 # 我的设备号
zt ffungxi_{sb}_downLink # 发给设备
zt2 ffungxi_{sb}_upLink # 设备上报mq_brokerMQTT服务器的IP地址用于连接设备。mq_portMQTT服务器的端口号使用非加密连接默认为1883端口。sb设备的唯一序列号。zt发送给设备的消息主题用于控制设备或向设备发送指令。zt2设备上报消息的主题用于接收设备的上报数据如识别结果。
3.2 HTTP POST请求
def http_post(data):url http://127.0.0.1:6688/api/user/mqtt_msg # 本地API接口地址try:res requests.post(url, jsondata) # 发送POST请求print(res.text) # 打印服务器响应内容except Exception as e:print(e) # 打印异常信息http_post(data)这个函数用于将数据通过HTTP POST请求发送到本地的API接口。一般用于将设备上报的数据转发到其他服务进行处理。
3.3 MQTT消息处理
def on_connect(client, userdata, flags, rc):if rc 0: # 连接成功client.subscribe(zt) # 订阅设备下行消息client.subscribe(zt2) # 订阅设备上行消息print(MQTT连接成功)else: # 连接失败print(fMQTT连接失败返回码{rc})on_connect当MQTT客户端连接成功时会订阅两个主题zt发送给设备和zt2设备上报的消息。on_message处理接收到的MQTT消息根据主题分发不同的处理逻辑。
3.4 处理接收到的MQTT消息
def on_message(client, userdata, msg):mqtt_message msg.payload.decode() # 解析MQTT消息try:data json.loads(mqtt_message) # 将消息转为JSON格式except json.JSONDecodeError: # 如果无法解析为JSONprint(无效的JSON数据)returnif msg.topic zt: # 如果是下行消息if data[cmd] heartD: # 如果是心跳消息直接返回returnprint(发给设备, mqtt_message)elif msg.topic zt2: # 如果是设备上报消息if data[cmd] heartU: # 如果是设备上报的心跳消息bot_heartbeat() # 发送机器心跳returnelif data[cmd] strangerRecordU: # 陌生人记录returnelif data[cmd] verifiedRecordU: # 人脸识别记录check_successfully(data[data]) # 检查是否识别成功print(设备上报, mqtt_message)on_message处理接收到的消息并根据消息的主题和命令类型如心跳、陌生人记录、人脸识别记录等执行不同的操作。
3.5 发送MQTT消息
def send_mqtt_msg(text):mq.publish(zt, text) # 向设备下行主题发送消息send_mqtt_msg将文本消息通过MQTT协议发送到设备通常用于向设备发送指令或控制消息。
3.6 心跳响应
def bot_heartbeat():r {cmd: heartD, # 命令类型心跳time: datetime.now().strftime(%Y-%m-%d %H:%M:%S) # 当前时间}t json.dumps(r) # 将数据转换为JSON字符串send_mqtt_msg(t) # 发送心跳消息bot_heartbeat当设备向服务器发送心跳时服务器通过MQTT向设备响应心跳消息表明设备仍然在线。
3.7 人脸识别结果处理
def check_successfully(data):data data[0] # 获取识别结果中的第一条数据user_id data[num] # 用户IDname data[name] # 用户名img data[liveImageBase64] # 扫脸图片的Base64编码verifiedCode data[verifiedCode] # 识别状态0为通过bot_time data[time] # 机器识别的时间personType data[personType] # 人员类型1为已登记用户if personType 1 and verifiedCode 0: # 如果是已登记用户且识别通过pass # 这里可以处理已通过的情况# 构造发送数据send_data {user_id: user_id,name: name,img: img,verifiedCode: verifiedCode,bot_time: bot_time,personType: personType}# 打印识别时间可用于调试# print(bot_time)# 发送数据到本地APIhttp_post(send_data)check_successfully该函数处理设备上报的人脸识别数据将其解析并将成功的识别结果转发到本地API进行进一步处理。
3.8 Flask HTTP接口
app.route(/, methods[POST])
def index():data request.json # 获取请求中的JSON数据print(给机器发消息, data) # 打印发送给机器的消息t json.dumps(data) # 将数据转换为JSON字符串t json.loads(t) # 重新解析JSON这里可以进行进一步的数据处理send_mqtt_msg(t) # 发送消息给设备return ok # 返回成功响应index这是Flask应用提供的HTTP接口接收外部的POST请求。请求中的数据会通过MQTT协议转发给设备。
4. 运行说明 安装依赖 在项目根目录下创建 requirements.txt 文件列出项目的依赖库 pip install -r requirements.txt启动服务 运行Flask应用 python app.py服务器将会监听在 6699 端口上。 导出依赖 如果需要将当前环境的依赖导出为 requirements.txt 文件可以运行 pip freeze requirements.txt5. 总结
该项目主要通过MQTT协议与设备进行实时通信通过Flask框架提供一个HTTP接口接收外部请求并转发给设备。它主要应用于设备控制、实时数据处理和系统集成等场景。
延伸了解
这种基于 MQTT 协议和 Flask 框架的系统通常会应用于需要实时设备控制、数据收集和状态反馈的场景。以下是一些典型的应用场景
1. 智能门禁系统
在智能门禁系统中设备如门禁机、门锁等可能需要通过人脸识别来判断是否允许某人进入。设备通过MQTT协议将人脸识别结果例如是否识别成功、人员身份等上报到服务器服务器根据识别结果进行处理并反馈给设备是否允许打开门锁。
设备角色门禁设备、门锁、门禁卡读卡器、人脸识别摄像头等。系统需求 设备上报用户识别数据如人脸识别结果、时间戳等。系统根据识别结果决定是否打开门锁。系统向设备发送状态更新如心跳包、设备状态监控等。
使用场景
办公楼、住宅小区、公共场所等的智能门禁控制。企业考勤系统自动记录员工进出。
2. 智能监控与安防
在智能监控系统中摄像头、传感器等设备可能会使用人脸识别、动作检测等技术监控环境。当发现可疑人物或异常行为时设备会通过MQTT协议将监控数据上传至服务器服务器进行处理如报警、记录日志等并根据规则发送指令给设备如开启警报、录像等。
设备角色摄像头、传感器、警报器、录像设备等。系统需求 实时接收设备的监控数据或报警信号。根据设备上报的结果向设备发送指令如触发警报、录像等。与外部系统如安防公司、移动端APP等集成进行信息转发或展示。
使用场景
智能家居安防系统监控家庭安全。企业或公共场所的智能安防系统防盗、监控等。
3. 智能家居系统
在智能家居场景中设备之间的交互和控制通常通过MQTT协议实现。例如用户通过手机APP控制家里的智能灯泡、空调、门锁等设备设备将状态更新上报到服务器服务器再根据控制指令下发新的状态更新给设备。
设备角色智能灯泡、空调、窗帘、智能插座、门锁等。系统需求 设备实时上报状态如温度、湿度、是否开锁、是否开灯等。用户通过手机APP发送控制指令如开关灯、调节空调温度等。系统根据用户指令向设备发送MQTT消息进行控制。
使用场景
智能家居控制系统用户通过手机控制家居设备。智能办公环境自动调节温度、照明等。
4. 远程医疗与健康监测
在医疗设备或健康监测系统中传感器如心率监测仪、血压计、体温计等通过MQTT将患者的健康数据实时上传到服务器服务器将数据存储并进行分析同时向设备发送指令进行实时干预例如在心率异常时提醒设备报警。
设备角色健康监测设备、传感器、智能手表等。系统需求 设备上报患者的实时健康数据如心率、血压、体温等。系统根据数据分析给设备发送指令如报警、记录日志等。数据存储与远程监控医生或护理人员可以实时查看患者状态。
使用场景
老年人健康监护实时监测老年人的身体状况。慢性病患者的远程健康管理。
5. 工业物联网IIoT
在工业物联网IIoT应用中传感器和设备需要实时监控生产线或设备的状态例如温度、压力、湿度、运行速度等数据。这些设备通过MQTT协议上传状态数据服务器根据数据进行故障预警、生产调度等。
设备角色工业传感器、监控设备、生产机器、自动化设备等。系统需求 设备实时上报生产数据如设备运行状态、温度、湿度等。系统根据设备数据进行状态监控发现异常时发出报警指令。向设备发送控制指令如调整温度、改变生产参数等。
使用场景
工厂自动化实时监控生产线设备的运行状态。智能制造优化生产流程减少故障率。
6. 智慧停车系统
在智慧停车系统中停车场的入口、出口、车位传感器等设备通过MQTT协议上传实时的停车数据。例如设备上报车辆进出情况、空闲车位数等系统根据这些信息提供停车导航、收费结算等服务。
设备角色停车场摄像头、车位传感器、停车收费机等。系统需求 设备上报实时停车数据如车位是否空闲、车辆进出时间等。系统根据数据向用户提供停车位信息、导航指引。向设备发送指令进行车位管理或收费操作。
使用场景
智慧停车场实时监控停车位使用情况。城市交通管理优化停车资源利用。
7. 智能农业与环境监测
在智能农业和环境监测系统中设备如土壤湿度传感器、气象站、灌溉系统等通过MQTT协议实时上传环境数据系统根据数据分析向设备发送指令如启动灌溉、调整温室温度等。
设备角色土壤湿度传感器、温度传感器、气象站、自动化灌溉系统等。系统需求 设备上报环境数据如温度、湿度、土壤湿度等。系统根据数据自动调整设备参数如启动灌溉、调节温湿度等。数据存储与远程监控农业管理人员可以随时查看环境数据。
使用场景
智能温室自动调节温湿度控制灌溉系统。智能农场精准农业减少水资源浪费。 总结
这种需求主要出现在那些 需要实时监控、数据收集、设备控制与反馈的场景。利用MQTT协议和Flask框架实现的系统能够高效地处理设备之间的消息传递和数据流转。典型的应用场景包括
智能门禁与考勤系统智能安防与监控智能家居控制远程医疗健康监测工业物联网IIoT智慧停车与交通管理智能农业与环境监测
这些场景都涉及到设备与服务器之间的高效通信、状态反馈和远程控制且对于实时性、稳定性和可扩展性有较高的要求。