v3.0.0

v3.0.0 เป็นเวอร์ชันหลักของการอัปเกรด v2 → v3 โดยแนะนำ OpenMV Cam M7 (STM32F7) และโมดูล nn CMSIS-NN สำหรับโครงข่ายประสาทเทียมใหม่ (แทนที่เมธอด find_number() / classify_object() แบบฮาร์ดโค้ดเดิม), เพิ่มการรองรับ sensor MT9V034 global-shutter และ FLIR Lepton, framesizes sensor.WVGA และอัปเดตแกนหลักเป็น MicroPython 1.9.4 พฤติกรรมของ image / sensor / WiFi หลายรายการเปลี่ยนแปลง — อ่านรายละเอียดการเปลี่ยนแปลงที่ทำให้เกิดความไม่เข้ากันด้านล่าง

ไฮไลต์

  • OpenMV Cam M7 — บอร์ด STM32F7 ใหม่

  • โมดูล nn — การอนุมาน CMSIS-NN: nn.load(), Net.forward(), Net.search() พร้อมตัวแปลงโมเดลและตัวอย่าง

  • sensor ใหม่ — MT9V034 global-shutter (ทริกเกอร์ด้วย FSIN) และ FLIR Lepton

  • อัปเดตแกนหลัก MicroPython 1.9.4

  • การเปลี่ยนแปลงที่ทำให้เกิดความไม่เข้ากัน: image.find_number() / image.classify_object() แบบฮาร์ดโค้ดถูกลบออก, sensor.sleep() ตอนนี้ raise exception, WINC sockets ส่งคืนจำนวนไบต์จริง, image.binary() ส่งคืนภาพใหม่ และ find_apriltags() ถูกจำกัดที่ 64K pixels — ดูรายละเอียดในส่วนการเปลี่ยนแปลงที่ทำให้เกิดความไม่เข้ากัน

คุณลักษณะใหม่

  • nn — โมดูลโครงข่ายประสาทเทียม CMSIS-NN ใหม่: nn.load(path), Net.forward(img, roi=, softmax=, dry_run=) (ส่งคืนค่า float 0.0–1.0), Net.search() สำหรับการตรวจจับหลายขนาด/ตำแหน่ง และ Net.test() พร้อมตัวแปลงโมเดล CMSIS-NN (nn_convert.py / nn_quantizer.py), โมเดล CIFAR-10 / LeNet / smile ที่รวมมา และสคริปต์ตัวอย่าง NN / NN-search

  • Sensors — รองรับ MT9V034 global-shutter (snapshot ทริกเกอร์ด้วย FSIN) บน OpenMV 4, ไดรเวอร์ FLIR Lepton ที่อัปเดตพร้อม Lepton snapshot และ framesizes ใหม่ sensor.WVGA (720x480) / sensor.WVGA2 (752x480)

  • การประมวลผลภาพimage.find_circles() ได้รับ keyword r_min / r_max / r_step (Hough เร็วขึ้น), find_keypoints() และ Haar find_features() รับภาพ RGB ได้แล้ว และ image.compress() / การเข้ารหัส JPEG รองรับภาพไบนารี (bitmap)

  • การบูตboot.py ทำงานก่อน USB init เพื่อให้สามารถแทนที่โหมด USB (เช่น HID)

  • ตัวอย่าง — เพิ่มตัวอย่าง AprilTag ขนาดเล็ก/ความละเอียดสูง, ตัวอย่าง I2C LIDAR-Lite V3 และเครื่องมือสำหรับ dataset (augment_images.py / make_patches.py)

การเปลี่ยนแปลงและการปรับปรุงอื่น ๆ

  • อัปเดต MicroPython ที่รวมมาเป็น 1.9.4 (พร้อมการย้อนกลับ pyexec parse/compile/exec และการแก้ไข PendSV); ข้อความแสดงข้อผิดพลาดหน่วยความจำหมดของ fb_alloc / xalloc ชัดเจนขึ้น; ลดสัญญาณรบกวน printf ของ nn ระหว่างการโหลดเครือข่าย; จัดระเบียบ repository ใหม่ (examples → scripts/, tools → tools/, Haar cascades → ml/) โมดูล nn ไม่พร้อมใช้งานบน OpenMV 2 (flash ไม่เพียงพอ)

การแก้ไขข้อผิดพลาด

การประมวลผลภาพ:

  • แก้ไข fast_atan2f สำหรับ x≤0 (เดิมคืน 0 เสมอ — ตรวจสอบมุม blob / เส้น / keypoint ใหม่), การจัดการหน่วยความจำของ find_apriltags() (เนื้อหาหลุดหายและ realloc ผิดพลาดเมื่อ OOM), ตัวชี้แถวต่อ bpp ของ binary/bitmap (ผลลัพธ์ binary เสียหาย), find_edges(EDGE_CANNY) พร้อม ROI, มาโคร TO_GS_PIXEL (integral / morph), การสตรีม bitmap/JPEG สำหรับเฟรม grayscale (bpp==0), pop_front ของรายการ keypoint/blob และผลลัพธ์ match_descriptor

