ESP32-CAM是一款具有内置相机的多功能,低成本的微控制器,能够捕获图像和流式视频。当与Python强大的图像处理库结合使用时,您可以针对各种应用程序(例如监视,家庭自动化和机器人技术)实现对象检测。本教程将指导您使用与Python的ESP32-CAM执行对象检测。
你需要什么
- ESP32-CAM模块
- FTDI程序员 (USB到Serial适配器)
- 面包板和跳线电线
- 安装了Python 在您的计算机上(版本3.6或更高版本)
- 图书馆: opencv,numpy和请求
- 训练有素的模型 (例如,Yolov5,Tensorflow Lite)
步骤1:设置ESP32-CAM
1。用camerawebserver闪烁ESP32-CAM
-
将ESP32-CAM连接到您的FTDI程序员:
- GND到GND
- 5V到VCC
- U0T到Rx
- U0R到TX
- IO0到GND (用于闪烁模式)
-
打开Arduino IDE并安装ESP32板包:
- 去 文件>首选项 并添加URL:
https://dl.espressif.com/dl/package_esp32_index.json
- 去 工具>董事会>董事会经理,搜索ESP32,然后安装软件包。
- 去 文件>首选项 并添加URL:
-
加载camerawebserver示例:
- 去 文件>示例> ESP32>相机> Camerawebserver.
- 更新
ssid
和password
带有Wi-Fi凭证的变量:const char* ssid = "Your_SSID"; const char* password = "Your_PASSWORD";
- 选择 AI-Thinker ESP32-CAM 在下面 工具>板.
-
将代码上传到ESP32-CAM。从GND断开IO0并按重置按钮。
2。访问ESP32-CAM视频流
- 打开串行监视器并将波特率设置为
115200
. - 在串行监视器输出中找到ESP32-CAM的IP地址(例如,
http://192.168.1.100
). - 在浏览器中打开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对象检测的应用
- 家庭安全和监视系统
- 野生动植物监测和跟踪
- 工厂自动化和质量控制
- 交互式机器人项目
- 智能门铃有面部识别
故障排除
- 流潜伏期: 降低流式传输的分辨率或帧速率。
- 连接问题: 确保ESP32-CAM和您的计算机在同一网络上。
- 模型准确性: 微调预训练的模型,以在数据集中更好地结果。
结论
将ESP32-CAM与Python相结合为对象检测和实时视频处理开辟了强大的可能性。通过遵循本指南,您可以将对象检测集成到智能应用程序的项目中。尝试不同的模型和优化,以创建高级和高效的系统!