Pagtuklas ng mga bagay na may ESP32-CAM at Python

Detecting Objects with the ESP32-CAM and Python

Ang ESP32-CAM ay isang maraming nalalaman, microcontroller na may microcontroller na may built-in na camera, na may kakayahang makunan ng mga imahe at streaming video. Kapag sinamahan ng malakas na aklatan ng pagproseso ng imahe ng Python, maaari mong ipatupad ang pagtuklas ng object para sa iba't ibang mga aplikasyon tulad ng pagsubaybay, automation ng bahay, at mga robotics. Ang tutorial na ito ay gagabay sa iyo sa pamamagitan ng paggamit ng ESP32-cam kasama ang Python upang maisagawa ang pagtuklas ng object.


Ano ang kakailanganin mo

  1. Module ng ESP32-CAM
  2. FTDI programmer (USB-to-serial adapter)
  3. Mga wire ng tinapay at jumper
  4. Naka -install ang Python sa iyong computer (bersyon 3.6 o mas bago)
  5. Mga Aklatan: Opencv, Numpy, at mga kahilingan
  6. Isang sinanay na modelo (hal., Yolov5, Tensorflow Lite)

Hakbang 1: Pag-set up ng ESP32-CAM

1. I-flash ang ESP32-cam na may cameraweberver

  1. Ikonekta ang ESP32-CAM sa iyong FTDI programmer:

    • Gnd sa gnd
    • 5V sa VCC
    • U0t sa rx
    • U0R sa TX
    • Io0 kay Gnd (para sa flashing mode)
  2. Buksan ang Arduino IDE at i -install ang ESP32 Board Package:

    • Pumunta sa File> Mga Kagustuhan At idagdag ang URL:
      https://dl.espressif.com/dl/package_esp32_index.json
      
    • Pumunta sa Mga tool> Lupon> Boards Manager, Maghanap para sa ESP32, at i -install ang package.
  3. I -load ang halimbawa ng cameraweberver:

    • Pumunta sa File> Mga Halimbawa> ESP32> Camera> CamerawebServer.
    • I -update ang ssid at password Mga variable sa iyong mga kredensyal ng Wi-Fi:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • Piliin AI-Thinker ESP32-CAM sa ilalim ng Mga tool> Lupon.
  4. I-upload ang code sa ESP32-CAM. Idiskonekta ang IO0 mula sa GND at pindutin ang pindutan ng pag -reset.

2. I-access ang stream ng video ng ESP32-cam

  1. Buksan ang serial monitor at itakda ang rate ng baud sa 115200.
  2. Hanapin ang IP address ng ESP32-cam sa serial monitor output (hal., http://192.168.1.100).
  3. Buksan ang IP address sa isang browser upang mapatunayan ang live stream.

Hakbang 2: Pag -set up ng kapaligiran ng Python

1. I -install ang mga kinakailangang aklatan

I -install ang kinakailangang mga aklatan ng Python gamit ang PIP:

pip install opencv-python numpy requests

2. Pag -verify ng pag -install ng OpenCV

Patakbuhin ang sumusunod na code upang matiyak na naka -install ang OPENCV:

import cv2
print(cv2.__version__)

Hakbang 3: Pagkuha ng stream ng video

Gumamit ng Python upang makuha ang mga frame mula sa stream ng video ng ESP32-cam.

Halimbawa ng code: Pagkuha ng mga frame

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()

Hakbang 4: Pagdaragdag ng pagtuklas ng object

Isama ang pagtuklas ng object sa nakunan na stream ng video gamit ang isang pre-sanay na modelo, tulad ng Yolov5.

1. Mag-download ng isang pre-sanay na modelo

Maaari kang gumamit ng isang pre-sinanay na modelo ng Yolov5:

2. Halimbawa Code: Object Detection na may 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()

Hakbang 5: Pagpapahusay ng pagtuklas ng object

  • Mga pasadyang modelo: Sanayin ang iyong sariling Yolov5 na modelo para sa mga tiyak na bagay gamit ang mga platform tulad ng Roboflow o Google Colab.
  • Pagproseso ng Edge: Mag-deploy ng mga magaan na modelo tulad ng TensorFlow Lite para sa pagproseso ng on-device.
  • Pagsasama: Magpadala ng mga resulta ng pagtuklas sa isang server o mag -trigger ng mga aksyon sa mga system ng IoT.

Mga aplikasyon ng ESP32-CAM object detection

  1. Mga Seguridad sa Seguridad at Surveillance ng Bahay
  2. Pagsubaybay at pagsubaybay sa wildlife
  3. Factory automation at kalidad control
  4. Mga interactive na proyekto ng robotics
  5. Smart doorbell na may pagkilala sa facial

Pag -aayos

  • Stream latency: Bawasan ang resolusyon o rate ng frame para sa mas maayos na streaming.
  • Mga Isyu sa Koneksyon: Tiyakin na ang ESP32-cam at ang iyong computer ay nasa parehong network.
  • Katumpakan ng modelo: Fine-tune ang pre-sanay na modelo para sa mas mahusay na mga resulta sa iyong dataset.

Konklusyon

Ang pagsasama-sama ng ESP32-cam kay Python ay nagbubukas ng malakas na posibilidad para sa pagtuklas ng object at pagproseso ng real-time na video. Sa pamamagitan ng pagsunod sa gabay na ito, maaari mong isama ang pagtuklas ng object sa iyong mga proyekto para sa mga matalinong aplikasyon. Eksperimento sa iba't ibang mga modelo at pag -optimize upang lumikha ng mga advanced at mahusay na mga sistema!

Mag -iwan ng komento

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.