ตรวจจับวัตถุด้วย esp32-cam

Detecting Objects with the ESP32-CAM

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


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

  1. โมดูล ESP32-CAM
  2. โปรแกรมเมอร์ FTDI (อะแดปเตอร์ USB-to-Serial)
  3. สายจัมเปอร์
  4. กระดานข่าว (ไม่บังคับ)
  5. คอมพิวเตอร์ที่ติดตั้ง Arduino IDE
  6. Edge Impulse หรือ Tensorflow Lite สำหรับแบบจำลองการตรวจจับวัตถุ

ขั้นตอนที่ 1: การตั้งค่า Arduino IDE

1. ติดตั้งแพ็คเกจบอร์ด ESP32

  1. เปิด Arduino IDE

  2. ไป ไฟล์ > การตั้งค่า.

  3. ในฟิลด์ "URL Manager Manager เพิ่มเติม" เพิ่ม:

    https://dl.espressif.com/dl/package_esp32_index.json
    
  4. คลิก ตกลง.

  5. ไป เครื่องมือ > กระดาน > ผู้จัดการบอร์ด.

  6. ค้นหา "esp32" และติดตั้งแพ็คเกจโดยระบบ Espressif

2. ติดตั้งไลบรารีที่ต้องการ

  • ติดตั้งไลบรารี "ESP32 Camera"
  • สำหรับรุ่นตรวจจับวัตถุให้ติดตั้ง "TensorFlow Lite Micro" (หรือไลบรารีที่คล้ายกัน)

ขั้นตอนที่ 2: เดินสาย ESP32-CAM

pin esp32-cam พินโปรแกรมเมอร์ ftdi
gnd gnd
5V VCC (5V)
U0R TX
u0t RX
gnd GND (IO0 ถึง GND สำหรับการกะพริบ)

สำคัญ: เชื่อมต่อ IO0 PIN กับ GND เพื่อนำ ESP32-CAM เข้าสู่โหมดแฟลช


ขั้นตอนที่ 3: การอัปโหลดภาพร่างการตรวจจับวัตถุพื้นฐาน

1. เลือกบอร์ดและพอร์ต

  1. ไป เครื่องมือ > กระดาน และเลือก Ai-Thinker ESP32-CAM.
  2. ภายใต้ เครื่องมือเลือกที่ถูกต้อง พอร์ต com สำหรับโปรแกรมเมอร์ FTDI ของคุณ

2. การเตรียมรหัส

ใช้ตัวอย่างพื้นฐานในการโหลดแบบจำลองการตรวจจับวัตถุที่ผ่านการฝึกอบรมมาก่อน (เช่นโมเดล TensorFlow Lite) ด้านล่างนี้เป็นตัวอย่างตัวอย่างเพื่อรวมการตรวจจับวัตถุ:

#include <esp_camera.h>
#include <TensorFlowLite_ESP32.h>

// Replace with your specific model and labels
#include "model.h"
#include "labels.h"

void setup() {
  Serial.begin(115200);

  // Initialize the camera
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;

  if (!esp_camera_init(&config)) {
    Serial.println("Camera initialized successfully!");
  } else {
    Serial.println("Camera initialization failed!");
    while (1);
  }

  // Load the TensorFlow Lite model
  TfLiteStatus model_status = tflite::InitModel(model);
  if (model_status != kTfLiteOk) {
    Serial.println("Failed to initialize the model");
    while (1);
  }
}

void loop() {
  // Capture a frame
  camera_fb_t *frame = esp_camera_fb_get();
  if (!frame) {
    Serial.println("Camera capture failed");
    return;
  }

  // Run object detection
  tflite::RunInference(frame->buf, frame->len);

  // Display detected objects
  for (int i = 0; i < NUM_CLASSES; i++) {
    float confidence = tflite::GetConfidence(i);
    if (confidence > 0.5) {
      Serial.print("Detected: ");
      Serial.print(labels[i]);
      Serial.print(" with confidence: ");
      Serial.println(confidence);
    }
  }

  esp_camera_fb_return(frame); // Free the frame buffer
  delay(200);
}

3. อัปโหลดรหัส

  1. กด รีเซ็ต ปุ่มบน ESP32-CAM ในขณะที่ IO0 เชื่อมต่อกับ GND
  2. คลิก อัพโหลด ใน Arduino IDE
  3. เมื่อการอัปโหลดเสร็จสมบูรณ์แล้วให้ถอด IO0 ออกจาก GND แล้วกด รีเซ็ต ปุ่มอีกครั้ง

ขั้นตอนที่ 4: การเข้าถึงผลการตรวจจับวัตถุ

  1. เปิดมอนิเตอร์อนุกรม (เครื่องมือ > จอภาพอนุกรม) และตั้งค่าอัตราการรับส่งข้อมูลเป็น 115200.
  2. ดูวัตถุที่ตรวจพบและคะแนนความมั่นใจในจอภาพอนุกรม
  3. คุณสามารถขยายสิ่งนี้ได้โดยการแสดงผลลัพธ์ในเว็บอินเตอร์เฟสโดยใช้ HTML หรือรวมเข้ากับแพลตฟอร์ม IoT เช่น MQTT

ขั้นตอนที่ 5: เพิ่มการตรวจจับวัตถุ

  • การเพิ่มประสิทธิภาพแบบจำลอง: ใช้ Edge Impulse หรือ TensorFlow Lite เพื่อฝึกอบรมโมเดลที่กำหนดเองที่ปรับให้เหมาะสมสำหรับ ESP32-CAM
  • เว็บอินเตอร์เฟส: ปรับปรุงโครงการโดยการแสดงวัตถุที่ตรวจพบโดยตรงในส่วนต่อประสานเบราว์เซอร์
  • การรวม IoT: ส่งผลการตรวจจับไปยังบริการคลาวด์สำหรับการประมวลผลหรือระบบแจ้งเตือนเพิ่มเติม

การแก้ไขปัญหา

  • รุ่นใหญ่เกินไป: ตรวจสอบให้แน่ใจว่าขนาดของรุ่นพอดีภายในหน่วยความจำของ ESP32-CAM
  • ไม่ตรวจพบกล้อง: ตรวจสอบการเดินสายและตรวจสอบให้แน่ใจว่ากล้องเชื่อมต่ออย่างปลอดภัย
  • ความแม่นยำต่ำ: ฝึกอบรมหรือปรับแต่งโมเดลด้วยข้อมูลที่เกี่ยวข้องมากขึ้น

แอปพลิเคชันของการตรวจจับวัตถุด้วย esp32-cam

  1. กล้องรักษาความปลอดภัยพร้อมการตรวจจับการเคลื่อนไหวหรือวัตถุ
  2. ระบบอัตโนมัติในบ้านอัจฉริยะ (เช่นการตรวจจับการส่งมอบหรือสัตว์เลี้ยง)
  3. ระบบตรวจสอบและนับ
  4. การตรวจสอบและวิจัยสัตว์ป่า

บทสรุป

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

แสดงความคิดเห็น

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.