สร้างระบบประตูอัจฉริยะด้วย AI ตรวจจับใบหน้าและ IoT บน Raspberry Pi 4

Smart Door Guardian Project

สวัสดีครับสายเมกเกอร์ทุกคน! วันนี้เราจะมาทำโปรเจกต์สุดล้ำที่จะเปลี่ยนประตูบ้านธรรมดาให้กลายเป็น "ยามเฝ้าประตูอัจฉริยะ" (Smart Door Guardian) กันครับ โปรเจกต์นี้เป็นการนำเทคโนโลยี Computer Vision มาผสมผสานกับ IoT เพื่อสร้างระบบรักษาความปลอดภัยที่สามารถตรวจจับใบหน้า จดจำผู้มาเยือน และโต้ตอบได้แบบเรียลไทม์

โดยระบบนี้ถูกขับเคลื่อนด้วยบอร์ด Raspberry Pi 4 Model B ทำงานร่วมกับโมดูลกล้อง และระบบแจ้งเตือนผ่านคลาวด์ ซึ่งมันสามารถทำงานได้ครบวงจรมากๆ ไม่ว่าจะเป็น:

  • จดจำใบหน้าของคนที่รู้จัก (คนในครอบครัว/เพื่อน)
  • ตรวจจับผู้มาเยือนที่ไม่รู้จักหน้า (คนแปลกหน้า)
  • ส่งภาพและข้อความแจ้งเตือนเข้ามือถือคุณทันที
  • สั่งงานให้ลำโพงบัซเซอร์ดัง หรือสั่งปลดล็อคประตูอัตโนมัติ

ฟีเจอร์เด่น (Key Features)

  • 🎥 ตรวจจับและรู้จำใบหน้าแบบเรียลไทม์ (Real-time face detection & recognition)
  • 📲 ส่งแจ้งเตือนพร้อมรูปภาพเข้าแอป Telegram ทันที
  • 🔐 สามารถต่อยอดสั่งเปิด-ปิดกลอนประตูได้ (Optional door lock control)
  • 📡 ดูสถานะทางไกลผ่าน Web Dashboard ได้
  • 🧠 ประมวลผล AI ภายในตัวเครื่อง (Local AI) ไม่ต้องพึ่งพา Cloud หนักๆ ทำให้ทำงานได้ไวและเป็นส่วนตัว

อุปกรณ์ที่ต้องใช้ (Hardware Components)

ของที่ต้องใช้มีแค่ 2 อย่างหลักๆ เท่านั้นครับ (แอบกระซิบว่า ถ้าใครกำลังมองหาบอร์ด, โมดูลกล้องแท้ หรืออยากได้เส้นพลาสติก 3D Print สวยๆ เอาไปปริ้นท์ทำเคสติดหน้าประตูบ้านให้ดูโปร สามารถเข้าไปช้อปอุปกรณ์คุณภาพเยี่ยมได้ที่ Globalbyte ได้เลยครับ!)

  • Raspberry Pi 4 Model B x1
  • Raspberry Pi Camera Module V2 x1
  • (ออปชันเสริม: ลำโพง Buzzer, โมดูล Relay สำหรับคุมกลอนประตู)

สถาปัตยกรรมระบบและการต่อวงจร (System Architecture & Circuit)

การไหลของข้อมูล (Data Flow) ในโปรเจกต์นี้เข้าใจง่ายมากครับ เริ่มจาก:
Camera → Face Detection → Face Recognition → ประเมินว่า Known (คนรู้จัก) หรือ Unknown (คนแปลกหน้า)

  • ถ้าเป็น Known: ระบบจะสั่งงาน Unlock Door (ปลดล็อคประตู)
  • ถ้าเป็น Unknown: ระบบจะสั่งงาน Send AlertTelegram Notification (ส่งแจ้งเตือนเข้ามือถือทันที)
System Architecture Diagram

ภาพด้านล่างคือผังการต่อวงจร (Circuit Connections) สำหรับต่อใช้งานร่วมกับ Buzzer (พิน 18) และ Relay (พิน 23) ครับ:

Circuit Connections

ซอฟต์แวร์และการติดตั้ง (Software Stack & Installation)

ระบบนี้เขียนด้วย Python 3 โดยใช้ไลบรารีหลักคือ OpenCV (จัดการภาพ), face_recognition (รู้จำใบหน้า), Telegram Bot API (ส่งแจ้งเตือน) และ Flask (ทำหน้า Dashboard)

เปิด Terminal บน Raspberry Pi ของคุณแล้วพิมพ์คำสั่งตั้งค่าตามนี้ได้เลยครับ:

Terminal (Step 1: Setup Raspberry Pi)
sudo apt update && sudo apt upgrade
sudo apt install python3-pip
Terminal (Step 2: Install dependencies)
pip3 install opencv-python face_recognition flask requests

การเตรียมข้อมูลและการทดสอบ (Dataset & Testing)

📸 การเตรียม Dataset:
ให้คุณสร้างโฟลเดอร์ชื่อ dataset/ แล้วสร้างโฟลเดอร์ย่อยเป็นชื่อคน (เช่น arpit/) จากนั้นเอารูปหน้าของคนๆ นั้น (img1.jpg, img2.jpg) ไปใส่ไว้ ระบบจะดึงรูปพวกนี้ไปเรียนรู้และจดจำใบหน้าครับ

