โค้ดชิ้นนี้ใช้ OpenCV เพื่อตรวจจับตำแหน่งของเครื่องหมายในแต่ละเฟรมที่อุปกรณ์วิดีโอบันทึก ขึ้นอยู่กับขนาดทางกายภาพของเครื่องหมาย ก็มีการประมาณค่าเช่นกัน สำหรับเครื่องหมายที่กำหนดแต่ละตัว ข้อมูลจะพร้อมใช้งานผ่าน UDP ในรูปแบบของข้อความธรรมดา โดยจะส่งคืนการแปลการหมุนของวัตถุที่เกี่ยวข้องกับกล้อง และพิกัด XY ของเซนทรอยด์ 2 มิติของวัตถุที่ปรากฏบนภาพของกล้อง หากมองไม่เห็นเครื่องหมาย ตัวเลขที่ส่งคืนจะเป็น NaN
โปรดทราบว่ารหัสนี้ ไม่ได้ ใช้ข้อมูลชั่วคราวในการติดตาม
แต่จะพยายามตรวจจับเครื่องหมายและประเมินท่าทางของมันในทุกเฟรมที่ถ่าย
.ini
มาตรฐาน คุณต้องมีสภาพแวดล้อม Python มาตรฐานที่มี cv2
และมีโมดูล numpy
ให้ใช้งาน แม้ว่าโค้ดจะได้รับการพัฒนาโดยใช้ Python 2.7 และ OpenCV 3.4.1 บน Mac แต่ก็ควรใช้งานร่วมกับ Python 3 ได้เช่นกันและแพลตฟอร์มอื่นๆ ด้วย ต่อไปนี้เป็นขั้นตอนในการสร้างมาร์กเกอร์: 1. ถ่ายภาพวัตถุของคุณแล้วครอบตัด ตามหลักการแล้วความละเอียดควรเข้ากันได้กับกล้องของคุณ 2. แก้ไขไฟล์ปรับแต่ง และตรวจสอบให้แน่ใจว่าได้ตั้งค่าบรรทัดต่อไปนี้:
[General]
คุณสามารถปล่อยให้ทุกอย่างเหมือนเดิมได้ในส่วนทั่วไป แต่คุณจะต้องปรับเทียบกล้องของคุณ! อ่านวิธีการปรับเทียบได้ที่นี่ เมื่อเพิ่มเครื่องหมายใหม่ คุณจะต้องปรับการตั้งค่าอย่างละเอียด ดังนั้นตรวจสอบให้แน่ใจว่าภาพของกล้องจะมองเห็นได้
camera_show_picture = 1
มิฉะนั้น เครื่องหมายใหม่จะถูกเพิ่มเป็นส่วนใหม่ในไฟล์กำหนดค่า
ส่วนหัวคือชื่อที่ใช้งานง่ายของเครื่องหมาย
[My custom marker]
ระบุชื่อไฟล์และขนาดทางกายภาพของมาร์กเกอร์:
marker_file_name = <File name in the same directory or full path>
marker_width = <Units are in mm.>
marker_height = <Units are in mm.>
เมื่อตั้งค่ามาร์กเกอร์ใหม่ คุณจะต้องเปลี่ยนการตั้งค่าต่อไปนี้:
marker_minimum_matching_distance = <Decrease it from 50>
marker_minimum_number_of_matches = <Set this to at least 4>
pose_estimation_running_average = <more than 1>
marker_minimum_matching_distance
จะแปรผกผันกับคุณภาพของคุณสมบัติที่ตรงกันระหว่างรูปภาพของ Marker และกล้อง หากตั้งค่าไว้สูงเกินไป คุณลักษณะที่อยู่นอกเครื่องหมายจะถูกจับคู่ และหากตั้งค่าต่ำเกินไป ก็จะไม่มีการจับคู่เลย
จำเป็นต้องมี marker_minimum_number_of_matches
สำหรับการประมาณท่าทาง ต้องมีจุดที่ตรงกันอย่างน้อย 4 จุดที่คำนวณพิกัด translation
และมุม rotation
อย่างไรก็ตาม ยิ่งต้องมีการจับคู่กันมากสำหรับการแปลง การประมาณก็จะแม่นยำมากขึ้นเท่านั้น หากตั้งค่าไว้สูงเกินไป การประมาณท่าทางจะทำงานได้เพียงไม่กี่เฟรมเท่านั้น
สุดท้ายนี้ pose_estimation_running_average
จะกำหนดจำนวนข้อมูลตำแหน่งของเฟรมที่ควรเฉลี่ย เพิ่มจำนวนนี้หากตำแหน่งที่ส่งคืน 'กระตุก' เกินไป อย่างไรก็ตาม ยิ่งมีค่าเฉลี่ยเฟรมรวมกันมากเท่าไร ความหน่วงก็จะยิ่งมากขึ้นเท่านั้น
นอกจากนี้ แต่ละช่อง colour
สามารถเป็นตัวเลขธรรมชาติใดก็ได้ระหว่าง 0
ถึง 255
รายการ marker_feature_colour_*
ใช้สำหรับแสดงตำแหน่งของคุณภาพที่ดีที่ตรงกันระหว่างภาพ Marker และภาพของกล้อง การตั้งค่า marker_indicator_colour_*
จะกำหนดสีของตัวบ่งชี้เดียว ซึ่งจะแสดงพิกัดที่คำนวณโดยค่าเฉลี่ยของการจับคู่ที่แสดง ตามหลักการแล้ว ตัวบ่งชี้นี้ควรอยู่ภายในเครื่องหมายเสมอ และส่งคืนในแพ็กเก็ต UDP เป็น centroid
marker_feature_colour_R = <0...255>
marker_feature_colour_G = <0...255>
marker_feature_colour_B = <0...255>
marker_indicator_colour_R = <0...255>
marker_indicator_colour_G = <0...255>
marker_indicator_colour_B = <0...255>
python tracker_main.py
ขอให้โชคดี!