ระบบและกล้อง:

  • แก้ไขหมายเลข interface/endpoint ของ USB HID, การเปลี่ยนความถี่ XCLK แบบ dynamic ขณะรันไทม์, Net.forward() ส่งคืนจำนวน output ที่ถูกต้อง และ hardfault เมื่อขัดจังหวะการแยกวิเคราะห์สคริปต์

ฮาร์ดแวร์และการรองรับบอร์ด

  • OpenMV Cam M7 (STM32F7) — บอร์ดใหม่

  • sensor global-shutter MT9V034 (OpenMV 4, ทริกเกอร์ด้วย FSIN)

  • FLIR Lepton — ไดรเวอร์ที่อัปเดตพร้อมการรองรับ snapshot

การเปลี่ยนแปลง API ที่ทำให้เกิดความไม่เข้ากัน

การเปลี่ยนแปลง API ที่มองเห็นได้ระหว่าง v2.9.0 และ v3.0.0 ขอบเขต: Python C-modules ใน modules/ และไลบรารี Python ใน scripts/libraries/

การเปลี่ยนแปลงแต่ละรายการมีแท็กบอกผลกระทบ:

  • major — ส่งผลกระทบต่อสคริปต์ส่วนใหญ่ที่ใช้คุณลักษณะนี้; จำเป็นต้องแก้ไขโค้ด

  • minor — API ขอบเขตแคบ; ส่งผลกระทบเฉพาะสคริปต์ที่ใช้มันเท่านั้น

  • behavior — API เดิม แต่ผลลัพธ์ต่างกัน; ตรวจสอบสคริปต์ที่ปรับแต่งแล้วใหม่

การเปลี่ยนแปลงจัดกลุ่มตามผลกระทบตามลำดับนั้น หากต้องการย้ายโค้ดโดยตรง ไปที่ รายการตรวจสอบการย้าย ที่ท้าย แต่ละ hash ของ commit มีลิงก์ไปยัง diff บน GitHub

image.find_number() / image.classify_object() ถูกลบออก (major)

เมธอด image.find_number() (LeNet) และ image.classify_object() (CMSIS CNN) แบบฮาร์ดโค้ดถูกลบออกในความโปรดปรานของโมดูล nn ใหม่ แทนที่ด้วย net = nn.load('/model.network'); out = net.forward(img)

Commits: d151f7e38

sensor.sleep() / sensor.reset() raise เมื่อล้มเหลว (minor)

sensor.sleep() และ sensor.reset() ตอนนี้ raise exception เมื่อล้มเหลวแทนที่จะคืน True / False โค้ดที่ตรวจสอบค่า boolean ที่ส่งคืนของ sensor.sleep() ต้องใช้ try / except แทน

Commits: 7d16d008f

WINC sockets ส่งคืนจำนวนไบต์จริง (behavior)

เมธอด send / recv / sendto / recvfrom ของ WINC1500 socket เดิมคืน 0 เสมอ; ตอนนี้ส่งคืนจำนวนไบต์ที่ถ่ายโอนจริง โค้ดที่สันนิษฐานว่าได้รับค่า 0 (หรือวนซ้ำ/บล็อกจากมัน) ต้องจัดการจำนวนจริง

Commits: a07fb2f60

image.binary() ส่งคืนภาพใหม่ (behavior)

image.binary() ได้รับ keyword to_bitmap / copy และตอนนี้ส่งคืนออบเจ็กต์ภาพใหม่แทนที่จะส่งคืน/แก้ไขภาพต้นทางโดยตรง โค้ดที่พึ่งพาว่า binary() แก้ไขภาพต้นฉบับควรใช้ออบเจ็กต์ที่ส่งคืน (และส่ง copy=True สำหรับพฤติกรรมที่ไม่แก้ไขในที่)

Commits: 8a44f0cd9

find_apriltags() ถูกจำกัดที่ 64K pixels (behavior)

image.find_apriltags() ตอนนี้ raise exception หากภาพ (หรือ ROI) เกิน 64K pixels และส่งคืนรายการว่างสำหรับภาพที่เล็กกว่า 4x4 ลดขนาดภาพขนาดใหญ่ (ใช้ framesize ที่เล็กกว่าหรือส่ง roi ที่ระบุโดยตรง) ก่อนเรียก find_apriltags()

Commits: bd77afbc0

รายการตรวจสอบการย้าย

สำหรับการย้ายไปยัง v3.0.0 อย่างสะอาด งานทั่วไปคือ:

  1. แทนที่ image.find_number() / image.classify_object() ด้วยโมดูล nn (การย้าย nn)

  2. ใส่ sensor.sleep() / sensor.reset() ใน try / except แทนที่จะตรวจสอบค่า boolean ที่ส่งคืน (การเปลี่ยนแปลง sensor.sleep)

  3. จัดการจำนวนไบต์จริงจาก WINC socket send / recv (การเปลี่ยนแปลง WINC socket)

  4. ใช้ภาพที่ส่งคืนโดย image.binary() แทนที่จะคาดหวังการแก้ไขในที่ (การเปลี่ยนแปลง binary)

  5. ลดขนาดภาพก่อน find_apriltags() ให้ต่ำกว่า 64K pixels (ข้อจำกัด find_apriltags)

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