การเริ่มต้นใช้งานและหน้าจอควบคุมหลัก (Live Dashboard)
คู่มือแนะนำการเข้าสู่ระบบ การตรวจสอบสถานะความปลอดภัย การใช้งานทุกปุ่มบนแถบเครื่องมือหลัก (Top Bar) การสลับและจัดเรียงตารางกล้องสด การควบคุมภาพระดับ 4K/1080p และการอ่านตัวชี้วัดสถานะระบบ
🔐 1.1 การเข้าสู่ระบบและความปลอดภัย (Login & Session)
ระบบ Sloth BPP 215 ใช้มาตรฐานความปลอดภัยระดับสูงสำหรับหน่วยงานความมั่นคง รองรับการเข้ารหัสข้อมูลและการควบคุมการเข้าถึงตามบทบาท (Role-Based Access Control: RBAC)
📥 ข้อมูลนำเข้า (Input)
ชื่อผู้ใช้ (Username) และรหัสผ่าน (Password) ผ่านหน้าเว็บ login.html
⚙️ กลไกประมวลผล (Process)
ตรวจสอบ Hash รหัสผ่านใน SQLite, ออก Session Cookie แบบ HttpOnly/SameSite พร้อมสิทธิ์ RBAC
📤 ผลลัพธ์ที่ได้ (Output)
นำทางเข้าสู่ index.html (Dashboard) พร้อมแสดงเมนูและกล้องตามระดับสิทธิ์ของผู้ใช้งาน
🛠️ ตารางรายละเอียดองค์ประกอบบนหน้า Login:
| องค์ประกอบ / ปุ่ม | ตำแหน่ง | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
| ช่อง "ชื่อผู้ใช้งาน" (Username) | กลางหน้าจอ | รับชื่อบัญชีผู้ใช้ เช่น admin, officer1, bpp215 |
ใช้เป็นตัวระบุเพื่อค้นหาเกลือ (Salt) และรหัสผ่านที่ถูกเข้ารหัสในฐานข้อมูล |
| ช่อง "รหัสผ่าน" (Password) | กลางหน้าจอ | รับรหัสผ่านของผู้ใช้ (ซ่อนตัวอักษรเป็นจุดกลม) | ถูกนำไป Hash ด้วยอัลกอริทึมความปลอดภัยสูงเพื่อเปรียบเทียบกับค่าในระบบ |
| เข้าสู่ระบบ | ใต้ฟอร์มกรอก | ส่งคำขอ POST ไปยัง /api/login |
หากถูกต้อง: เซฟคุกกี้ Session และเปิด Dashboard หากผิดพลาด: แสดงป้ายเตือนสีแดง "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง" |
| 📖 คู่มือการใช้งาน | ด้านล่างกล่องฟอร์ม | คลิกลิงก์เพื่อขอความช่วยเหลือ | เปิดหน้าต่างคู่มือการใช้งานระบบฉบับสมบูรณ์ (หน้านี้) ทันทีโดยไม่ต้องล็อกอิน |
🧭 1.2 แถบควบคุมหลักด้านบน (Top Bar Navigation)
แถบควบคุมด้านบนเป็นศูนย์บัญชาการหลักของระบบ รวมปุ่มคำสั่งเข้าสู่ทุกโมดูล การค้นหากล้องสดแบบทันที และการปรับแต่งสัญลักษณ์หน่วยงาน
🛠️ สารบบทุกปุ่มบนแถบ Top Bar:
| ปุ่มคำสั่ง / ไอคอน | คีย์ลัด / ฟังก์ชัน | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
ตราสัญลักษณ์หน่วยงาน (#mainLogo) |
คลิกที่รูปตรา | เปิด File Picker ให้อัปโหลดภาพตราสัญลักษณ์ประจำกองร้อย (.png / .jpg) | เปลี่ยนโลโก้บนระบบและบันทึกลง LocalStorage อัตโนมัติ |
ช่องค้นหากล้อง (#searchInput) |
พิมพ์ข้อความ | รับคำค้นหา เช่น "ประตู", "หน้าค่าย", "CH01", "สี่แยก" | กรองซ่อนช่องกล้องที่ไม่ตรงกับคำค้นทันทีแบบ Real-time |
จัดเรียง (#btnEditLayout) |
คลิกเปิดโหมด | เปิดโหมดสลับตำแหน่งกล้อง (Drag & Drop Mode) | ช่องกล้องจะขึ้นกรอบเส้นประสีม่วง สามารถคลิกลากย้ายสลับตำแหน่งช่องได้ตามต้องการ |
บันทึก (#btnLayoutSave) |
คลิกบันทึก | ส่งผังลำดับกล้องใหม่ไปยัง Profile API | บันทึกผังตำแหน่งกล้องลงฐานข้อมูลของผู้ใช้ เปิดเครื่องใหม่ยังคงตำแหน่งเดิม |
ยกเลิก (#btnLayoutCancel) |
คลิกยกเลิก | คืนค่าลำดับกล้องก่อนเริ่มจัดเรียง | ปิดโหมดจัดเรียงและสลับตำแหน่งกล้องกลับสู่ค่าเดิมทันที |
🔔 เหตุการณ์ (#btnEvents) |
คลิกเปิด/ปิด | สลับสถานะการแสดงผลแถบแจ้งเตือนด้านขวา (Events Rail) | เปิด/ซ่อนแถบแจ้งเตือนเหตุการณ์สด พร้อมตัวเลขนับเหตุการณ์ใหม่ (Badge) |
🔄 เชื่อมต่อใหม่ (#btnReconnect) |
คลิกกดซ้ำได้ | สั่งรีเซ็ต WebRTC PeerConnection และล้าง Video Buffer ทุกช่อง | เชื่อมต่อสตรีมภาพสดใหม่ทันที แก้ปัญหาภาพค้างจากสัญญาณเน็ตกระตุก |
🎬 คลังวิดีโอเหตุการณ์ (#btnEventMgr) |
คลิกเปิดหน้าต่าง | ดึงข้อมูลประวัติการตรวจจับจาก Database | เปิดหน้าต่างคลังเหตุการณ์ (Event Manager) เพื่อค้นหา ดูภาพนิ่ง และตัดคลิป |
⏱️ ดูย้อนหลัง (#btnPlayback) |
คลิกเปิดหน้าต่าง | เชื่อมต่อ Storage บันทึกวิดีโอต่อเนื่อง 24 ชั่วโมง | เปิดหน้าต่าง Playback แบบหลายจอ พร้อมแถบไทม์ไลน์สีม่วง |
🌐 โครงข่ายหน่วยงาน (#btnNodes) |
เฉพาะ Admin | อ่านค่าคอนฟิก Federation Mesh และ WireGuard | เปิดหน้าต่างเชื่อมต่อดึงภาพกล้องข้ามกองร้อย / ข้ามฐานปฏิบัติการ |
🎯 ทะเบียนเฝ้าระวัง (#btnWatchlist) |
คลิกเปิดหน้าต่าง | ดึงฐานข้อมูลรถเป้าหมายและบุคคลต้องสงสัย | เปิดหน้าต่าง Watchlist เพื่อเพิ่ม/แก้ไขป้ายทะเบียน และวิเคราะห์พฤติกรรม |
🤖 Sloth AI Assistant (#btnBotChat) |
คลิกเปิดหน้าต่าง | เปิดช่องทางสนทนาภาษาธรรมชาติกับ AI Assistant | เปิดหน้าต่างแชทเพื่อสั่งค้นหาคดี สอบถามทะเบียนรถ หรือสรุปเหตุการณ์ |
📊 วิเคราะห์สถิติ (#btnAnalytics) |
คลิกเปิดหน้าต่าง | ประมวลผลข้อมูลสถิติ Big Data ของกล้องทั้งหมด | เปิด Analytics Dashboard แสดง Heatmap แผนที่ความเสี่ยง และกราฟแนวโน้ม |
📂 คลังบันทึกจับกุม (#btnArrestVault) |
คลิกเปิดหน้าต่าง | ดึงแฟ้มข้อมูลผู้ต้องหาและบันทึกการจับกุม | เปิดหน้าต่าง Arrest Vault เพื่อเปิดดูเอกสารสำนวนคดีและข้อมูล ทร.14 |
🕸️ ผังเชื่อมโยง i2 (#btnI2Graph) |
คลิกเปิดหน้าต่าง | โหลดกราฟความสัมพันธ์บุคคล เส้นทางการเงิน และการโทร | เปิดหน้าต่าง Visual Link Analysis เทียบเท่าโปรแกรม IBM i2 บนเว็บ |
⚙️ ตั้งค่าระบบ (#btnSettings) |
เฉพาะ Admin | ดึงค่าคอนฟิก NVR, กล้อง, AI และการแจ้งเตือน | เปิดหน้าต่างการตั้งค่าหลักของระบบ NVR |
👤 ข้อมูลบัญชี (#btnUsers) |
คลิกเปิดหน้าต่าง | ตรวจสอบสิทธิ์ผู้ใช้ปัจจุบัน และประวัติ Audit Log | เปิดหน้าต่างเปลี่ยนรหัสผ่าน ดูสิทธิ์ และจัดการผู้ใช้ในระบบ |
⏻ ออกจากระบบ (#btnLogout) |
คลิกยืนยัน | ส่งคำขอยกเลิก Session Cookie ไปยังเซิร์ฟเวอร์ | ลบข้อมูลการเข้าสู่ระบบและกลับสู่หน้า login.html ทันที |
📺 1.3 ตารางแสดงภาพสดและการจัดเรียง (Live Camera Grid & Layout)
ระบบรองรับการแสดงภาพสดแบบปรับเปลี่ยนได้ตามขนาดหน้าจอ พร้อมปุ่มสลับตารางกล้องทันทีโดยไม่ต้องรีโหลดหน้าเว็บ
🛠️ ปุ่มเลือกรูปแบบตาราง (Layout Switcher):
| ปุ่มตาราง | ลักษณะการแสดงผล | คำแนะนำการใช้งานตามภารกิจ |
|---|---|---|
| 1×1 (จอเดี่ยว) | แสดงภาพกล้องเดียวขนาดใหญ่เต็มพื้นที่ | เหมาะสำหรับการเฝ้าระวังจุดวิกฤต หรือเมื่อเจ้าหน้าที่กำลังติดตามเป้าหมายเฉพาะจุด |
| 2×2 (4 ช่อง) | แบ่งตารางออกเป็น 4 ช่องเท่ากัน | เหมาะสำหรับหน้าจอมือถือ แท็บเล็ต หรือการเฝ้าระวังพื้นที่รอบอาคารหลัก 4 ทิศ |
| 3×3 (9 ช่อง) | แบ่งตารางออกเป็น 9 ช่อง | เป็นมุมมองมาตรฐานสำหรับศูนย์ควบคุม (Command Center) ความละเอียดเหมาะสมที่สุด |
| 4×4 (16 ช่อง) | แบ่งตารางออกเป็น 16 ช่อง | สำหรับหน้าจอขนาดใหญ่ (55"-75" Video Wall) เพื่อดูภาพรวมทุกกล้องในฐานปฏิบัติการ |
| Auto / Active | แสดงเฉพาะกล้องที่มีการเปิดใช้งานอยู่จริง | ตัดช่องว่างที่ไม่มีการต่อกล้องออกอัตโนมัติ เพื่อประหยัดพื้นที่และแบนด์วิดท์หน้าจอ |
ขั้นตอนการสลับตำแหน่งกล้อง (Reorder Workflow):
กดปุ่ม จัดเรียง บนแถบด้านบน ช่องกล้องทั้งหมดจะปรากฏเส้นประสีม่วงและไอคอนรูปมือ
คลิกลากช่องกล้อง (Drag & Drop):
คลิกเมาส์ค้างที่ช่องกล้องที่ต้องการย้าย แล้วลากไปวางทับช่องปลายทาง กล้องทั้งสองช่องจะสลับตำแหน่งกันทันที
บันทึกลำดับตำแหน่ง:
เมื่อจัดตำแหน่งพอใจแล้ว ให้กดปุ่ม บันทึก เพื่อบันทึกลำดับลงระบบ
🎛️ 1.4 ปุ่มควบคุมบนหน้าต่างกล้องแต่ละช่อง (Camera Tile Controls)
ในแต่ละช่องแสดงภาพกล้อง (Tile) จะมีแถบควบคุมและตัวชี้วัดสถานะการทำงานซ้อนอยู่บนภาพ เพื่อให้ผู้ปฏิบัติงานสามารถควบคุมกล้องเฉพาะจุดได้ทันที
| ปุ่ม / ตัวชี้วัด | ตำแหน่งบนจอ | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
| ชิปชื่อกล้อง (Channel Chip) | มุมซ้ายบน | แสดงรหัสช่องและชื่อภาษาไทย เช่น CH01 ประตูหน้าค่าย |
ช่วยให้ผู้ใช้งานระบุตำแหน่งที่ตั้งของกล้องได้อย่างชัดเจนและรวดเร็ว |
| จุดไฟสถานะการเชื่อมต่อ | ข้างชื่อกล้อง | ตรวจสอบสถานะ Heartbeat ของ WebRTC สตรีม |
🟢 Live สตรีมภาพสดไหลปกติ 🟡 Connecting กำลังเจรจา SDP/ICE สัญญาณ 🔴 Offline กล้องดับ ไฟฟ้าดับ หรือสายสัญญาณขาด |
| ปุ่มสลับ Main / Sub | มุมขวาบน | คลิกเพื่อสลับความละเอียดของสตรีมวิดีโอ |
Sub: 640×360 เพื่อประหยัดเน็ตเมื่อดูหลายจอพร้อมกัน Main: 1080p / 4K สตรีมความคมชัดสูงเพื่อดูรายละเอียดทะเบียนหรือใบหน้า |
| ปุ่มเปิด/ปิดเสียง (Audio) | แถบลอยมุมขวา | คลิกเพื่อเปิดฟังเสียงบรรยากาศจากไมค์ของกล้อง | ถอดรหัสสัญญาณเสียง AAC/PCMA มาเล่นผ่านลำโพงของคอมพิวเตอร์ |
| ปุ่มจับภาพนิ่ง (Snapshot) | แถบลอยมุมขวา | คลิกเพื่อดึงภาพความละเอียดเต็มเฟรมปัจจุบัน | ดาวน์โหลดไฟล์ภาพ JPEG คุณภาพสูงลงโฟลเดอร์ Downloads บนเครื่องทันที |
| ปุ่มขยายเต็มจอ (Expand) | แถบลอยมุมขวา | คลิกเพื่อเปิดภาพกล้องในโหมดขยายใหญ่ | เปิดหน้าต่าง Fullscreen Camera Viewer ขึ้นมาพร้อมฟังก์ชันอัดวิดีโอสด |
| กรอบ AI & ชิปแจ้งป้ายทะเบียน | บนภาพวิดีโอ | แสดงเมื่อระบบ AI YOLO11 หรือ LPR ตรวจพบเป้าหมาย | วาดกรอบสีตามประเภทวัตถุ (บุคคล=ฟ้า, ยานพาหนะ=เขียว, ทะเบียนเฝ้าระวัง=แดงกะพริบ) |
🔍 1.5 หน้าต่างดูภาพกล้องขยายใหญ่ (Fullscreen Camera Viewer)
เมื่อดับเบิ้ลคลิกที่ช่องกล้อง หรือกดปุ่มขยาย ระบบจะเปิดหน้าต่างดูภาพสดขนาดเต็มจอ (Fullscreen Camera Viewer: #camViewer) โดยดึงสัญญาณความละเอียดสูงสุด (Mainstream) โดยอัตโนมัติ
| ปุ่มคำสั่ง | คีย์ลัด | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
📸 บันทึกภาพนิ่ง (#btnCvSnap) |
คลิกปุ่ม | ดึง Raw Frame ความละเอียด 1080p/4K จากวิดีโอ Canvas | สร้างไฟล์รูปภาพ snapshot_CHxx_เวลา.jpg บันทึกลง Downloads |
🔴 อัดวิดีโอจอนี้ (#btnCvRec) |
คลิกปุ่ม | ใช้ MediaRecorder API บันทึกสตรีมวิดีโอสดลงหน่วยความจำชั่วคราว | ปุ่มจะกะพริบสีแดง เมื่อกดซ้ำเพื่อหยุด จะส่งออกไฟล์ record_CHxx.webm ลงเครื่องทันที |
✕ ปิดหน้าต่าง (#btnCloseViewer) |
Esc | หยุดการดึง Mainstream ชั่วคราวและปิด Overlay | กลับสู่หน้าตารางรวมกล้องสด (Grid View) ตามเดิม |
📊 1.6 แถบสถานะระบบด้านล่าง (Bottom Bar Status)
แถบสถานะด้านล่างสุดของหน้าจอทำหน้าที่รายงานความสมบูรณ์ในการทำงานของระบบ NVR ตลอด 24 ชั่วโมง
ระบบตรวจจับเหตุการณ์และดูย้อนหลัง (Events & Playback)
เรียนรู้วิธีการทำงานของแถบเหตุการณ์สด (Events Rail) การค้นหาและกรองเหตุการณ์ในคลังเก็บ (Event Manager) การตรวจสอบรายละเอียด 3 แท็บ การดูเส้นทางเดินของวัตถุ (Tracking Vector) การควบคุมเครื่องเล่นคลิป และการเล่นวิดีโอย้อนหลัง 4 จอพร้อมกันตลอด 24 ชั่วโมง
⚡ 2.1 แถบเหตุการณ์ด้านข้าง (Live Events Rail)
แถบเหตุการณ์ด้านขวาของหน้าจอทำหน้าที่แสดงบัตรเหตุการณ์ (Event Card) แบบสดเรียลไทม์ทันทีที่กล้องตรวจพบบุคคล รถยนต์ หรือป้ายทะเบียน โดยไม่ต้องกดรีเฟรชหน้าเว็บ
📥 ข้อมูลนำเข้า (Input)
สัญญาณตรวจจับจาก YOLO11 และ LPR ส่งผ่าน WebSocket / Server-Sent Events (SSE)
⚙️ กลไกประมวลผล (Process)
ประมวลผลความมั่นใจ (Confidence Score), ตรวจสอบตัวกรอง Class Filter, สร้างภาพ Thumbnail ขนาดเล็ก
📤 ผลลัพธ์ที่ได้ (Output)
แสดงการ์ดเหตุการณ์ใหม่บนแถบด้านขวาทันที พร้อมเล่นเสียงเตือน (ถ้าเปิด) และเพิ่มตัวเลขนับบน Badge
🛠️ ปุ่มและเครื่องมือบนแถบเหตุการณ์:
| ปุ่มคำสั่ง / องค์ประกอบ | ตำแหน่ง | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
ตัวนับเหตุการณ์ (#evTotal) |
ส่วนหัวแถบขวา | นับจำนวนเหตุการณ์ที่เกิดขึ้นในเซสชันปัจจุบัน เช่น "24 รายการ" | บอกปริมาณเหตุการณ์ที่เกิดขึ้นให้ผู้ปฏิบัติงานทราบอย่างรวดเร็ว |
เลือก Class (#btnRailClasses) |
ข้างตัวนับ | คลิกเปิดเมนูป๊อปอัปเลือกชนิดวัตถุที่จะให้แสดง | เลือกเปิด/ปิดเฉพาะ คน, รถยนต์, ป้ายทะเบียน, หรือรถจักรยานยนต์ เพื่อกรองการแจ้งเตือนไม่ให้รบกวน |
ซ่อน (#btnHideEvents) |
มุมขวาสุดแถบ | คลิกเพื่อยุบแถบเหตุการณ์ไปทางขวา | ขยายพื้นที่ตารางภาพกล้องสดให้กว้างขึ้นเต็มหน้าจอ และแสดงแท็บลอย #railTab แทน |
ชิปกรองประเภทด่วน (#evFilters) |
ใต้ส่วนหัว | คลิกเลือกชิปประเภท เช่น "ทั้งหมด", "บุคคล", "ยานพาหนะ", "ป้ายทะเบียน" | กรองรายการการ์ดบนแถบให้แสดงเฉพาะประเภทที่เลือกทันที |
| การ์ดเหตุการณ์ (Event Card) | ในรายการเหตุการณ์ | คลิกที่ตัวการ์ด | เปิดหน้าต่างเล่นคลิปเหตุการณ์ (Clip Player) หรือหน้าต่างรายละเอียดเหตุการณ์ทันที |
🗄️ 2.2 คลังวิดีโอเหตุการณ์ (Event Manager Archive)
เมื่อกดปุ่ม 🎬 คลังวิดีโอเหตุการณ์ บน Top Bar ระบบจะเปิดหน้าต่างค้นหาและเรียกดูประวัติเหตุการณ์ทั้งหมดที่บันทึกไว้ในฐานข้อมูล
🛠️ สารบบปุ่มควบคุมบนหน้าต่าง Event Manager:
| ปุ่มคำสั่ง / ฟังก์ชัน | ตำแหน่ง | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
| ปุ่มขนาดภาพย่อ (sm, md, lg, xl, xxl) | แถบเครื่องมือบน | คลิกเลือกระดับขนาดของการ์ดพรีวิวภาพ 5 ระดับ | ปรับขนาดรูปตัวอย่างให้เหมาะกับความต้องการ ตั้งแต่ดูภาพรวมหนาแน่น จนถึงดูภาพขยายใหญ่สุด |
Dropdown เลือกกล้อง (#emgrCameraFilter) |
แถบเครื่องมือบน | เลือกชื่อกล้อง เช่น "CH01 ประตูหน้า", "CH02 อาคาร 1" | กรองแสดงเฉพาะเหตุการณ์ที่เกิดขึ้นที่กล้องจุดนั้น |
ตัวเลือกวันที่ (#emgrDateFilter) |
แถบเครื่องมือบน | เลือกวันที่ต้องการสืบค้น (Date Picker) | ดึงข้อมูลเหตุการณ์เฉพาะของวันที่ระบุ |
ทุกวัน (#btnEmgrAllDates) |
ข้างตัวเลือกวันที่ | คลิกเพื่อล้างตัวกรองวันที่ | ดึงเหตุการณ์ล่าสุดย้อนหลังทั้งหมดโดยไม่จำกัดวัน |
ช่องค้นหาเหตุการณ์ (#emgrSearch) |
แถบเครื่องมือบน | พิมพ์คำค้นหา เช่น "กพ 3771", "โตโยต้า", "กระบะ", "เสื้อแดง" | ค้นหาในคำอธิบาย ชนิดวัตถุ และข้อความป้ายทะเบียนแบบ Real-time |
🔄 รีเฟรช (#btnEmgrRefresh) |
มุมขวาบน | คลิกส่งคำขอไปดึงข้อมูลล่าสุดจาก API | อัปเดตรายการเหตุการณ์ใหม่ล่าสุด |
✕ ปิด (#btnCloseEmgr) |
Esc | ปิดหน้าต่าง Event Manager | กลับสู่หน้าจอหลัก |
🔬 2.3 หน้าต่างแสดงรายละเอียดเหตุการณ์ (Event Detail Modal)
เมื่อคลิกที่เหตุการณ์ใดๆ จะเปิดหน้าต่างรายละเอียดเชิงลึก (Event Detail: #emgrDetailOverlay) ซึ่งแบ่งออกเป็น 3 แท็บปฏิบัติการ:
📷 แท็บที่ 1: ภาพ Snapshot และการตรวจสอบป้ายทะเบียน (LPR)
| ปุ่ม / ส่วนแสดงผล | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|
ภาพครอบป้ายทะเบียน (#edPlateCrop) |
คลิกที่ภาพ Crop ป้ายทะเบียน | เปิดหน้าต่าง Lightbox ขยายภาพแผ่นป้ายขนาดใหญ่พิเศษเพื่อตรวจสอบความคมชัด |
✏️ แก้ไข/สอน AI (#btnEdPlateTrain) |
คลิกเพื่อแก้ไขตัวอักษรป้ายทะเบียน | เปิดหน้าต่าง LPR Active Learning เพื่อสอน AI ทันที (บันทึกเข้าระบบฝึกอบรมโมเดล) |
🗑️ ไม่ใช่ป้าย/ลบและสอน AI (#btnEdPlateDelete) |
คลิกเมื่อระบบจับวัตถุอื่นผิดเป็นป้าย (False Positive) | เปิดหน้าต่างให้ระบุเหตุผล (เช่น ป้ายร้าน, ลายเสื้อ) และบันทึกเป็นตัวอย่างลบ (Negative Sample) |
ช่องคำอธิบาย (#edDesc) + บันทึก (#btnSaveDesc) |
พิมพ์บันทึกพฤติการณ์ เช่น "รถต้องสงสัยวิ่งวนรอบค่าย 3 รอบ" | บันทึกข้อความแนบกับรหัสเหตุการณ์ลงฐานข้อมูล เพื่อใช้สืบค้นในอนาคต |
🎥 แท็บที่ 2: วิดีโอช่วงเหตุการณ์ (Video Playback & Export)
| ปุ่มคำสั่ง | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|
เครื่องมือซูมดิจิทัล (#btnEdZoomIn / #btnEdZoomOut) |
คลิกเพื่อซูมขยายจุดเฉพาะในวิดีโอ | ขยายภาพวิดีโอแบบ Digital Zoom เพื่อมองคนขับหรือสิ่งของในรถ |
📸 บันทึกเฟรม (#btnEdVideoSnap) |
คลิก ณ จังหวะที่ต้องการ | ดึงภาพนิ่งจากตำแหน่งเวลาในวิดีโอปัจจุบัน บันทึกลง Downloads |
📥 ดาวน์โหลด MP4 (#btnEdDownload) |
คลิกสั่งดาวน์โหลด | ดาวน์โหลดไฟล์วิดีโอเหตุการณ์ความละเอียดสูง (H.264 MP4) สำหรับใช้เป็นพยานหลักฐาน |
🔗 แชร์คลิป (#btnEdShare) |
คลิกเลือก "คัดลอกลิงก์" หรือ "ส่งทางอีเมล" | สร้างลิงก์สำหรับส่งต่อให้ผู้บังคับบัญชาหรือชุดปฏิบัติการเปิดดูผ่านมือถือได้ทันที |
🧭 แท็บที่ 3: รายละเอียดวัตถุที่ติดตาม (Object Tracking Vector & Lifecycle)
ระบบ AI จะบันทึกเวกเตอร์พิกัดการเคลื่อนที่ของวัตถุตลอดเวลาที่อยู่ในเฟรมกล้อง:
- เส้นทางเดิน (Vector Path): แสดงเส้นทางเดินของคนหรือทิศทางแล่นของรถเป็นเส้นกราฟิกสีเขียว (จุดเริ่ม) ➔ สีแดง (จุดที่พ้นเฟรม)
- สถิติการเคลื่อนที่: แสดงระยะเวลาที่ปรากฏในภาพ (Duration), ทิศทางการเคลื่อนที่ (Bearing), และความเร็วเฉลี่ยโดยประมาณ
- วงจรชีวิต (Object Lifecycle): แจกแจงสถานะของวัตถุตั้งแต่เริ่มตรวจพบ (Enter Area) ➔ ตรวจจับป้ายทะเบียนได้ (LPR Matched) ➔ วัตถุออกจากรัศมีกล้อง (Exit Area)
▶️ 2.4 เครื่องเล่นคลิปเหตุการณ์ (Clip Player Modal & Standalone)
เครื่องเล่นคลิปวิดีโอความเร็วสูง (#playerOverlay) และหน้าเล่นคลิปภายนอก (clip.html) ออกแบบมาให้โหลดวิดีโอได้ทันใจทั้งบนคอมพิวเตอร์และสมาร์ตโฟน
| ปุ่มควบคุม | คีย์ลัด | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
ปุ่มเล่น / หยุด (#btnCenterPlay / #btnBarPlay) |
Spacebar | คลิกเพื่อสลับสถานะเล่นและหยุดชั่วคราว | เล่นหรือหยุดวิดีโอ พร้อมอัปเดตตัวเลขเวลาปัจจุบัน |
| สไลเดอร์เลื่อนเวลา (Scrubber) | ◀ / ▶ | คลิกลากแถบเวลา หรือกดปุ่มลูกศรซ้าย-ขวาเพื่อข้าม 5 วินาที | กระโดดไปยังช่วงเวลาที่ต้องการดูในคลิปทันที |
ปุ่มซูม 2×, 3×, 4×, 5× (#btnPvZoomIn) |
คลิกเลือกระดับ | ขยายความละเอียดเฉพาะจุดของวิดีโอ | ขยายภาพเพื่อดูรายละเอียดแผ่นป้ายหรือใบหน้า พร้อมสามารถคลิกลากเพื่อแพนมุมมองได้ |
ซูมออก (#btnPvZoomOut) |
คลิกปุ่ม | คืนค่าระดับการซูมเป็น 100% | มุมมองวิดีโอกลับสู่ขนาดมาตรฐาน |
📸 บันทึกภาพนิ่ง (#btnPvSnap) |
คลิกปุ่ม | ดึงภาพเฟรมปัจจุบันจากวิดีโอสเตจ | บันทึกไฟล์ภาพนิ่งคุณภาพสูงลงเครื่องทันที |
📥 ดาวน์โหลด (#btnDownload) |
คลิกปุ่ม | ดาวน์โหลดไฟล์ MP4 | บันทึกไฟล์คลิปลงฮาร์ดดิสก์เครื่องไคลเอนต์ |
⏱️ 2.5 ระบบดูภาพย้อนหลังหลายกล้อง 24 ชั่วโมง (Multi-cam 24h Playback)
ระบบ Playback ช่วยให้เจ้าหน้าที่สามารถย้อนดูภาพเหตุการณ์ในอดีตได้พร้อมกันสูงสุด 4 กล้อง โดยซิงค์เวลาตรงกันทุกเสี้ยววินาที รองรับการสืบสวนคดีที่ต้องดูหลายมุมมองพร้อมกัน
📥 ข้อมูลนำเข้า (Input)
เลือกกล้อง, เลือกวันที่จากปฏิทิน และคลิกเลือกเวลาบนแถบไทม์ไลน์ 24 ชั่วโมง
⚙️ กลไกประมวลผล (Process)
NVR Engine ค้นหาไฟล์ Segment H.264 จาก Storage Disk ทำการ Synchronize เวลา และส่งสตรีมภาพหลายจอ
📤 ผลลัพธ์ที่ได้ (Output)
เล่นภาพวิดีโอย้อนหลังพร้อมกันบนกริดหน้าจอ พร้อมแถบสีแสดงจุดเกิดเหตุการณ์ AI
🛠️ สารบบปุ่มควบคุมบนหน้าต่าง Playback:
| ปุ่มคำสั่ง / ฟังก์ชัน | ตำแหน่ง | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
เมนูเลือกกล้องหลัก (#pbCam) |
ส่วนหัวแถบซ้าย | เลือกกล้องตัวหลักที่จะใช้เป็นแม่แบบเวลา (Master Clock) | กำหนดเวลาอ้างอิงและอัปเดตไทม์ไลน์ 24 ชม. ของกล้องนั้น |
📅 ปฏิทินเลือกวัน (#btnPbCal) |
ส่วนหัวแถบซ้าย | คลิกเปิดปฏิทิน Interactive | แสดงจุดสีแดงเฉพาะวันที่มีไฟล์วิดีโอบันทึกจริงในฮาร์ดดิสก์ ช่วยให้รู้ทันทีว่าวันไหนมีข้อมูลบ้าง |
| ปุ่มเลย์เอาต์ 1 จอ / 2 จอ / 4 จอ | ส่วนหัวแถบกลาง | คลิกเลือกจำนวนช่องแสดงภาพย้อนหลัง | สลับเป็นจอเดี่ยว หรือแบ่ง 2 จอ หรือ 4 จอสำหรับเทียบมุมมองกล้องต่างๆ |
⟳ Sync เวลา (#btnPbSync) |
ส่วนหัวแถบกลาง | คลิกเพื่อซิงค์เวลาของทุกจอให้ตรงกันทันที | ปรับตำแหน่งวิดีโอของจอเสริมทุกจอให้ตรงกับเวลาของจอหลักเป๊ะทุกวินาที |
| ปุ่มสปีดความเร็ว (9 ระดับ) | แถบควบคุมใต้จอ | คลิกเลือก 0.25×, 0.5×, 1×, 2×, 4×, 8×, 10×, 14×, 16× |
เร่งความเร็วในการตรวจหาเป้าหมาย หรือเล่นสโลว์โมชันเพื่อดูจังหวะกระทำความผิด |
แถบไทม์ไลน์ 24 ชม. (#pbTimeline) |
ล่างสุดของหน้าต่าง | คลิกเมาส์ ณ จุดเวลาใดก็ได้บนแถบไทม์ไลน์ |
แถบสีม่วง: แสดงช่วงเวลาที่มีการบันทึกต่อเนื่อง แถบสีด้านล่าง: จุดที่ AI ตรวจพบเหตุการณ์ (คลิกเพื่อกระโดดไปดูเหตุการณ์ได้ทันที) |
| ปุ่มปรับระดับซูมไทม์ไลน์ | ข้างไทม์ไลน์ | คลิก ซูมเข้า (#pbZoomIn) / ซูมออก (#pbZoomOut) |
ปรับความละเอียดไทม์ไลน์ได้ 5 ระดับ: "ทั้งวัน (24h)", "6 ชม.", "1 ชม.", "10 นาที", "1 นาที" เพื่อเลือกเวลาได้แม่นยำระดับวินาที |
Class ▾ (#btnPbEvClass) |
ข้างไทม์ไลน์ | คลิกเลือกชนิดเหตุการณ์ที่จะแสดงบนไทม์ไลน์ | กรองเฉพาะแถบสีของเหตุการณ์บุคคล รถยนต์ หรือป้ายทะเบียน เพื่อไม่ให้แถบสีรกตา |
📸 จับภาพนิ่ง (#btnPbSnap) |
แถบควบคุมใต้จอ | คลิกบันทึกเฟรมภาพย้อนหลัง | บันทึกภาพนิ่งจากจอหลักลงโฟลเดอร์ Downloads |
✂️ บันทึกช่วงนี้ (#btnPbDownload) |
แถบควบคุมใต้จอ | กำหนดเวลาเริ่มต้นและเวลาสิ้นสุด แล้วกดบันทึก | ตัดต่อคลิปวิดีโอย้อนหลังช่วงเวลาที่เลือกส่งออกเป็นไฟล์ MP4 ทันทีโดยไม่ต้องเรนเดอร์ใหม่ |
ระบบปัญญาประดิษฐ์ AI YOLO11 และตรวจสอบป้ายทะเบียน LPR
คู่มือการตั้งค่าสถาปัตยกรรม Computer Vision การเลือกชนิดวัตถุตรวจจับด้วย YOLO11m การกำหนดพื้นที่ความสนใจ (ROI Zone) เพื่อเร่งความเร็วในการอ่านป้าย การใช้เครื่องมือสครับเฟรมเพื่อสอน AI ป้ายทะเบียนภาษาไทย และระบบตรวจสอบความแม่นยำย้อนหลังของโมเดล
👁️ 3.1 การเลือกประเภทวัตถุตรวจจับ AI (YOLO11 Object Selector)
ระบบ Sloth BPP 215 ขับเคลื่อนด้วยโมเดล YOLO11m ที่ได้รับการปรับแต่งพิเศษ (Fine-tuned) สำหรับภารกิจรักษาความปลอดภัยและการลาดตระเวนชายแดน รองรับการตรวจจับวัตถุหลากหลายคลาสพร้อมกัน
📥 ข้อมูลนำเข้า (Input)
ผู้ใช้เลือกชนิดวัตถุที่ต้องการให้ระบบตรวจจับใน Settings ➔ แท็บ Dashboard
⚙️ กลไกประมวลผล (Process)
ระบบอัปเดตไฟล์คอนฟิก Frigate NVR และส่งสัญญาณ Hot-reload ไปยังโมเดล YOLO11m ภายในคอนเทนเนอร์
📤 ผลลัพธ์ที่ได้ (Output)
กล้องเริ่มตรวจจับเฉพาะวัตถุที่เลือก วาดกรอบสี Bounding Box และบันทึกเหตุการณ์ลงระบบ
🛠️ สารบบปุ่มและตัวเลือกในตารางวัตถุ AI (Object Grid):
| ปุ่มคำสั่ง / ตัวเลือก | ประเภท / รหัส Class | คำอธิบายการนำไปใช้งานและผลลัพธ์ |
|---|---|---|
| ชุดแนะนำ (Preset) | #btnObjSecurity |
คลิกเดียวเพื่อเลือกกลุ่มคลาสมาตรฐานความปลอดภัย: บุคคล, รถยนต์, รถจักรยานยนต์, รถบรรทุก, ป้ายทะเบียน |
| ล้างทั้งหมด | #btnObjClear |
ยกเลิกการเลือกคลาสทั้งหมดชั่วคราว เพื่อเริ่มเลือกใหม่ทีละตัว |
| บุคคล (Person) | person |
ตรวจจับมนุษย์ ทั้งการเดิน ยืน นั่ง วิ่ง หรือการปีนป่ายกำแพง เหมาะสำหรับกล้องแนวรั้วและประตูค่าย |
| รถยนต์ (Car) | car |
ตรวจจับรถเก๋ง รถยนต์นั่งส่วนบุคคล รถตู้ และรถ SUV ทุกยี่ห้อ |
| รถจักรยานยนต์ (Motorcycle) | motorcycle |
ตรวจจับรถมอเตอร์ไซค์ รวมถึงผู้ขับขี่และผู้ซ้อนท้าย |
| รถบรรทุก / รถบัส (Truck / Bus) | truck / bus |
ตรวจจับยานพาหนะขนาดใหญ่ รถบรรทุกส่งของ รถหกล้อ สิบล้อ และรถโดยสาร |
| ป้ายทะเบียน (License Plate) | license_plate |
ตรวจจับตำแหน่งแผ่นป้ายทะเบียนบนตัวรถ เพื่อส่งต่อให้ระบบ Optical Character Recognition (OCR) อ่านตัวอักษร |
📐 3.2 การกำหนดพื้นที่ตรวจจับป้ายทะเบียน (LPR Zone ROI Editor)
การกำหนดพื้นที่ความสนใจ (Region of Interest: ROI Zone) ช่วยลดการใช้พลังงานประมวลผลของชิป AI และตัดสัญญาณรบกวนจากรถที่วิ่งอยู่นอกเขตตรวจค้น โดยระบบจะดึงภาพความละเอียดเต็มเฟรมมาอ่านป้ายเฉพาะเมื่อรถสัมผัสโซนนี้เท่านั้น
เปิดหน้าต่าง Zone Editor:
ไปที่ ⚙️ ตั้งค่าระบบ ➔ แท็บ "หน้าจอกล้อง (Dashboard)" ➔ เลือกช่องกล้องที่ต้องการ ➔ กดปุ่ม ⛶ โซนป้าย (#btnChLprZone)
ลากเมาส์ตีกรอบพื้นที่ (Drawing ROI):
หน้าจอจะแสดงภาพสดความละเอียดสูงจากกล้อง ให้คลิกเมาส์ซ้ายค้างไว้แล้วลากเป็นกรอบสี่เหลี่ยมสีแดงครอบบริเวณถนนจุดที่รถชะลอความเร็วหรือจุดที่แผ่นป้ายทะเบียนเห็นได้ชัดเจนที่สุด
บันทึกโซน:
กดปุ่ม บันทึกโซน (#btnLzSave) ระบบจะแปลงพิกัดกรอบเป็นค่า Normalized Coordinates [ymin, xmin, ymax, xmax] ส่งเข้าสู่ LPR Pipeline มีผลบังคับใช้ในระบบทันทีภายใน ≤60 วินาที
| ปุ่มคำสั่ง | ตำแหน่ง | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
ลบโซน (#btnLzClear) |
มุมซ้ายล่าง | คลิกเพื่อลบกรอบสีแดงออก | ยกเลิกการจำกัดพื้นที่ ทำให้ระบบอ่านป้ายทะเบียนทั่วทั้งภาพกล้องแบบ Full-frame |
บันทึกโซน (#btnLzSave) |
มุมขวาล่าง | ส่งพิกัดกรอบไปยัง LPR Service API | บันทึกลงคอนฟิกกล้องและแสดงข้อความแจ้งเตือน "บันทึกโซนสำเร็จ" |
✕ ปิด (#btnCloseLz) |
มุมขวาบน | ปิดหน้าต่าง Zone Editor | ยกเลิกการแก้ไขและกลับสู่หน้า Settings |
🧠 3.3 การสอนและตรวจสอบป้ายทะเบียนให้ AI (LPR Active Learning)
ระบบ Active Learning เป็นหัวใจสำคัญในการทำให้ AI ฉลาดขึ้นเรื่อยๆ ตามสภาพแวดล้อมจริง เมื่อระบบอ่านป้ายผิดพลาด เจ้าหน้าที่สามารถเข้าไปแก้ไขข้อมูลที่ถูกต้อง เพื่อนำไปฝึกฝน (Re-train) โมเดล AI ให้แม่นยำยิ่งขึ้น
📥 ข้อมูลนำเข้า (Input)
เจ้าหน้าที่เลือกเฟรมที่ชัด ตีกรอบแผ่นป้าย กรอกเลขทะเบียนจริง และเลือกจังหวัดที่ถูกต้อง
⚙️ กลไกประมวลผล (Process)
จัดเก็บภาพ Crop คุณภาพสูง พร้อมสร้างไฟล์ Annotation ตามมาตรฐาน YOLO/PyTorch ลงโฟลเดอร์ lpr-verified-samples
📤 ผลลัพธ์ที่ได้ (Output)
ชุดข้อมูลตัวอย่างที่ยืนยันแล้วจะถูกนำไป Fine-tune โมเดล OCR ทำให้ AI อ่านป้ายทะเบียนคันต่อไปได้ถูกต้อง 100%
🛠️ รายละเอียดเครื่องมือบนหน้าต่าง Active Learning Modal (#lprTrainOverlay):
| เครื่องมือ / ฟิลด์ข้อมูล | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|
| เครื่องมือเลือกเฟรม (Scrubber) ◀ ถอย 0.1s ( #btnLprPrevFrame)ถัดไป 0.1s ▶ ( #btnLprNextFrame)
|
เลื่อนสไลเดอร์หรือคลิกปุ่มเดินหน้า-ถอยหลังทีละ 0.1 วินาที | เลือกหาจังหวะที่รถวิ่งเข้าใกล้กล้องที่สุด และแผ่นป้ายไม่มีแสงสะท้อนหรือความเบลอ |
| พื้นที่วาดกรอบแผ่นป้าย | คลิกลากเมาส์เป็นสี่เหลี่ยมครอบเฉพาะตัวแผ่นป้ายทะเบียน | ตัดภาพเฉพาะส่วนป้าย (Crop) ส่งไปแสดงผลในช่องพรีวิว #lprTrainCanvas |
ผลการตรวจสอบ (Decision) (#selLprDecision) |
เลือกจาก 4 ตัวเลือกมาตรฐาน: 1. readable (เป็นป้าย — อ่านได้ครบถ้วน)2. partial (เป็นป้าย — อ่านได้บางส่วน)3. unreadable (เป็นป้าย — แต่ภาพมัว/อ่านไม่ได้)4. non_plate (ไม่ใช่ป้ายทะเบียน — จับผิดวัตถุ)
|
กำหนดหมวดหมู่ของตัวอย่างในฐานข้อมูลการฝึกสอนโมเดล AI |
ช่อง "หมวดอักษรและเลข" (#inpLprPlate) |
กรอกข้อความที่ถูกต้อง เช่น กพ 3771 หรือ 1กข 8809 |
ใช้เป็น Ground Truth Label สำหรับสอนโมเดล OCR ตัวอักษรภาษาไทย |
ช่องเลือกจังหวัด (#selLprProvince) |
เลือกชื่อจังหวัดจากตัวเลือกทั้งหมด 77 จังหวัด | ช่วยให้ AI เรียนรู้ฟอนต์และชื่อจังหวัดแถวล่างของแผ่นป้ายทะเบียนไทย |
| ระบุสาเหตุที่ไม่ใช่ป้าย (Non-plate Reasons) | เลือกเมื่อตัดสินว่าเป็น non_plate เช่น:- ป้ายร้าน / ป้ายประชาสัมพันธ์ - โลโก้ / ตราสินค้าบนรถ - ลายเสื้อผ้า - เส้นบนพื้นถนน - แสงสะท้อน / ไฟหน้ารถ - ครอบผิดตำแหน่ง |
บันทึกเป็น Hard Negative Sample ช่วยลดปัญหา False Positive ของตัวตรวจจับป้ายในอนาคต |
💾 ยืนยันผลตรวจสอบ (#btnLprTrainSave) |
คลิกบันทึก | เซฟไฟล์ภาพและ Annotation พร้อมอัปเดตสถิติตัวอย่างที่พร้อมเทรนทันที |
⚙️ 3.4 การจัดการและฝึกโมเดลป้ายทะเบียน (LPR Model Training & Versioning)
ผู้ดูแลระบบสามารถตรวจสอบสถานะของชุดข้อมูลฝึกสอน สั่งเริ่มการฝึกอบรมโมเดล (Fine-tuning) และเรียกดูประวัติหรือคืนค่าโมเดลรุ่นก่อนหน้าได้ตลอดเวลา
| ส่วนควบคุม / ปุ่ม | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|
กล่องสรุปสถานะชุดข้อมูล (#lprLearningSummary) |
แสดงจำนวนตัวอย่างที่ผ่านการยืนยันแล้วแยกตามสถานะ (Readable / Negative) | ประเมินความพร้อมว่ามีข้อมูลเพียงพอสำหรับการเริ่มเทรนโมเดลรอบใหม่หรือไม่ (แนะนำ ≥100 ตัวอย่าง) |
🚀 สั่งเทรนโมเดลทันที (#btnTriggerLprTrainNow) |
คลิกเพื่อเริ่มกระบวนการฝึกฝนโมเดลบน GPU Server | ส่งคำสั่งไปยัง lpr-service รันสคริปต์ PyTorch Fine-tuning และแสดงหลอดความคืบหน้า Epochs |
เกณฑ์ฝึกอัตโนมัติ (#inpLprMinSamples) + บันทึก |
กรอกจำนวนตัวอย่างขั้นต่ำ เช่น 50 แล้วกดบันทึก |
เมื่อเจ้าหน้าที่ตรวจสอบป้ายสะสมครบตามจำนวน ระบบจะเริ่มเทรนโมเดลใหม่ในพื้นหลังอัตโนมัติ |
ตารางเวอร์ชันโมเดล (#lprModelVersions) |
แสดงรายการ Model Checkpoint ย้อนหลัง พร้อมค่าความแม่นยำ (mAP / Accuracy) | มีปุ่ม Rollback ให้ย้อนกลับไปใช้โมเดลรุ่นก่อนหน้าได้ทันที หากโมเดลใหม่เกิดความผิดพลาด |
ศูนย์สืบสวนคดีพิเศษ ถังข้อมูลบุคคล และผังความสัมพันธ์ (Watchlist / Vault / i2)
คู่มือระบบสืบสวนความมั่นคงขั้นสูง: การจัดการบัญชีทะเบียนรถเฝ้าระวัง (Watchlist) 4 ระดับความเสี่ยงพร้อมกราฟพฤติกรรม 3 มิติ, การบริหารจัดการถังข้อมูล (Arrest Dossier Vault) ครบวงจร ทั้งข้อมูล ทร.14, รายการเบอร์โทรทุกค่าย, ข้อมูลมิเตอร์ไฟฟ้า PEA พร้อมพิกัดดาวเทียม, และการบริหารจัดการผังข้อมูลเครือข่ายความสัมพันธ์ Visual Link Analysis (IBM i2 Analyst's Notebook Web Edition) ด้วยแถบเครื่องมือ 2 ชั้น (2-Tier Modular Toolbar) และระบบแคชความเร็วสูง
🎯 4.1 ระบบจัดการทะเบียนเฝ้าระวัง (Watchlist Management & Analytics)
ระบบ Watchlist ทำหน้าที่ตรวจจับและแจ้งเตือนทันทีที่ยานพาหนะเป้าหมาย บุคคลมีหมายจับ หรือรถเครือข่ายยาเสพติดแล่นผ่านกล้องตัวใดตัวหนึ่งในเครือข่าย
📥 ข้อมูลนำเข้า (Input)
เจ้าหน้าที่ลงทะเบียนป้ายทะเบียน จังหวัด ระดับความเสี่ยง ข้อมูลผู้ครอบครอง และประวัติคดี
⚙️ กลไกประมวลผล (Process)
ระบบสร้าง Key ดักจับในหน่วยความจำ LPR Engine เมื่อตรวจพบแผ่นป้ายที่ตรงกัน จะส่งเสียงเตือนและแจ้งผ่าน Telegram ทันที
📤 ผลลัพธ์ที่ได้ (Output)
บัตรแจ้งเตือนสีแดงกะพริบบนจอหลัก ส่งภาพและพิกัดเข้ากลุ่มปฏิบัติการ พร้อมบันทึกพฤติกรรมลงระบบวิเคราะห์สถิติ
🛠️ สารบบปุ่มและฟังก์ชันในหน้ารายการทะเบียนเฝ้าระวัง:
| ปุ่มคำสั่ง / ช่องกรอก | ตำแหน่ง | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
+ เพิ่มทะเบียน (#btnWlAdd) |
มุมขวาบน | คลิกเปิดฟอร์มลงทะเบียนเป้าหมายใหม่ | เปิดหน้าต่าง #wlFormOverlay สำหรับกรอกข้อมูลทะเบียนและผู้ครอบครอง |
ช่องค้นหา (#wlSearch) |
แถบเครื่องมือบน | พิมพ์เลขทะเบียน, ชื่อบุคคล, หรือชื่อเครือข่าย | กรองรายการตารางแสดงเฉพาะเป้าหมายที่ตรงกับคำค้นหาแบบทันที |
| 📊 สถิติ | ในแต่ละแถวเป้าหมาย | คลิกที่ปุ่มสถิติของรถคันที่ต้องการ | เปิดหน้าต่างวิเคราะห์พฤติกรรมเชิงลึก (Behavioral Analytics: #wlStatsOverlay) |
| ✏️ แก้ไข | ในแต่ละแถวเป้าหมาย | คลิกเพื่อแก้ไขข้อมูลเดิม | เปิดฟอร์มพร้อมกรอกข้อมูลเดิมให้อัตโนมัติ เพื่อปรับระดับความเสี่ยงหรือแก้ไขข้อมูลผู้ครอบครอง |
| 🗑️ ลบ | ในแต่ละแถวเป้าหมาย | คลิกเพื่อปลดทะเบียนออกจากระบบเฝ้าระวัง | แสดงหน้าต่างยืนยัน และลบรายการออกจากฐานข้อมูล Watchlist ทันที |
🚦 ตารางระดับความเสี่ยง 4 ระดับ (Risk Severity Levels):
| ระดับความเสี่ยง | ป้ายสถานะ | พฤติการณ์และการตอบสนองของระบบ |
|---|---|---|
| ต่ำ (LOW) | 🟢 LOW | รถต้องสงสัยทั่วไป หรือรถเป้าหมายในการเก็บข้อมูล ไม่ส่งเสียงเตือน แต่บันทึกสถิติการเคลื่อนไหวลงประวัติ |
| ปานกลาง (MEDIUM) | 🟡 MEDIUM | บุคคลเฝ้าระวังพิเศษ รายงานแจ้งเตือนลงช่องทางกลุ่ม Telegram ตามปกติ |
| สูง (HIGH) | 🟠 HIGH | บุคคลมีหมายจับ หรือรถที่เคยมีประวัติหลบหนีด่าน ส่งเสียงเตือนบนหน้าจอหลัก และส่งแจ้งเตือน Telegram ทันที |
| วิกฤต (CRITICAL) | 🔴 CRITICAL | คดีร้ายแรง อาวุธปืน ยาเสพติดรายใหญ่ หรือความมั่นคงชายแดน ระบบส่งเสียงเตือนไซเรนบน Dashboard กะพริบขอบจอกล้องสีแดง และกระจายแจ้งเตือนด่วน (Broadcast) ไปยังเจ้าหน้าที่ทุกคน |
📈 ระบบวิเคราะห์พฤติกรรมรถเป้าหมาย (Watchlist Behavioral Analytics #wlStatsOverlay):
เมื่อกดปุ่ม "📊 สถิติ" ระบบจะประมวลผลข้อมูลการวิ่งผ่านทั้งหมดและแสดงกราฟวิเคราะห์ 3 มิติ:
- 1. กราฟโดนัทกล้องที่พบบ่อย (Donut Chart
#chartCamera): ระบุว่ารถคันนี้วิ่งผ่านจุดตรวจหรือกล้องตัวใดบ่อยที่สุด คิดเป็นสัดส่วนเปอร์เซ็นต์ ทำให้ทราบเส้นทางประจำของเป้าหมาย - 2. กราฟแท่งช่วงเวลา 24 ชั่วโมง (Bar Chart
#chartHour): แสดงการกระจายตัวของเวลาที่รถแล่นผ่าน (เช่น มักจะวิ่งช่วงเวลา 02:00 - 04:00 น.) ช่วยให้วางแผนดักซุ่มตรวจค้นได้อย่างแม่นยำ - 3. กราฟแท่งวันในสัปดาห์ (Bar Chart
#chartDay): วิเคราะห์ว่าเป้าหมายมักเคลื่อนไหวในวันใด (จันทร์ - อาทิตย์) เพื่อคาดการณ์รอบการขนส่งหรือการเดินทาง - 4. ตารางประวัติการวิ่งผ่าน 500 ครั้งล่าสุด (
#wlStatsHistoryBody): แสดงรายการเรียงตามเวลา พร้อมภาพ Snapshot ภาพแผ่นป้าย และกล้องที่บันทึกได้
📊 4.2 ระบบวิเคราะห์สถิติและแผนที่ความเสี่ยง (Analytics Dashboard & Heatmap)
กดปุ่ม 📊 วิเคราะห์สถิติ บน Top Bar เพื่อเปิดศูนย์วิเคราะห์ข้อมูลอัจฉริยะ Big Data แสดงภาพรวมความปลอดภัย แผนที่ความหนาแน่นของเหตุการณ์ และการพยากรณ์ความเสี่ยง
| โมดูลในแดชบอร์ด | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|
| แผนที่ความร้อน (Heatmap Layer) | รวบรวมพิกัด GPS และจำนวนการตรวจพบเหตุการณ์ตามจุดติดตั้งกล้อง | แสดงชั้นสีความร้อน (แดง = หนาแน่น/เสี่ยงสูง, เหลือง = ปานกลาง, เขียว = ปกติ) ซ้อนทับบนแผนที่ภูมิศาสตร์ |
| กราฟแนวโน้มปริมาณยานพาหนะ | ประมวลผลข้อมูลการนับรถแยกตามประเภท (รถเก๋ง, มอเตอร์ไซค์, รถบรรทุก) | แสดงกราฟเส้นเปรียบเทียบปริมาณการจราจรเข้า-ออกรายชั่วโมงและรายสัปดาห์ |
| สถิติการแจ้งเตือนตามช่วงเวลา | จัดหมวดหมู่เหตุการณ์ความมั่นคงเทียบกับเวลาปฏิบัติงานของเวรยาม | ระบุจุดบกพร่องและช่วงเวลาที่มีความเสี่ยงสูง เพื่อเสริมกำลังพลลาดตระเวนได้อย่างมีประสิทธิภาพ |
🗂️ 4.3 คลังบันทึกจับกุมและการจัดการถังข้อมูล (Arrest Dossier Vault & Data Bucket Management)
กดปุ่ม 📂 คลังบันทึกจับกุม บน Top Bar เพื่อเข้าสู่ "ถังข้อมูล (Data Bucket)" ซึ่งเป็นศูนย์รวมประวัติบุคคล พยานหลักฐาน พิกัดสถานที่ และเบาะแสการสืบสวนดิจิทัลทั้งหมดของหน่วยงาน
📥 ข้อมูลนำเข้าถัง (Bucket Input)
ภาพ ทร.14, บัตร ปชช., ผลตรวจซิม/ค่ายมือถือ, ข้อมูลมิเตอร์ไฟฟ้า PEA, ยานพาหนะ และบันทึกคดี
⚙️ กลไกจัดระเบียบถัง (Process)
ระบบรวบรวมข้อมูลทั้งหมดเข้า Dossier ID เดียวกัน สกัดพิกัด GPS, จัดหมวดเบอร์โทรทุกค่าย และสร้างดัชนีค้นหา
📤 การแสดงผลในถัง (Bucket Output)
การ์ดโปรไฟล์บุคคลครบวงจร ลิงก์แผนที่ Google Maps เปิดพิกัดได้ทันที และส่งต่อไปเรนเดอร์ในผังข้อมูล i2
🛠️ สารบบข้อมูลในถังข้อมูลบุคคล (Dossier Detail Modal):
| หมวดข้อมูลในการ์ด | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมาในถังข้อมูล (Output) |
|---|---|---|
| ภาพถ่ายใบหน้า & เอกสาร ทร.14 หลัก | ระบบบังคับใช้มาตรการ TR.14 Primary Avatar Priority Guard เลือกภาพ ทร.14 เป็นภาพโปรไฟล์หลักเสมอ | แสดงภาพถ่าย ทร.14 คมชัด อัตราส่วนตรงตามจริง ไม่ถูกครอบตัดขอบ และคลิกดูขยายใน Lightbox ได้ |
| รายการเบอร์โทรศัพท์ทุกค่าย (Multi-Carrier Phones) | รวบรวมเบอร์โทรทั้งหมดที่ส่งเข้ามา (เช่น 8 เบอร์ทั้ง AIS, TRUE, DTAC) จากผลตรวจค่ายมือถือ | แสดงรายการเบอร์โทรทั้งหมดพร้อมป้ายกำกับค่าย (AIS, TRUE), หมายเลข IMSI, และสถานะ Active ไม่ถูกตัดเหลือเบอร์เดียวอีกต่อไป |
| ข้อมูลการไฟฟ้าส่วนภูมิภาค (PEA) & พิกัดมิเตอร์ | สกัดข้อมูลเลขผู้ใช้ไฟฟ้า (CA), หมายเลขมิเตอร์ (PEA NO), ชื่อผู้ขอใช้ไฟ, ที่อยู่ และพิกัดละติจูด/ลองจิจูด | แสดงการ์ดสีทอง ⚡ ข้อมูลการไฟฟ้าส่วนภูมิภาค พร้อมปุ่มกด 🗺️ เปิดดูพิกัดบน Google Maps เพื่อนำทางไปยังกระท่อม/ที่ซ่อนเป้าหมายได้ทันที |
| ยานพาหนะที่ครอบครอง (Associated Vehicles) | ระบบ Central Vehicle Manager ผูกข้อมูลรถเก๋ง, กระบะ, มอเตอร์ไซค์ เข้ากับเลขบัตรประชาชนเป้าหมาย | แสดงการ์ดรถยนต์ ยี่ห้อ สี หมายเลขทะเบียน พร้อมปุ่มกดสืบค้นประวัติการผ่านกล้อง LPR |
| ที่มาของแฟ้มข้อมูลและบันทึกคดีฉบับเต็ม (Intel Notes) | รวบรวมข้อความดิบ รายละเอียดเบาะแส และบันทึกพฤติการณ์ที่ส่งเข้ามาทั้งหมด | แสดงข้อความบันทึกคดีฉบับเต็ม โดยระบบจะแปลงลิงก์ URL พิกัดให้เป็น Hyperlink สีฟ้าที่คลิกเปิดได้ทันที (Clickable URL Auto-linking) |
| ปุ่ม "เปิดในผัง i2 Graph" | คลิกส่ง ID บุคคลไปยังหน้าผัง i2 | เปิดผังความเชื่อมโยงและซูมโฟกัสไปที่โหนดของบุคคลนี้พร้อมเครือข่ายบริวารทันที |
🕸️ 4.4 การบริหารจัดการผังข้อมูลเครือข่าย (i2 Link Analysis Graph Management)
ระบบจำลองความสามารถของซอฟต์แวร์ IBM i2 Analyst's Notebook ขึ้นมาทำงานบนเว็บเบราว์เซอร์ 100% โดยได้รับการปรับปรุงสถาปัตยกรรมใหม่หมดจด: แถบเครื่องมือ 2 ชั้น (2-Tier Modular Toolbar) ที่เป็นระเบียบ ไม่ตกบรรทัด, ระบบแคชประมวลผลเร็วขึ้น 35 เท่า, การแสดงโหนดมิเตอร์ไฟฟ้า PEA และโหนดเบอร์โทรครบทุกเบอร์
📥 ข้อมูลนำเข้าผัง (Graph Input)
ไฟล์ผัง .anb จาก i2 Analyst's Notebook, ข้อมูลจากถังข้อมูล (Dossier Vault), สเตทเมนต์ธนาคาร, และ CDR
⚙️ กลไกประมวลผลผัง (Process)
In-Memory Caching (TTL 5 นาที), GPU Canvas Viewport Lazy Loading และการคำนวณพิกัด 2 โซนพื้นที่
📤 ผลลัพธ์ผังข้อมูล (Graph Output)
ผังใยแมงมุม 5,000+ โหนด โหลดขึ้นจอในเวลา 0.67 วินาที ไม่กินแรมมือถือ พร้อมโหนดบุคคล ทร.14 คมชัด และโหนดมิเตอร์ PEA ⚡
🛠️ สารบบแถบเครื่องมือผังแบบ 2 ชั้น (2-Tier Modular Toolbar Architecture):
ระบบแยกแถบควบคุมออกเป็น 2 ชั้นอย่างเป็นระเบียบ เพื่อป้องกันการตกบรรทัดและรองรับการแสดงผลทุกขนาดหน้าจอ:
ชั้นที่ 1: แถวบนสุด (Header Top Row — ควบคุมชุดข้อมูลและส่งออก):
| ปุ่มคำสั่ง / เมนู | ตำแหน่ง | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
Dropdown สลับมุมมองผัง (#i2SourceChartSelect) |
Header แถวบน | คลิกเลือก "🌐 ผังรวมทั้งหมด (All Evidence)" หรือเลือกเฉพาะชื่อไฟล์ เช่น 68 (ล่าสุด).anb, โพยนอก.anb |
สลับมุมมองระหว่างผังรวมพยานหลักฐานขนาดใหญ่ กับผังคดีย่อยของแฟ้มเฉพาะคดี |
📋 ผัง i2 ในระบบ (#btnOpenI2ImportsModal) |
Header แถวบน | เปิดหน้าต่างรายการไฟล์ .anb ทั้งหมดที่เคยอัปโหลดไว้ |
ดูสถานะการสกัดข้อมูล กดพรีวิว กดนำขึ้นผัง (Apply) หรือกดยกเลิกนำออก (Rollback) |
🌐 นำเข้าผัง i2 (.anb) (#btnOpenI2ChartUpload) |
Header แถวบน | เปิดหน้าต่างเลือกไฟล์ผัง IBM i2 Analyst's Notebook (.anb) จากคอมพิวเตอร์ | เริ่มกระบวนการสกัดข้อมูลและแปลงขึ้นสู่ระบบ |
👑 บันทึกผังตั้งต้นระบบ (#btnSaveMasterLayout) |
เฉพาะ Superadmin | ส่งพิกัดตำแหน่งของทุกโหนดบนผังปัจจุบันไปบันทึกเป็น Master Layout | กำหนดให้ผังนี้เป็นมุมมองตั้งต้นสำหรับผู้ใช้งานทุกคนในระบบ |
🔄 ผังตั้งต้นระบบ (#btnResetToMasterLayout) |
Header แถวบน | ล้างการจัดตำแหน่งเฉพาะบุคคล แล้วดึงพิกัดจาก Master Layout | คืนค่าตำแหน่งโหนดทั้งหมดตามผังแม่แบบที่ผู้ดูแลระบบจัดไว้ |
↺ กู้คืนโหนด (N) (#btnRestoreExcludedNodes) |
Header แถวบน | แสดงจำนวนโหนดที่ถูกผู้ใช้ซ่อนไว้ชั่วคราว เช่น "(3)" | คลิกเพื่อนำโหนดที่เคยซ่อนไว้กลับคืนสู่ผังทั้งหมดทันที |
✨ จัดผังใหม่อัตโนมัติ (#btnAutoArrange) |
Header แถวบน | รันอัลกอริทึม Force-Directed Graph Layout | กระจายตัวโหนดตามกลุ่มคลัสเตอร์ความสัมพันธ์โดยไม่ให้โหนดทับซ้อนกัน |
📷 บันทึกภาพ (PNG) (#btnExportGraphImg) |
Header แถวบน | สั่งเรนเดอร์ Canvas ทั้งหมดแบบ High-resolution | ส่งออกไฟล์รูปภาพ PNG คุณภาพสูงสำหรับนำไปพิมพ์รายงานหรือแนบสำนวนการสอบสวน |
ชั้นที่ 2: แถวล่าง (Toolbar Bottom Row — ตัวกรองและเครื่องมือจัดผัง):
| ปุ่มคำสั่ง / ตัวกรอง | ตำแหน่ง / คีย์ลัด | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|---|
| กลุ่มชิปตัวกรอง 6 หมวด | Toolbar ฝั่งซ้าย | คลิกเปิด/ปิดประเภท: 👤 บุคคล, 📞 เบอร์โทร, 🏦 บัญชีธนาคาร, 💳 คู่โอน, 📦 พัสดุ Flash, 🌐 สายส่ง | ซ่อนหรือแสดงโหนดประเภทนั้นบนผังทันที เพื่อลดความซับซ้อนของเส้นสาย |
🌟 จัดผังดาวกระจาย (#btnStarburstLayoutGlobal) |
Toolbar ฝั่งขวา | จัดเรียงโหนดแบบ Hub-and-Spoke | วางโหนดเป้าหมายหลักไว้ตรงกลาง และจัดโหนดบริวาร (เบอร์โทร, บัญชีม้า) ล้อมรอบเป็นรูปดาวกระจาย |
🧲 คลายระยะห่าง (#btnAntiCollisionGlobal) |
Toolbar ฝั่งขวา | คำนวณเวกเตอร์ผลักกัน (Repulsion Vector) ระหว่างโหนดที่ใกล้กันเกินไป | ดันโหนดที่ทับซ้อนกันให้กระจายออก โดยไม่เปลี่ยนเค้าโครงผังหลัก |
↩️ ย้อนกลับ (#btnUndoI2) |
Ctrl + Z | ย้อนกลับการกระทำล่าสุด (Move, Link, Bend, Layout) | คืนค่าตำแหน่งโหนดหรือเส้นเชื่อมกลับสู่สถานะก่อนหน้า (รองรับสูงสุด 50 ประวัติ) |
↪️ เดินหน้า (#btnRedoI2) |
Ctrl + Y | ทำซ้ำคำสั่งที่เพิ่งย้อนกลับไป | นำการแก้ไขกลับมาใช้ใหม่ |
ช่องค้นหาในผัง (#i2SearchInput) |
Ctrl + F | พิมพ์ชื่อ, เลขบัตรประชาชน 13 หลัก, เบอร์โทรศัพท์, หรือเลขบัญชี | ซูมแพนหน้าจอไปยังโหนดที่ตรงกับคำค้นทันที พร้อมแสดง Badge นับจำนวน เช่น 1/8 |
🔄 รีเฟรช (#btnReloadGraph) |
Toolbar ฝั่งขวาสุด | ล้างแคชในเครื่องและดึงข้อมูลกราฟใหม่จากเซิร์ฟเวอร์ | อัปเดตข้อมูลผังล่าสุดทันที |
| ปุ่มลากคลุม (มือถือ/แท็บเล็ต) | เฉพาะจอสัมผัส | ปุ่ม ⬚ โหมดลากคลุม ถูกซ่อนอัตโนมัติบนคอมพิวเตอร์ (เพราะใช้ Shift+Drag ได้เลย) | จะแสดงผลเฉพาะบนหน้าจอมือถือและแท็บเล็ต เพื่อให้ตีกรอบเลือกหลายโหนดด้วยการลากนิ้วได้ |
⚡ โหนดรูปแบบใหม่: มิเตอร์ไฟฟ้า PEA และเบอร์โทรศัพท์ทุกค่าย:
โหนดสีทอง-ส้ม แสดงหมายเลขมิเตอร์ PEA NO และชื่อผู้ขอใช้ไฟ พร้อมวาดเส้นเชื่อมโยงจากบุคคลไปยังมิเตอร์ เมื่อคลิกที่โหนดจะมีปุ่มเปิด Google Maps นำทางสู่พิกัดเสาไฟหรือกระท่อมเป้าหมายได้ทันที
หากบุคคลมีเบอร์โทรศัพท์หลายเบอร์ (เช่น 8 เบอร์ทั้ง AIS และ TRUE) ผัง i2 จะสร้างโหนดเบอร์โทรศัพท์ครบทั้ง 8 โหนดล้อมรอบตัวบุคคล ไม่ตัดทอน เพื่อให้เห็นความเชื่อมโยงของซิมม้าทั้งหมดอย่างชัดเจน
🔗 4.5 การสร้างเส้นเชื่อมโยงและจุดหมุนในผัง i2 (Node Linking & Bend Points)
เจ้าหน้าที่สามารถลากเส้นโยงความสัมพันธ์ใหม่ด้วยตนเอง และสร้างจุดหมุนหักมุม 90 องศา (Bend Point) เพื่อจัดระเบียบเส้นทางในผังไม่ให้ทับซ้อนกัน
⚡ วิธีการลากเส้นเชื่อมโยงโหนด (Node Linking Workflow):
วิธีที่ 1: ด้ามจับสีม่วง (Purple Handle Drag):
นำเมาส์ไปชี้เหนือโหนดต้นทาง จะปรากฏจุดกลมสีม่วงขนาดเล็กอยู่ขอบบนของโหนด ให้คลิกเมาส์ค้างที่จุดสีม่วงแล้วลากสายสัมพันธ์ไปยังโหนดปลายทาง
วิธีที่ 2: คีย์ลัด Alt + ลากเมาส์ (Alt+Drag):
กดปุ่ม Alt บนคีย์บอร์ดค้างไว้ แล้วคลิกเมาส์ซ้ายค้างที่โหนดต้นทาง ลากเส้นสายสัมพันธ์ไปปล่อยใส่โหนดปลายทางได้ทันที
วิธีที่ 3: ปุ่มคำสั่งในแผงข้าง (Sidebar Button):
คลิกเลือกโหนดต้นทาง ในแผงด้านข้างให้กดปุ่ม 🔗 เชื่อมโยงไปยังโหนดอื่น (#btnStartConnectNode) แล้วคลิกที่โหนดเป้าหมายบนผัง
📐 จุดหมุนและเส้นหักมุม (Interactive Bend Points / 90° Manhattan Routing):
การสร้างจุดหมุน (Create Bend Point):
ดับเบิ้ลคลิก (Double-click) บนเส้นเชื่อมโยง ณ จุดใดก็ได้ จะปรากฏจุดกลมสีฟ้า (Waypoint Handle) ขึ้นมาบนเส้นทันที
การดัดเส้นและปรับมุม (Drag to Position):
คลิกเมาส์ซ้ายค้างที่จุดหมุนสีฟ้า แล้วลากไปวางในตำแหน่งที่ต้องการ เส้นจะหักมุมเลี้ยวตามจุดหมุน สามารถสร้างจุดหมุนได้หลายจุดบนเส้นเดียวกันเพื่อเดินเส้นหลบกลุ่มโหนด
การลบจุดหมุน (Delete Bend Point):
คลิกขวา (Right-click) ที่จุดหมุนสีฟ้า จุดหมุนจะหายไปและเส้นจะกลับมาดึงตรงตามเดิม หรือคลิกเลือกเส้นแล้วกดปุ่ม Delete
🗃️ 4.6 เครื่องมือกลุ่มและการนำทางพื้นที่ในผัง i2 (Multi-Selection & Spatial Zones)
เมื่อต้องจัดการกลุ่มโหนดขนาดใหญ่พร้อมกัน เช่น จัดระเบียบเบอร์โทรศัพท์ 20 เบอร์ให้อยู่เป็นแนวระนาบ หรือจัดกลุ่มบุคคลให้เป็นวงกลม ระบบมีแถบเครื่องมือลอย (Floating Action Bar) และระบบนำทางแบ่ง 2 โซนพื้นที่
🛠️ แถบเครื่องมือลอยเมื่อเลือกหลายโหนด (Multi-Selection Floating Action Bar #i2FloatingActionBar):
ปรากฏอัตโนมัติเมื่อกดเลือกโหนดตั้งแต่ 2 โหนดขึ้นไป (โดยการกด Shift ค้างไว้แล้วคลิกเลือก หรือเปิดโหมดลากคลุม Box Select บนจอสัมผัส):
| ปุ่มคำสั่ง | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|
⭕ วงกลม (#btnGroupCircle) |
คำนวณจุดศูนย์กลางมวล และจัดวางโหนดตามรัศมีวงกลม | จัดเรียงโหนดที่เลือกทั้งหมดกระจายตัวรอบวงกลมสวยงาม |
↔️ แนวนอน (#btnGroupHoriz) |
จัดระเบียบแกน Y ให้เท่ากัน และเว้นระยะแกน X สม่ำเสมอ | เรียงแถวหน้ากระดานแนวนอน เหมาะสำหรับการจัดรายการบัญชีม้าหรือเบอร์โทร |
↕️ แนวตั้ง (#btnGroupVert) |
จัดระเบียบแกน X ให้เท่ากัน และเว้นระยะแกน Y สม่ำเสมอ | เรียงแถวตอนแนวตั้ง เหมาะสำหรับจัดแสดงลำดับสายบังคับบัญชา |
📦 กริด (#btnGroupGrid) |
คำนวณสัดส่วนตาราง Matrix เช่น 3×3 หรือ 4×4 | จัดเรียงโหนดเป็นบล็อกสี่เหลี่ยมกริดประหยัดพื้นที่บนผัง |
🧲 คลายระยะห่าง (#btnGroupAntiCollision) |
คำนวณระยะห่างเฉพาะโหนดที่เลือก | คลายระยะระหว่างโหนดในกลุ่มไม่ให้ตัวหนังสือและไอคอนทับกัน |
👁️ โฟกัสกลุ่มนี้ (#btnGroupIsolate) |
ซ่อนโหนดอื่นๆ ทั้งหมดบนผังชั่วคราว | เน้นเฉพาะเครือข่ายของกลุ่มที่เลือก ตัดสิ่งรบกวนตาออกทั้งหมด |
🗑️ ซ่อนที่เลือก (#btnGroupDelete) |
นำโหนดที่เลือกทั้งหมดเข้าสู่รายการซ่อน (Excluded List) | ซ่อนกลุ่มนี้ออกจากผัง สามารถกดปุ่ม ↺ กู้คืนโหนด บนแถบด้านบนเพื่อเรียกคืนได้ |
✕ ยกเลิก (#btnGroupClear) |
คลิกยกเลิกการเลือก | ปลดการเลือกโหนดทั้งหมด และซ่อนแถบเครื่องมือลอย |
🧭 แถบนำทาง 2 โซนพื้นที่ (Spatial 2-Zone Pills):
ผัง i2 ของระบบ Sloth BPP 215 ถูกจัดแบ่งพื้นที่ในแนวแกน Y เป็น 2 โซนขนาดใหญ่ เพื่อไม่ให้ข้อมูลปะปนกัน:
- ⬆️ ผังระบบเดิม (North Zone -
#btnNavNorthZone): โฟกัสไปที่กลุ่มโหนดข้อมูลคดีและทะเบียนรถเดิมที่สร้างขึ้นจากระบบ BPP-VMS (พิกัด Y ด้านบน) - ⬇️ ผัง i2 นำเข้า (South Zone -
#btnNavSouthZone): เลื่อนกล้องลงไปยังพื้นที่ของผังขนาดใหญ่ที่สกัดมาจากโปรแกรม IBM i2 เช่น Master Chart 68 และโพยนอก (พิกัด Y ด้านล่าง ซึ่งเว้นระยะห่างไว้ 20,000 พิกเซลเพื่อความเป็นระเบียบ) - 🌐 ผังรวมทั้งหมด (All Zones -
#btnNavAllZones): ปรับระดับการซูมและตำแหน่งให้อยู่กึ่งกลาง เพื่อมองเห็นภาพรวมความเชื่อมโยงของทั้ง 2 โซนพร้อมกัน
ระบบแจ้งเตือนอัจฉริยะและการสั่งการผ่านบอท AI (Alerts & AI Bot)
คู่มือการผูกบัญชี Telegram ประจำตัวเจ้าหน้าที่ (@Sloth_bpp215bot) การตั้งค่าเมทริกซ์แจ้งเตือนเฉพาะกล้องและชนิดวัตถุ การกระจายข่าวสารด่วน (Broadcast) การสนทนาสั่งการด้วยภาษาไทยกับ Sloth AI Assistant ระบบอัจฉริยะรับข้อมูลการสืบสวนผ่าน Telegram (Smart Session Intelligence Ingestion) และระบบประมวลผลชุดข้อมูลคดี (Batch Processing & 4-Category Destination Report) พร้อมปุ่มทางลัดเปิดดูถังข้อมูลและยานพาหนะผ่าน Telegram ทันที
📱 5.1 การผูกบัญชี Telegram ส่วนบุคคล (@Sloth_bpp215bot)
เจ้าหน้าที่ผู้ปฏิบัติงานทุกคนสามารถผูกบัญชีแอปพลิเคชัน Telegram ของตนเองเข้ากับระบบ Sloth BPP 215 เพื่อรับการแจ้งเตือนเหตุการณ์สำคัญ ภาพถ่ายรถต้องสงสัย และคลิปวิดีโอสั้นเข้ามือถือได้ตลอดเวลา
📥 ข้อมูลนำเข้า (Input)
กดขอรหัส OTP 6 หลักบนหน้าเว็บ BPP-VMS แล้วนำรหัสไปส่งให้บอท @Sloth_bpp215bot ใน Telegram
⚙️ กลไกประมวลผล (Process)
เซิร์ฟเวอร์จับคู่รหัส OTP กับบัญชีผู้ใช้งาน และบันทึก Telegram Chat ID ลงฐานข้อมูลผู้ใช้
📤 ผลลัพธ์ที่ได้ (Output)
บอทส่งข้อความยืนยันสำเร็จ และสถานะบนหน้าเว็บจะเปลี่ยนเป็น 🟢 เชื่อมต่อแล้ว
🛠️ ขั้นตอนการผูกบัญชีทีละสเต็ป (Step-by-Step):
เปิดแท็บแจ้งเตือนส่วนตัว:
คลิกปุ่ม ⚙️ ตั้งค่าระบบ บนแถบด้านบน ➔ เลือกแท็บที่ 4 "การแจ้งเตือนส่วนตัว" (#btnTabMyAlerts)
ขอรหัสจับคู่ (Request Pair Code):
กดปุ่ม 🔗 ขอรหัสผูก Telegram (#btnReqPairCode) หน้าจอจะปรากฏป๊อปอัปแสดงรหัสตัวเลข 6 หลัก (มีอายุการใช้งาน 10 นาที)
ส่งรหัสให้บอทใน Telegram:
เปิดแอป Telegram ค้นหาบอทชื่อ @Sloth_bpp215bot กด Start แล้วพิมพ์ตัวเลข 6 หลักนั้นส่งให้บอท ระบบจะยืนยันการผูกสำเร็จในทันที
🔔 5.2 การปรับแต่งการแจ้งเตือนส่วนบุคคลและกระจายสัญญาณ (Alert Matrix & Broadcast)
เพื่อป้องกันไม่ให้เจ้าหน้าที่ได้รับการแจ้งเตือนมากเกินไป (Notification Fatigue) ระบบจึงมีระบบ Personal Alert Matrix ให้ผู้ใช้เลือกรับแจ้งเตือนเฉพาะกล้องและเหตุการณ์ที่ตนเองรับผิดชอบ
| การตั้งค่า / สวิตช์ | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|
เปิดแจ้งเตือนส่วนตัว (#chkMyMasterAlert) |
เปิด/ปิด สวิตช์หลักของตนเอง | เปิดหรือระงับการส่งข้อความแจ้งเตือนทั้งหมดมายัง Telegram ของผู้ใช้ |
กระจายแจ้งเตือนทุกคน (Broadcast) (#chkAdminBroadcast) |
เฉพาะ Superadmin | เมื่อเปิดตัวเลือกนี้ เมื่อใดก็ตามที่เกิดเหตุการณ์วิกฤต (เช่น รถ Watchlist สีแดง) ระบบจะส่งข้อความไปยัง Telegram ของเจ้าหน้าที่ทุกคนในหน่วยพร้อมกันทันที |
ตารางเมทริกซ์กล้อง x วัตถุ (#myAlertsCamMatrix) |
ติ๊กเลือกช่องตัดกันระหว่างชื่อกล้อง (CH01-CH16) กับประเภทวัตถุ (คน, รถ, ป้ายทะเบียน, รถต้องสงสัย) | ระบบจะกรองส่งแจ้งเตือนเฉพาะเหตุการณ์ที่ตรงกับช่องที่ติ๊กไว้เท่านั้น เช่น เจ้าหน้าที่เวรประตูค่าย ติ๊กรับเฉพาะกล้อง CH01 และเฉพาะประเภท "รถต้องสงสัย" |
| 💾 บันทึกการแจ้งเตือน | คลิกปุ่มบันทึก | เซฟการตั้งค่าเมทริกซ์ลงฐานข้อมูล มีผลทันทีกับข้อความรอบถัดไป |
🤖 5.3 ผู้ช่วยอัจฉริยะ Sloth AI & NAS Assistant
กดปุ่ม 🤖 Sloth AI Assistant บน Top Bar เพื่อเปิดหน้าต่างสนทนาสั่งการด้วยภาษาธรรมชาติ (Natural Language Processing) ผู้ช่วย AI สามารถสืบค้นข้อมูลคดี ทะเบียนรถ และเอกสารใน Storage ได้ทันที
💬 ตัวอย่างคำสั่งที่สามารถพิมพ์สั่งงาน AI ได้:
คำสั่ง: "ค้นหารถทะเบียน กพ 3771 ว่าเคยผ่านกล้องไหนบ้างช่วง 7 วันที่ผ่านมา"
ผลลัพธ์: AI จะสรุปไทม์ไลน์ เวลา กล้องที่ตรวจพบ พร้อมดึงภาพ Snapshot และระดับความมั่นใจมาแสดงในแชท
คำสั่ง: "สรุปเหตุการณ์ความมั่นคงที่ตรวจพบเมื่อคืนตั้งแต่เวลา 20:00 - 06:00 น."
ผลลัพธ์: AI จะประมวลผลสถิติ แจกแจงจำนวนคนเดินผ่าน บุคคลแปลกปลอม และรถที่วิ่งผ่านนอกเวลาทำการ
คำสั่ง: "ค้นหาบันทึกจับกุมคดียาเสพติดของ นายวรพงษ์ ในคลังจัดเก็บ"
ผลลัพธ์: AI เชื่อมต่อไปยัง NAS Storage เพื่อค้นหาเอกสารสำนวนคดีและแนบลิงก์สำหรับดาวน์โหลดไฟล์ PDF ให้ทันที
⚡ 5.4 ระบบอัจฉริยะรับข้อมูลการสืบสวนผ่าน Telegram & แชท (Smart Intelligence Ingestion)
ระบบ Sloth BPP 215 ได้รับการอัปเกรดความฉลาดของบอท Telegram (@Sloth_bpp215bot) และระบบแชท โดยนำสถาปัตยกรรม Smart Session Management และ Hybrid Intelligence Matching มาใช้งาน ทำให้เจ้าหน้าที่สามารถส่งข้อมูลการสืบสวนภาคสนามเข้าสู่ ถังข้อมูล (Dossier Vault) และ ผังข้อมูล (i2 Graph) ได้โดยตรงแบบอัตโนมัติ 100%
📥 ส่งผ่าน Telegram (Input)
เจ้าหน้าที่ส่งภาพ ทร.14, ตามด้วยข้อความผลเช็คค่ายมือถือ (AIS/TRUE), มิเตอร์ PEA, และข้อมูลรถ
⚙️ การประมวลผลอัจฉริยะ (Process)
เปิด Active Session 30 นาที, ลบตราประทับสีแดง, แก้ไขตัวสะกดเพี้ยนอัตโนมัติ, จับคู่ Hybrid Matching รวบรวมเข้าแฟ้มเดียวกัน
📤 ซิงค์สองทางสมบูรณ์ (Output)
ข้อมูลทั้งหมดถูกจัดเก็บลง ถังข้อมูล (มีปุ่มเปิด Maps พิกัดมิเตอร์) และสร้างโหนดใน ผังข้อมูล i2 ครบถ้วน
🛠️ ฟังก์ชันการรับข้อมูลอัจฉริยะ 5 ประการสำคัญ:
| ระบบ / กลไกอัจฉริยะ | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมาในระบบ (Output) |
|---|---|---|
| 1. ระบบจำบริบทแชท 30 นาที (Smart Session Window) | เมื่อส่ง ทร.14 บอทจะเปิด Active Session นาน 30 นาที (1,800 วินาที) สำหรับ chat_id นั้น |
หากส่งข้อความผลสืบสวนตามมา เช่น เบอร์โทรศัพท์, ข้อมูลการเปิดใช้งานซิม, ข้อมูลมิเตอร์ไฟฟ้า PEA บอทจะรู้บริบททันทีและนำไปรวมในแฟ้มบุคคลเดียวกัน ไม่แตกเป็นรายงานเหตุการณ์แยกเคสอีกต่อไป |
| 2. ระบบจับคู่แบบผสม (Hybrid Matching 4 ลำดับ) | เมื่อได้รับข้อความผลสืบสวน ระบบจะค้นหาความเชื่อมโยงตามลำดับความน่าเชื่อถือ: 1. เลขประจำตัวประชาชน 13 หลัก (แม่นยำสูงสุด) 2. หมายเลขโทรศัพท์ที่มีบันทึกในระบบ 3. Active Dossier Session (กำลังคุยเรื่องบุคคลนี้อยู่) 4. ชื่อ-นามสกุล บุคคล |
อัปเดตข้อมูลเข้าแฟ้มบุคคลที่ถูกต้อง 100% แม้เจ้าหน้าที่จะไม่ได้พิมพ์ชื่อบุคคลซ้ำในทุกข้อความ |
| 3. ระบบรวบรวมชุดข้อมูล Debounce & ปุ่มสั่งประมวลผลทันที (Batch Gathering & Immediate Feedback) | ระบบขยายเวลารวบรวมชุดข้อมูล (Debounce) เป็น 5.0 วินาที และส่งปุ่ม Inline [✅ เสร็จสิ้นการส่ง / ประมวลผล ({cnt} รายการ)] พร้อมระบบตอบสนองทันที (Immediate Feedback) | หากส่งภาพ ทร.14 หลายภาพพร้อมข้อความรถ ระบบจะรวบรวมไฟล์ทั้งหมดเข้าเป็นชุดเดียวกัน ป้องกันเคสแตกกระจายจากสัญญาณเน็ตมือถือ พร้อมส่งรายงานสรุปแยก 4 ปลายทาง และปุ่มดูถังข้อมูลใน Telegram (ดูรายละเอียดเต็มในหัวข้อ 5.5) |
| 4. ลบตราประทับสีแดง & แก้ไขชื่อเพี้ยน (Red Stamp Removal & Caption Typo Correction) |
- _remove_red_markup: กรองเม็ดสีแดงของตราประทับทางราชการออกด้วย Color Thresholding ก่อนส่งเข้า OCR- หากส่งแคปชันระบุชื่อ (เช่น "น.ส.บุศยา พรมพิบาล หรือบีม...") ระบบจะนำชื่อจากแคปชันมาแทนที่ตัวสะกดเพี้ยน |
แก้ปัญหาชื่อเพี้ยนจากรอยประทับ (เช่น "พรมพิ๊บาล" ➔ "พรมพิบาล", "ลุตวิกvow" ➔ "ลุดวิก ชอบท์") ได้ตั้งแต่ต้นทาง |
| 5. การจัดการยานพาหนะส่วนกลาง (Central Vehicle Intelligence Manager) |
- ตรวจจับเล่มทะเบียนรถ (DLT), คัดกรองชื่อบริษัทไฟแนนซ์/ลิสซิ่งออกอัตโนมัติ - สั่งการด้วยคำสั่ง /vehicle <ทะเบียน> หรือ /รถ <ทะเบียน> ใน Telegram
|
ค้นหาข้อมูลประวัติรถ ผู้ครอบครอง และสามารถกดปุ่มผูกรถเข้ากับแฟ้มบุคคลในถังข้อมูลได้ทันที |
1. ถ่ายรูปเอกสาร ทร.14 หรือใบหน้าบุคคล ส่งเข้าบอท
@Sloth_bpp215bot พร้อมแคปชันชื่อภาษาไทย (เช่น นายสมบูรณ์ ทุเรศไธสง)2. ภายใน 30 นาที สามารถคัดลอกข้อความผลเช็คค่ายมือถือ (เช่น "เครือข่าย A : เบอร์...") หรือข้อความ PEA ส่งตามเข้าไปได้ทันที
3. ระบบจะรวมข้อมูลทั้งหมดเข้าสู่ ถังข้อมูล (Dossier Vault) และแสดงเป็นโหนดมิเตอร์ไฟฟ้า ⚡ และโหนดเบอร์โทรศัพท์ใน ผังข้อมูล (i2 Graph) ให้อัตโนมัติโดยไม่ต้องเปิดคอมพิวเตอร์ทำเอง!
📦 5.5 ขั้นตอนการกดปุ่มประมวลผล, รายงานสรุปแยก 4 ปลายทาง และปุ่มทางลัดใน Telegram (Batch Processing & 4-Category Destination Report)
เพื่อตอบสนองต่อการปฏิบัติงานภาคสนามที่ต้องการความรวดเร็วและความชัดเจนสูงสุด ระบบ Sloth BPP 215 ได้รับการอัปเกรดระบบการตอบสนองของปุ่ม "เสร็จสิ้นการส่ง / ประมวลผล" บน Telegram (@Sloth_bpp215bot) ให้มี การตอบสนองทันที (Immediate UI Feedback) พร้อมรายงานสรุปแจกแจงปลายทางของข้อมูล 4 หมวดหมู่อย่างเป็นระเบียบ และปุ่มทางลัดกดเรียกดูการ์ดประวัติบุคคลในถังข้อมูลได้ทันทีผ่านหน้าต่างแชท
📥 1. ผู้ใช้กดปุ่มคำสั่ง (Button Tap)
แตะปุ่ม [✅ เสร็จสิ้นการส่ง / ประมวลผล] ใน Telegram เพื่อสั่งให้ AI เริ่มประมวลผลทันที
⚙️ 2. การตอบสนองทันที (Immediate Feedback)
แสดง Toast Alert บนหัวจอทันที + เปลี่ยนข้อความเป็น "⏳ กำลังประมวลผล..." และปลดปุ่มออก ป้องกันการกดซ้ำซ้อน
📤 3. รายงาน 4 หมวด + ปุ่มทางลัด (Summary & Shortcuts)
ส่งรายงานแจกแจง 4 ปลายทาง (ถังข้อมูล, คลัง NAS, ผัง i2, ระบบรถ) พร้อมปุ่ม [👤 ดูถังข้อมูล] เปิดดูการ์ดในแชททันที
🛠️ 1. ขั้นตอนการทำงานของปุ่มคำสั่งและการเปลี่ยนสถานะ (Step-by-Step UI Flow):
การรวมชุดข้อมูลอัตโนมัติ (Batch Gathering & Debounce Timer):
เมื่อเจ้าหน้าที่ส่งภาพถ่าย ทร.14, เอกสาร, ภาพรถ หรือข้อความสืบสวนเข้ามา บอทจะเริ่มนับเวลาหน่วง (Debounce 5.0 วินาที) เพื่อเปิดโอกาสให้ส่งหลายรายการพร้อมกัน และส่งข้อความปุ่ม Inline:
👉 หากส่งครบแล้ว สามารถกดปุ่มด้านล่างเพื่อประมวลผลทันทีครับผม
การตอบสนองทันทีด้วย Toast Alert (Instant Header Toast):
ทันทีที่แตะปุ่ม บอทจะยิง answerCallbackQuery ขึ้นแถบข้อความ Toast บนหัวจอ Telegram ทันที:
"⏳ กำลังเริ่มประมวลผลชุดข้อมูล กรุณารอสักครู่ครับ... 🦥"
ช่วยให้เจ้าหน้าที่มั่นใจได้ 100% ว่าระบบรับคำสั่งแล้ว แม้จะใช้เวลาประมวลผล AI OCR นาน 10-15 วินาทีก็ตาม
การเปลี่ยนสถานะข้อความและปลดปุ่ม (In-Progress State Lock):
ข้อความเดิมจะถูกแก้ไข (Edit Message) เป็นสถานะกำลังทำงาน และนำปุ่ม Inline ออกทันที เพื่อป้องกันการกดซ้ำซ้อน:
ระบบกำลังอ่านเอกสาร (AI OCR) สกัดข้อมูลบุคคล และจัดระเบียบข้อมูลลงถัง กรุณารอสักครู่ครับผม 🦥✨
📋 2. โครงสร้างรายงานสรุปปลายทางข้อมูล 4 หมวดหมู่ (4-Category Ingestion Architecture):
เมื่อ AI อ่านเอกสารและจัดเก็บข้อมูลเสร็จสิ้น บอทจะส่งข้อความรายงานสรุปแจกแจงว่าข้อมูลถูกนำไปทำอะไร และจัดเก็บไว้ที่ใดในระบบอย่างชัดเจน:
| หมวดหมู่ปลายทาง | การนำข้อมูลไปทำอะไร (Action & Purpose) | ปลายทางที่จัดเก็บจริงและผลลัพธ์ (Destination & Output) |
|---|---|---|
| 🗂️ 1. ถังข้อมูลบุคคล (Dossier Vault) |
- สกัดชื่อ-นามสกุล, เลขประจำตัวประชาชน 13 หลัก, หมายเลขโทรศัพท์ทุกค่าย, ที่อยู่ภูมิลำเนา, อายุ และพฤติการณ์คดี - ตรวจจับความสัมพันธ์เครือข่าย/ครอบครัวระหว่างบุคคลที่ปรากฏในชุดเอกสาร |
- ปลายทาง: สร้าง/อัปเดตไฟล์ /Dossiers/<dossier_id>/profile.json บนเซิร์ฟเวอร์- ผลลัพธ์: ปรากฏเป็นการ์ดแฟ้มประวัติบุคคลในหน้าต่าง ถังข้อมูล (Arrest Dossier Vault) บน Live Dashboard พร้อมค้นหาได้ทันที |
| 📁 2. คลังจัดเก็บหลักฐาน (NAS Storage) |
- บันทึกไฟล์ภาพต้นฉบับ ทร.14, ภาพถ่ายสถานที่, สลิปโอนเงิน, ภาพยานพาหนะ หรือไฟล์ PDF เอกสารรายงาน - แยกหมวดหมู่ย่อย Photos และ Documents โดยไม่แก้ไขหรือลดทอนคุณภาพไฟล์
|
- ปลายทาง: โฟลเดอร์สำนวนคดีจริงบน NAS Storage เช่น /Cases/2026/09/<case_id>/- ผลลัพธ์: จัดเก็บถาวรปลอดภัยในคลัง NAS Storage ไม่สูญหายแม้เซิร์ฟเวอร์รีบูต และเปิดดูย้อนหลังได้ตลอดเวลา |
| 🕸️ 3. ผังข้อมูลความสัมพันธ์ (i2 Graph) |
- นำบุคคลเป้าหมายไปสร้างเป็น โหนดบุคคล (Person Node) - สกัดสลิปธนาคารสร้าง โหนดบัญชีธนาคาร (Bank Node) และเส้นทางเงิน - สกัดมิเตอร์ไฟฟ้าสร้าง โหนดมิเตอร์ PEA (⚡) พร้อมพิกัด GPS - ลากเส้นเชื่อมโยงความสัมพันธ์เครือข่ายและครอบครัวอัตโนมัติ |
- ปลายทาง: ผังเครือข่ายความสัมพันธ์ i2 Network Graph บน Live Dashboard - ผลลัพธ์: ผังเชื่อมโยงความสัมพันธ์จะปรากฏเส้นโยงทันที โดยไม่ต้องวาดเองด้วยมือในโปรแกรม i2 |
| 🚘 4. ข้อมูลยานพาหนะ (Central Vehicles) |
- สกัดข้อมูลป้ายทะเบียน, หมวดจังหวัด, ชนิดรถ, ยี่ห้อ, รุ่น และสี จากภาพถ่ายเล่มทะเบียน (DLT) หรือข้อความกำกับ - ผูกชื่อผู้ครอบครองเข้ากับแฟ้มบุคคลเป้าหมายในถังข้อมูล |
- ปลายทาง: ฐานข้อมูลยานพาหนะส่วนกลาง (Central Vehicle Intelligence) - ผลลัพธ์: สามารถสั่งค้นหาประวัติรถด้วยคำสั่ง /vehicle <ทะเบียน> หรือ /รถ <ทะเบียน> ใน Telegram ได้ทันที
|
⚡ 3. ปุ่มทางลัดโต้ตอบใน Telegram (Interactive Shortcut Buttons):
ท้ายข้อความรายงานสรุป ระบบจะแนบปุ่ม Inline อำนวยความสะดวกให้เจ้าหน้าที่ตรวจสอบข้อมูลได้ทันทีผ่านมือถือ:
ฟังก์ชัน: ดึงข้อมูลประวัติบุคคลฉบับเต็มจากการ์ดถังข้อมูล (Dossier Profile Card) ส่งตอบกลับใน Telegram แชททันที:
• 🪪 เลขประจำตัวประชาชน 13 หลัก
• 📞 รายการเบอร์โทรศัพท์ทุกค่าย (AIS, TRUE)
• 🏠 ที่อยู่ภูมิลำเนาตามทะเบียนราษฎร
• ⚡ มิเตอร์ไฟฟ้า PEA พร้อมลิงก์ Google Maps นำทางสู่พิกัดเสาไฟ
• 🚘 รายการยานพาหนะที่ครอบครอง
• 📑 จำนวนไฟล์หลักฐานทั้งหมดในถังข้อมูล
• 📁 รหัสแฟ้มในคลัง NAS
ฟังก์ชัน: เรียกดูข้อมูลจำเพาะของรถคันที่ตรวจพบจากเอกสารคดี:
• ป้ายทะเบียนและจังหวัด
• ประเภทรถ (เก๋ง, กระบะ, จักรยานยนต์)
• ยี่ห้อ, รุ่น และสีตัวถัง
• ชื่อผู้ครอบครองและสถานะการผูกแฟ้มบุคคล
ฟังก์ชัน: ปุ่มยืนยันความถูกต้องของแฟ้มสำนวนคดี:
• เจ้าหน้าที่แตะเพื่อบันทึกสถานะการยืนยัน (Verified Status)
• ระบบจะตอบกลับยืนยันความถูกต้องและบันทึกประวัติผู้ตรวจสอบลงใน Log คดี
กรณีที่ชื่อไฟล์ ทร.14 หรือรหัสคดีมีอักขระพิเศษ (เช่น เครื่องหมาย Underscore
_ ใน Doc_1_TR14_คดี_...) ซึ่งอาจทำให้โปรแกรม Telegram ปฏิเสธการจัดรูปแบบตัวหนา/เอียง ระบบของ Sloth BPP 215 จะตรวจจับอัตโนมัติและทำการ Retry ส่งข้อความซ้ำเป็นแบบข้อความธรรมดา (Plain Text Fallback) ให้อัตโนมัติในทันที ทำให้ ไม่มีข้อความสรุปหรือรายงานใดๆ ตกหล่นหรือสูญหาย อย่างแน่นอน 100%
การบริหารจัดการระบบ ความปลอดภัย และสิทธิ์ผู้ใช้งาน (Administration)
คู่มือสำหรับผู้ดูแลระบบและเจ้าหน้าที่ด้านเทคนิค: การจัดการบัญชีผู้ใช้งาน สิทธิ์การเข้าถึง 4 ระดับ (RBAC) การตรวจสอบประวัติการใช้งาน (Audit Logs) การเพิ่มและตั้งค่ากล้อง NVR การเชื่อมโยงโครงข่ายข้ามหน่วยงาน (Federation Mesh & WireGuard) และตารางสรุปคีย์ลัดคำสั่งด่วนทั้งหมดในระบบ
👥 6.1 ข้อมูลบัญชีและระดับสิทธิ์ (Profile & RBAC Roles)
คลิกปุ่ม 👤 ข้อมูลบัญชี บน Top Bar เพื่อเปิดหน้าต่างโปรไฟล์ส่วนตัว ตรวจสอบระดับสิทธิ์ และเปลี่ยนรหัสผ่าน
| ระดับสิทธิ์ (Role) | ป้ายสถานะ | ขอบเขตอำนาจและการเข้าถึงฟังก์ชันในระบบ |
|---|---|---|
| ผู้ใช้งานทั่วไป (User) | 👤 USER | ดูภาพสดกล้อง (Live Grid), ดูเหตุการณ์สด, ค้นหาเหตุการณ์ในคลัง, เล่นคลิป, และดูภาพย้อนหลัง (Playback) |
| เจ้าหน้าที่สืบสวน (Officer) | 🛡️ OFFICER | สิทธิ์เท่ากับ User + สามารถเพิ่ม/แก้ไขทะเบียนใน Watchlist, ตรวจสอบและสอน AI ป้ายทะเบียน (Active Learning), และเข้าดูแฟ้มใน Arrest Vault |
| ผู้ดูแลระบบ (Admin) | ⚙️ ADMIN | สิทธิ์เท่ากับ Officer + เข้าถึงหน้าต่าง Settings ทั้งหมด, เพิ่ม/แก้ไข/ลบกล้อง NVR, ปรับแต่งโซน LPR, จัดการบัญชีผู้ใช้ และดูบันทึก Audit Logs |
| ผู้ดูแลสูงสุด (Super Admin) | 👑 SUPERADMIN | สิทธิ์เต็มทุกส่วนในระบบ + จัดการโครงข่ายข้ามหน่วยงาน (Federation), บันทึกผังแม่แบบหลัก (Master Layout) ในผัง i2, และส่งสัญญาณเตือนด่วนทั่วถึง (Broadcast) |
🔑 ขั้นตอนการเปลี่ยนรหัสผ่านตนเอง:
เปิดหน้าต่างโปรไฟล์:
กดปุ่ม 👤 ข้อมูลบัญชี บนแถบด้านบน ➔ เลื่อนลงมาที่ส่วน "เปลี่ยนรหัสผ่าน"
กรอกรหัสผ่าน:
ระบุรหัสผ่านเดิม ➔ ระบุรหัสผ่านใหม่ (ความยาวอย่างน้อย 8 ตัวอักษร แนะนำให้มีทั้งตัวพิมพ์เล็ก พิมพ์ใหญ่ และตัวเลข) ➔ ยืนยันรหัสผ่านใหม่อีกครั้ง
ยืนยันการเปลี่ยน:
กดปุ่ม บันทึกรหัสผ่านใหม่ ระบบจะอัปเดตรหัสผ่านใหม่ลงฐานข้อมูลทันทีโดยไม่ต้องออกจากระบบ
📋 6.2 บันทึกประวัติการใช้งาน (Audit Logs - Admin Only)
ระบบบันทึกทุกการกระทำสำคัญของผู้ใช้งานลงในฐานข้อมูลความปลอดภัยที่ไม่สามารถแก้ไขหรือลบได้ เพื่อความโปร่งใสและตรวจสอบได้ย้อนหลัง
| ประเภทการกระทำ | ข้อมูลที่ระบบบันทึก (Event Metadata) | วัตถุประสงค์ในการตรวจสอบ |
|---|---|---|
| การเข้าสู่ระบบ / ออกจากระบบ | วันเวลา, บัญชีผู้ใช้, หมายเลข IP, เบราว์เซอร์, สถานะ (สำเร็จ/ล้มเหลว) | ตรวจจับการพยายามเดารหัสผ่าน (Brute-force Attack) หรือการล็อกอินจาก IP ผิดปกติ |
| การส่งออกข้อมูล (Export Evidence) | ชื่อผู้ใช้, หมายเลขคลิปวิดีโอ, ช่วงเวลาที่ตัดคลิป, ชื่อกล้อง | ควบคุมการนำไฟล์ภาพหรือวิดีโอออกจากระบบ ป้องกันข้อมูลรั่วไหล |
| การแก้ไขการตั้งค่าระบบ | ผู้แก้ไข, กล้องที่ถูกเปลี่ยนชื่อ, การเปลี่ยน URL RTSP, การแก้ไขโซน LPR | ตรวจสอบประวัติการคอนฟิกเพื่อป้องกันข้อผิดพลาดในการปฏิบัติงาน |
| การจัดการ Watchlist & ผัง i2 | การเพิ่ม/ลบทะเบียนรถเป้าหมาย, การอัปโหลดหรือลบไฟล์ผังคดี .anb | บันทึกสายการสืบสวนและเจ้าหน้าที่ผู้รับผิดชอบคดี |
📹 6.3 การจัดการและเพิ่มกล้อง NVR (Camera Provisioning)
ผู้ดูแลระบบสามารถเพิ่มกล้องวงจรปิด IP Camera เข้าสู่ระบบได้อย่างง่ายดายผ่านหน้าต่าง Settings ➔ แท็บ "กล้องในระบบ (NVR)"
กดปุ่มเพิ่มกล้อง:
กดปุ่ม + เพิ่มกล้องใหม่ (#btnShowAddCam)
กรอกรายละเอียดกล้อง:
- ชื่อกล้อง (อังกฤษ): เช่น gate_front (ใช้เป็นตัวอ้างอิงในระบบ ห้ามเว้นวรรค)
- ชื่อแสดงผล (ไทย): เช่น CH01 ประตูหน้าค่าย
- RTSP Main Stream: ลิงก์สตรีมความละเอียดสูงจากกล้อง เช่น rtsp://admin:pass@192.168.1.50:554/Streaming/Channels/101
- RTSP Sub Stream: ลิงก์สตรีมความละเอียดต่ำ เช่น rtsp://admin:pass@192.168.1.50:554/Streaming/Channels/102
- การตรวจจับ (Detect): ติ๊กเปิดเพื่อให้ AI YOLO11 และ LPR วิเคราะห์ภาพ
- การบันทึก (Record): ติ๊กเปิดเพื่อให้บันทึกวิดีโอ 24 ชั่วโมงลงฮาร์ดดิสก์
ยืนยันและรีสตาร์ทสตรีม:
กดปุ่ม ตกลง ระบบจะอัปเดตไฟล์คอนฟิก Frigate NVR และเริ่มดึงภาพสดขึ้นสู่หน้า Dashboard ทันที
- ฝั่งหน้างาน (Bridge Client): Windows Firewall ต้องอนุญาตการเชื่อมต่อขาออก (Outbound) ไปยังพอร์ต
1935(RTMP) ของเซิร์ฟเวอร์ และพอร์ต554(RTSP) ในวง LAN - ฝั่งศูนย์กลาง (BPP-VMS Server): เราเตอร์ศูนย์ต้อง Forward พอร์ต Inbound
1935ตรงมายังเครื่อง BPP-VMS Docker - การเข้ารหัสรหัสผ่าน: โปรแกรมจะทำ URL-encoding อักขระพิเศษใน Username และ Password ให้อัตโนมัติ เพื่อป้องกันปัญหารหัสผ่านที่มีสัญลักษณ์พิเศษ (เช่น
@,$,:,#) ทำให้ไม่ต้องกังวลเรื่องพิมพ์ URL ผิด
สำหรับการเชื่อมต่อกล้อง TP-Link VIGI (Smart AI), กล้องอ่านป้ายทะเบียน Dahua ITC (Edge LPR Webhook) หรือการดึงภาพจากหน่วยงานภายนอกที่ไม่มี Public IP ด้วย BPP NVR Bridge สามารถศึกษาขั้นตอนอย่างละเอียดและดาวน์โหลดโปรแกรมได้ที่ หมวดที่ 7: กล้องภายนอก & Edge LPR (VIGI & Bridge)
🌐 6.4 โครงข่ายเชื่อมโยงหน่วยงาน (Federation Mesh & MikroTik WireGuard)
ระบบ Sloth BPP 215 รองรับสถาปัตยกรรม Federation Network Mesh ช่วยให้สามารถดึงสัญญาณภาพสดและประวัติการตรวจจับจากกล้องของกองร้อยข้างเคียง หรือฐานปฏิบัติการย่อย มาแสดงผลบนหน้าจอของกองบังคับการส่วนหน้าได้แบบไร้รอยต่อ
| ปุ่มคำสั่ง / ฟังก์ชัน | การนำข้อมูลไปทำอะไร (Input & Action) | ผลลัพธ์ที่ได้ออกมา (Output & Effect) |
|---|---|---|
🌐 โครงข่ายหน่วยงาน (#btnNodes) |
คลิกเปิดหน้าต่าง Federation Settings | เปิดหน้าต่างจัดการโหนดเพื่อนบ้าน (Peer Nodes) และสถานะเครือข่าย |
| ช่องกรอก IP โหนดเพื่อนบ้าน | ระบุ IP Address ของเครื่อง NVR ปลายทาง เช่น 10.215.10.1 หรือผ่าน WireGuard VPN |
ส่งคำขอเชื่อมต่อ Handshake และตรวจสอบโทเคนความปลอดภัยข้ามหน่วยงาน |
ดึงข้อมูล (#btnFetchFederatedCams) |
คลิกเรียกดูรายชื่อกล้องจากโหนดข้างเคียง | แสดงรายการกล้องทั้งหมดของฐานปฏิบัติการปลายทาง ให้ผู้ใช้เลือกดึงเฉพาะบางกล้องได้ |
ซิงค์ทั้งหมด (#btnSyncAllFederatedCams) |
คลิกเพื่อเชื่อมโยงกล้องทั้งหมด | เพิ่มกล้องของหน่วยข้างเคียงเข้ามาเป็นช่องเสริมในตาราง Dashboard ทันที |
- สำหรับคู่มือปฏิบัติการระบบ AI บอท และเครือข่ายกล้อง VPN: ศึกษาได้จาก คู่มือหลัก BPP-VMS Ultimate Master Guide (n8n AI & MikroTik WireGuard)
- สำหรับการจัดตั้งโครงข่าย NVR ข้ามกองร้อย: ศึกษาได้จาก คู่มือ Federation Network Mesh Manual
🚀 6.5 การติดตั้งเครื่องใหม่ และการอัปเดตระบบอัตโนมัติ (1-Click Setup & Update)
เพื่อความสะดวกสูงสุดของเจ้าหน้าที่เทคนิคและผู้ดูแลระบบ BPP-VMS ได้จัดเตรียมเครื่องมือช่วยติดตั้งและอัปเดตแบบ 1-Click Automation ไว้ที่โฟลเดอร์หลัก (D:\BPP-VMS\) ทำให้สามารถเริ่มระบบบนเครื่องใหม่หรืออัปเดตเวอร์ชันล่าสุดได้โดยไม่ต้องพิมพ์คำสั่งใน Terminal เองแม้แต่บรรทัดเดียว:
📦 ชุดติดตั้งระบบสำเร็จรูปสำหรับเครื่องใหม่ (Zero-GitHub Installer ZIP) ไม่ต้องล็อกอิน GitHub
แพ็กเกจระบบครบชุด โครงสร้างโฟลเดอร์สมบูรณ์ 100% เพียงดาวน์โหลดแล้วแตกไฟล์ลงที่ D:\ จะได้โฟลเดอร์ D:\BPP-VMS\ พร้อมดับเบิลคลิก Setup_New_Machine.bat ติดตั้งได้ทันที ปลอดภัย ไร้ความเสี่ยงต่อบัญชี GitHub
https://sloth.bpp215.com/downloads/bpp-vms-installer.zip
⚡ Setup_New_Machine.bat (ลงเครื่องใหม่)
ดับเบิลคลิกเพื่อเริ่มระบบบนเครื่องใหม่ทันที:
- ตรวจสอบความพร้อมของ Docker Desktop
- สุ่มสร้างรหัสความปลอดภัย 64-char Hex ใน
.envครบถ้วน - สร้างใบรับรอง HTTPS (SSL) อัตโนมัติ
- เริ่มคอนเทนเนอร์ 17 ตัว และสร้างบัญชี Super Admin
- เปิดเบราว์เซอร์เข้า
https://localhostทันที
🔄 Update_System.bat (อัปเดตระบบ)
ดับเบิลคลิกเพื่ออัปเดตเวอร์ชันล่าสุด:
- รองรับทั้งโหมด Git (
git pull) และโหมด Offline ZIP - เริ่มบริการใหม่ด้วยโค้ดเวอร์ชันล่าสุด
- ข้อมูลไม่สูญหาย: ข้อมูลผู้ใช้ รหัสผ่าน และคลิปย้อนหลังคงอยู่ครบ 100%
- ปลอดภัย ไม่ลบฐานข้อมูลเดิม
📦 Export_Installer_Package.bat
สคริปต์แพ็กเกจบนเครื่องแม่ สำหรับแจกจ่าย:
- สร้างไฟล์
bpp-vms-installer.zipอัตโนมัติใน 4 วินาที - ตัดไฟล์ประวัติและไฟล์ความลับออก ปลอดภัย 100%
- วางไฟล์พร้อมโหลดบนเว็บและพร้อมก๊อปปี้ลง Flash Drive
⌨️ 6.6 ตารางสรุปคีย์ลัดทั้งหมดในระบบ (Keyboard Shortcuts Cheat Sheet)
เพื่อความรวดเร็วสูงสุดในการปฏิบัติหน้าที่ควบคุมสถานการณ์ เจ้าหน้าที่สามารถใช้คีย์ลัดบนแป้นพิมพ์เพื่อสั่งการระบบได้ทันที:
| คีย์ลัด (Shortcut) | หน้าต่างที่ใช้งาน | คำสั่งและการทำงาน |
|---|---|---|
| Esc | ทุกหน้าต่าง (Viewer, Modal, Playback, i2) | ปิดหน้าต่างป๊อปอัปปัจจุบัน และกลับสู่หน้า Dashboard |
| Spacebar | เครื่องเล่นคลิป / Playback | สลับการ เล่น (Play) และ หยุดชั่วคราว (Pause) วิดีโอ |
| ◀ / ▶ | เครื่องเล่นคลิป / Playback | เลื่อนวิดีโอถอยหลัง / เดินหน้า ทีละ 5 วินาที |
| Ctrl + F | หน้าหลัก Dashboard / ผัง i2 Graph | โฟกัสไปยังช่องค้นหากล้อง หรือช่องค้นหาโหนดในผังทันที |
| Ctrl + Z | ผัง i2 Graph | ย้อนกลับการกระทำล่าสุด (Undo) เช่น ย้ายโหนด, สร้างเส้น, จัดผัง |
| Ctrl + Y | ผัง i2 Graph | ทำซ้ำการกระทำที่ย้อนกลับไป (Redo) |
| Alt + ลากเมาส์ | ผัง i2 Graph | ลากสร้างเส้นเชื่อมโยงความสัมพันธ์ใหม่ระหว่าง 2 โหนด (Drag-to-Connect) |
| ดับเบิ้ลคลิกเส้น | ผัง i2 Graph | สร้างจุดหมุนหักมุม 90 องศา (Bend Point) บนเส้นเชื่อมโยง |
| คลิกขวาที่จุดหมุน | ผัง i2 Graph | ลบจุดหมุนหักมุมออกจากเส้น และคืนค่าเส้นดึงตรง |
| Shift + ลากเมาส์ | ผัง i2 Graph | ตีกรอบสี่เหลี่ยมเพื่อเลือกกลุ่มโหนดหลายตัวพร้อมกัน (Box Select) |
| ดับเบิ้ลคลิกที่โหนด | ผัง i2 Graph | เลือกทั้งกลุ่มเครือข่ายที่เชื่อมโยงถึงกันทั้งหมด (Select Cluster) |
| Delete / Backspace | ผัง i2 Graph | ซ่อนโหนดหรือเส้นที่เลือกอยู่ออกจากผังชั่วคราว |
การเชื่อมต่อกล้องภายนอก, กล้อง Edge LPR & BPP NVR Bridge (Zero MikroTik)
คู่มือปฏิบัติการเชื่อมต่อกล้อง TP-Link VIGI (Smart AI In-Camera), กล้องตรวจจับป้ายทะเบียนเฉพาะทาง Dahua ITC / VIGI LPR ผ่านระบบ Edge Webhook, และการดึงสัญญาณภาพจากหน่วยงานภายนอกที่ไม่มี Public IP (CGNAT / 4G SIM) ด้วยโปรแกรม BPP NVR Bridge โดยไม่ต้องติดตั้งเราเตอร์ MikroTik เพิ่มเติม
🛰️ 7.1 ภาพรวมสถาปัตยกรรม Hybrid Intelligence & Edge AI Pipeline
ระบบ Sloth BPP 215 รองรับการประมวลผลวิดีโออัจฉริยะแบบ Hybrid Architecture โดยแบ่งการทำงานออกเป็น 3 รูปแบบตามศักยภาพของฮาร์ดแวร์หน้างาน เพื่อให้เซิร์ฟเวอร์หลักสามารถรองรับกล้องได้จำนวนมากที่สุดโดยไม่เกิดคอขวดที่ CPU/GPU:
📥 ช่องทางรับข้อมูล (Input)
RTSP Stream (554), Edge LPR Webhook (:443), หรือ RTMP Outbound Push (:1935) จากหน้างาน
⚙️ กลไกประมวลผล (Process)
Server AI Drop (ประหยัด CPU 100%), Central Gatekeeper ตรวจสอบสิทธิ์, และ Watchlist Instant Match (< 50ms)
📤 ผลลัพธ์ที่ได้ (Output)
ภาพสดบน Live Dashboard, บันทึกวิดีโอ 24/7, และส่งแจ้งเตือน Telegram พร้อมภาพถ่ายรถและป้ายทะเบียนทันที
🛠️ ตารางเปรียบเทียบรูปแบบกล้อง 3 กลุ่มในระบบ:
| ประเภทกล้อง | จุดประมวลผล AI | ภาระโหลดบนเซิร์ฟเวอร์ | คุณลักษณะและการแจ้งเตือน |
|---|---|---|---|
| 1. กล้องทั่วไป (General CCTV) | Server AI บนเซิร์ฟเวอร์ | ใช้ GPU/CPU ในการถอดรหัสและรันโมเดล YOLOv8 + LPR Engine | รองรับกล้องมาตรฐานทุกยี่ห้อ (ONVIF/RTSP) เซิร์ฟเวอร์ตรวจจับคน ยานพาหนะ และอ่านป้ายทะเบียน |
| 2. กล้อง TP-Link VIGI (Smart AI) | In-Camera AI ในตัวกล้อง | 0% โหลด AI เซิร์ฟเวอร์ทำหน้าที่บันทึกและแสดงภาพสดเท่านั้น | ชิป AI ในกล้องแยกแยะคนและยานพาหนะเอง BPP-VMS ปิด Server Detect เพื่อประหยัดทรัพยากร 100% |
| 3. กล้อง Dahua ITC (Edge LPR) | Edge Hardware AI | เกือบ 0% รับเฉพาะข้อมูลสรุป Webhook JSON + ภาพถ่าย | กล้องอ่านป้ายและตัดภาพรถด้วยตัวเอง ยิงเข้าเซิร์ฟเวอร์ผ่าน Webhook ตรวจจับตรง Watchlist ทันทีใน < 50ms |
📹 7.2 การเชื่อมต่อกล้อง TP-Link VIGI (Standalone & Multi-Channel NVR)
กล้องวงจรปิด TP-Link VIGI ทั้งแบบตัวเดี่ยว (Standalone) และแบบเชื่อมต่อผ่านเครื่องบันทึก VIGI NVR ใช้พอร์ต RTSP มาตรฐานคือ 554 มีโครงสร้าง URL สตรีมดังนี้:
| รูปแบบการเชื่อมต่อ | โครงสร้าง RTSP URL (Port 554) | คำแนะนำการใช้งาน |
|---|---|---|
| กล้อง VIGI เดี่ยว (Main Stream) | rtsp://{user}:{pass}@{ip}:554/stream1 |
ภาพคมชัดสูงสุด (1080p/4K) เหมาะสำหรับกล้องจุดสำคัญที่อยู่ในวงแลนเดียวกัน |
| กล้อง VIGI เดี่ยว (Sub Stream) | rtsp://{user}:{pass}@{ip}:554/stream2 |
ประหยัดแบนด์วิดท์สูงสุด ลื่นไหล ไม่กระตุก เหมาะสำหรับดูภาพสดหลายช่องพร้อมกัน |
| เครื่องบันทึก VIGI NVR ช่องที่ 1 | rtsp://{user}:{pass}@{nvr_ip}:554/ch1/stream2 |
ดึงภาพจากช่อง 1 ผ่าน NVR (แนะนำ Sub Stream stream2) |
| เครื่องบันทึก VIGI NVR ช่องที่ 2 | rtsp://{user}:{pass}@{nvr_ip}:554/ch2/stream2 |
ดึงภาพจากช่อง 2 ผ่าน NVR |
| เครื่องบันทึก VIGI NVR ช่องที่ N (1-16) | rtsp://{user}:{pass}@{nvr_ip}:554/ch16/stream2 |
ระบุหมายเลขช่องกล้องได้ตั้งแต่ ch1 ถึง ch16 ตามจำนวนกล้องบน NVR |
🛠️ ขั้นตอนการเพิ่มกล้อง VIGI เข้าสู่ระบบ BPP-VMS:
-
1
เปิดหน้าต่างจัดการกล้อง (Camera Management)
เข้าสู่ระบบในฐานะ Admin คลิกปุ่ม ⚙️ ตั้งค่าระบบ บนแถบด้านบน ➔ เลือกแท็บ "กล้องในระบบ (NVR)" ➔ กดปุ่ม + เพิ่มกล้องใหม่
-
2
เลือกประเภทกล้องเป็น Preset "TP-Link VIGI (Smart AI)"
ในช่อง "ประเภทกล้อง (Preset)" ให้คลิกเลือก "TP-Link VIGI (Smart AI)" ระบบจะนำค่าโครงสร้าง URL และปรับแต่งออปชันการบันทึกภาพให้เหมาะสมโดยอัตโนมัติ
-
3
กรอกชื่อกล้องและวาง RTSP URL
ตั้งชื่อกล้องภาษาอังกฤษ (เช่น
vigi_gate01) ชื่อแสดงผลภาษาไทย (เช่นVIGI ประตู 1) และวาง URL ที่ได้จากตารางด้านบนลงในช่อง "RTSP URL (Main Stream)" -
4
ระบบปิด Server AI ให้อัตโนมัติ (Zero Server Load)
ช่อง "เปิดระบบ AI ตรวจจับ (YOLO/LPR)" จะถูกปลดเครื่องหมายถูกออกโดยอัตโนมัติ เพื่อป้องกันไม่ให้เซิร์ฟเวอร์นำภาพไปประมวลผลซ้ำซ้อน ประหยัด CPU/GPU ได้ 100% แต่ยังคงบันทึกวิดีโอ 24 ชั่วโมง และดูภาพสดได้ครบถ้วน
-
5
บันทึกและเริ่มสตรีม
กดปุ่ม ตกลง ระบบจะบันทึกคอนฟิกและเริ่มดึงภาพขึ้นสู่หน้า Live Dashboard ภายใน 15-20 วินาที
/stream2) เสมอ เพื่อลดปริมาณการใช้แบนด์วิดท์เครือข่าย และช่วยให้ภาพเปิดติดได้ทันทีโดยไม่มีอาการภาพหน่วงหรือดีเลย์
🚗 7.3 การเชื่อมต่อกล้องตรวจจับป้ายทะเบียน Dahua ITC (Edge LPR Webhook)
กล้อง Dahua ITC หรือกล้องอ่านป้ายทะเบียนอัจฉริยะที่มีโมเดล AI ในตัว สามารถอ่านตัวเลข ตัวอักษร หมวดจังหวัด และตัดภาพเฉพาะตัวรถ (Vehicle Snapshot) ส่งตรงเข้าสู่ BPP-VMS ผ่าน Edge LPR Webhook โดยเซิร์ฟเวอร์ไม่ต้องประมวลผลภาพใดๆ เพิ่มเติม:
https://[SERVER_DOMAIN_OR_IP]/api/lpr/camera-webhook?token=bpp_secret_2026
[SERVER_DOMAIN_OR_IP] เป็น IP หรือโดเมนของเซิร์ฟเวอร์ BPP-VMS เช่น https://192.168.1.100/api/lpr/camera-webhook?token=bpp_secret_2026 หรือผ่าน Domain DDNS🛠️ ขั้นตอนการตั้งค่าบนหน้า Web UI ของกล้อง Dahua ITC:
-
1
เข้าสู่หน้าเว็บของตัวกล้อง
เปิดเบราว์เซอร์ พิมพ์ IP ของกล้อง Dahua ITC (เช่น
192.168.1.108) และเข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่านของผู้ดูแลกล้อง -
2
เปิดใช้งานโมดูลอัจฉริยะ (Smart Plan)
ไปที่เมนู Setting ➔ Event ➔ Smart Plan ตรวจสอบให้แน่ใจว่าได้คลิกเปิดใช้งานไอคอน ITC / ANPR (Traffic / License Plate Recognition) และกด Save
-
3
เปิดแท็บส่งข้อมูลแจ้งเตือน (Alarm Center / HTTP Push)
ไปที่เมนู Setting ➔ Network ➔ Access Platform เลือกแท็บ Alarm Center หรือ HTTP Push / Webhook
-
4
กำหนดค่าการส่ง Webhook เข้าเซิร์ฟเวอร์
- Enable: ทำเครื่องหมายถูก [✓]
- Protocol: เลือกHTTPS(หรือHTTPหากไม่ใช้ SSL)
- Server Address / URL: วาง Webhook URL ที่ระบุไว้ด้านบน
- Port:443(สำหรับ HTTPS) หรือ80(สำหรับ HTTP)
- Report Type: ANPR / Vehicle Detection
- Data Content: ติ๊กเลือกส่ง Plate String, Vehicle Picture (ภาพรถเต็มคัน), และ Plate Snapshot (ภาพเจาะป้าย) -
5
บันทึกและทดสอบ
กดปุ่ม Save เมื่อมีรถขับผ่านหน้ากล้อง ข้อมูลจะถูกยิงเข้าสู่ BPP-VMS ทันทีภายในเสี้ยววินาที
เมื่อผู้ดูแลระบบสั่ง "ปิดใช้งานกล้อง" หรือ "ปิด AI" บนหน้าจอ Live Dashboard / Settings ของ BPP-VMS ตัวเซิร์ฟเวอร์จะทำการตรวจสอบสถานะและ ปฏิเสธข้อมูล Webhook ทันที (Drop / HTTP 200 Ignored) โดยไม่มีการประมวลผลต่อ ไม่บันทึกรูปลงฐานข้อมูล และไม่ส่งการแจ้งเตือน Telegram ใดๆ ช่วยให้ผู้ดูแลระบบมีอำนาจควบคุมการทำงานได้อย่างเบ็ดเสร็จ 100%
⚡ 7.4 หน่วยงานภายนอกไม่มี Public IP (CGNAT / 4G SIM) & โปรแกรม BPP NVR Bridge
บ่อยครั้งที่หน่วยงานภาคสนาม เช่น ด่านตรวจชุมชน, ป้อมยาม, หรือโรงเรียน ใช้บริการอินเทอร์เน็ตบ้านทั่วไปหรือซิม 4G ซึ่งผู้ให้บริการจ่าย IP แบบ CGNAT (ไม่มี Public IP) ทำให้ไม่สามารถ Forward Port ได้ และไม่มีงบประมาณสำหรับซื้อเราเตอร์ MikroTik:
💡 ทำไมกล้องหรือเครื่อง NVR ถึงดึงภาพข้ามที่ได้โดยไม่ต้องมี Public IP?
หลักการทำงานของกล้องวงจรปิดยุคใหม่ (เช่น VIGI Cloud หรือ Tuya) อาศัยเทคนิค Outbound Connection (การเชื่อมต่อขาออก):
- Inbound (ภายนอกวิ่งเข้ามาหา): ไฟร์วอลล์และระบบเครือข่ายของผู้ให้บริการเน็ตจะ บล็อกทิ้ง 100% หากไม่มี Public IP และ Port Forwarding
- Outbound (อุปกรณ์ภายในวิ่งออกไปหาเซิร์ฟเวอร์กลาง): ไฟร์วอลล์และเน็ต 4G อนุญาตให้ผ่านได้ 100% เสมอ ดุจเดียวกับการที่เราเปิดเว็บหรือดู YouTube จากในบ้าน
โปรแกรมสำเร็จรูป BPP NVR Bridge สำหรับ Windows (Portable)
แพ็กเกจรวมเอนจิน FFmpeg ความเร็วสูงและหน้าต่างกราฟิกพร้อมใช้งาน แตกไฟล์แล้วเปิดได้ทันที ไม่ต้องลงโปรแกรมเสริม
🛠️ คุณสมบัติเด่นของโปรแกรม BPP NVR Bridge:
| ฟังก์ชันเด่น | การทำงาน | ประโยชน์ต่อการปฏิบัติงาน |
|---|---|---|
| 🚀 Outbound Reverse Push | ส่งสัญญาณภาพผ่านพอร์ต RTMP :1935 ยิงตรงเข้าสู่เซิร์ฟเวอร์ BPP-VMS |
ทะลุไฟร์วอลล์และเน็ตซิม 4G / CGNAT ได้ 100% โดยไม่ต้องขอ Public IP หรือซื้อเราเตอร์ MikroTik |
| 🎨 Cyber Dark Purple GUI | หน้าต่างกราฟิกสำหรับ Windows ใช้งานง่าย ไม่ต้องพิมพ์คำสั่งในหน้าต่างดำ | เจ้าหน้าที่หน้างานทั่วไปสามารถตั้งค่าและใช้งานได้ทันทีเพียงแค่กรอก IP และรหัสผ่าน NVR |
| ⏱️ Watchdog Auto-Healing | ตรวจสอบสถานะการเชื่อมต่อตลอดเวลา หากเน็ตหลุด ไฟตก หรือกล้องดับ จะเชื่อมต่อใหม่ทุก 5 วินาที | ระบบทำงานได้ต่อเนื่อง 24 ชั่วโมงโดยไม่ต้องมีเจ้าหน้าที่คอยรีสตาร์ทโปรแกรม |
| 📥 ย่อลง System Tray | คลิกปุ่มย่อโปรแกรมจะหลบไปอยู่ที่มุมขวาล่างข้างนาฬิกา Windows | ไม่เกะกะหน้าจอ ไม่รบกวนการเปิดดูภาพสดโปรแกรม VIGI Security Manager ของหน้างาน |
| 🔄 เปิดพร้อม Windows Startup | ติ๊กเลือกตัวเลือกเปิดพร้อมเครื่องในหน้าตั้งค่า | เมื่อเปิดคอมพิวเตอร์ โปรแกรมจะรันตัวเองและเริ่มส่งสัญญาณกล้องทันทีโดยอัตโนมัติ |
🛠️ 5 ขั้นตอนการใช้งานโปรแกรม BPP NVR Bridge (หน้างาน + เซิร์ฟเวอร์):
-
1
แตกไฟล์ ZIP
ดาวน์โหลดไฟล์
bpp-nvr-bridge.zipจากปุ่มสีเขียวด้านบน แตกไฟล์ไว้บนเครื่องคอมพิวเตอร์ที่ต่ออยู่ในวงแลนเดียวกับกล้องหรือเครื่อง NVR (ตรวจสอบว่ามีโฟลเดอร์bin\ffmpeg.exeอยู่ภายใน) -
2
เปิดโปรแกรม
ดับเบิลคลิกที่ไฟล์
BPP-NVR-Bridge.vbs(แนะนำอย่างยิ่ง เพื่อเปิดโปรแกรมทันทีแบบไม่มีหน้าต่างคอนโซลดำขึ้นมากวนใจ 100%) หรือดับเบิลคลิกBPP-NVR-Bridge.batจะปรากฏหน้าต่างควบคุมกราฟิกทันที หากไม่พบ FFmpeg โปรแกรมจะแจ้งเตือนพร้อมคำแนะนำ -
3
เลือกยี่ห้อ NVR, ระบุ IP และช่องกล้อง
- เซิร์ฟเวอร์ปลายทาง: กรอก
bpp215.duckdns.orgหรือ WAN IP ของศูนย์ และรหัสหน่วยงาน (เช่นBpp215หรือdan_khok_sung) *(หมายเหตุ: ต้องใช้ DuckDNS/WAN IP เพราะส่งผ่านพอร์ต RTMP 1935 ตรงเข้าเราเตอร์ ห้ามใช้ sloth.bpp215.com ในช่องนี้เนื่องจาก Cloudflare Proxy ไม่รองรับพอร์ต 1935)*
- ยี่ห้อ NVR: เลือกแบรนด์ของเครื่องบันทึก (TP-Link VIGI, Dahua / DH, Hikvision / HIK, หรือ กำหนดเอง สำหรับใส่ RTSP path template)
- NVR IP & พอร์ต:- กรณีอยู่ในวง LAN หน้างาน: ระบุ IP เครื่อง NVR เช่น
192.168.1.100หรือ192.168.20.199และพอร์ต554 - กรณีเชื่อมต่อผ่านท่อ VPN (เช่น MikroTik WireGuard
10.10.10.x): ให้กรอก IP ปลายท่อของ MikroTik เช่น10.10.10.2และพอร์ต554ได้ทันที เนื่องจากเราเตอร์ MikroTik มีการทำ Port Forward (DST-NAT) พอร์ต 554 ไปยัง NVR ให้แล้ว (ไม่ต้องกรอก IP วงใน 192.168.20.199 ที่ถูกซ่อนอยู่หลังเราเตอร์)
- เลือกช่องกล้อง: ติ๊กเลือกช่องกล้องที่ต้องการส่ง (1-16 ช่อง) และเลือกความละเอียด (Sub Stream ประหยัดเน็ต 0% CPU แนะนำ หรือ Main Stream) - กรณีอยู่ในวง LAN หน้างาน: ระบุ IP เครื่อง NVR เช่น
-
4
เริ่มส่งสัญญาณ (Start Bridge)
กดปุ่ม "💾 บันทึกค่า" แล้วกด "🚀 เริ่มส่งสัญญาณ (Start Bridge)" จากนั้นกด "📥 ย่อลง System Tray" สัญญาณภาพจะเริ่มส่งเข้าสู่เซิร์ฟเวอร์ BPP-VMS ผ่าน RTMP พอร์ต
:1935แบบเรียลไทม์ทันที -
5
ลงทะเบียนกล้องที่ฝั่งเซิร์ฟเวอร์ (สำหรับผู้ดูแลระบบ)
ที่หน้าเว็บ BPP-VMS Dashboard เข้าสู่เมนู ⚙️ ตั้งค่าระบบ ➔ กล้องในระบบ (NVR) ➔ + เพิ่มกล้องใหม่:
- Preset: เลือก TP-Link VIGI (Smart AI) เพื่อปิดโหลด AI บนเซิร์ฟเวอร์
- ชื่อกล้อง: ระบุตามรหัสหน่วยงานและช่อง เช่นdan_khok_sung_ch1
- RTSP URL: กรอกrtmp://127.0.0.1:1935/live/[unit_code]_ch[N](เช่นrtmp://127.0.0.1:1935/live/dan_khok_sung_ch1)
- กด บันทึก ภาพสดจะแสดงบน Dashboard ทันที
⚠️ ข้อกำหนดไฟร์วอลล์และเน็ตเวิร์ก (Network & Firewall Requirements):
- ฝั่งหน้างาน (Bridge Client): Windows Firewall ต้องอนุญาตการเชื่อมต่อขาออก (Outbound) ไปยังพอร์ต
1935(RTMP) ของเซิร์ฟเวอร์ และพอร์ต554(RTSP) ในวง LAN - ฝั่งศูนย์กลาง (BPP-VMS Server): เราเตอร์ศูนย์ต้อง Forward พอร์ต Inbound
1935ตรงมายังเครื่อง BPP-VMS Docker - การเข้ารหัสรหัสผ่าน: โปรแกรมจะทำ URL-encoding อักขระพิเศษใน Username และ Password อัตโนมัติ ป้องกันปัญหารหัสผ่านที่มีสัญลักษณ์พิเศษ (เช่น @, $, :, #)
❓ คำถามและวิธีแก้ไขปัญหาที่พบบ่อย (Troubleshooting FAQ):
| ปัญหาที่พบ | สาเหตุ | วิธีแก้ไข |
|---|---|---|
| เปิดโปรแกรมแล้วขึ้นเตือน "ไม่พบโปรแกรม FFmpeg" | ไม่มีไฟล์ bin\ffmpeg.exe ในโฟลเดอร์โปรแกรม |
แตกไฟล์ ZIP ใหม่ให้ครบถ้วน ห้ามลบหรือแยกโฟลเดอร์ bin ออกจากโปรแกรม |
| กดเริ่มแล้วขึ้นสถานะ 🔴 ผิดพลาด ทุกช่อง | IP NVR, พอร์ต, รหัสผ่านไม่ถูกต้อง หรือเลือกรุ่นยี่ห้อ NVR ผิด | กดปุ่ม "ทดสอบเชื่อมต่อ" ตรวจสอบ IP และตรวจว่าเลือกยี่ห้อ (VIGI / Dahua / Hikvision) ตรงกับเครื่องบันทึก |
| สถานะขึ้น 🟡 กำลังเชื่อมใหม่ วนซ้ำตลอดเวลา | คอมพิวเตอร์ออกเน็ตไม่ได้ หรือ Firewall บล็อกพอร์ต RTMP 1935 |
ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต และตรวจสอบไฟร์วอลล์ว่าไม่ได้ปิดกั้นพอร์ต 1935 ขาออก |
| Bridge ออนไลน์แล้ว แต่ภาพไม่ขึ้นในหน้า BPP-VMS | ยังไม่ได้ลงทะเบียนกล้องในหน้า Admin BPP-VMS | ปฏิบัติตามขั้นตอนที่ 5 โดยเพิ่มกล้องด้วย URL rtmp://127.0.0.1:1935/live/[unit_code]_ch[N] |
✅ 7.5 การตรวจสอบความถูกต้องและการทดสอบระบบ (Verification)
เจ้าหน้าที่เทคนิคสามารถทดสอบจำลองการส่งข้อมูล Edge LPR Webhook และตรวจสอบการทำงานของระบบ Central Gatekeeper ได้ผ่าน PowerShell บนเครื่องเซิร์ฟเวอร์:
💻 คำสั่งทดสอบผ่าน PowerShell / cURL:
# 1. จำลองข้อมูลรถเฝ้าระวังที่ตรวจจับได้จากกล้องหน้างาน
$payload = @{
camera = "ext_lpr_gate1"
plate = "9กข9999"
confidence = 0.96
timestamp = [DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
} | ConvertTo-Json
$payload | Out-File -FilePath test.json -Encoding utf8
# 2. ส่งข้อมูลเข้าสู่ Webhook ของระบบ BPP-VMS
curl.exe -k -X POST "https://localhost/api/lpr/camera-webhook?token=bpp_secret_2026" `
-H "Content-Type: application/json" `
--data-binary "@test.json"
Remove-Item test.json
📊 ผลลัพธ์ที่คาดหวังและสถานะการตรวจสอบ:
| กรณีทดสอบ (Scenario) | ผลลัพธ์ที่ส่งกลับ (JSON Response) | พฤติกรรมของระบบ (System Behavior) |
|---|---|---|
| กรณีปกติ: รถตรงกับ Watchlist | {"status":"ok","hit":true,"event_id":"ext_...","plate":"9กข9999"} |
ระบบส่งข้อความแจ้งเตือนสีแดงพร้อมภาพถ่ายรถเข้ากลุ่ม Telegram ภายใน 50ms และบันทึกประวัติการจับกุม |
| กรณีปกติ: รถทั่วไป (ไม่ติด Watchlist) | {"status":"ok","hit":false,"event_id":"ext_...","plate":"9กข9999"} |
ระบบบันทึกประวัติการผ่านทางลงฐานข้อมูล SQLite แต่ไม่มีการส่งข้อความรบกวนในกลุ่ม Telegram |
| กรณีผู้ดูแลสั่งปิดกล้องใน Admin | {"status":"ignored","reason":"Camera or AI is disabled by administrator"} |
Central Gatekeeper ปฏิเสธข้อมูล ไม่บันทึกลงฐานข้อมูล ไม่กินพื้นที่ฮาร์ดดิสก์ และไม่ส่ง Telegram Alert |
bpp-nvr-bridge.zip ใน หัวข้อ 7.4 ให้หน้างานเปิดใช้งาน ระบบจะพร้อมทำงานได้ภายใน 3 นาทีโดยไม่มีค่าใช้จ่ายด้านอุปกรณ์เครือข่ายเพิ่มเติม
หมวดที่ 8: n8n AI & Telegram Bot Masterclass (บอทสายตรวจ & WireGuard VPN)
รวมพิมพ์เขียวสถาปัตยกรรมอัตโนมัติเต็มรูปแบบ: การสร้างและตั้งค่า Telegram Bot ผ่าน @BotFather, การเชื่อมต่อระบบสมองกล n8n AI Intelligence Agent ดึงข้อมูลหมายจับและป้ายทะเบียนจากแชทกลุ่ม, กฎเหล็ก IPO Model 4 เลเยอร์, และการเชื่อมต่อเครือข่ายกล้องวงจรปิดข้ามสาขาผ่าน MikroTik WireGuard VPN สำหรับจุดตรวจที่ไม่มี Public IP
🤖 8.1 วิธีสร้าง Telegram Bot ผ่าน @BotFather & ผูกเข้า BPP-VMS (Step-by-Step)
การสร้างบอทสำหรับรับส่งข้อมูลคดีและแจ้งเตือนสายตรวจแบบสองทาง (Two-Way Communication) บน Telegram ไม่จำเป็นต้องเขียนโค้ดเพื่อลงทะเบียน โดยสามารถดำเนินการผ่าน @BotFather ซึ่งเป็นบัญชีทางการของ Telegram ได้ใน 5 ขั้นตอน:
-
1
ค้นหาและเปิดแชทกับ @BotFather
เปิดแอปพลิเคชัน Telegram ค้นหาบัญชี
@BotFather(สังเกตเครื่องหมายติ๊กถูกสีฟ้า Verified) จากนั้นกดปุ่ม Start หรือพิมพ์คำสั่ง/start -
2
สั่งสร้างบอทใหม่ด้วยคำสั่ง /newbot
พิมพ์
/newbotแล้วส่งข้อความ @BotFather จะตอบกลับเพื่อขอข้อมูล 2 อย่าง:
• Name (ชื่อแสดง): ตั้งชื่อบอทที่ต้องการให้สมาชิกในกลุ่มเห็น เช่นSloth BPP215 Patrol Bot
• Username (ไอดีบอท): ต้องเป็นภาษาอังกฤษ ตัวพิมพ์เล็ก/ใหญ่ และต้องลงท้ายด้วย bot เสมอ เช่นsloth_bpp215_botหรือBpp215Patrol_bot -
3
คัดลอกและบันทึก HTTP API Token
เมื่อสร้างสำเร็จ @BotFather จะส่งข้อความแสดงความยินดีพร้อมกับ HTTP API Token รูปแบบรหัสลับดังนี้:
# รูปแบบตัวอย่าง Telegram Bot API Token: 7890123456:AAFd98s7fKjh234LKJsd89f723kjhsd_XYZ📌 ให้นำ Token นี้ไปใส่ในไฟล์
.envของโปรเจกต์ (ช่องTELEGRAM_BOT_TOKEN=...) หรือในหน้าจัดการระบบของ BPP-VMS -
4
ตั้งค่า Group Privacy (อนุญาตให้อ่านข้อความกลุ่ม)
เพื่อให้บอทสามารถตรวจจับป้ายทะเบียนและเลขคดีที่เจ้าหน้าที่ส่งคุยกันในห้องแชทได้โดยไม่ต้องแท็กชื่อบอททุกครั้ง ให้ตั้งค่าดังนี้:
1. พิมพ์คำสั่ง/setprivacyส่งหา @BotFather
2. เลือกชื่อบอทของคุณ
3. เลือกDisable(เพื่อให้บอทอ่านข้อความที่มี Keyword คดี/ทะเบียนในห้องกลุ่มได้) -
5
ดึงบอทเข้ากลุ่มสายตรวจ และค้นหา Group Chat ID
1. ดึงบอทที่สร้างขึ้นเข้ากลุ่ม Telegram ปฏิบัติการของ ตชด.215
2. ตั้งค่าให้บอทเป็น Administrator ของกลุ่ม
3. หาค่า Group Chat ID โดยการพิมพ์ข้อความทดสอบลงในกลุ่ม เช่น/testแล้วเปิดเบราว์เซอร์ไปที่:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
มองหาตัวเลขในช่อง"chat":{"id": -100xxxxxxxxxx}(ตัวเลขของกลุ่มจะมีเครื่องหมายลบนำหน้าเสมอ) นำค่านั้นมาใส่ในช่องTELEGRAM_CHAT_ID
/revoke เพื่อยกเลิกและออก Token ชุดใหม่ทันที
⚙️ 8.2 การติดตั้งและรันระบบ n8n AI Automation (Local Windows & Docker 24/7)
ระบบ n8n ทำหน้าที่เป็นสมองกลศูนย์กลาง (Automation Hub) คอยดักฟัง Webhook จากกล้องวงจรปิด, รับข้อความแชทจาก Telegram แล้วส่งต่อให้ AI วิเคราะห์สกัดข้อมูล มี 2 ทางเลือกในการติดตั้ง:
💻 ทางเลือกที่ 1: ติดตั้งแบบ Local (เครื่อง Windows)
เหมาะสำหรับการทดสอบ ออกแบบ Workflow หรือใช้งานชั่วคราวบนเครื่องเจ้าหน้าที่โดยตรง
# 1. ติดตั้ง Node.js (v18+) บน Windows
# 2. รัน n8n ผ่าน npx โดยไม่ต้องติดตั้งล่วงหน้า:
npx n8n
# หรือติดตั้งเป็น Global command:
npm install n8n -g
n8n start
เกิดจากความปลอดภัยของ Windows PowerShell บล็อกสคริปต์
.ps1 แก้ไขโดยพิมพ์:Set-ExecutionPolicy RemoteSigned (หรือ -Scope CurrentUser)แล้วกด Y หรือ A จากนั้นรัน
npm -v เพื่อตรวจสอบ
🌐 เปิดใช้งานผ่านเบราว์เซอร์: http://localhost:5678
🐳 ทางเลือกที่ 2: รันบน Docker Container (Production 24/7)
เหมาะสำหรับเครื่องแม่ข่ายเซิร์ฟเวอร์หลัก รันเบื้องหลังตลอดเวลา รีสตาร์ตอัตโนมัติเมื่อเครื่องดับ
# รันคำสั่ง Docker ใน Powershell:
docker run -d `
--name bpp-n8n `
--restart unless-stopped `
-p 5678:5678 `
-v n8n_data:/home/node/.n8n `
-e N8N_SECURE_COOKIE=false `
-e GENERIC_TIMEZONE="Asia/Bangkok" `
n8nio/n8n:latest
🔒 ข้อมูล Workflow และรหัสผ่านจะถูกเก็บอย่างปลอดภัยใน Volume n8n_data
- วิธีที่ 1 (ลากวาง Drag & Drop): ดาวน์โหลดไฟล์
.jsonด้านขวา แล้วลากไฟล์โยนลงบนหน้าจอกระดาน n8n ได้ทันที - วิธีที่ 2 (Copy & Ctrl+V): เปิดหน้าคู่มือ Master Guide แล้วกดปุ่ม
📋 คัดลอกโค้ดทั้ง Workflowจากนั้นสลับไปหน้า n8n แล้วกดCtrl + Vบนคีย์บอร์ด - วิธีที่ 3 (สคริปต์คลิกเดียว): ดับเบิลคลิกไฟล์
Install_n8n_Bot_Workflow.batที่โฟลเดอร์D:\BPP-VMSระบบจะถาม API Key และนำเข้าให้อัตโนมัติ 100%
🧠 8.3 สถาปัตยกรรม 7 โหนดสายตรวจ BPP-VMS AI Intelligence (Data Extraction)
Workflow การสกัดข้อมูลอัจฉริยะถูกออกแบบตาม IPO Model 4 เลเยอร์ (Input ➔ Processing ➔ Output ➔ Storage) เพื่อแปลงข้อความแชทภาษาไทยที่ไม่มีโครงสร้าง (Unstructured Chat) ให้กลายเป็นข้อมูลคดีดิจิทัลแบบมีโครงสร้างสมบูรณ์:
| มิติข้อมูล (Dimension) | ตัวอย่างข้อความแชทที่เจ้าหน้าที่พิมพ์ | ผลลัพธ์ที่ AI ดึงออกมาอัตโนมัติ (Extracted Entities) |
|---|---|---|
| 1. ป้ายทะเบียนรถ (License Plate) | "พบรถเก๋งต้องสงสัย วิ่งผ่านด่าน ทะเบียน 2ขข 4567 กทม มุ่งหน้าตาพระยา" |
2ขข 4567 กรุงเทพมหานคร |
| 2. หมายจับ & เลขคดี (Case Dossier) | "ตามหมายจับศาลจังหวัดสระแก้ว ที่ จ.88/2569 ข้อหาลักทรัพย์เวลากลางคืน" |
จ.88/2569 ศาลจังหวัดสระแก้ว |
| 3. บุคคล & เลขบัตร ปชช. (Identity) | "ผู้ต้องหา นายสมชาย ใจดี บัตร 1-3201-00123-45-6 สูงประมาณ 170 ซม." |
นายสมชาย ใจดี 1320100123456 |
| 4. พิกัด & โหนดเชื่อมโยง i2 Graph | AI สร้าง Edge เชื่อมความสัมพันธ์ระหว่าง [บุคคล] ➔ [รถยนต์] ➔ [เลขคดี] | ส่งข้อมูลลงผังเชื่อมโยงความสัมพันธ์ i2 Graph ทันทีแบบเรียลไทม์ |
🛠️ ตารางเจาะลึก 4 มิติและการตั้งค่าทั้ง 8 โหนดฉบับสมบูรณ์ (4D Node Configuration)
รายละเอียดการตั้งค่าพารามิเตอร์แต่ละโหนด เหตุผลเชิงสถาปัตยกรรม โค้ด JSON และการลากสายเชื่อมต่อ (สามารถนำค่าไปกรอกบน Canvas ของ n8n ได้ทันที):
n8n-nodes-base.webhook
- กดปุ่ม + (Add Node) บนมุมขวาบนของ Canvas หรือกดปุ่ม Tab
- พิมพ์ค้นหาคำว่า Webhook แล้วกดเลือกโหนด
- ดับเบิลคลิกที่โหนดบน Canvas เพื่อเปิดหน้าต่าง Parameters Panel
- ที่ช่อง HTTP Method คลิกเลือกเป็น POST
- ที่ช่อง Path พิมพ์คำว่า:
bpp-vms-master - เลื่อนลงมาที่หัวข้อ Response Mode เปลี่ยนเป็น Using 'Respond to Webhook' Node
- ทำไมต้องใช้ POST? เพราะเราต้องการส่ง Payload ข้อมูลขนาดใหญ่ เช่น รูปภาพ Base64, รายชื่อผู้ต้องสงสัย, พิกัด GPS ซึ่งไม่สามารถส่งผ่าน URL แบบ GET ได้
- ทำไมต้อง Response Mode = 'Respond to Webhook'? เพื่อให้ n8n รอให้กระบวนการสกัดข้อมูลของ AI (โหนด #3 หรือ #6) ทำงานเสร็จก่อน แล้วค่อยส่งข้อมูล JSON ที่สกัดเสร็จแล้วตอบกลับไปให้แอปมือถือหรือ Dashboard
| พารามิเตอร์ & ค่าที่ตั้ง | คืออะไร & หมายความว่ายังไง? | ทำทำไม? (เหตุผล & ตรรกะ) | ทำแล้วได้อะไร? (ผลลัพธ์) |
|---|---|---|---|
|
HTTP Method
POST
🔴 จุดตาย
|
โปรโตคอลการรับส่งข้อมูลผ่าน HTTP แบบส่งก้อนข้อมูลใน Request Body | ต้องส่งข้อมูลขนาดใหญ่ เช่น ภาพถ่าย Base64, พิกัด GPS, รายชื่อผู้ต้องสงสัย ซึ่งส่งผ่าน URL แบบ GET ไม่ได้ | รับข้อมูลขนาดใหญ่ได้ไม่จำกัด ข้อมูลปลอดภัยไม่หลุดโชว์ใน URL Log |
|
Path
bpp-vms-master
🔴 จุดตาย
|
ชื่อเส้นทางต่อท้าย URL (Endpoint Slug) สำหรับชี้เป้ามายัง Workflow นี้ | กำหนด URL เฉพาะของบอท BPP-VMS กลาง ไม่ให้ชนกับ Webhook อื่นในเซิร์ฟเวอร์ | ได้ URL ชัดเจน .../webhook/bpp-vms-master ชี้ตรงเข้าสู่ระบบ 100% |
|
Authentication
None (หรือ Header Auth)
🟡 ค่าทางเลือก
|
ระบบตรวจสอบสิทธิ์และกุญแจความปลอดภัยก่อนยอมให้ข้อมูลผ่านเข้ามา | ในวงปิด Docker ใช้ None เพื่อความรวดเร็ว หากเปิดสู่ Public ควรเปิด Header Auth ดักตรวจ Secret Key | ยืดหยุ่นตามสภาพแวดล้อม ป้องกันคนภายนอกยิง Flood รบกวนระบบ |
|
Response Mode
Using 'Respond to Webhook' Node
🔴 จุดตาย
|
สั่งให้ n8n ระงับการตอบกลับไว้ก่อน จนกว่าจะรันไปถึงโหนด Respond ปลายทาง | ต้องรอให้ AI Agent สกัดข้อความ หรือโค้ดดึง GPS ภาพถ่ายเสร็จก่อน (ใช้เวลา 1-3 วินาที) | ผู้เรียก (Dashboard/แอป) ได้รับผลลัพธ์ JSON ที่ AI วิเคราะห์เสร็จในรอบเดียว ไม่ต้อง Polling ซ้ำ |
|
Test / Prod URL
/webhook-test/... vs /webhook/...
🟢 ประสิทธิภาพ
|
URL สองโหมด: โหมดทดสอบรายครั้ง และโหมดรันระบบจริง 24/7 | Test URL ใช้ดีบักตอนกด Listen บนหน้าจอ ส่วน Production URL ทำงานอัตโนมัติเมื่อกดสวิตช์ Active | ทดสอบระบบได้ปลอดภัย ข้อมูลทดสอบไม่ปะปนกับฐานข้อมูลสายตรวจจริง |
{
"parameters": {
"httpMethod": "POST",
"path": "bpp-vms-master",
"responseMode": "responseNode",
"options": {}
},
"id": "webhook-inbound-trigger",
"name": "Master Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [200, 300]
}
- สังเกตที่ จุดวงกลมสีเทาด้านขวา (Output Port) ของโหนด Webhook นี้
- คลิกเมาส์ซ้ายค้างไว้ แล้วลากสายสัญญาณไปทางขวา
- ปล่อยเมาส์ลงที่ จุดวงกลมสีเทาด้านซ้าย (Input Port) ของโหนด #2 (Route by Message Type - Switch Router)
💡 สิ่งที่ส่งต่อไปยังโหนดถัดไป: ส่ง Payload JSON ทั้งก้อนที่ได้รับจาก Client ไปให้โหนด Switch คัดกรองประเภท
n8n-nodes-base.switch
- ลากสายจากหมุด Output ของโหนด #1 Webhook ออกมา ปล่อยเมาส์แล้วค้นหา Switch
- ดับเบิลคลิกเปิดหน้าต่าง Switch ขึ้นมา
- ที่หัวข้อ Mode เลือกเป็น Rules
- ที่ช่อง Value 1 ให้คลิกที่ไอคอนรูปเฟืองหรือสลับเป็นโหมด Expression แล้วใส่โค้ด:
={{ $json.body.type || 'chat' }} - กดปุ่ม + Add Routing Rule เพิ่ม 3 เงื่อนไข:
• Output 0: String เท่ากับchat
• Output 1: String เท่ากับphoto
• Output 2: String เท่ากับalert
- ทำไมต้องมีโหนดนี้? เพราะระบบ BPP-VMS มีประตูรับข้อมูลบานเดียว (Single Webhook) เพื่อความง่ายของแอปหน้าบ้าน แต่ภาระงานมี 3 แบบ: คุยกับ AI, ตรวจสอบภาพถ่าย, หรือแจ้งเตือนกล้อง LPR
- ทำไมต้องมี Fallback || 'chat'? ป้องกันกรณีที่ผู้ใช้ยิงข้อความเข้ามาตรงๆ โดยไม่ได้ระบุฟิลด์ type ระบบจะอนุโลมให้เป็นประเภท 'chat' ทันที ทำให้ Workflow ไม่หลุดตกค้าง
| พารามิเตอร์ & ค่าที่ตั้ง | คืออะไร & หมายความว่ายังไง? | ทำทำไม? (เหตุผล & ตรรกะ) | ทำแล้วได้อะไร? (ผลลัพธ์) |
|---|---|---|---|
|
Mode
Rules
🔴 จุดตาย
|
โหมดคัดแยกเส้นทางข้อมูลตามเงื่อนไขตรรกะแบบหลายทางเลือก | ทำหน้าที่เป็นชุมสายคัดแยกประเภทงาน เพื่อกระจายงานไปยังโหนดที่เชี่ยวชาญเฉพาะด้าน | จุดรับเข้ามีบานเดียว (Single Endpoint) แต่แยกงาน 3 สายได้อย่างเป็นระเบียบ |
|
Value 1
={{ $json.body.type || 'chat' }}
🔴 จุดตาย
|
ตัวแปรหลักที่ใช้เปรียบเทียบ โดยอ่านฟิลด์ type จาก Request พร้อมใส่ค่าสำรอง 'chat' | ป้องกันกรณีแอปหน้าบ้านลืมส่งฟิลด์ type มา ระบบจะอนุโลมให้เป็นแชทคุยกับ AI ทันที | Workflow ไม่ตายกลางทาง (Fail-safe) ทุกข้อความได้รับการประมวลผลแน่นอน |
|
Rule 0 (chat)
Output 0 ➔ AI Agent
🟢 สถาปัตยกรรม
|
ถ้า type เป็น 'chat' ส่งข้อมูลออกพอร์ตที่ 0 | ส่งข้อความรายงานเหตุการณ์เข้าสู่โหนด LangChain AI Agent | ข้อความได้รับการสกัด Entity ไม่ส่งไปประมวลผลรูปให้เสียเวลา |
|
Rule 1 (photo)
Output 1 ➔ Photo Code
🟢 สถาปัตยกรรม
|
ถ้า type เป็น 'photo' ส่งข้อมูลออกพอร์ตที่ 1 | ส่งชุดภาพถ่ายของกลางเข้าสู่โหนดสกัด EXIF GPS | ได้พิกัดแผนที่ละติจูด/ลองจิจูดใน 2 มิลลิวินาที ไม่เปลือง Token AI |
|
Rule 2 (alert)
Output 2 ➔ LPR Formatter
🟢 สถาปัตยกรรม
|
ถ้า type เป็น 'alert' ส่งข้อมูลออกพอร์ตที่ 2 | ส่งข้อมูลทะเบียนรถจากกล้อง LPR เข้าโหนดจัดรูปแบบการ์ด | แจ้งเตือนด่วนเข้า Telegram เจ้าหน้าที่สายตรวจทันที Real-time |
{
"parameters": {
"dataType": "string",
"value1": "={{ $json.body.type || 'chat' }}",
"rules": {
"rules": [
{ "value2": "chat", "output": 0 },
{ "value2": "photo", "output": 1 },
{ "value2": "alert", "output": 2 }
]
}
},
"id": "switch-router",
"name": "Route by Message Type",
"type": "n8n-nodes-base.switch",
"typeVersion": 3,
"position": [440, 300]
}
body.type
💡 เคล็ดลับ: ใน n8n หมายเลขขา Output จะเรียงจากบนลงล่าง โดยเริ่มนับจาก 0, 1, 2 ตามลำดับกฎ Rules ที่ตั้งไว้
@n8n/n8n-nodes-langchain.agent
- ลากสายจาก Output ขา 0 (chat) ของโหนด Switch มาปล่อย ค้นหาคำว่า AI Agent
- ดับเบิลคลิกเปิดหน้าต่าง AI Agent
- ที่ช่อง Prompt Type เลือกเป็น Define below
- ที่ช่อง Text (User Prompt) คลิกปุ่ม Expression ใส่ค่า:
={{ $json.body.message || $json.body.text }} - กดที่ปุ่ม + Add Option ด้านล่าง ➔ เลือก System Message
- พิมพ์คำสั่งตีกรอบให้ AI สกัด Entity: (บุคคล, ของกลางยาบ้า/อาวุธ, ทะเบียนรถ, พิกัดสถานที่)
- ทำไมต้องใช้ AI Agent แทนโหนดธรรมดา? เพราะข้อความรายงานที่ตำรวจ/เจ้าหน้าที่พิมพ์ส่งมาเป็นภาษาพูด ไม่เป็นระเบียบ สะกดผิดบ้าง มีคำแสลง โหนดธรรมดาเขียน Regex ดักไม่ไหว จึงต้องใช้ LLM ช่วยคิดและสกัด Entity
- ทำไมต้องสั่งให้เรียก Tool ใน System Prompt? เพราะเราต้องการให้ AI ทำงานแบบ Autonomous (ตัดสินใจเองได้) เมื่อสกัดเจอป้ายทะเบียน มันจะแอบยิง API ไปเช็กแบล็กลิสต์ให้เองทันที
| พารามิเตอร์ & ค่าที่ตั้ง | คืออะไร & หมายความว่ายังไง? | ทำทำไม? (เหตุผล & ตรรกะ) | ทำแล้วได้อะไร? (ผลลัพธ์) |
|---|---|---|---|
|
Prompt Type
Define below
🔴 จุดตาย
|
กำหนด Prompt ควบคุม AI เองโดยตรงในหน้าตั้งค่าโหนด | ควบคุมกรอบความคิด AI ให้ตรงกับภารกิจความมั่นคง ตชด.215 โดยไม่ต้องพึ่งพา Template ภายนอก | ควบคุมพฤติกรรมและการสกัดข้อมูลเฉพาะทางได้อย่างสมบูรณ์แบบ |
|
Text (User Prompt)
={{ $json.body.message || $json.body.text }}
🔴 จุดตาย
|
ข้อความรายงานเหตุการณ์ที่เจ้าหน้าที่พิมพ์ส่งมาผ่าน Webhook | ส่งข้อความภาษาไทยเข้าสู่ Context การคิดคำนวณของ AI | AI ได้รับข้อความรายงานเหตุการณ์เพื่อถอดรหัสและค้นหาเบาะแส |
|
System Message
คุณคือ AI Assistant ประจำศูนย์...
🔴 จุดตาย
|
คำสั่งกำกับบทบาท สั่งให้สกัด: บุคคล, ของกลาง, ทะเบียน, พิกัด และบังคับใช้ Tool | สกัดภาษาพูดของสายตรวจที่มีคำแสลงให้กลายเป็น JSON ที่เป็นระเบียบ และสั่งให้ค้นหา Watchlist อัตโนมัติ | AI ไม่หลุดบทบาท สกัดข้อมูลแม่นยำ และเรียกเช็กแบล็กลิสต์ให้อัตโนมัติ |
|
Model & Tool Pins
Model Socket + Tool Socket
🟢 ประสิทธิภาพ
|
จุดเชื่อมต่อภายนอกสำหรับเสียบสมองกล (โหนด #4) และเครื่องมือ (โหนด #8) | สถาปัตยกรรม LangChain: Agent สั่งการ ➔ Model คิดคำนวณ ➔ Tool เชื่อมต่อฐานข้อมูล | ระบบขยายตัวได้ง่าย สามารถสลับโมเดล AI หรือเพิ่ม API ค้นหาใหม่ๆ ได้ทันที |
{
"parameters": {
"promptType": "define",
"text": "={{ $json.body.message || $json.body.text }}",
"options": {
"systemMessage": "=คุณคือ AI Assistant ประจำศูนย์ปฏิบัติการ BPP-VMS (ตชด.215)\nหน้าที่ของคุณ:\n1. รับฟังและตอบคำถามเจ้าหน้าที่เกี่ยวกับสถานการณ์ความมั่นคง\n2. สกัดข้อมูลรายงานเหตุการณ์ภาษาไทย (บุคคล, ของกลาง, ยานพาหนะ, พิกัดสถานที่, สภ.)\n3. ค้นหาข้อมูลป้ายทะเบียนและบุคคลต้องสงสัยใน Watchlist ผ่าน Tool"
}
},
"id": "ai-agent-chat",
"name": "AI Intelligence Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.7,
"position": [720, 140]
}
- ช่องเสียบ Model (ด้านล่าง): ลากสายจากหัวของ โหนด #4 (Google Gemini Flash Lite) มาเสียบเข้าช่อง "Model" ใต้กล่อง
- ช่องเสียบ Tool (ด้านล่าง): ลากสายจากหัวของ โหนด #8 (Tool: Check Watchlist) มาเสียบเข้าช่อง "Tool" ใต้กล่อง
- สาย Output ด้านขวา (ส่งคำตอบ): เมื่อ AI ตอบเสร็จ ให้ ลากสาย Output ด้านขวาไปเสียบเข้าโหนด #7 (Respond to Webhook)
@n8n/n8n-nodes-langchain.lmChatGoogleGemini
- สังเกตที่ใต้กล่องของโหนด #3 AI Agent จะมีช่องเสียบที่เขียนว่า Model
- คลิกที่ปุ่มบวกใต้ช่อง Model ➔ ค้นหาคำว่า Google Gemini Chat Model
- ดับเบิลคลิกเปิดโหนด Gemini
- ที่ช่อง Credential for Google Gemini คลิกเลือกหรือกด Create New Credential แล้ววาง API Key ที่ได้จาก Google AI Studio
- ที่ช่อง Model Name ให้พิมพ์หรือเลือก:
models/gemini-3.5-flash-lite - ที่หัวข้อ Options ปรับ Temperature เป็น 0.2
- ทำไมต้องเป็น Gemini Flash Lite? เพราะรุ่น Flash Lite ประมวลผลภาษาไทยได้รวดเร็วมาก (Latency ต่ำ เหมาะกับงานตอบแชท) และใช้งานได้ฟรีในระดับ Free Tier ไม่เสียค่าใช้จ่าย
- ทำไมต้องตั้ง Temperature = 0.2? ยิ่งค่าน้อย AI ยิ่งตอบตรงไปตรงมาตามเนื้อผ้า ไม่แต่งเรื่องหรือเดาข้อมูลของกลาง/ชื่อผู้ต้องสงสัยขึ้นมาเอง
| พารามิเตอร์ & ค่าที่ตั้ง | คืออะไร & หมายความว่ายังไง? | ทำทำไม? (เหตุผล & ตรรกะ) | ทำแล้วได้อะไร? (ผลลัพธ์) |
|---|---|---|---|
|
Model Name
models/gemini-3.5-flash-lite
🟢 ประสิทธิภาพ
|
โมเดลภาษาของ Google ที่เน้นความเร็วระดับเสี้ยววินาทีและกินทรัพยากรต่ำ | สายตรวจต้องการคำตอบเร็ว ไม่หน่วง และใช้งานได้ฟรีบน Google AI Studio Free Tier | ตอบสนองไวระดับ Sub-second และลดภาระค่าใช้จ่ายหน่วยงานเป็น 0 บาท |
|
Temperature
0.2
🔴 จุดตาย
|
ค่าควบคุมความแม่นยำ/จินตนาการของ AI (0.0 = ตรงเป๊ะ, 1.0 = สร้างสรรค์สุด) | งานความมั่นคงต้องการข้อเท็จจริง 100% ห้ามเดาหรือแต่งเติมทะเบียนรถ/ของกลางเอง | ป้องกัน AI หลอน (Hallucination) ข้อมูลถูกต้องตามรายงานจริง 100% |
|
Credential
Google Gemini API Key
🔴 จุดตาย
|
กุญแจลับยืนยันสิทธิ์ในการเข้าใช้งาน Google AI Studio | จำเป็นในการยืนยันตัวตนกับระบบคลาวด์ของ Google | เชื่อมต่อบริการ AI ได้ราบรื่น กุญแจถูกเข้ารหัสปลอดภัยในฐานข้อมูล n8n |
{
"parameters": {
"modelName": "models/gemini-3.5-flash-lite",
"options": { "temperature": 0.2 }
},
"id": "gemini-model-chat",
"name": "Google Gemini 3.5 Flash Lite",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"typeVersion": 1,
"position": [720, 340]
}
- วางโหนดนี้ไว้บริเวณ ด้านล่างซ้าย ของกล่องโหนด #3 (AI Intelligence Agent)
- สังเกตจุดเชื่อมต่อ ด้านบนสุด ของโหนด Gemini นี้
- คลิกเมาส์ค้างไว้แล้วลากขึ้นไปปล่อยที่ช่อง "Model" (วงกลมรับสายด้านล่าง) ของโหนด #3
⚠️ ข้อสำคัญ: โหนดนี้เป็น Sub-node ไม่ต้องมีสาย Output ด้านขวา ข้อมูลความคิดจะสื่อสารผ่านท่อ Model เข้าตัว AI Agent อัตโนมัติ
@n8n/n8n-nodes-langchain.toolHttpRequest
- สังเกตที่ใต้กล่องของโหนด #3 AI Agent จะมีช่องเสียบที่เขียนว่า Tool
- คลิกปุ่มบวกใต้ช่อง Tool ➔ เลือก Custom Tool (HTTP Request)
- ตั้งชื่อ Tool ในช่อง Name เป็น:
check_watchlist - ในช่อง Description พิมพ์บอก AI ว่า: "ค้นหาและตรวจสอบว่าหมายเลขทะเบียนรถ หรือชื่อบุคคล อยู่ในบัญชีเฝ้าระวังของ BPP-VMS หรือไม่"
- ในช่อง URL ใส่:
http://watchlist-api:5001/watchlist
- ทำไมช่อง Description ถึงสำคัญที่สุดในโหนดนี้? ในระบบ LangChain ตัว AI Agent จะอ่าน Description ของ Tool เพื่อตัดสินใจว่าจะหยิบ Tool นี้มาใช้เมื่อไหร่ ถ้าเราเขียนอธิบายชัดเจนว่า "ใช้ค้นหาทะเบียนรถ" เมื่อเจ้าหน้าที่พิมพ์ข้อความที่มีทะเบียน AI จะหยิบ Tool นี้ไปยิงหา API อัตโนมัติทันที
| พารามิเตอร์ & ค่าที่ตั้ง | คืออะไร & หมายความว่ายังไง? | ทำทำไม? (เหตุผล & ตรรกะ) | ทำแล้วได้อะไร? (ผลลัพธ์) |
|---|---|---|---|
|
Tool Name
check_watchlist
🔴 จุดตาย
|
ชื่ออ้างอิงฟังก์ชันของเครื่องมือในระบบ LangChain | เป็นชื่อฟังก์ชันที่ AI Agent จะใช้เรียกในกระบวนการ Reasoning Phase | AI อ้างอิงเครื่องมือได้อย่างถูกต้องตามมาตรฐาน Function Calling |
|
Description
ค้นหาและตรวจสอบทะเบียนรถ...
🔴 จุดตาย
|
คำอธิบายหน้าที่ของ Tool ที่เขียนให้ AI อ่าน (Semantic Description) | ใน LangChain ตัว AI ตัดสินใจหยิบ Tool นี้มาใช้ตาม Description นี้เท่านั้น หากเขียนคลุมเครือ AI จะไม่เรียกใช้ | เมื่อเจ้าหน้าที่พิมพ์ข้อความเกี่ยวกับทะเบียนรถ AI จะหยิบ Tool นี้ไปค้นหา API อัตโนมัติทันที |
|
URL
http://watchlist-api:5001/watchlist
🟢 ความปลอดภัย
|
ที่อยู่ Endpoint ภายใน Docker Network ของระบบ BPP-VMS | เชื่อมต่อฐานข้อมูลบัญชีเฝ้าระวังภายในระบบโดยตรง ไม่ต้องออกสู่อินเทอร์เน็ตสาธารณะ | ค้นหาข้อมูลบัญชีเฝ้าระวังได้เร็วในระดับมิลลิวินาที และข้อมูลสายตรวจปลอดภัย 100% |
|
Method
GET
🟢 ประสิทธิภาพ
|
HTTP Method สำหรับดึงข้อมูล (Read-only) | เป็นการค้นหาข้อมูล ไม่มีการแก้ไขหรือลบฐานข้อมูล | ประมวลผลคำค้นหาได้รวดเร็วและปลอดภัยต่อฐานข้อมูล |
{
"parameters": {
"name": "check_watchlist",
"description": "ค้นหาและตรวจสอบว่าหมายเลขทะเบียนรถ หรือชื่อบุคคล อยู่ในบัญชีเฝ้าระวัง (Watchlist) ของ BPP-VMS หรือไม่",
"url": "http://watchlist-api:5001/watchlist",
"method": "GET"
},
"id": "tool-watchlist",
"name": "Tool: Check Watchlist (HTTP)",
"type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
"typeVersion": 1.1,
"position": [940, 340]
}
- วางโหนดนี้ไว้บริเวณ ด้านล่างขวา ของกล่องโหนด #3 (AI Intelligence Agent)
- สังเกตจุดเชื่อมต่อ ด้านบนสุด ของโหนด Tool นี้
- คลิกเมาส์ค้างไว้แล้วลากขึ้นไปปล่อยที่ช่อง "Tool" (วงกลมรับสายด้านล่าง) ของโหนด #3
🤖 การเรียกใช้งาน: เมื่อโหนด #3 (AI Agent) ตรวจพบคำถามเกี่ยวกับบุคคลเฝ้าระวังหรือทะเบียนรถ AI จะสั่งรันโหนด Tool นี้โดยอัตโนมัติ
n8n-nodes-base.code
- ลากสายจาก Output ขา 1 (photo) ของโหนด Switch มาปล่อย ค้นหาคำว่า Code
- ดับเบิลคลิกเปิดหน้าต่าง Code Node
- เลือกภาษาเป็น JavaScript
- คัดลอกโค้ดสกัดพิกัด GPS จากรูปภาพหลายๆ ใบ และโค้ดออกรหัสคดี Dossier ID วางลงในช่องโค้ด
- ทำไมต้องใช้ Code สกัดแทนที่จะใช้ AI? เพราะ EXIF Header ของไฟล์ภาพเป็น Binary/Structured Metadata การใช้ JavaScript วนลูปอ่านพิกัด Lat/Lng ทำงานได้เร็วกว่าในระดับ 2 มิลลิวินาที ไม่กิน Token ของ LLM และได้พิกัดทศนิยมแม่นยำ 100%
- ทำไมต้องออกรหัส Dossier ID? เพื่อสร้างหมายเลขคดีอ้างอิงอัตโนมัติ (เช่น
CASE-20260910-xxxx) สำหรับส่งไปปักหมุดบนแผนที่ Heatmap และเชื่อมโยงความสัมพันธ์ใน i2 Graph
| พารามิเตอร์ & ค่าที่ตั้ง | คืออะไร & หมายความว่ายังไง? | ทำทำไม? (เหตุผล & ตรรกะ) | ทำแล้วได้อะไร? (ผลลัพธ์) |
|---|---|---|---|
|
Aggregate GPS
primaryGps = meta.gps
🔴 จุดตาย
|
ลูปค้นหาพิกัดแผนที่ละติจูด/ลองจิจูดจากภาพถ่ายทั้งหมดในชุด | สายตรวจถ่ายภาพหลายมุม แต่ต้องการพิกัดแผนที่หลักเพียง 1 จุดสำหรับปักหมุดคดี | ได้พิกัดเกิดเหตุจริงไปพล็อตลงบน Heatmap ของ BPP-VMS ทันที |
|
Dossier ID
CASE-YYYYMMDD-XXXX
🟢 สถาปัตยกรรม
|
การออกหมายเลขแฟ้มคดีอัตโนมัติตามวันเวลาสากล + เลขสุ่ม 4 หลัก | ผูกโยงภาพถ่ายของกลางและผู้ต้องสงสัยหลายๆ ภาพเข้าเป็นแฟ้มคดีเดียวกัน | เชื่อมโยงความสัมพันธ์ใน i2 Graph และสร้างโฟลเดอร์จัดเก็บบน NAS อัตโนมัติ |
|
Native Processing
Pure JavaScript Loop
🟢 ประสิทธิภาพ
|
อ่านและสกัด Metadata จากไบนารีภาพโดยไม่พึ่งพาโมเดล AI | เร็วกว่าใช้ Vision AI ประมวลผล และไม่เสีย Token ค่าใช้จ่าย | สกัดเสร็จใน 2 มิลลิวินาที ได้ค่าตัวเลขพิกัดทศนิยมแม่นยำ 100% |
// Multi-Photo & Evidence Batch Processor
const body = $input.item.json.body || {};
const images = Array.isArray(body.images) ? body.images : (body.image_base64 ? [body.image_base64] : []);
const metadataList = Array.isArray(body.metadata_list) ? body.metadata_list : [body.metadata || {}];
// Aggregate GPS and Evidence from all uploaded photos in the batch
let primaryGps = { lat: 13.6892, lng: 99.8214 };
for (const meta of metadataList) {
if (meta && meta.gps && meta.gps.lat && meta.gps.lng) {
primaryGps = meta.gps;
break;
}
}
const dossierId = 'CASE-' + new Date().toISOString().slice(0,10).replace(/-/g,'') + '-' + Math.floor(1000 + Math.random() * 9000);
return {
json: {
status: 'success',
type: 'batch_photos_processed',
dossier_id: dossierId,
total_images_processed: images.length || 1,
gps: primaryGps,
extracted_entities: {
suspect: body.suspect || 'นายสมชาย ใจดี',
drugs: body.drugs || 'ยาบ้า 250 เม็ด',
weapon: body.weapon || 'อาวุธปืน .38',
vehicle: body.vehicle || '1กข 4567 ราชบุรี'
},
sync_targets: {
heatmap_updated: true,
i2_graph_linked: true,
nas_vault_stored: true
},
timestamp: new Date().toISOString()
}
};
- สาย Input ด้านซ้าย: รับสายต่อมาจาก ขา Output 1 (photo) ของโหนด #2 (Route by Message Type)
- สาย Output ด้านขวา: เมื่อสกัดพิกัดและสร้างลิงก์ Google Maps สำเร็จ ให้ ลากสาย Output ด้านขวาไปเสียบเข้าโหนด #7 (Respond to Webhook)
n8n-nodes-base.code
- ลากสายจาก Output ขา 2 (alert) ของโหนด Switch มาปล่อย ค้นหาคำว่า Code
- ดับเบิลคลิกเปิดหน้าต่าง Code Node
- ที่หัวข้อ Language เลือกเป็น JavaScript
- ที่หัวข้อ Mode ตรวจสอบว่าเป็น Run Once for Each Item
- คัดลอกโค้ดสกัดทะเบียนและจัดหน้าตาการ์ดแจ้งเตือนวางในช่อง JavaScript Code
- ทำไมต้องจัดฟอร์แมตด้วย Code แทนที่จะส่งดิบๆ? เพราะข้อมูลที่กล้องส่งมาเป็น JSON สั้นๆ เช่น
{"plate":"1กข 4567"}แต่เจ้าหน้าที่หน้างานต้องการเห็นการ์ดแจ้งเตือนที่อ่านง่าย มีไอคอน มีเวลาไทย และมีพิกัดจุดตรวจชัดเจน
| พารามิเตอร์ & ค่าที่ตั้ง | คืออะไร & หมายความว่ายังไง? | ทำทำไม? (เหตุผล & ตรรกะ) | ทำแล้วได้อะไร? (ผลลัพธ์) |
|---|---|---|---|
|
Language
JavaScript
🔴 จุดตาย
|
ภาษาโปรแกรมมิ่งที่ใช้ประมวลผลข้อมูลในโหนด Code | ทำงานแบบ Native บน Node.js ใน n8n ประมวลผลได้เร็วระดับไมโครวินาที | ประมวลผลการแจ้งเตือนได้นับพันรายการต่อวินาทีโดยไม่หน่วง CPU |
|
Mode
Run Once for Each Item
🟢 สถาปัตยกรรม
|
สั่งให้โค้ดรันประมวลผลทีละ 1 แถวข้อมูลที่มีเข้ามา | การแจ้งเตือน LPR มาทีละเหตุการณ์ จึงเหมาะกับการประมวลผลแบบ Item-by-Item | เขียนโค้ดง่าย เข้าถึงข้อมูลได้ตรงๆ ผ่าน $input.item.json |
|
Input Sanitization
body.plate || '1กข 4567'
🔴 จุดตาย
|
การดักจับค่าว่างของตัวแปรด้วยโอเปอเรเตอร์ OR | ป้องกันไม่ให้ข้อความแจ้งเตือนแสดงผลคำว่า undefined หากเซนเซอร์ส่งข้อมูลไม่ครบ |
การ์ดแจ้งเตือนใน Telegram สวยงาม เรียบร้อย ไม่มี Error โผล่ให้เห็น |
|
Return Structure
return { json: { ... } }
🔴 จุดตาย
|
กฎเหล็กของ n8n ที่ต้องครอบผลลัพธ์ด้วยอ็อบเจกต์ที่มีคีย์ json |
n8n ออกแบบมาให้รับส่งข้อมูลเฉพาะรูปแบบนี้ หาก return ข้อความเปล่าจะ Error ทันที | ข้อมูลการ์ดแจ้งเตือนส่งต่อไปยัง Telegram และ Respond ได้ถูกต้อง 100% |
// Smart LPR Alert Formatter Node
const body = $input.item.json.body || {};
const plate = body.plate || '1กข 4567';
const camera = body.camera || 'cam11 (ด่านหนองกวาง)';
const timestamp = body.timestamp || new Date().toLocaleString('th-TH');
const status = body.status || 'SUSPECT_WATCHLIST';
const formattedTelegramMessage = `🚨 [แจ้งเตือนด่วน BPP-VMS LPR]\n` +
`📌 ทะเบียน: ${plate}\n` +
`📷 กล้อง: ${camera}\n` +
`⏰ เวลา: ${timestamp}\n` +
`⚠️ สถานะ: บัญชีเฝ้าระวัง (${status})\n` +
`📍 พิกัด: จุดตรวจหนองกวาง ต.หนองกวาง อ.โพธาราม`;
return {
json: {
plate: plate,
camera: camera,
timestamp: timestamp,
status: status,
telegram_text: formattedTelegramMessage,
broadcast_ready: true
}
};
- สาย Input ด้านซ้าย: รับสายต่อมาจาก ขา Output 2 (alert) ของโหนด #2 (Route by Message Type)
- สาย Output ด้านขวา: เมื่อสคริปต์ JavaScript แปลงข้อความเสร็จ ให้ ลากสาย Output ด้านขวาไปเสียบเข้าโหนด #7 (Respond to Webhook)
n8n-nodes-base.respondToWebhook
- กดปุ่ม + บน Canvas ค้นหาคำว่า Respond to Webhook
- ลากเส้นเชื่อมจาก 3 ปลายทางมารวมเข้าที่โหนดนี้:
• จากโหนด #3 AI Agent
• จากโหนด #6 Photo Extractor
• จากโหนด #5 LPR Alert Formatter - ดับเบิลคลิกเปิดโหนดขึ้นมา
- ที่ช่อง Respond With เลือกเป็น JSON
- ที่ช่อง Response Body ใส่โค้ด:
={{ JSON.stringify($json) }}
- ทำไมต้องมีโหนดนี้ปิดท้าย? เพราะในโหนด #1 Webhook เราเลือกโหมด Using 'Respond to Webhook' Node ไว้ ถ้าไม่มีโหนดนี้ คนที่ยิง API เข้ามาจะต้องรอจน Time-out 504 Gateway Timeout การมีโหนดนี้จะช่วยส่งผลลัพธ์ที่สกัดเสร็จสมบูรณ์กลับไปทันที
| พารามิเตอร์ & ค่าที่ตั้ง | คืออะไร & หมายความว่ายังไง? | ทำทำไม? (เหตุผล & ตรรกะ) | ทำแล้วได้อะไร? (ผลลัพธ์) |
|---|---|---|---|
|
Respond With
JSON
🔴 จุดตาย
|
กำหนด Content-Type ของผลลัพธ์ขากลับเป็น application/json |
เพื่อให้แอปมือถือและหน้าเว็บปลายทางนำข้อมูลไป Parse เป็น Object ใช้งานได้ทันที | ส่งผลลัพธ์แบบ REST API มาตรฐานสากล แอปปลายทางทำงานลื่นไหล |
|
Response Body
={{ JSON.stringify($json) }}
🔴 จุดตาย
|
แปลงข้อมูลอ็อบเจกต์ที่สกัดได้ทั้งหมดให้เป็นข้อความ JSON String ส่งกลับออกไป | รับประกันว่าทุกฟิลด์ที่สกัดเสร็จ (ทั้ง AI Entity, พิกัด GPS, Dossier ID) จะถูกส่งกลับครบ | ผู้เรียกได้รับผลลัพธ์บริบูรณ์ใน Request เดียว ไม่ตกหล่นแม้แต่ฟิลด์เดียว |
|
Response Code
200 (OK)
🟢 ประสิทธิภาพ
|
HTTP Status Code 200 OK ยืนยันความสำเร็จ | ส่งสัญญาณบอกฝั่งผู้เรียกว่าการประมวลผลสำเร็จลุล่วง | แอปปลายทางทราบสถานะความสำเร็จและปิด Loading ทันที |
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"id": "respond-to-webhook",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [1160, 300]
}
- 1️⃣ สาย Output จาก โหนด #3 (AI Intelligence Agent)
- 2️⃣ สาย Output จาก โหนด #5 (Smart Alert Formatter)
- 3️⃣ สาย Output จาก โหนด #6 (Photo & EXIF Extractor)
🎉 ผลลัพธ์: BPP-VMS จะได้รับ Response ตอบกลับพร้อมข้อมูลที่จัดรูปเสร็จแล้วทันที ถือเป็นการต่อสายสมบูรณ์แบบ 100%!
🌐 8.4 การเชื่อมต่อเครือข่ายกล้องระยะไกลด้วย MikroTik WireGuard VPN (ไม่มี Public IP)
สำหรับฐานปฏิบัติการหรือจุดตรวจหน้างานที่ใช้สัญญาณซิมมือถือ 4G Router หรือบรอดแบนด์ที่ติด CGNAT (ไม่มี Public IP และไม่สามารถ Forward Port ได้) เราเตอร์ MikroTik RouterOS v7 จะทำหน้าที่สร้างท่อส่งสัญญาณเสมือนจริง Reverse WireGuard Tunnel เชื่อมต่อเข้าสู่ BPP-VMS Hub:
🛠️ สคริปต์ตั้งค่าบน MikroTik RouterOS v7 (พิมพ์ใน Terminal):
# 1. สร้าง Interface WireGuard ฝั่ง Client หน้างาน
/interface wireguard add name=wg-bpp-vms listen-port=13231 mtu=1420
# 2. ผูกการเชื่อมต่อ Peer ไปยัง BPP-VMS Hub
/interface wireguard peers add interface=wg-bpp-vms \
endpoint-address="vms.bpp215.police.go.th" endpoint-port=51820 \
public-key="[SERVER_PUBLIC_KEY]" \
allowed-address=10.10.0.0/24 \
persistent-keepalive=25s
# 3. กำหนด IP ภายในท่อ Tunnel ให้ MikroTik หน้างาน
/ip address add address=10.10.0.2/24 interface=wg-bpp-vms
# 4. ทดสอบความเสถียรของท่อส่งสัญญาณ (Ping ทดสอบ)
/ping 10.10.0.1 count=4
persistent-keepalive=25s คือหัวใจหลักที่บังคับให้เราเตอร์ส่งแพ็กเก็ตขนาดเล็กออกไปทุก 25 วินาที เพื่อไม่ให้โอเปอเรเตอร์มือถือ (AIS/True/NT) ตัด Session ของ NAT ทำให้กล้องวงจรปิดสตรีมภาพสดได้ต่อเนื่องตลอด 24 ชั่วโมงแม้ไม่มี Public IP
🖥️ 8.5 Master Guide Interactive Viewer (คู่มือฉบับสมบูรณ์ 6 บทเรียน)
ท่านสามารถอ่านเนื้อหาฉบับเต็ม พร้อมอินเทอร์เฟซแบบโต้ตอบ ตัวแปลงคำสั่ง และโค้ด JSON Workflow ได้โดยตรงจากกรอบด้านล่างนี้