<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: TT</title>
    <description>The latest articles on DEV Community by TT (@__e2a047).</description>
    <link>https://dev.to/__e2a047</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4129419%2Ff833e63d-325b-4cf0-899b-6356755991f9.png</url>
      <title>DEV Community: TT</title>
      <link>https://dev.to/__e2a047</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/__e2a047"/>
    <language>en</language>
    <item>
      <title>เซ็นเซอร์หมวกกันน็อค</title>
      <dc:creator>TT</dc:creator>
      <pubDate>Thu, 17 Sep 2026 09:14:59 +0000</pubDate>
      <link>https://dev.to/__e2a047/echnechrhmwkkannkh-26l3</link>
      <guid>https://dev.to/__e2a047/echnechrhmwkkannkh-26l3</guid>
      <description>&lt;p&gt;import cv2&lt;br&gt;
import time&lt;br&gt;
import requests&lt;br&gt;
from datetime import datetime&lt;br&gt;
from ultralytics import YOLO&lt;/p&gt;

&lt;h1&gt;
  
  
  ==========================================
&lt;/h1&gt;

&lt;h1&gt;
  
  
  1. ตั้งค่าระบบ (CONFIGURATION)
&lt;/h1&gt;

&lt;h1&gt;
  
  
  ==========================================
&lt;/h1&gt;

&lt;h1&gt;
  
  
  สัญญาณภาพ: ใส่ RTSP URL กล้องวงจรปิด หรือใส่เลข 0 สำหรับ Webcam
&lt;/h1&gt;

&lt;p&gt;CAMERA_SOURCE = "rtsp://admin:&lt;a href="mailto:123456@192.168.1.100"&gt;123456@192.168.1.100&lt;/a&gt;:554/stream1" &lt;/p&gt;

&lt;h1&gt;
  
  
  โหลดโมเดล YOLO (แนะนำไฟล์ .pt ที่ Train ตรวจจับหมวกกันน็อกโดยเฉพาะ)
&lt;/h1&gt;

&lt;p&gt;MODEL_PATH = "helmet_detection.pt"&lt;/p&gt;

&lt;h1&gt;
  
  
  LINE Notify Access Token (นำ Token จาก notify-bot.line.me มาใส่)
&lt;/h1&gt;

&lt;p&gt;LINE_TOKEN = "YOUR_LINE_NOTIFY_TOKEN_HERE"&lt;/p&gt;

&lt;h1&gt;
  
  
  ID ของคลาสที่ไม่สวมหมวกกันน็อก (อิงตาม Label ใน Dataset ของคุณ)
&lt;/h1&gt;

&lt;p&gt;NO_HELMET_CLASS_ID = 1  &lt;/p&gt;

&lt;h1&gt;
  
  
  ตั้งค่า Cooldown (วินาที) ไม่ให้ส่งแจ้งเตือนซ้ำซ้อนกันเกินไป
&lt;/h1&gt;

&lt;p&gt;ALERT_COOLDOWN = 5 &lt;/p&gt;

&lt;h1&gt;
  
  
  ==========================================
&lt;/h1&gt;

&lt;h1&gt;
  
  
  2. ฟังก์ชันระบบ
&lt;/h1&gt;

&lt;h1&gt;
  
  
  ==========================================
&lt;/h1&gt;

&lt;p&gt;def send_line_notify(message, image_path=None):&lt;br&gt;
    """ส่งข้อความและรูปภาพเข้า LINE Notify"""&lt;br&gt;
    url = "&lt;a href="https://notify-api.line.me/api/notify" rel="noopener noreferrer"&gt;https://notify-api.line.me/api/notify&lt;/a&gt;"&lt;br&gt;
    headers = {"Authorization": f"Bearer {LINE_TOKEN}"}&lt;br&gt;
    data = {"message": message}&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;files = None
if image_path:
    files = {"imageFile": open(image_path, "rb")}

try:
    response = requests.post(url, headers=headers, data=data, files=files, timeout=10)
    if response.status_code == 200:
        print("LINE Notify: ส่งข้อมูลสำเร็จ")
    else:
        print(f"LINE Notify Error: Code {response.status_code}")
