นี่คือการผูก Python สำหรับห้องสมุด apriltags 3 ที่พัฒนาโดย Aprilrobotics แรงบันดาลใจจากการผูก Apriltags2 โดย Matt Zucker
ไลบรารีดั้งเดิมถูกเผยแพร่ด้วยใบอนุญาต BSD 2 ข้อ
คุณสามารถติดตั้งได้โดยใช้ pip
(หรือ pip3
สำหรับ Python 3):
pip install dt-apriltags
และถ้าคุณต้องการรีลีสเฉพาะให้เพิ่มเช่นนี้:
pip install [email protected]
โคลนที่เก็บนี้และนำทางในนั้น จากนั้นเริ่มต้น submodule apriltags:
$ git submodule init
$ git submodule update
สร้างห้องสมุด apriltags C และฝังไลบรารีที่สร้างขึ้นใหม่ลงในล้อ PIP
$ make build
ล้อใหม่จะมีอยู่ในไดเรกทอรี dist/
ตอนนี้คุณสามารถติดตั้งล้อได้
pip install dt_apriltags-VERSION-pyPYMAJOR-none-ARCH.whl
หมายเหตุ: ขึ้นอยู่กับ VERSION
ปัจจุบันของไลบรารีนี้และเวอร์ชันของ Python ใช้ PYMAJOR
พร้อมกับสถาปัตยกรรมของ CPU ARCH
ของคุณชื่อไฟล์ด้านบนแตกต่างกันไป
ห้องสมุดนี้รองรับการสร้างล้อสำหรับ Python 2
และ 3
Python 2 จะถูกใช้โดยค่าเริ่มต้น ใช้คำสั่งต่อไปนี้เพื่อสร้างสำหรับ Python 3
make build PYTHON_VERSION=3
ห้องสมุดนี้รองรับการสร้างล้อสำหรับสถาปัตยกรรม CPU amd64
, arm32v7
และ arm64v8
สถาปัตยกรรมเริ่มต้นคือ amd64
เมื่อสร้างล้อสำหรับสถาปัตยกรรมแขน QEMU จะถูกใช้เพื่อเลียนแบบ CPU เป้าหมาย ใช้คำสั่งต่อไปนี้เพื่อสร้างสถาปัตยกรรม arm32v7
make build ARCH=arm32v7
ล้อทั้งหมดที่สร้างขึ้นภายใน dist/
สามารถปล่อย (ผลักไปที่ pypi.org) โดยเรียกใช้คำสั่ง
make upload
ใช้คำสั่งต่อไปนี้เพื่อสร้างและปล่อยล้อสำหรับ Python 2 และ 3 และ CPU Architecture amd64
และ arm32v7
make release-all
ตัวอย่างบางส่วนของการใช้งานสามารถดูได้ในไฟล์ test.py
คลาส Detector
เป็น wrapper รอบฟังก์ชั่น apriltags คุณสามารถเริ่มต้นได้ดังต่อไปนี้:
at_detector = Detector(searchpath=['apriltags'],
families='tag36h11',
nthreads=1,
quad_decimate=1.0,
quad_sigma=0.0,
refine_edges=1,
decode_sharpening=0.25,
debug=0)
ตัวเลือกคือ:
ตัวเลือก | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|
ครอบครัว | 'tag36h11' | แท็กครอบครัวคั่นด้วยพื้นที่ |
nthreads | 1 | จำนวนเธรด |
max_hamming | 2 | จำนวนบิตสูงสุดที่ได้รับอนุญาตให้พลิกเพื่อสร้างการตรวจจับแท็กที่ประสบความสำเร็จ สามารถช่วยลดเชิงลบที่ผิดพลาดได้เมื่อเสียงรบกวนทำให้บิตข้อมูลบางอย่างถูกอ่านไม่ถูกต้อง แต่ยังสามารถเพิ่มผลบวกที่ผิดพลาดได้ |
quad_decimate | 2.0 | การตรวจจับสี่เหลี่ยมสามารถทำได้บนภาพความละเอียดต่ำปรับปรุงความเร็วในราคาที่แม่นยำและลดอัตราการตรวจจับเล็กน้อย การถอดรหัสเพย์โหลดไบนารียังคงทำตามความละเอียดเต็มรูปแบบ ตั้งค่านี้เป็น 1.0 เพื่อใช้ความละเอียดเต็มรูปแบบ |
quad_sigma | 0.0 | สิ่งที่เบลอเกาส์เซียนควรนำไปใช้กับภาพที่แบ่งส่วน พารามิเตอร์คือค่าเบี่ยงเบนมาตรฐานเป็นพิกเซล ภาพที่มีเสียงดังมากได้รับประโยชน์จากค่าที่ไม่เป็นศูนย์ (เช่น 0.8) |
ปรับแต่ง | 1 | เมื่อไม่เป็นศูนย์ขอบของรูปสี่เหลี่ยมแต่ละรูปจะถูกปรับให้เป็น "snap to" การไล่ระดับสีที่แข็งแกร่งในบริเวณใกล้เคียง สิ่งนี้มีประโยชน์เมื่อใช้การทำลายล้างเนื่องจากสามารถเพิ่มคุณภาพของการประมาณรูปสี่เหลี่ยมจัตุรัสเริ่มต้นได้อย่างมาก โดยทั่วไปแนะนำให้อยู่ใน (1) ราคาไม่แพงมาก ตัวเลือกจะถูกละเว้นหาก quad_decimate = 1 |
decode_sharpening | 0.25 | การคมชัดควรทำเพื่อถอดรหัสภาพมากแค่ไหน? สิ่งนี้สามารถช่วยถอดรหัสแท็กขนาดเล็ก แต่อาจหรือไม่อาจช่วยในสภาพแสงแปลก ๆ หรือสภาพแสงน้อย |
การค้นหา | ['apriltags'] | สถานที่มองหาห้องสมุด apriltag 3 ต้องเป็นรายการ |
การดีบัก | 0 | ถ้า 1 จะบันทึกภาพการดีบัก วิ่งช้ามาก |
การตรวจจับแท็กในภาพทำได้โดยการเรียกใช้วิธี detect
ของเครื่องตรวจจับ:
tags = at_detector.detect(img, estimate_tag_pose=False, camera_params=None, tag_size=None)
หากคุณต้องการสกัดแท็กโพสต์ estimate_tag_pose
ควรตั้งค่าเป็น True
และ camera_params
( [fx, fy, cx, cy]
) และ tag_size
(เป็นเมตร) วิธี detect
ส่งคืนรายการวัตถุ Detection
แต่ละรายการมีแอตทริบิวต์ต่อไปนี้ (โปรดทราบว่าวัตถุที่มีเครื่องหมายดอกจันจะถูกคำนวณเฉพาะในกรณีที่ estimate_tag_pose=True
):
คุณลักษณะ | คำอธิบาย |
---|---|
tag_family | ครอบครัวของแท็ก |
tag_id | ID ที่ถอดรหัสของแท็ก |
การรัม | มีการแก้ไขข้อผิดพลาดกี่บิต? หมายเหตุ: การยอมรับข้อผิดพลาดที่ถูกต้องจำนวนมากนำไปสู่อัตราการบวกที่ผิดพลาดเพิ่มขึ้นอย่างมาก หมายเหตุ: จากการใช้งานนี้เครื่องตรวจจับไม่สามารถตรวจจับแท็กด้วยระยะการ hamming มากกว่า 3 |
การตัดสินใจ _margin | การวัดคุณภาพของกระบวนการถอดรหัสไบนารี: ความแตกต่างเฉลี่ยระหว่างความเข้มของบิตข้อมูลกับเกณฑ์การตัดสินใจ ตัวเลขที่สูงขึ้นหมายถึงการถอดรหัสที่ดีขึ้น นี่เป็นตัวชี้วัดที่สมเหตุสมผลในการตรวจจับความแม่นยำสำหรับแท็กขนาดเล็กมากเท่านั้น- ไม่มีประสิทธิภาพสำหรับแท็กขนาดใหญ่ (ซึ่งเราสามารถสุ่มตัวอย่างได้ทุกที่ภายในเซลล์บิตและยังคงได้รับการตรวจจับที่ดี) |
คำทำเป็นคล้ายคลึงกัน | เมทริกซ์ homography 3x3 ที่อธิบายการฉายจากแท็ก "อุดมคติ" (มีมุมที่ (-1,1), (1,1), (1, -1) และ (-1, -1)) ภาพ. |
ศูนย์ | ศูนย์กลางของการตรวจจับในพิกเซลพิกเซล |
มุม | มุมของแท็กในพิกเซลพิกเซล สิ่งเหล่านี้จะห่อหุ้มคอลล็อครอบแท็กเสมอ |
Pose_r* | เมทริกซ์การหมุนของการประมาณการท่าทาง |
Pose_t* | การแปลการประมาณการท่าทาง |
Pose_err* | ข้อผิดพลาดในพื้นที่วัตถุของการประมาณ |
หากคุณต้องการใช้เค้าโครงที่กำหนดเองคุณต้องสร้างไฟล์แหล่ง C และส่วนหัวสำหรับมันแล้วสร้างไลบรารีอีกครั้ง จากนั้นใช้ไลบรารี libapriltag.so
ใหม่ คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับที่เก็บ apriltags ดั้งเดิม
ล้อถูกสร้างขึ้นภายในคอนเทนเนอร์ Docker Dockerfile ในรูทของที่เก็บนี้เป็นเทมเพลตสำหรับสภาพแวดล้อมการสร้าง สภาพแวดล้อมการสร้างขึ้นอยู่กับ ubuntu:18.04
และ Python เวอร์ชันที่ถูกต้องติดตั้งทันที คำสั่ง make build
จะสร้างสภาพแวดล้อมการสร้างหากไม่มีอยู่ก่อนที่จะสร้างล้อ
เมื่อสภาพแวดล้อมการสร้าง (อิมเมจ Docker) พร้อมแล้วคอนเทนเนอร์ Docker จะถูกเปิดตัวด้วยการกำหนดค่าต่อไปนี้:
/source
;dist/
ถูกติดตั้งเป็นไดเรกทอรีปลายทางภายใต้ /out
; สคริปต์อาคารจาก assets/build.sh
จะถูกดำเนินการภายในคอนเทนเนอร์ ขั้นตอนการสร้างคือ:
/source
ไปยังตำแหน่งอุณหภูมิ (ภายในคอนเทนเนอร์)apriltags/
(จะสร้างไฟล์ไลบรารี. so)package_data
)/out
(จะปรากฏขึ้นใน dist/
นอกคอนเทนเนอร์)