用ESP32-CAM和Python检测物体

Detecting Objects with the ESP32-CAM and Python

ESP32-CAM是一款具有内置相机的多功能,低成本的微控制器,能够捕获图像和流式视频。当与Python强大的图像处理库结合使用时,您可以针对各种应用程序(例如监视,家庭自动化和机器人技术)实现对象检测。本教程将指导您使用与Python的ESP32-CAM执行对象检测。


你需要什么

  1. ESP32-CAM模块
  2. FTDI程序员 (USB到Serial适配器)
  3. 面包板和跳线电线
  4. 安装了Python 在您的计算机上(版本3.6或更高版本)
  5. 图书馆: opencv,numpy和请求
  6. 训练有素的模型 (例如,Yolov5,Tensorflow Lite)

步骤1:设置ESP32-CAM

1。用camerawebserver闪烁ESP32-CAM

  1. 将ESP32-CAM连接到您的FTDI程序员:

    • GND到GND
    • 5V到VCC
    • U0T到Rx
    • U0R到TX
    • IO0到GND (用于闪烁模式)
  2. 打开Arduino IDE并安装ESP32板包:

    • 文件>首选项 并添加URL:
      https://dl.espressif.com/dl/package_esp32_index.json
      
    • 工具>董事会>董事会经理,搜索ESP32,然后安装软件包。
  3. 加载camerawebserver示例:

    • 文件>示例> ESP32>相机> Camerawebserver.
    • 更新 ssidpassword 带有Wi-Fi凭证的变量:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • 选择 AI-Thinker ESP32-CAM 在下面 工具>板.
  4. 将代码上传到ESP32-CAM。从GND断开IO0并按重置按钮。

2。访问ESP32-CAM视频流

  1. 打开串行监视器并将波特率设置为 115200.
  2. 在串行监视器输出中找到ESP32-CAM的IP地址(例如, http://192.168.1.100).
  3. 在浏览器中打开IP地址以验证实时流。

步骤2:设置Python环境

1。安装所需库

使用PIP安装必要的Python库:

pip install opencv-python numpy requests

2。验证OPENCV安装

运行以下代码以确保安装OpenCV:

import cv2
print(cv2.__version__)

步骤3:捕获视频流

使用Python从ESP32-CAM视频流中捕获帧。

示例代码:捕获帧

import cv2
import requests
import numpy as np

# ESP32-CAM URL
url = "http://192.168.1.100/capture"

while True:
    # Capture image from ESP32-CAM
    img_resp = requests.get(url)
    img_array = np.array(bytearray(img_resp.content), dtype=np.uint8)
    frame = cv2.imdecode(img_array, -1)

    # Display the frame
    cv2.imshow("ESP32-CAM", frame)

    # Exit on pressing 'q'
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

步骤4:添加对象检测

使用预训练的模型(例如Yolov5)将对象检测集成到捕获的视频流中。

1。下载预训练的模型

您可以使用预训练的Yolov5模型:

2。示例代码:用yolov5进行对象检测

import cv2
import requests
import numpy as np
import torch

# Load YOLOv5 model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

# ESP32-CAM URL
url = "http://192.168.1.100/capture"

while True:
    # Capture image from ESP32-CAM
    img_resp = requests.get(url)
    img_array = np.array(bytearray(img_resp.content), dtype=np.uint8)
    frame = cv2.imdecode(img_array, -1)

    # Perform object detection
    results = model(frame)
    detections = results.xyxy[0]  # Bounding boxes

    # Draw bounding boxes
    for *xyxy, conf, cls in detections:
        label = f"{model.names[int(cls)]} {conf:.2f}"
        cv2.rectangle(frame, (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3])), (255, 0, 0), 2)
        cv2.putText(frame, label, (int(xyxy[0]), int(xyxy[1]) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)

    # Display the frame
    cv2.imshow("ESP32-CAM Object Detection", frame)

    # Exit on pressing 'q'
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

步骤5:增强对象检测

  • 自定义模型: 使用Roboflow或Google Colab等平台训练您自己的Yolov5模型为特定对象进行训练。
  • 边缘处理: 部署轻巧的模型,例如Tensorflow Lite进行设备处理。
  • 一体化: 将检测结果发送到服务器或物联网系统中的触发操作。

ESP32-CAM对象检测的应用

  1. 家庭安全和监视系统
  2. 野生动植物监测和跟踪
  3. 工厂自动化和质量控制
  4. 交互式机器人项目
  5. 智能门铃有面部识别

故障排除

  • 流潜伏期: 降低流式传输的分辨率或帧速率。
  • 连接问题: 确保ESP32-CAM和您的计算机在同一网络上。
  • 模型准确性: 微调预训练的模型,以在数据集中更好地结果。

结论

将ESP32-CAM与Python相结合为对象检测和实时视频处理开辟了强大的可能性。通过遵循本指南,您可以将对象检测集成到智能应用程序的项目中。尝试不同的模型和优化,以创建高级和高效的系统!

发表评论

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.