ESP32-CAM เป็นไมโครคอนโทรลเลอร์ที่มีราคาต่ำและมีราคาต่ำพร้อมกล้องในตัวสามารถจับภาพและสตรีมวิดีโอได้ เมื่อรวมกับไลบรารีการประมวลผลภาพที่ทรงพลังของ Python คุณสามารถใช้การตรวจจับวัตถุสำหรับแอพพลิเคชั่นที่หลากหลายเช่นการเฝ้าระวังระบบอัตโนมัติในบ้านและหุ่นยนต์ บทช่วยสอนนี้จะแนะนำคุณผ่านการใช้ ESP32-CAM กับ Python เพื่อทำการตรวจจับวัตถุ
สิ่งที่คุณต้องการ
- โมดูล ESP32-CAM
- โปรแกรมเมอร์ FTDI (อะแดปเตอร์ USB-to-Serial)
- เครื่องหั่นขนมปังและสายจัมเปอร์
- ติดตั้ง Python บนคอมพิวเตอร์ของคุณ (เวอร์ชัน 3.6 หรือใหม่กว่า)
- ห้องสมุด: OpenCv, Numpy และคำขอ
- รูปแบบที่ผ่านการฝึกอบรม (เช่น yolov5, tensorflow lite)
ขั้นตอนที่ 1: การตั้งค่า esp32-cam
1. แฟลช esp32-cam พร้อม camerawebserver
-
เชื่อมต่อ 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 ตัดการเชื่อมต่อ IO0 จาก GND แล้วกดปุ่มรีเซ็ต
2. เข้าถึงสตรีมวิดีโอ esp32-cam
- เปิดมอนิเตอร์อนุกรมและตั้งค่าอัตราการรับส่งข้อมูลเป็น
115200
. - ค้นหาที่อยู่ IP ของ ESP32-CAM ในเอาท์พุทการตรวจสอบแบบอนุกรม (เช่น
http://192.168.1.100
). - เปิดที่อยู่ IP ในเบราว์เซอร์เพื่อตรวจสอบสตรีมสด
ขั้นตอนที่ 2: การตั้งค่าสภาพแวดล้อม Python
1. ติดตั้งไลบรารีที่ต้องการ
ติดตั้งไลบรารี Python ที่จำเป็นโดยใช้ PIP:
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 ที่ผ่านการฝึกอบรมมาก่อน:
- ดาวน์โหลดจาก พื้นที่เก็บข้อมูล YOLOV5 GitHub.
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: เพิ่มการตรวจจับวัตถุ
- โมเดลที่กำหนดเอง: ฝึกอบรมโมเดล YOLOV5 ของคุณเองสำหรับวัตถุเฉพาะโดยใช้แพลตฟอร์มเช่น Roboflow หรือ Google Colab
- การประมวลผลขอบ: ปรับใช้รุ่นที่มีน้ำหนักเบาเช่น TensorFlow Lite สำหรับการประมวลผลแบบออนอุปกรณ์
- การรวม: ส่งผลการตรวจจับไปยังเซิร์ฟเวอร์หรือการกระทำทริกเกอร์ในระบบ IoT
แอปพลิเคชันของการตรวจจับวัตถุ ESP32-CAM
- ระบบรักษาความปลอดภัยและการเฝ้าระวังที่บ้าน
- การตรวจสอบและติดตามสัตว์ป่า
- ระบบอัตโนมัติจากโรงงานและการควบคุมคุณภาพ
- โครงการหุ่นยนต์แบบโต้ตอบ
- ออดที่ชาญฉลาดพร้อมการจดจำใบหน้า
การแก้ไขปัญหา
- แฝงสตรีม: ลดความละเอียดหรืออัตราเฟรมสำหรับการสตรีมที่ราบรื่นขึ้น
- ปัญหาการเชื่อมต่อ: ตรวจสอบให้แน่ใจว่า ESP32-CAM และคอมพิวเตอร์ของคุณอยู่ในเครือข่ายเดียวกัน
- ความแม่นยำของโมเดล: ปรับแต่งโมเดลที่ผ่านการฝึกอบรมมาล่วงหน้าเพื่อผลลัพธ์ที่ดีขึ้นในชุดข้อมูลของคุณ
บทสรุป
การรวม ESP32-CAM เข้ากับ Python เปิดโอกาสที่มีประสิทธิภาพสำหรับการตรวจจับวัตถุและการประมวลผลวิดีโอแบบเรียลไทม์ โดยทำตามคำแนะนำนี้คุณสามารถรวมการตรวจจับวัตถุเข้ากับโครงการของคุณสำหรับแอพพลิเคชั่นอัจฉริยะ ทดลองกับโมเดลและการเพิ่มประสิทธิภาพที่แตกต่างกันเพื่อสร้างระบบขั้นสูงและมีประสิทธิภาพ!