ESP32-CAM to wszechstronny, tani mikrokontroler z wbudowanym aparatem, zdolnym do przechwytywania obrazów i przesyłania strumieniowego wideo. W połączeniu z potężnymi bibliotekami przetwarzania obrazu Pythona możesz zaimplementować wykrywanie obiektów dla różnych aplikacji, takich jak nadzór, automatyzacja domowa i robotyka. Ten samouczek poprowadzi Cię przez użycie ESP32-CAM z Pythonem do wykrywania obiektów.
Czego będziesz potrzebować
- Moduł ESP32-CAM
- Programista FTDI (Adapter USB-Serial)
- Druty chleba i skoczków
- Zainstalowany Python na komputerze (wersja 3.6 lub nowsza)
- Biblioteki: OpenCV, Numpy i żądania
- Wyszkolony model (np. Yolov5, Tensorflow Lite)
Krok 1: Konfigurowanie ESP32-CAM
1. Flash the ESP32-CAM za pomocą CamerAWESServer
-
Podłącz ESP32-CAM z programistą FTDI:
- GND do GND
- 5V do VCC
- U0T do Rx
- U0R do TX
- IO0 do GND (dla trybu flashowania)
-
Otwórz Arduino IDE i zainstaluj pakiet płyty ESP32:
- Idź do Plik> Preferencje i dodaj adres URL:
https://dl.espressif.com/dl/package_esp32_index.json
- Idź do Narzędzia> Board> Menedżer tablic, Wyszukaj ESP32 i zainstaluj pakiet.
- Idź do Plik> Preferencje i dodaj adres URL:
-
Załaduj przykład CamerAWebServer:
- Idź do Plik> Przykłady> ESP32> Camera> CamerAWebServer.
- Zaktualizować
ssid
Ipassword
Zmienne z twoimi poświadczeniami Wi-Fi:const char* ssid = "Your_SSID"; const char* password = "Your_PASSWORD";
- Wybierać AI-Thinker ESP32-CAM pod Narzędzia> Płyta.
-
Prześlij kod do ESP32-CAM. Odłącz IO0 od GND i naciśnij przycisk resetowania.
2. Dostęp do strumienia wideo ESP32-CAM
- Otwórz monitor szeregowy i ustaw wskaźnik BAUD
115200
. - Znajdź adres IP ESP32-CAM w wyjściu Monitora szeregowego (np.
http://192.168.1.100
). - Otwórz adres IP w przeglądarce, aby zweryfikować transmisję na żywo.
Krok 2: Konfigurowanie środowiska Pythona
1. Zainstaluj wymagane biblioteki
Zainstaluj niezbędne biblioteki Python za pomocą PIP:
pip install opencv-python numpy requests
2. Sprawdź instalację OpenCV
Uruchom następujący kod, aby upewnić się, że OpenCV jest zainstalowany:
import cv2
print(cv2.__version__)
Krok 3: przechwytywanie strumienia wideo
Użyj Pythona, aby przechwytywać ramki ze strumienia wideo ESP32-CAM.
Przykładowy kod: przechwytywanie ramek
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()
Krok 4: Dodanie wykrywania obiektów
Zintegruj wykrywanie obiektów z przechwyconym strumieniem wideo za pomocą modelu wstępnie wyszkolonego, takiego jak Yolov5.
1. Pobierz wstępnie wyszkolony model
Możesz użyć wstępnie wyszkolonego modelu YOLOV5:
- Pobierz go z Repozytorium Yolov5 Github.
2. Przykładowy kod: Wykrywanie obiektu za pomocą 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()
Krok 5: Ulepszanie wykrywania obiektów
- Modele niestandardowe: Przechodź własny model YOLOV5 dla określonych obiektów za pomocą platform takich jak Roboflow lub Google Colab.
- Przetwarzanie krawędzi: Wdrażaj lekkie modele, takie jak TensorFlow Lite do przetwarzania na urządzeniu.
- Integracja: Wyślij wyniki wykrywania do serwera lub czynności wyzwalają w systemach IoT.
Zastosowania wykrywania obiektów ESP32-CAM
- Systemy bezpieczeństwa i nadzoru domu
- Monitorowanie i śledzenie dzikiej przyrody
- Automatyzacja fabryki i kontrola jakości
- Projekty interaktywne robotyki
- Inteligentny dzwonek z rozpoznawaniem twarzy
Rozwiązywanie problemów
- Opóźnienie strumienia: Zmniejsz rozdzielczość lub szybkość klatek na sekundę dla gładszego przesyłania strumieniowego.
- Problemy z połączeniem: Upewnij się, że ESP32-CAM i komputer są w tej samej sieci.
- Dokładność modelu: Dostosuj wstępnie wyszkolony model, aby uzyskać lepsze wyniki w zestawie danych.
Wniosek
Połączenie ESP32-CAM z Pythonem otwiera potężne możliwości wykrywania obiektów i przetwarzania wideo w czasie rzeczywistym. Postępując zgodnie z tym przewodnikiem, możesz zintegrować wykrywanie obiektów z projektami dla inteligentnych aplikacji. Eksperymentuj z różnymi modelami i optymalizacjami, aby stworzyć zaawansowane i wydajne systemy!