except Exception as e:
    print(f"ไม่สามารถส่ง LINE Notify ได้: {e}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;def connect_camera(source):&lt;br&gt;
    """เชื่อมต่อกล้องวงจรปิดอัตโนมัติพร้อมระบบ Reconnect"""&lt;br&gt;
    while True:&lt;br&gt;
        print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] กำลังเชื่อมต่อกล้อง...")&lt;br&gt;
        cap = cv2.VideoCapture(source)&lt;br&gt;
        if cap.isOpened():&lt;br&gt;
            print("เชื่อมต่อกล้องวงจรปิดสำเร็จ!")&lt;br&gt;
            return cap&lt;br&gt;
        print("เชื่อมต่อไม่สำเร็จ จะลองใหม่ในอีก 5 วินาที...")&lt;br&gt;
        time.sleep(5)&lt;/p&gt;

&lt;p&gt;def trigger_hardware_relay():&lt;br&gt;
    """จำลองการส่งสัญญาณไปยังอุปกรณ์ภายนอก (เช่น สั่ง Arduino เปิดไซเรน หรือปิดไม้กั้น)"""&lt;br&gt;
    print("HARDWARE TRIGGER: ส่งสัญญาณแจ้งเตือนไปยังบอร์ดควบคุม (Siren/Buzzer ON)")&lt;/p&gt;

&lt;h1&gt;
  
  
  ==========================================
&lt;/h1&gt;

&lt;h1&gt;
  
  
  3. ลูปการทำงานหลัก (MAIN LOOP)
&lt;/h1&gt;

&lt;h1&gt;
  
  
  ==========================================
&lt;/h1&gt;

&lt;p&gt;model = YOLO(MODEL_PATH)&lt;br&gt;
cap = connect_camera(CAMERA_SOURCE)&lt;br&gt;
last_alert_time = 0&lt;/p&gt;

&lt;p&gt;print("=== ระบบตรวจจับหมวกกันน็อกอัตโนมัติพร้อมทำงาน ===")&lt;/p&gt;

&lt;p&gt;while True:&lt;br&gt;
    try:&lt;br&gt;
        ret, frame = cap.read()&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    # กรณีสัญญาณกล้องดับ/หลุด ให้ทำการ Reconnect
    if not ret:
        print("สัญญาณกล้องขาดหาย กำลังเชื่อมต่อใหม่...")
        cap.release()
        cap = connect_camera(CAMERA_SOURCE)
        continue

    # ส่งภาพเข้าโมเดลตรวจจับ
    results = model(frame, conf=0.5, verbose=False)
    boxes = results[0].boxes

    has_no_helmet = False

    # วนลูปเช็กว่าวัตถุที่เจอเข้าข่าย 'ไม่ใส่หมวกกันน็อก' หรือไม่
    if boxes is not None:
        for box in boxes:
            cls_id = int(box.cls[0])
            if cls_id == NO_HELMET_CLASS_ID:
                has_no_helmet = True
                break

    # Action เมื่อพบผู้ไม่สวมหมวกกันน็อก
    if has_no_helmet:
        current_time = time.time()

        # เช็ก Cooldown ก่อนส่งแจ้งเตือน
        if current_time - last_alert_time &amp;gt; ALERT_COOLDOWN:
            now_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            timestamp_file = datetime.now().strftime("%Y%m%d_%H%M%S")
            filename = f"no_helmet_{timestamp_file}.jpg"

            # วาด Bounding Box และเก็บบันทึกไฟล์ภาพ
            annotated_frame = results[0].plot()
            cv2.imwrite(filename, annotated_frame)
            print(f"\n⚠️ [{now_str}] ตรวจพบผู้ไม่สวมหมวกกันน็อก! บันทึกไฟล์: {filename}")

            # 1. สั่งงานฮาร์ดแวร์
            trigger_hardware_relay()

            # 2. ส่งภาพและข้อความแจ้งเตือนผ่าน LINE Notify
            alert_msg = f"\n[แจ้งเตือน AI]\nตรวจพบผู้ไม่สวมหมวกกันน็อก!\nเวลา: {now_str}"
            send_line_notify(alert_msg, filename)

            last_alert_time = current_time

except Exception as e:
    print(f"เกิดข้อผิดพลาดในระบบ: {e}")
    time.sleep(1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>machinelearning</category>
      <category>python</category>
    </item>
  </channel>
</rss>
