v2.4.0¶
v2.4.0 เขียน find_lines() ใหม่เป็น Hough-transform detector, เพิ่ม find_line_segments(), การถอดรหัส data matrix ด้วย find_datamatrices(), sensor.set_vsync_output(), การอ่าน/เขียน image slice และ framesize ขนาดปรับได้จำนวนมากสำหรับ FPS ที่สูงขึ้น find_lines(), match_descriptor() และ skip_frames() มีการเปลี่ยนแปลง — อ่าน breaking changes ด้านล่าง
จุดเด่น¶
find_lines()— เขียนใหม่เป็น Hough-transform line detector ที่คืนค่าอ็อบเจกต์เส้น (ทำงานบน RGB565 ได้ ไม่ใช่แค่ระดับสีเทา)find_line_segments()— ตรวจจับ line segment จำกัดfind_datamatrices()— การถอดรหัส data matrixsensor.set_vsync_output()— ขับ VSYNC บนพิน I/O สำหรับการซิงโครไนซ์กล้องเพิ่ม framesize — ความละเอียดแบบปรับได้เพิ่มเติมจำนวนมากสำหรับ FPS ที่สูงขึ้น
Breaking:
find_lines(),match_descriptor()และskip_frames()มีการเปลี่ยนแปลง — ดู breaking changes
ฟีเจอร์ใหม่¶
image.find_line_segments()— ค้นหา line segment ที่ไม่ใช่อนันต์; อ็อบเจกต์เส้นได้รับตัวเข้าถึง.length()image.find_datamatrices()— การถอดรหัส data matrix พร้อมสคริปต์ตัวอย่างsensor.set_vsync_output(pin)— ส่งออกสัญญาณ VSYNC บนพิน GPIO สำหรับการซิงโครไนซ์กล้อง (OpenMV 2 / OpenMV 3)Image slices — subscript / buffer protocol ของภาพตอนนี้รองรับการอ่านและเขียน slice ของข้อมูลภาพ
เพิ่มชุดความละเอียด / framesize ที่ปรับได้จำนวนมากเพื่อรองรับ frame rate ที่สูงขึ้น;
clock.fps()ตอนนี้รีเซ็ตตัวสะสมทุก 2 วินาที ดังนั้น FPS ที่รายงานจะสะท้อนอัตราล่าสุด
การเปลี่ยนแปลงและการปรับปรุงอื่น ๆ¶
OV7725 ถูก window เป็น QVGA เมื่อความละเอียด ≤ VGA (ลดเฟรมที่หายไปที่อัตราจับภาพสูง) และ PLL ถูกตั้งเป็น 6× พร้อม external clock ที่ลดลง (OpenMV 2 48 MHz, OpenMV 3 54 MHz) ทำให้เปลี่ยน frame timing ของ sensor
การแก้ไขบั๊ก¶
การประมวลผลภาพ:
แก้ไขข้อผิดพลาดขนาดบัฟเฟอร์
compress_for_ide()(start/end marker), การถอดรหัส QR (รวมถึงการแก้ไข cell-bitmap indexing และ alignment-pattern bounds ของ quirc upstream)
Sensor และการเชื่อมต่อ:
ลด sensor clock ของ OpenMV 2 เพื่อรองรับ sensor PLL ที่สูงขึ้น (camera init/sync) และทำให้
socket.recvfrom()ของ WINC คืนค่าขนาดที่รับจริง (แสดงข้อผิดพลาดเมื่อขนาดไม่เป็นบวกแทนที่จะคืนค่าเก่า)
ฮาร์ดแวร์และการรองรับบอร์ด¶
VSYNC output บนพิน GPIO (OpenMV 2 / OpenMV 3) รองรับ
sensor.set_vsync_output()OpenMV 3 — เปิดใช้งาน
pyb.UARTUART1
การเปลี่ยนแปลง API แบบ Breaking¶
การเปลี่ยนแปลง API ที่ผู้ใช้มองเห็นได้ระหว่าง v2.3.0 และ v2.4.0 ขอบเขต: Python C-modules ใน modules/ และไลบรารี Python ใน scripts/libraries/
แต่ละการเปลี่ยนแปลงมีป้ายกำกับระดับผลกระทบ:
major — ส่งผลต่อสคริปต์ส่วนใหญ่ที่ใช้ฟีเจอร์นั้น คุณจะต้องปรับโค้ด
minor — API แคบ ส่งผลเฉพาะสคริปต์ที่ใช้งาน
behavior — API เหมือนเดิม แต่ผลลัพธ์ต่างกัน ต้องตรวจสอบสคริปต์ที่ปรับแต่งไว้
การเปลี่ยนแปลงจัดกลุ่มตามผลกระทบตามลำดับ หากต้องการเพียงแค่ปรับโค้ด ข้ามไปที่ รายการตรวจสอบการย้าย ท้ายเอกสาร แต่ละ hash ของ commit เชื่อมไปยัง diff บน GitHub
find_lines() เขียนใหม่เป็น Hough detector (major)¶
image.find_lines() ถูกเขียนใหม่เป็น Hough-transform detector ไม่คืนค่า list ของ tuple (x1, y1, x2, y2) อีกต่อไป — คืนค่าอ็อบเจกต์เส้น (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — และตอนนี้ทำงานบน RGB565 ด้วย (ไม่ใช่แค่ระดับสีเทา) อาร์กิวเมนต์ threshold เปลี่ยนจาก float 0.0–1.0 เป็น integer edge-magnitude sum, line.magnitude ตอนนี้เป็น integer และ keyword ใหม่ theta_margin / rho_margin ถูกเพิ่ม ย้ายโค้ด tuple-unpacking ไปใช้อ็อบเจกต์เส้นและปรับ threshold ใหม่
match_descriptor() คืนค่าอ็อบเจกต์ match (minor)¶
image.match_descriptor() (ORB) ตอนนี้คืนค่าอ็อบเจกต์ kptmatch ที่มีตัวเข้าถึง .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() แทน tuple 8 ตัวธรรมดา อ็อบเจกต์ยังรองรับ subscript/slice ได้ ดังนั้นการเข้าถึงด้วยตำแหน่งยังใช้ได้ แต่โค้ดที่ใช้ isinstance(result, tuple) (หรือใช้เมธอด tuple) ต้องใช้ตัวเข้าถึงใหม่
Commits: e960546b6
sensor.skip_frames() ตอนนี้ทำงานตามเวลา (behavior)¶
sensor.skip_frames() ถูกปรับให้รับ keyword time= (ค่าเริ่มต้น ~300 ms) และตอนนี้ทำงานตามเวลาโดยค่าเริ่มต้น แทนที่จะนับเฟรมแบบตายตัว และหยุดก่อนกำหนดเมื่อเวลาหมด สคริปต์ที่พึ่งพาจำนวนเฟรมที่แน่นอนควรส่งค่า count ที่ชัดเจนและ/หรือตั้ง time= ให้เหมาะสม
Commits: a039b5d1c
รายการตรวจสอบการย้าย¶
สำหรับการย้ายไป v2.4.0 อย่างสะอาด งานทั่วไปคือ:
ย้ายการ unpack tuple ของ
find_lines()ไปใช้อ็อบเจกต์เส้นและปรับthresholdเป็น integer ใหม่ (การเขียน find_lines ใหม่)ใช้ตัวเข้าถึง
kptmatchแทนการปฏิบัติต่อผลลัพธ์match_descriptor()เป็น tuple (การเปลี่ยนแปลง match_descriptor)ส่งค่า count และ/หรือ
time=ที่ชัดเจนไปยังsensor.skip_frames()หากพึ่งพาจำนวนเฟรมแบบตายตัว (การเปลี่ยนแปลง skip_frames)
สคริปต์อื่น ๆ ทั้งหมดทำงานได้โดยไม่ต้องเปลี่ยนแปลง