การตรวจจับวัตถุด้วย esp32-cam และ python

Detecting Objects with the ESP32-CAM and Python

ESP32-CAM เป็นไมโครคอนโทรลเลอร์ที่มีราคาต่ำและมีราคาต่ำพร้อมกล้องในตัวสามารถจับภาพและสตรีมวิดีโอได้ เมื่อรวมกับไลบรารีการประมวลผลภาพที่ทรงพลังของ Python คุณสามารถใช้การตรวจจับวัตถุสำหรับแอพพลิเคชั่นที่หลากหลายเช่นการเฝ้าระวังระบบอัตโนมัติในบ้านและหุ่นยนต์ บทช่วยสอนนี้จะแนะนำคุณผ่านการใช้ ESP32-CAM กับ Python เพื่อทำการตรวจจับวัตถุ


สิ่งที่คุณต้องการ

  1. โมดูล ESP32-CAM
  2. โปรแกรมเมอร์ FTDI (อะแดปเตอร์ USB-to-Serial)
  3. เครื่องหั่นขนมปังและสายจัมเปอร์
  4. ติดตั้ง Python บนคอมพิวเตอร์ของคุณ (เวอร์ชัน 3.6 หรือใหม่กว่า)
  5. ห้องสมุด: OpenCv, Numpy และคำขอ
  6. รูปแบบที่ผ่านการฝึกอบรม (เช่น yolov5, tensorflow lite)

ขั้นตอนที่ 1: การตั้งค่า esp32-cam

1. แฟลช esp32-cam พร้อม camerawebserver

  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.
    • อัปเดต ssid และ password ตัวแปรที่มีข้อมูลรับรอง Wi-Fi ของคุณ:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • เลือก Ai-Thinker ESP32-CAM ภายใต้ เครื่องมือ> บอร์ด.
  4. อัปโหลดรหัสไปยัง ESP32-CAM ตัดการเชื่อมต่อ IO0 จาก GND แล้วกดปุ่มรีเซ็ต

2. เข้าถึงสตรีมวิดีโอ esp32-cam

  1. เปิดมอนิเตอร์อนุกรมและตั้งค่าอัตราการรับส่งข้อมูลเป็น 115200.
  2. ค้นหาที่อยู่ IP ของ ESP32-CAM ในเอาท์พุทการตรวจสอบแบบอนุกรม (เช่น http://192.168.1.100).
  3. เปิดที่อยู่ 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 ที่ผ่านการฝึกอบรมมาก่อน:

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

  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.