ขั้นตอนการทดสอบ (Testing Procedure):

  1. รันสคริปต์ Python
  2. ลองเอาหน้าไปโชว์ที่หน้ากล้อง
  3. ตรวจสอบผลลัพธ์:
    • หน้าคนรู้จัก (Known) → Relay ทำงาน (จำลองการเปิดประตู)
    • หน้าคนแปลกหน้า (Unknown) → มีเสียง Buzzer ดัง และส่งข้อความเตือนเข้า Telegram

ผลลัพธ์ (Results):
ความแม่นยำในการรู้จำใบหน้าอยู่ที่ประมาณ ~90–95% (ขึ้นอยู่กับแสงสว่างหน้าประตูด้วยนะ) ส่วนความหน่วงในการส่งแจ้งเตือน (Latency) อยู่ที่ ~2–3 วินาทีเท่านั้น! และที่เจ๋งคือระบบทำงานแบบ Offline ได้เต็มรูปแบบ ยกเว้นแค่ตอนส่งแจ้งเตือนที่ต้องต่อเน็ตครับ

โค้ดฉบับเต็ม (Python Code)

ก๊อปปี้โค้ดด้านล่างนี้ไปใช้งานได้เลยครับ (อย่าลืมเปลี่ยน YOUR_BOT_TOKEN และ YOUR_CHAT_ID ให้เป็นของ Telegram Bot ของคุณเองด้วยนะครับ)

Python (Smart Door Guardian)
import cv2
import face_recognition
import os
import requests
import RPi.GPIO as GPIO

# GPIO Setup
GPIO.setmode(GPIO.BCM)
BUZZER = 18
RELAY = 23
GPIO.setup(BUZZER, GPIO.OUT)
GPIO.setup(RELAY, GPIO.OUT)

# Telegram config
TOKEN = "YOUR_BOT_TOKEN"
CHAT_ID = "YOUR_CHAT_ID"

def send_alert(image_path):
    url = f"https://api.telegram.org/bot{TOKEN}/sendPhoto"
    with open(image_path, 'rb') as img:
        requests.post(url, data={"chat_id": CHAT_ID}, files={"photo": img})

# Load known faces
known_encodings = []
known_names = []

dataset_path = "dataset"

for person in os.listdir(dataset_path):
    for img_name in os.listdir(f"{dataset_path}/{person}"):
        img = face_recognition.load_image_file(f"{dataset_path}/{person}/{img_name}")
        enc = face_recognition.face_encodings(img)[0]
        known_encodings.append(enc)
        known_names.append(person)

# Start camera
video = cv2.VideoCapture(0)

while True:
    ret, frame = video.read()
    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    faces = face_recognition.face_locations(rgb)
    encodings = face_recognition.face_encodings(rgb, faces)

    for (top, right, bottom, left), face_encoding in zip(faces, encodings):
        matches = face_recognition.compare_faces(known_encodings, face_encoding)
        name = "Unknown"

        if True in matches:
            name = known_names[matches.index(True)]
            GPIO.output(RELAY, GPIO.HIGH)
        else:
            GPIO.output(BUZZER, GPIO.HIGH)
            cv2.imwrite("alert.jpg", frame)
            send_alert("alert.jpg")

        cv2.rectangle(frame, (left, top), (right, bottom), (0,255,0), 2)
        cv2.putText(frame, name, (left, top-10),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,255,0), 2)

    cv2.imshow("Smart Guardian", frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

video.release()
cv2.destroyAllWindows()
GPIO.cleanup()

แนวทางการพัฒนาต่อยอด (Future Improvements)

โปรเจกต์นี้เป็นจุดเริ่มต้นที่ดีมากๆ ครับ ถ้าอยากให้มันแอดวานซ์ขึ้นไปอีก เราสามารถต่อยอดได้หลายทางเลย เช่น:

  • เพิ่มระบบสั่งงานด้วยเสียง Voice assistant (เช่น ผูกเข้ากับ Amazon Alexa)
  • ใช้ตัวเร่งประมวลผล Edge AI อย่าง Google Coral USB Accelerator เพื่อให้จับหน้าได้ไวขึ้น
  • ทำ Cloud logging dashboard เก็บประวัติคนเข้า-ออกบ้านแบบละเอียด
  • เชื่อมต่อเข้ากับ Mobile app แบบเต็มตัว

อ้างอิงข้อมูลจาก: Globalbyteshop Blog

ต้นฉบับโปรเจกต์โดย: arpit8 | Original Link | ดาวน์โหลดไฟล์ Code ต้นฉบับ

*คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากโปรเจกต์ต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา สามารถตรวจสอบข้อมูลเชิงลึกและอ้างอิงโค้ดทั้งหมดได้ที่ ต้นฉบับภาษาอังกฤษ

 

แท็ก


Blog posts

เข้าสู่ระบบ

ลืมรหัสผ่านใช่ไหม?

ยังไม่มีบัญชีใช่ไหม?
สร้างบัญชี