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-searchSensors — รองรับ MT9V034 global-shutter (snapshot ทริกเกอร์ด้วย FSIN) บน OpenMV 4, ไดรเวอร์ FLIR Lepton ที่อัปเดตพร้อม Lepton snapshot และ framesizes ใหม่
sensor.WVGA(720x480) /sensor.WVGA2(752x480)การประมวลผลภาพ —
image.find_circles()ได้รับ keywordr_min/r_max/r_step(Hough เร็วขึ้น),find_keypoints()และ Haarfind_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
รายการตรวจสอบการย้าย¶
สำหรับการย้ายไปยัง v3.0.0 อย่างสะอาด งานทั่วไปคือ:
แทนที่
image.find_number()/image.classify_object()ด้วยโมดูลnn(การย้าย nn)ใส่
sensor.sleep()/sensor.reset()ในtry/exceptแทนที่จะตรวจสอบค่า boolean ที่ส่งคืน (การเปลี่ยนแปลง sensor.sleep)จัดการจำนวนไบต์จริงจาก WINC socket
send/recv(การเปลี่ยนแปลง WINC socket)ใช้ภาพที่ส่งคืนโดย
image.binary()แทนที่จะคาดหวังการแก้ไขในที่ (การเปลี่ยนแปลง binary)ลดขนาดภาพก่อน
find_apriltags()ให้ต่ำกว่า 64K pixels (ข้อจำกัด find_apriltags)
สคริปต์อื่น ๆ ทั้งหมดใช้งานได้โดยไม่ต้องเปลี่ยนแปลง