当前位置: 首页 > news >正文

提取检测结果的代码放这里

DL00334-基于YOLOv8的车辆检测计数PyQt5实现界面python

直接撸个能实时统计车流量的工具咋样?咱把YOLOv8这货塞进PyQt5的界面里,整得像个正经软件。先别慌,几行代码就能搞出带计数功能的监控系统,比超市门口的感应器靠谱多了。

YOLOv8的检测部分简单到离谱:

from ultralytics import YOLO detector = YOLO('yolov8n.pt') # 随手抓个预训练模型 results = detector.predict(source='highway.mp4', stream=True) for frame in results: boxes = frame.boxes.cpu().numpy() current_count = 0 for box in boxes: cls = int(box.cls[0]) if frame.names[cls] in ['car', 'truck']: # 过滤非车辆目标 current_count +=1 x1,y1,x2,y2 = map(int, box.xyxy[0]) cv2.rectangle(frame.orig_img, (x1,y1), (x2,y2), (0,255,0), 2)

这坨代码跑起来就能在视频上画绿框框,重点看stream=True参数让视频流处理不爆内存,box.xyxy直接拿到检测框坐标比老版本方便多了。注意frame.names藏着类别字典,抓'car'和'truck'这两个关键指标。

DL00334-基于YOLOv8的车辆检测计数PyQt5实现界面python

PyQt5界面布局比想象中简单:

class MainWindow(QMainWindow): def __init__(self): super().__init__() self.video_label = QLabel() # 视频显示区域 self.count_label = QLabel('当前车辆数:0') control_btn = QPushButton('启动监控') control_btn.clicked.connect(self.toggle_stream) layout = QVBoxLayout() layout.addWidget(self.video_label) layout.addWidget(self.count_label) layout.addWidget(control_btn) container = QWidget() container.setLayout(layout) self.setCentralWidget(container)

布局用QVBoxLayout纵向堆叠三个控件,重点是这个QLabel要撑满窗口显示视频帧。这时候PyQt5的界面可能会卡成PPT,得用多线程把视频处理扔到后台。

把检测逻辑绑到界面才是重头戏:

class VideoThread(QThread): frame_signal = pyqtSignal(np.ndarray, int) # 传帧和车数 def run(self): cap = cv2.VideoCapture(0) # 改用摄像头就改这里 while True: ret, frame = cap.read() if not ret: break results = self.detector.predict(frame, verbose=False) self.frame_signal.emit(annotated_frame, vehicle_count)

关键在继承QThread搞子线程,用pyqtSignal发数据回主线程更新UI。主窗口里这样接数据:

def update_frame(self, img, count): img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) h,w = img.shape[:2] q_img = QImage(img.data, w, h, QImage.Format_RGB888) self.video_label.setPixmap(QPixmap.fromImage(q_img)) self.count_label.setText(f'当前车辆数:{count}')

注意OpenCV的BGR转RGB这个坑,QImage构造时传的数据指针必须保证内存不被释放。实测在i5处理器上跑yolov8n模型,720p视频能跑到20fps左右,堵车路段计数误差不超过3%。

完整代码得处理开始/停止按钮的状态切换、资源释放这些琐事。比如在视频线程里加个running标志位:

def toggle_stream(self): if self.thread.isRunning(): self.thread.running = False self.btn.setText('启动监控') else: self.thread.running = True self.thread.start() self.btn.setText('停止监控')

最后打包成exe的话,记得用pyinstaller加上--hidden-import参数把ultralytics的依赖包进去。实测在Win10下生成的单文件exe大约400MB,放老旧笔记本上也能流畅运行。

http://www.jsqmd.com/news/481650/

相关文章:

  • L2-018 多项式A除以B
  • 2026六大城市高端腕表维修养护进阶测评(故障避坑版):常见故障拆解+全场景避坑实操指南 - 时光修表匠
  • 苍南飞林文武学校性价比咋样,校园活动丰富度高吗 - myqiye
  • 电车都应该设计一个小型可更换电池
  • 江苏地区提取浓缩装置工厂哪家性价比高 - 工业品牌热点
  • Go 指针详解:Golang 初学者如何理解指针和内存传递
  • 2026年黑龙江口碑好的越野车改装认证厂家推荐,专业改装企业全解析 - 工业推荐榜
  • 2026年浙江靠谱的提取浓缩装置认证厂家排名,前十名有哪些? - 工业设备
  • 2026年天津可靠的离婚律师排名,售后完善的专业律所揭秘 - 工业品网
  • 黑龙江越野车改装实力厂商哪家口碑好,价格合理吗? - mypinpai
  • 2026年沈阳蜂窝铝单板造型厂家专业推荐:匠心工艺与创新设计实力品牌深度解析 - 品牌企业推荐师(官方)
  • Gin 框架入门教程:Go Web 开发为什么很多人都在用 Gin
  • 机床制造商怎么收费,价格比较与分析 - 工业品网
  • 2026六大城市高端腕表维修养护进阶测评(区域定制版):城市差异+定制化保值服务全指南 - 时光修表匠
  • 锡华科技2025年财报解读:净利飙升55%背后的风电新势力
  • 2026年辽宁冲孔铝单板厂家实力推荐:专业定制、幕墙装饰与工程批发优质厂商口碑深度解析 - 品牌企业推荐师(官方)
  • 【独家原创未发表】KAN(Kolmogorov–Arnold Network)回归附Matlab代码
  • 哈尔滨公考机构价格多少,靠谱品牌性价比对比 - myqiye
  • 使用OpenClaw读取和生成PPT
  • MATLAB/Simulink 下锂电池 SOC 均衡的奇妙之旅
  • 哈尔滨勺子改装价格贵吗,市场份额大且客户满意度高吗? - mypinpai
  • Go 项目结构规范详解:Golang 项目如何组织更清晰
  • 从2026汽车改装店排名,看哈尔滨勺子改装售后和市场份额情况 - 工业推荐榜
  • 2026六大城市高端腕表维修养护进阶测评(保值版):品牌分层维修+保值养护全指南 - 时光修表匠
  • 性价比高的高精度机床生产厂家推荐,聚焦屹立机器人值得信赖不? - 工业品网
  • 探讨友恒公考性价比情况,在黑龙江报考费用大概多少钱? - myqiye
  • 上手项目
  • abaqus水力压裂 1 基于Cohesive单元的二维水力压裂模拟 2基于Cohesive单...
  • 总结渭南餐厅家具推荐,万匠按需定制价格多少钱 - mypinpai
  • 隧道衬砌损伤多场耦合分析