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 matrix

  • sensor.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.UART UART1

การเปลี่ยนแปลง 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 ใหม่

Commits: 31b7b5bf3, f4a9c6154

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 อย่างสะอาด งานทั่วไปคือ:

  1. ย้ายการ unpack tuple ของ find_lines() ไปใช้อ็อบเจกต์เส้นและปรับ threshold เป็น integer ใหม่ (การเขียน find_lines ใหม่)

  2. ใช้ตัวเข้าถึง kptmatch แทนการปฏิบัติต่อผลลัพธ์ match_descriptor() เป็น tuple (การเปลี่ยนแปลง match_descriptor)

  3. ส่งค่า count และ/หรือ time= ที่ชัดเจนไปยัง sensor.skip_frames() หากพึ่งพาจำนวนเฟรมแบบตายตัว (การเปลี่ยนแปลง skip_frames)

สคริปต์อื่น ๆ ทั้งหมดทำงานได้โดยไม่ต้องเปลี่ยนแปลง