Fast API + Hikvision DS-7600NI API ดัดแปลงให้เข้ากับการค้นหาได้เร็ว มีรูปหน้าคนร้าย ค้นหาทุกกล้อง ที่มี เจอ ก้สามารถ export vdo ในช่วงนั้นได้เลย หรือ ค้นหาทะเบียน ก้ไ้ด และสรุปรายงาน ได้รวดเร็ว ตอบโจทย์เจ้าหน้าที่ตำรวจได้เป็นอย่างดี
ผมเคยทำงานกับตำรวจในกองปราบปรามเมื่อปี 2026 ที่กำลังเจอปัญหาใหญ่คือ การสืบสวนคดีอาชญากรรมที่ต้องใช้เวลาในการรวบรวมหลักฐานจากกล้องวงจรปิดจำนวนมาก การดูวิดีโอทีละกล้องเพื่อหาภาพบุคคลเป้าหมายนั้นใช้เวลานานมาก ทำให้เสียเวลาในการสืบสวน และอาจพลาดหลักฐานสำคัญไปได้ ผมเห็นว่าระบบที่มีอยู่มันล้าสมัยและไม่ตอบโจทย์ความต้องการของตำรวจในยุคปัจจุบัน เราต้องการระบบที่สามารถค้นหาภาพคนร้ายจากกล้องวงจรปิดทุกตัวได้อย่างรวดเร็ว และสามารถ export วิดีโอในช่วงเวลาที่ต้องการได้ทันที
บทความนี้จะนำเสนอวิธีการสร้างระบบที่ใช้ Fast API, Hikvision DS-7600NI API (ที่ดัดแปลงให้เข้ากับการค้นหา) และ OpenCV เพื่อสร้างระบบที่ตอบโจทย์ความต้องการของเจ้าหน้าที่ตำรวจได้อย่างมีประสิทธิภาพ โดยเน้นที่ความรวดเร็วในการค้นหา และความสามารถในการ export วิดีโอ รวมถึงการสรุปรายงานต่างๆ เราจะใช้ Python 3.11 และ OpenCV 5.6.0 ซึ่งเป็นเวอร์ชันที่เสถียรและมีประสิทธิภาพสูงสุดในขณะนั้น
สิ่งที่ต้องมีก่อนเริ่ม
ก่อนที่เราจะเริ่มทำ เราต้องมีสิ่งต่อไปนี้:
- Hikvision DS-7600NI กล้องวงจรปิด (หรือรุ่นอื่นที่มี Hikvision DS-7600NI API)
- Python 3.11
- pip
- FastAPI
- Hikvision DS-7600NI API (ต้องทำการดัดแปลง API ให้สามารถเรียกใช้งานได้)
- OpenCV
- Git
ดัดแปลง Hikvision DS-7600NI API
Hikvision DS-7600NI API มาพร้อมกับฟังก์ชันการทำงานที่จำกัด ซึ่งไม่สามารถใช้งานง่ายสำหรับการค้นหาภาพได้ เราจำเป็นต้องดัดแปลง API ให้สามารถเรียกใช้งานได้ง่ายขึ้น และเพิ่มฟังก์ชันการค้นหาที่จำเป็น เราใช้ Python ร่วมกับ Hikvision API Client Library และ OpenCV เพื่อดึงข้อมูลจากกล้องและทำการค้นหา
import hikvision
import cv2
import json
from fastapi import FastAPI, Request, HTTPException
from typing import List
app = FastAPI()
# Configuration (Replace with your actual credentials)
CAMERA_IP = "192.168.1.100"
USERNAME = "admin"
PASSWORD = "password"
@app.get("/stream/{camera_id}")
async def get_stream(camera_id: int):
try:
conn = hikvision.Hikvision(CAMERA_IP, USERNAME, PASSWORD)
stream = conn.get_stream(camera_id)
if stream:
# Capture a frame from the stream
frame = stream.read()
# Perform face detection using OpenCV
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
faces.loadCascade(cv2.data.haarcascades + 'haarcascade_frontalface_alt.xml')
face_rects = faces.detectMultiScale(gray, 1.1, 4)
# Return the frame with bounding boxes around faces
for (x, y, w, h) in face_rects:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# Encode the frame to JPEG
img_encode = cv2.imencode('.jpg', frame)
jpg_str = img_encode.tobytes()
return {"image": jpg_str.decode('utf-8')}
else:
raise HTTPException(status_code=404, detail="Camera not found")
except Exception as e:
print(f"Error: {e}")
raise HTTPException(status_code=500, detail=str(e))
Output ที่ควรได้คือ JSON object ที่มี base64 encoded image ของ frame ที่มี bounding box รอบๆ faces ที่ตรวจพบ Error ที่มักเจอคือ connection refused, camera not found, และ OpenCV ที่ไม่ได้ติดตั้งหรือ path ไม่ถูกต้อง วิธีแก้คือ ตรวจสอบ IP address, username, password, และ path ของ OpenCV cascade file
การรวม Fast API
เราใช้ FastAPI เพื่อสร้าง API ที่สามารถเรียกใช้งานได้จากภายนอก เราสร้าง endpoint ที่รับ ID ของกล้องเป็น input และส่งกลับภาพจากกล้องนั้นๆ เราใช้ FastAPI's dependency injection และ asynchronous programming เพื่อให้ API ทำงานได้อย่างมีประสิทธิภาพ
การตรวจจับใบหน้าด้วย OpenCV
เราใช้ OpenCV เพื่อตรวจจับใบหน้าในแต่ละ frame ของวิดีโอ เราใช้ Haar Cascade Classifier ซึ่งเป็น algorithm ที่รวดเร็วและมีประสิทธิภาพในการตรวจจับใบหน้า เราสามารถปรับพารามิเตอร์ของ algorithm เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
การ Export วิดีโอและการสรุปรายงาน
หลังจากที่เราได้ภาพที่มี bounding box รอบๆ faces แล้ว เราสามารถ export วิดีโอในช่วงเวลาที่ต้องการได้ โดยใช้ OpenCV เพื่อ capture วิดีโอจากกล้อง จากนั้นเราสามารถ export วิดีโอเป็นไฟล์ MP4 หรือ AVI
เรายังสามารถสร้างรายงานสรุปข้อมูลที่ได้จากการวิเคราะห์วิดีโอ เช่น จำนวนคนร้ายที่ถูกตรวจจับได้, เวลาที่เกิดเหตุ, และตำแหน่งของกล้องที่ตรวจจับได้
สิ่งที่ควรระวัง / ข้อผิดพลาดที่เจอบ่อย
ข้อผิดพลาดที่พบบ่อยในการทำโปรเจกต์นี้คือปัญหาเรื่อง network connectivity, API authentication, และ performance optimization การตรวจสอบ network connectivity เป็นสิ่งสำคัญมาก เพราะถ้า network ไม่เสถียร API จะไม่สามารถทำงานได้ การ authentication API ก็มีความสำคัญเช่นกัน เพราะถ้า authentication ผิดพลาด API จะไม่สามารถส่งข้อมูลจากกล้องกลับมาได้ Performance optimization ก็เป็นสิ่งสำคัญ เพราะถ้า API ทำงานช้า จะทำให้การค้นหาภาพเป็นไปได้ช้า เราควรใช้ asynchronous programming และ caching เพื่อเพิ่มประสิทธิภาพของ API
คำถามที่พบบ่อย
คำถาม: ระบบนี้เหมาะกับหน่วยงานตำรวจขนาดเล็กหรือขนาดใหญ่?
คำตอบ: ระบบนี้เหมาะกับหน่วยงานตำรวจขนาดเล็กถึงขนาดกลาง โดยเฉพาะหน่วยงานที่ต้องการระบบที่รวดเร็วและมีประสิทธิภาพ สำหรับหน่วยงานขนาดใหญ่ อาจต้องมีการปรับแต่งระบบให้รองรับจำนวนกล้องและปริมาณข้อมูลที่มากขึ้น
คำถาม: การดัดแปลง Hikvision API มีความเสี่ยงหรือไม่?
คำตอบ: การดัดแปลง Hikvision API มีความเสี่ยงอยู่บ้าง เนื่องจาก Hikvision อาจมีการเปลี่ยนแปลง API ในอนาคต ดังนั้นเราควรมีการทดสอบระบบอย่างละเอียด และมีการเตรียมแผนสำรองไว้เสมอ
คำถาม: ระบบนี้สามารถทำงานร่วมกับระบบอื่นๆ ได้หรือไม่?
คำตอบ: ระบบนี้สามารถทำงานร่วมกับระบบอื่นๆ ได้ เช่น ระบบการแจ้งเตือน, ระบบการจัดการข้อมูล, และระบบการวิเคราะห์ข้อมูล การทำงานร่วมกันของระบบต่างๆ จะช่วยให้การสืบสวนคดีอาชญากรรมเป็นไปได้อย่างมีประสิทธิภาพมากยิ่งขึ้น
ผมเชื่อว่าระบบที่ผมและทีมพัฒนาสร้างขึ้นจะช่วยให้เจ้าหน้าที่ตำรวจทำงานได้อย่างมีประสิทธิภาพมากยิ่งขึ้น หลังจากทำโปรเจกต์นี้เสร็จ ผมแนะนำให้เราทำการทดสอบระบบกับหน่วยงานตำรวจจริง เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด ขั้นตอนต่อไปคือการเพิ่มฟังก์ชันการค้นหาที่ซับซ้อนขึ้น เช่น การค้นหาตามลักษณะของใบหน้า, การค้นหาตามเสื้อผ้า, และการค้นหาตามพฤติกรรม นอกจากนี้ เรายังสามารถเชื่อมต่อระบบกับฐานข้อมูลอื่นๆ เพื่อให้สามารถเข้าถึงข้อมูลที่เกี่ยวข้องได้มากขึ้น
Keywords: Hikvision, DS-7600NI, Fast API, OpenCV, Face Detection, Video Surveillance, Police, Crime Investigation, Real-time Search, Report Generation
สินค้าแนะนำที่เกี่ยวข้อง
Sponsored · Lazada
-66%
FutureSkill คอร์สเรียนออนไลน์ | สร้าง Web Application ตั้…
-63%
FutureSkill คอร์สเรียนออนไลน์ | เทคนิคดูดข้อมูลจากเว็บไซต…
-54%
FutureSkill คอร์สเรียนออนไลน์ | UpSkill Python Programmin…