51浏览
查看: 51|回复: 1

[K10项目分享] 行空板K10网络摄像头——实现openCV/yoloV5视觉算法

[复制链接]
本帖最后由 YeezB 于 2025-4-3 16:26 编辑

借由行空板K10的摄像头以及联网功能,我们可以将摄像头画面传输到局域网上,并且随时在局域网中任意一台电脑访问。在电脑端可以调用很多现成的计算机视觉库。进行图像识别。

该项目分成两个部分:
- 将行空板K10的摄像头映射到网络上
- 连入这个局域网的电脑本地运行openCV/yolo等算法

1. 行空板K10网络摄像头

用户库链接:
https://gitee.com/yeezb/k10web-cam


可以在Mind+的用户库中复制粘贴上述链接来加载用户库
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图1
编写代码:
上述链接中有示例程序的截图,对应修改WiFi名称和密码后上传。
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图2
打开串口监视器,可以看到K10的IP。
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图3

浏览器打开IP/stream可以看到摄像头画面,比如上图中的IP,浏览器就可以输入192.168.9.180/stream
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图4

2.本地运行openCV

电脑本地安装openCV库:
Mind+切换到Python模式->代码->库管理
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图5
在PIP模式下分别输入并运行
- numpy
- request
- opencv-python
- opencv-contrib-python
安装四个依赖库
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图6
在电脑中任意位置新建一个python文件并打开,文件名任意但是需要以.py结尾
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图7
运行下列Python代码
  1. import cv2
  2. import requests
  3. import numpy as np
  4. url = 'http://192.168.9.60/stream'  # ESP32-CAM的IP地址
  5. cv2.namedWindow("live transmission", cv2.WINDOW_AUTOSIZE)  # 创建一个窗口用于显示实时图像
  6. # 启动 HTTP 请求获取视频流
  7. try:
  8.     response = requests.get(url, stream=True, timeout=10)
  9.     print("Connected to stream")
  10.    
  11.     img_data = b''  # 用于存储接收到的图像数据
  12.    
  13.     # 按块读取数据
  14.     for chunk in response.iter_content(chunk_size=1024):
  15.         if chunk:
  16.             img_data += chunk  # 将接收到的数据累加到 img_data 中
  17.             # 判断是否接收到完整的 JPEG 数据
  18.             start_idx = img_data.find(b'\xff\xd8')  # 查找 JPEG 开始标志
  19.             end_idx = img_data.find(b'\xff\xd9')    # 查找 JPEG 结束标志
  20.             if start_idx != -1 and end_idx != -1:
  21.                 jpg_data = img_data[start_idx:end_idx+2]  # 提取出完整的 JPEG 数据
  22.                 # 转换为 NumPy 数组
  23.                 img_np = np.frombuffer(jpg_data, dtype=np.uint8)
  24.                 img = cv2.imdecode(img_np, cv2.IMREAD_COLOR)  # 解码 JPEG 图像数据
  25.                 if img is not None:
  26.                     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 将图像转换为灰度图像
  27.                     canny = cv2.Canny(cv2.GaussianBlur(gray, (11, 11), 0), 30, 150, 3)  # 使用Canny算法进行边缘检测
  28.                     dilated = cv2.dilate(canny, (1, 1), iterations=2)  # 对边缘图像进行膨胀操作
  29.                     contours, _ = cv2.findContours(dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  # 查找轮廓
  30.                     cv2.drawContours(img, contours, -1, (0, 255, 0), 2)  # 在原始图像上绘制轮廓
  31.                     cv2.imshow("mit contour", canny)  # 显示边缘检测结果图像
  32.                     cv2.imshow("live transmission", img)  # 显示实时图像
  33.                     # 按下 'q' 键退出
  34.                     if cv2.waitKey(1) & 0xFF == ord('q'):
  35.                         break
  36.                 # 清除已处理的数据
  37.                 img_data = img_data[end_idx+2:]  # 移除已处理的图像数据部分
  38.         else:
  39.             print("No data received!")
  40. except requests.exceptions.RequestException as e:
  41.     print(f"Error: {e}")
  42. cv2.destroyAllWindows()
复制代码
可以看到电脑上弹出两个对话框,openCV库正在对K10捕获的图像进行边缘检测。
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图8






3.本地运行Yolo V5

电脑本地安装yolo库:
Mind+切换到Python模式->代码->库管理行空板K10网络摄像头——实现openCV/yoloV5视觉算法图10
在PIP模式下分别输入并运行
- numpy
- yolov5
安装两个依赖库,yolo V5安装耗时较久。
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图11

在电脑中任意位置新建一个python文件并打开,文件名任意但是需要以.py结尾并且将文末网盘中的.pt模型放置在python文件的同级目录下。
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图12

运行下列Python代码
  1. import cv2
  2. import torch
  3. import time
  4. import requests
  5. import numpy as np
  6. from yolov5 import YOLOv5
  7. url = 'http://192.168.9.181'  # ESP32-CAM的IP地址
  8. # 加载YOLOv5模型
  9. model_path = "yolov5s.pt"  # 模型路径
  10. device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
  11. model = YOLOv5(model_path, device=device)
  12. cv2.namedWindow("YOLOv5 Detection", cv2.WINDOW_AUTOSIZE)  # 创建窗口
  13. # 启动HTTP请求,获取图像流
  14. try:
  15.     response = requests.get(url, stream=True, timeout=10)
  16.     print("Connected to stream")
  17.     img_data = b''  # 存储接收到的图像数据
  18.     while True:
  19.         # **1. 读取完整 JPEG 数据**
  20.         while True:
  21.             chunk = response.raw.read(1024)  # 直接读取数据
  22.             if not chunk:
  23.                 break  # 连接断开
  24.             img_data += chunk  # 累加数据
  25.             start_idx = img_data.find(b'\xff\xd8')  # JPEG 开头
  26.             end_idx = img_data.find(b'\xff\xd9')    # JPEG 结尾
  27.             if start_idx != -1 and end_idx != -1:
  28.                 jpg_data = img_data[start_idx:end_idx + 2]  # 提取完整 JPEG
  29.                 img_data = img_data[end_idx + 2:]  # 删除已处理部分
  30.                 break  # 退出读取循环
  31.         # **2. 解码 JPEG**
  32.         img_np = np.frombuffer(jpg_data, dtype=np.uint8)
  33.         frame = cv2.imdecode(img_np, cv2.IMREAD_COLOR)
  34.         if frame is None:
  35.             continue  # 跳过损坏帧
  36.         # **3. YOLOv5 目标检测**
  37.         start_time = time.time()
  38.         results = model.predict(frame, size=640)  # 进行检测
  39.         annotated_frame = results.render()[0].copy()  # 解除只读限制
  40.         # **4. 计算 FPS**
  41.         processing_time = time.time() - start_time
  42.         fps = 1 / processing_time if processing_time > 0 else 0
  43.         # **5. 显示检测结果**
  44.         cv2.putText(annotated_frame, f"FPS: {fps:.2f}", (10, 30),
  45.                     cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
  46.         cv2.imshow("YOLOv5 Detection", annotated_frame)
  47.         print(f"Processed frame in {processing_time:.4f} seconds, FPS: {fps:.2f}")
  48.         # 按 'q' 退出
  49.         if cv2.waitKey(1) & 0xFF == ord('q'):
  50.             break
  51. except requests.exceptions.RequestException as e:
  52.     print(f"Error: {e}")
  53. cv2.destroyAllWindows(
复制代码


可以看到电脑上弹出一个对话框,yoloV5正在对K10捕获的图像进行识别。
行空板K10网络摄像头——实现openCV/yoloV5视觉算法图9

Yolo V5模型:链接: https://pan.baidu.com/s/1d09IYfpdk-fP2GE8KIBngg?pwd=bvsx 提取码: bvsx





hnyzcj  版主

发表于 昨天 18:46

楼主头像很酷
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail