งาน MediaPipe Object Detector ช่วยให้คุณตรวจจับการปรากฏตัวและตำแหน่งของออบเจ็กต์หลายคลาสได้ งานนี้รับข้อมูลรูปภาพและแสดงผลรายการผลการตรวจจับ ซึ่งแต่ละรายการแสดงถึงออบเจ็กต์ที่ระบุในรูปภาพ คุณสามารถ ดู เรียกใช้ และแก้ไขตัวอย่าง Object Detector ได้ โดยใช้เพียงเว็บเบราว์เซอร์
ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และ ตัวเลือกการกำหนดค่าของงานนี้ได้ที่ ภาพรวม
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์เพื่อใช้ Object Detector โดยเฉพาะ ดูข้อมูลทั่วไปเกี่ยวกับการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์สำหรับเว็บและ JavaScript รวมถึงข้อกำหนดเวอร์ชันแพลตฟอร์มได้ที่ คู่มือการตั้งค่าสำหรับเว็บ
แพ็กเกจ JavaScript
โค้ด Object Detector พร้อมใช้งานผ่านแพ็กเกจ MediaPipe @mediapipe/tasks-vision
NPM คุณสามารถ
ค้นหาและดาวน์โหลดไลบรารีเหล่านี้ได้โดยทำตามวิธีการในคู่มือการตั้งค่าแพลตฟอร์ม
Setup guide
คุณสามารถติดตั้งแพ็กเกจที่จำเป็นผ่าน NPM ได้โดยใช้คำสั่งต่อไปนี้
npm install @mediapipe/tasks-vision
หากต้องการนำเข้าโค้ดงานผ่านบริการเครือข่ายนำส่งข้อมูล (CDN)
ให้เพิ่มโค้ดต่อไปนี้ในแท็ก <head> ในไฟล์ HTML
<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.mjs"
crossorigin="anonymous"></script>
</head>
โมเดล
งาน MediaPipe Object Detector ต้องใช้โมเดลที่ผ่านการฝึกแล้วซึ่งเข้ากันได้กับงานนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกแล้วซึ่งพร้อมใช้งานสำหรับ Object Detector ได้ที่ ภาพรวมงานในส่วนโมเดล
เลือกและดาวน์โหลดโมเดล แล้วจัดเก็บไว้ในไดเรกทอรีโปรเจ็กต์
<dev-project-root>/app/shared/models/
สร้างงาน
ใช้ฟังก์ชัน ObjectDetector.createFrom...() อย่างใดอย่างหนึ่งของ Object Detector เพื่อเตรียมงานสำหรับการเรียกใช้การอนุมาน ใช้ฟังก์ชัน createFromModelPath() กับเส้นทางสัมพัทธ์หรือเส้นทางสมบูรณ์ไปยังไฟล์โมเดลที่ผ่านการฝึกแล้ว
หากโหลดโมเดลลงในหน่วยความจำแล้ว คุณสามารถใช้วิธี createFromModelBuffer() ได้ ตัวอย่างโค้ดด้านล่างแสดงการใช้ฟังก์ชัน createFromOptions() ซึ่งช่วยให้คุณตั้งค่าตัวเลือกการกำหนดค่าเพิ่มเติมได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่าที่พร้อมใช้งานได้ในส่วน
ตัวเลือกการกำหนดค่า
โค้ดต่อไปนี้แสดงวิธีสร้างและกำหนดค่างานนี้
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
objectDetector = await ObjectDetector.createFromOptions(vision, {
baseOptions: {
modelAssetPath: `https://storage.googleapis.com/mediapipe-tasks/object_detector/efficientdet_lite0_uint8.tflite`
},
scoreThreshold: 0.5,
runningMode: runningMode
});
ดูการติดตั้งใช้งานที่สมบูรณ์ยิ่งขึ้นในการสร้างงาน Object Detector ได้ที่ ตัวอย่างโค้ด
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับเว็บแอปพลิเคชัน
| ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
|---|---|---|---|
runningMode |
ตั้งค่าโหมดการทำงานสำหรับงาน มี 2
โหมดดังนี้: IMAGE: โหมดสำหรับอินพุตรูปภาพเดียว VIDEO: โหมดสำหรับเฟรมที่ถอดรหัสแล้วของ วิดีโอหรือในไลฟ์สดของข้อมูลอินพุต เช่น จากกล้อง |
{IMAGE, VIDEO} |
IMAGE |
displayNamesLocale |
ตั้งค่าภาษาของป้ายกำกับที่จะใช้สำหรับชื่อที่แสดงซึ่งระบุไว้ใน
ข้อมูลเมตาของโมเดลของงาน หากมี ค่าเริ่มต้นคือ en สำหรับ
ภาษาอังกฤษ คุณสามารถเพิ่มป้ายกำกับที่แปลเป็นภาษาท้องถิ่นลงในข้อมูลเมตาของโมเดลที่กำหนดเองได้โดยใช้ TensorFlow Lite Metadata Writer API
|
รหัสภาษา | en |
maxResults |
ตั้งค่าจำนวนสูงสุดของผลการตรวจจับที่มีคะแนนสูงสุดที่จะแสดงผล (ไม่บังคับ) | ตัวเลขที่เป็นจำนวนบวกใดก็ได้ | -1 (แสดงผลลัพธ์ทั้งหมด) |
scoreThreshold |
ตั้งค่าเกณฑ์คะแนนการคาดการณ์ที่จะลบล้างเกณฑ์ที่ระบุไว้ในข้อมูลเมตาของโมเดล (หากมี) ระบบจะปฏิเสธผลลัพธ์ที่ต่ำกว่าค่านี้ | เลขทศนิยมใดก็ได้ | ไม่ได้ตั้งค่า |
categoryAllowlist |
ตั้งค่ารายการชื่อหมวดหมู่ที่อนุญาต (ไม่บังคับ) หากไม่ว่างเปล่า ระบบจะกรองผลการตรวจจับที่มีชื่อหมวดหมู่ไม่อยู่ในชุดนี้ออก ระบบจะละเว้นชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก
ตัวเลือกนี้ใช้ร่วมกับ categoryDenylist ไม่ได้ และการใช้ทั้ง 2 ตัวเลือกจะทำให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
categoryDenylist |
ตั้งค่ารายการชื่อหมวดหมู่ที่ไม่อนุญาต (ไม่บังคับ) หากไม่ว่างเปล่า ระบบจะกรองผลการตรวจจับที่มีชื่อหมวดหมู่อยู่ในชุดนี้ออก ระบบจะละเว้นชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก ตัวเลือกนี้ใช้ร่วมกับ categoryAllowlist ไม่ได้ และการใช้ทั้ง 2 ตัวเลือกจะทำให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
เตรียมข้อมูล
Object Detector สามารถตรวจจับออบเจ็กต์ในรูปภาพในรูปแบบใดก็ได้ที่เบราว์เซอร์โฮสต์รองรับ นอกจากนี้ งานยังจัดการการประมวลผลล่วงหน้าของข้อมูลอินพุต ซึ่งรวมถึงการปรับขนาด การหมุน และการทำให้ค่าเป็นปกติ หากต้องการตรวจจับออบเจ็กต์ในวิดีโอ คุณสามารถใช้ API เพื่อประมวลผลเฟรมทีละเฟรมได้อย่างรวดเร็ว โดยใช้การประทับเวลาของเฟรมเพื่อกำหนดเวลาที่ท่าทางจะเกิดขึ้นในวิดีโอ
เรียกใช้งาน
Object Detector ใช้ detect() สำหรับการทำงานกับรูปภาพเดียว และ detectForVideo() สำหรับการตรวจจับออบเจ็กต์ในเฟรมวิดีโอ งานจะประมวลผลข้อมูล พยายามจดจำออบเจ็กต์ แล้วรายงานผลลัพธ์
การเรียกใช้วิธี detect() และ detectForVideo() จะทำงานแบบซิงโครนัสและบล็อกเธรดอินเทอร์เฟซผู้ใช้ หากคุณจดจำออบเจ็กต์ในเฟรมวิดีโอจากกล้องของอุปกรณ์ การจัดประเภทแต่ละรายการจะบล็อกเธรดหลัก คุณสามารถป้องกันไม่ให้เกิดเหตุการณ์นี้ได้โดยใช้ Web Worker เพื่อเรียกใช้การตรวจจับในเธรดอื่น
โค้ดต่อไปนี้แสดงวิธีดำเนินการประมวลผลด้วยโมเดลงาน
รูปภาพ
const image = document.getElementById("image") as HTMLImageElement; const detections = objectDetector.detect(image);
วิดีโอ
await objectDetector.setOptions({ runningMode: "video" }); let lastVideoTime = -1; function renderLoop(): void { const video = document.getElementById("video"); if (video.currentTime !== lastVideoTime) { const detections = detector.detectForVideo(video); processResults(detections); lastVideoTime = video.currentTime; } requestAnimationFrame(() => { renderLoop(); }); }
ดูการติดตั้งใช้งานที่สมบูรณ์ยิ่งขึ้นในการเรียกใช้งาน Object Detector ได้ที่ ตัวอย่างโค้ด
จัดการและแสดงผลลัพธ์
Object Detector จะสร้างออบเจ็กต์ผลการตรวจจับสำหรับการเรียกใช้การตรวจจับแต่ละครั้ง ออบเจ็กต์ผลลัพธ์จะมีรายการการตรวจจับ โดยการตรวจจับแต่ละรายการจะมีกรอบล้อมรอบและข้อมูลหมวดหมู่เกี่ยวกับออบเจ็กต์ที่ตรวจพบ ซึ่งรวมถึงชื่อออบเจ็กต์และคะแนนความเชื่อมั่น
ตัวอย่างต่อไปนี้แสดงข้อมูลเอาต์พุตจากงานนี้
ObjectDetectorResult:
Detection #0:
Box: (x: 355, y: 133, w: 190, h: 206)
Categories:
index : 17
score : 0.73828
class name : dog
Detection #1:
Box: (x: 103, y: 15, w: 138, h: 369)
Categories:
index : 17
score : 0.73047
class name : dog
รูปภาพต่อไปนี้แสดงภาพการแสดงผลของงาน
โค้ดตัวอย่าง Object Detector แสดงวิธีแสดงผลการตรวจจับ ที่แสดงผลจากงาน โปรดดูรายละเอียดใน ตัวอย่างโค้ด