微信协议小结

  1. 发布的消息对应一个ID(只要单个方向唯一即可,服务器端可能会根ID判断重复接收),消息重传机制确保有限次的重试,重试失败给予用户提示,发送成功会反馈确认,客户端只有收到确认信息才知道发送成功。发送消息可能不会产生新SyncKey。
  2. 基于版本号(SynKey)的状态消息同步机制,增量、有序传输需求水到渠成。长连接通知/短连接获取、确认等,交互方式简单,确保了消息可靠谱、准确无误到达。
  3. 客户端/服务器端都会存储消息ID处理记录,避免被重复消费客户端获取最新消息,但未确认,服务器端不会认为该消息被消费掉。下次客户端会重新获取,会查询当前消息是否被处理过。根据一些现象猜测。
  4. 总体上看,微信协议跨平台(TCP或HTPP都可呈现,处理方式可统一),通过“握手”同步,很可靠,无论哪一个平台都可以支持的很好
  5. 微信协议最小成本为16字节,大部分时间若干个消息包和在一起,批量传输。微信协议说不上最简洁,也不是最节省流量,但是非常成功的。
  6. 若服务器检测到一些不确定因素,可能会导致微启用安全套接层SSL协议进行常规的TCP长连接传输。短连接都没有发生变化
  7. 发送消息方式

    发送消息走已经建立的TCP长连接通道,发送消息到服务器,然后接受确认信息等,产生一次交互。

    小伙伴接收到信息阅读也都会收到服务器端通知,产生一次交互等。

    可以确定,微信发送消息走TCP长连接方式,因为不对自身状态数据产生影响,应该不交换SyncKey。

    • 在低速网络下,大概会看到消息发送中的提示,属于消息重发机制
    • 网络不好有时客户端会出现发送失败的红色感叹号
    • 已发送到服务器但未收到确认的消息,客户端显示红色感叹号,再次重发,服务器作为重复消息处理,反馈确认
    • 上传图片,会根据图片大小,分割成若干部分(大概1.5K被划分为一部分),同一时间点,客户端会发起若干次POST请求,各自上传成功之后,服务器大概会合并成一个完整图片,返回一个缩略图,显示在APP聊天窗口内。APP作为常规的文字消息发送到服务器端
    • 上传音频,则单独走TCP通道,一个两秒的录制音频,客户端录制完毕,分为两块传输,一块最大1.5K左右,服务端响应一条数据通知确认收到。共三次数据传输。
      音频和纯文字信息一致,都是走TCP长连接,客户端发送,服务器端确认。
### 如何将YOLO与PyQt结合使用 为了实现YOLO与PyQt的集成,可以按照以下方法构建应用程序: #### 1. 安装依赖库 确保安装了必要的Python包。这通常包括`opencv-python`用于图像处理以及`torch`和`tqdm`等其他可能需要的机器学习框架。 ```bash pip install opencv-python torch tqdm pyqt5 ``` #### 2. 加载并配置YOLO模型 加载预训练好的YOLO权重文件,并设置好检测参数。这部分代码可以从官方GitHub仓库获取或者基于已有的YOLO版本调整[^1]。 ```python import cv2 from ultralytics import YOLO model = YOLO('yolov8n.pt') # Load model ``` #### 3. 创建PyQt界面 设计图形用户界面(GUI),允许用户选择视频源或图片路径作为输入给YOLO进行目标识别。这里展示了一个简单的窗口布局例子[^2]。 ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QLineEdit class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("YOLO Object Detection") layout = QVBoxLayout() label = QLabel("Enter image path:") line_edit = QLineEdit() button = QPushButton("Detect Objects!") layout.addWidget(label) layout.addWidget(line_edit) layout.addWidget(button) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) ``` #### 4. 实现对象检测逻辑 当点击按钮时触发事件处理器,在其中调用YOLO来进行预测并将结果显示出来。注意要处理不同类型的媒体数据(如摄像头流、本地文件)[^3]。 ```python def on_button_clicked(self): img_path = self.line_edit.text() # Get input from user results = model(img_path) # Perform inference using loaded model res_plotted = results[0].plot() # Plot bounding boxes over detected objects cv2.imshow("Detected Image", res_plotted) # Show result in a window cv2.waitKey(0) button.clicked.connect(on_button_clicked) ``` 以上就是基本的工作流程;当然实际项目可能会更复杂一些,比如还需要考虑多线程运行以提高性能等问题。对于具体细节上的差异,则取决于所选用的具体YOLO变体及其对应的API接口文档说明[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值