v5.0.0¶
v5.0.0 เป็นรุ่นหลักที่สำคัญ ไฮไลต์ของรุ่นนี้ได้แก่: การสร้าง OpenMV Protocol V2 ใหม่สำหรับการเชื่อมต่อโฮสต์, API กล้องแบบคลาสใหม่ csi ที่รองรับบอร์ดหลายกล้อง, เป้าหมาย simulator ที่รันได้จริง, การประมาณท่าทางด้วย MoveNet แบบโพสเดียว, MicroPython 1.28 และการแก้ไขกล้อง, ML และ ToF จำนวนมาก นอกจากนี้ยังมีการเปลี่ยนแปลง API ที่ไม่เข้ากันกับรุ่นก่อน — การเปลี่ยนแปลงที่ผู้ใช้มองเห็นได้ทั้งหมดตั้งแต่ v4.8.1 แสดงอยู่ด้านล่างพร้อมวิธีการย้ายโค้ด
ไฮไลต์¶
OpenMV Protocol V2. การเชื่อมต่อโฮสต์/IDE ถูกสร้างใหม่ตั้งแต่ต้น: มีการจัดเฟรม, ลำดับ, การตรวจสอบ CRC พร้อมช่องสัญญาณมัลติเพล็กซ์สำหรับ stdio, พรีวิวสตรีม และข้อมูลผู้ใช้ โมดูล
protocolใหม่ให้สคริปต์สร้างทรานสปอร์ตและช่องข้อมูลของตนเองได้ ดูเพิ่มเติมที่ the protocol module changesAPI กล้องแบบคลาสด้วย
csi** .**import sensorกลายเป็นimport csi/csi.CSIพร้อมรองรับหลายกล้องในตัว ดูเพิ่มเติมที่ the csi migrationเป้าหมาย Simulator. เฟิร์มแวร์สามารถสร้างและรันบน Arm FVP / QEMU simulator (MPS2/MPS3) รวมถึงการจำลอง NPU, ROMFS และ PSRAM — สคริปต์วิชันและ ML สามารถรันได้โดยไม่ต้องต่อฮาร์ดแวร์
การประมาณท่าทาง MoveNet. โพสต์โปรเซสเซอร์
MoveNetใหม่พร้อมโมเดลmovenet_singlepose_192.tfliteที่รวมมาด้วยบน OpenMV AE3 และ N6MicroPython 1.28 และ ulab 6.12.0, เครื่องมือ ST Edge AI 4.0 และ OpenMV SDK ที่แยกออกมาภายนอก (ดูที่ the build / tooling changes)
ฟีเจอร์ใหม่¶
โมดูล
protocol— สร้างทรานสปอร์ตและช่องข้อมูลแบบกำหนดเองจาก Python:protocol.init(),protocol.register(),protocol.is_active()และคลาสprotocol.ProtocolChannelพร้อมsend_event(), รวมถึงค่าคงที่CHANNEL_FLAG_*และCHANNEL_ID_*ลายเซ็นสุดท้ายของprotocol.init()ถูกบันทึกใน the protocol module changesprotocol.CBORChannel— แพ็กเกจส่วนขยายprotocolแบบ frozen ที่ซีเรียลไลซ์ฟิลด์ที่มีชื่อเป็น CBOR พร้อมวิดเจ็ตแสดงผล (label, depth) และตัวควบคุมแบบโต้ตอบ (toggle, slider, select)การตรวจสอบหน่วยความจำโฮสต์และสตรีม — คำสั่งโปรโตคอล
SYS_MEMORYใหม่เปิดเผยสถิติหน่วยความจำรันไทม์แบบต่อพูลให้ IDE และ ioctl สตรีมSTREAM_SOURCEใหม่ให้โฮสต์เลือกว่ากล้องใดจะป้อนพรีวิวบนบอร์ดหลายกล้อง (โปรโตคอลเวอร์ชัน 1.0.1)สตรีมมิงหลายกล้อง —
csi.CSIรับอาร์กิวเมนต์stream=ที่เลือกว่าเซนเซอร์ใดจะป้อนพรีวิว IDE; เฮดเดอร์เฟรมสตรีมตอนนี้มี FPS ที่ปรับสมูทด้วย EMA ทำให้ IDE แสดงอัตราเฟรมโดยไม่ต้องเรียกclock.fps()ดูเพิ่มเติมที่ the csi migration และ the csi follow-upsเซนเซอร์อีเวนต์ GenX320 — ฟิลเตอร์ Spatio-Temporal Contrast ใหม่ (
csi.IOCTL_GENX320_SET_STCพร้อมโหมดcsi.GENX320_STC_DISABLE,csi.GENX320_STC_ONLY,csi.GENX320_STC_TRAIL_ONLYและcsi.GENX320_STC_TRAIL) และการอ่านอีเวนต์ดิบ (csi.IOCTL_GENX320_READ_EVENTS_RAW) พร้อมสคริปต์ตัวอย่างใหม่MoveNet— โพสต์โปรเซสเซอร์ท่าทางเดี่ยว MediaPipe ใหม่ (kwargsthreshold,nms_threshold,nms_sigma) ที่คืนค่า((x, y, w, h), score, keypoints)พร้อมอาร์เรย์จุดสำคัญ COCO 17 ข้อต่อ; โมเดลmovenet_singlepose_192.tfliteและตัวอย่างถูกรวมมาด้วยบน AE3 และ N6ml.utils.draw_predictions()— อาร์กิวเมนต์scores=ใหม่แบบเลือกได้ที่เพิ่มความเชื่อมั่นต่อป้ายกำกับ, ฟอนต์และขอบกรอบปรับขนาดอัตโนมัติตามความกว้างภาพ และโหมดformat="point"ใหม่ที่วาดเครื่องหมายกึ่งกลางสำหรับเครื่องตรวจจับ centerpoint/peakคลาส
display.TVDisplayใหม่ (พร้อมioctl()ทั่วไป) แทนที่โมดูลtvแบบเดี่ยว ดูเพิ่มเติมที่ the display module changesเครื่องตรวจจับ
find_line_segments()ใหม่ (ED-Lines) — ตอนนี้พร้อมใช้งานในทุกบิลด์ พร้อมอาร์กิวเมนต์threshold=ใหม่ ดูเพิ่มเติมที่ the image module changes
การเปลี่ยนแปลงและการปรับปรุงอื่นๆ¶
MicroPython อัปเดตเป็น 1.28.0 จากฐาน v4.8.1 เพิ่มโหมด SD card ความเร็วสูงบน H5/H7/N6, การปรับนาฬิกา AHB5 ในโหมดประหยัดพลังงาน และพิน JTAG ที่ควบคุมได้เป็น GPIO บน OPENMV_AE3
ulab อัปเดตเป็น 6.12.0 — ตัวดำเนินการ
%แบบเนทีฟบน ndarray (helperml.utils.mod()ถูกลบออก; ดูที่ the ML library changes)ST Edge AI tooling อัปเดตเป็น 4.0 — ส่งผลต่อการคอมไพล์และการติดตั้งโมเดล ST บนอุปกรณ์
ml.Model— อาร์กิวเมนต์คีย์เวิร์ดload_to_fbถูกลบออก; หน่วยความจำโมเดลจัดการอัตโนมัติโดย unified allocatorimage.Image.scale()ในตำแหน่งเดิม — การขยายภาพขึ้นในตำแหน่งเดิม (เช่นimg.scale(x_scale=2.0, y_scale=2.0)) ตอนนี้จะขยายบัฟเฟอร์เฟรมให้พอดีแทนที่จะล้มเหลวบัฟเฟอร์ stdio ขนาดใหญ่ขึ้น — บัฟเฟอร์ข้อความเริ่มต้นที่ส่งไปยัง IDE เพิ่มจาก 512 เป็น 1024 ไบต์บน OpenMV 2/3/4, Nicla Vision, AE3 และ N6 ทำให้การส่ง
print()ขนาดใหญ่ไม่ถูกตัดทอนการไหลของอีเวนต์โฮสต์ที่ราบรื่นขึ้น — อีเวนต์ stdout NOTIFY ที่ส่งไปยังโฮสต์ถูกจำกัดไม่เกินหนึ่งครั้งต่อการอ่านของโฮสต์แทนที่จะเป็นหนึ่งครั้งต่อ
print()ที่ข้ามเครื่องหมายระดับ ring bufferการดำเนินการยาวนานที่สามารถหยุดได้ — การวนซ้ำรอที่ยาวนานในการวาดภาพ, GPU (Nema/Dave2D) และ NPU ตอนนี้ให้บริการอีเวนต์ในช่วงเวลาที่แน่นอน ทำให้สคริปต์ตอบสนองต่อปุ่ม Stop ของ IDE ได้ระหว่างการทำงานหนัก
การแก้ไขข้อบกพร่อง¶
กล้องและเซนเซอร์:
find_apriltags()ไม่ทำให้ผลลัพธ์เสียหายบนบอร์ด D-cache/GPU (N6, AE3) อีกต่อไป และตอนนี้ทำงานบน AE3 ได้แก้ไขการส่งออกภาพ Bayer จาก STM32 N6 ISP หลังจากเปลี่ยนรูปแบบพิกเซล
แก้ไขการบลอว์เอาต์การปรับสมดุลขาวอัตโนมัติสีเขียวบนฉากที่สว่างและกรณี AWB-stats เฟรมแรกที่ไม่ได้กำหนดค่าเริ่มต้น; เพิ่มการจำกัดแกมม่า STM32 ISP (32 เป็น 63) เพื่อช่วง gamma/contrast/brightness ที่กว้างขึ้น
การรับแสงอัตโนมัติ PS5520 ไม่แกว่งในแสงสว่างอีกต่อไป; พฤติกรรม AEC/AGC ของ PAG7936 ถูกปรับปรุงใหม่ (การควบคุมรวม, การแก้ไขเพดานค่าเกน)
การอัปโหลดเฟิร์มแวร์โฟกัสอัตโนมัติ OV5640 คืนค่าแล้วบน Portenta/Nicla (การแก้ไข MIMXRT I2C SUSPEND)
แก้ไขการหยุดชะงักของการจับภาพกล้องเมื่อจำกัดอัตราเฟรมร่วมกับการจับภาพ JPEG (STM32)
การอ่าน
csi.IOCTL_GENX320_READ_EVENTS_RAWของ GenX320 ไม่ทำให้พรีวิว IDE ผิดพลาดอีกต่อไปFLIR Lepton
csi.IOCTL_LEPTON_SET_MODEผ่านcsi.CSI.ioctl()ตอนนี้ทำงานได้เมื่อเรียกด้วยอาร์กิวเมนต์เดียว
การประมวลผลภาพ:
แก้ไขการผสมอัลฟ่าของ
draw_image()/blend()เมื่อใช้มาสก์แก้ไขการเรียงลำดับบิต PNG เข้ารหัส/ถอดรหัส 1 บิต (BINARY) และการถอดรหัสระดับสีเทาจาก 1 บิต
แก้ไขข้อมูลเมตาระยะเวลา/FPS ของการบันทึก
mjpeg.Mjpegแก้ไข stack overflow ของการถอดรหัส JPEG ซอฟต์แวร์บนบอร์ดที่มีสแต็กขนาดเล็ก (OpenMV M7)
แก้ไขการตรวจจับรูปแบบไฟล์ JPEG/PNG อัตโนมัติบนโฮสต์ที่ไม่ใช่ ARM (simulator)
Time-of-Flight:
tof.read_depth()ไม่ raise ข้อผิดพลาดเมื่อเกิดข้อผิดพลาดชั่วคราวในการวัดระยะอีกต่อไป และกู้คืนอัตโนมัติจากความผิดพลาดของบัส; ค่า timeout เริ่มต้นของtof.read_depth()/tof.snapshot()ตอนนี้เป็น 100 ms (ดูที่ the tof changes)แก้ไขความเสียหายของข้อมูลความลึกหลายโซนของ VL53L5CX / VL53L8CX
ML และระบบ:
NPU ถูกล้างข้อมูลอย่างถูกต้องเมื่อการอนุมานถูกหยุดบน N6
การปลุกจาก deep-sleep / standby ถูกคืนค่าบน N6; การค้างของ AE3 เมื่อกระโดดไปยัง bootloader ได้รับการแก้ไขแล้ว
แก้ไขหน่วยความจำรั่วไหลเมื่อ soft-reset (STM32 Nema GPU) และบัฟเฟอร์เฟรมเสริมที่ถูกเก็บกวาดก่อนเวลา
ช่องโปรโตคอล Python แบบกำหนดเองตอนนี้รอดชีวิตผ่าน soft-reboot, ทรานสปอร์ต USB กู้คืนจากการรีเซ็ตบัส / endpoint ที่ค้าง และการรบกวนอินเทอร์รัปต์ USB SOF ได้รับการแก้ไขแล้ว
ฮาร์ดแวร์และการรองรับบอร์ด¶
OpenMV N6 — เปิดใช้งาน Ethernet (เครือข่ายแบบสาย); NPU AXI SRAM (1.75 MB) รวมเข้ากับพูลชั่วคราวที่แชร์เพื่อ RAM มากขึ้นระหว่างการอนุมาน; การปลุกจาก deep-sleep/standby; โมเดล TFLite และ Haar cascades ที่รวมมาใน ROMFS
OpenMV AE3 — โมเดลและ cascades ที่รวมมาใน ROMFS;
cbor2ถูก frozen เข้าไปในเฟิร์มแวร์Alif (AE3, N6) — การปลุก
machine.RTCแบบใช้พลังงานต่ำAprilTags ความละเอียดสูง —
find_apriltags()ที่ความละเอียดเซนเซอร์เต็มบน AE3, Arduino Giga และ Arduino Portenta H7เป้าหมาย Simulator — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU) พร้อมการจำลอง NPU, ROMFS และ PSRAM
การเปลี่ยนแปลง API ที่ไม่เข้ากันกับรุ่นก่อน¶
การเปลี่ยนแปลง API ที่ผู้ใช้มองเห็นได้ระหว่าง v4.8.1 และ v5.0.0 ขอบเขต: C-modules ของ Python ใน modules/ และไลบรารี Python ใน scripts/libraries/
การเปลี่ยนแปลงแต่ละอย่างถูกแท็กด้วยผลกระทบ:
major — สคริปต์ส่วนใหญ่ต้องการการแก้ไข
minor — API แคบ; มีผลต่อเฉพาะสคริปต์ที่ใช้งาน
behavior — API เหมือนเดิม ผลลัพธ์ต่างกัน; ตรวจสอบสคริปต์ที่ปรับแต่งไว้อีกครั้ง
tooling — มีผลต่อการสร้างจากซอร์สโค้ด / การ fork ต้นน้ำเท่านั้น
การเปลี่ยนแปลงถูกจัดกลุ่มตามผลกระทบตามลำดับนั้น — major ก่อน จากนั้น minor, behavior และ tooling หากต้องการย้ายโค้ดเพียงอย่างเดียว ข้ามไปที่ migration checklist ที่ท้ายสำหรับรายการสิ่งที่ต้องทำแบบย่อ แต่ละ commit hash ลิงก์ไปยัง diff บน GitHub
sensor ถูกแทนที่ด้วย csi (major)¶
ตัวอย่างทางการทั้งหมดถูกเขียนใหม่เพื่อแทนที่ import sensor ด้วย import csi API ฟังก์ชันระดับโมดูลแบบเดิม (sensor.reset(), sensor.set_pixformat(), ...) ถูกแทนที่ด้วย API แบบคลาส csi.CSI ซึ่งรองรับบอร์ดที่มีหลายกล้อง (csi0, csi1, ...) และจำเป็นสำหรับฟีเจอร์ใหม่ทั้งหมด (kwarg stream=, การสตรีมหลายเซนเซอร์, ...)
qstr sensor ยังคงเชื่อมต่อใน modules/py_csi.c สำหรับการสร้างเฟิร์มแวร์ที่เข้ากันได้ย้อนหลัง แต่จะไม่ได้รับฟีเจอร์ใหม่ และตัวอย่าง, เอกสาร และโค้ดไลบรารีทั้งหมดตอนนี้ใช้ csi
โมดูลไปยังคลาส
ก่อน (sensor):
import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()
หลัง (csi):
import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()
คู่ setter/getter ย่อรวมเป็น combined accessor
ใน API ใหม่ เมธอดที่เรียก โดยไม่มี อาร์กิวเมนต์จะคืนค่าปัจจุบัน; เรียก พร้อมค่า จะตั้งค่านั้น คำนำหน้า set_*/get_* หายไป ชื่อเมธอดยังลบคำต่อท้าย ing ที่ซ้ำซ้อน (windowing → window) คอลัมน์ API ใหม่ลิงก์ไปยังเอกสารอ้างอิง
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ฟังก์ชันที่ไม่มีสิ่งเทียบเท่าโดยตรง
|
สิ่งที่ควรใช้แทน |
|---|---|
|
|
|
|
|
ย้ายเข้าไปในตัวสร้าง |
|
|
|
ถูกลบ ภาพที่คืนโดย |
|
|
ใหม่บน csi.CSI
csi.CSI(stream=True|False)— ตัวเลือกในเวลาสร้างที่กำหนดว่า CSI ใดจะป้อน preview framebuffer (แทนที่ kwargupdate=ต่อ snapshot ดูที่ the csi follow-ups)csi.CSI(cid=N)/csi.devices()— รองรับ multi-CSI สำหรับบอร์ดที่มีเซนเซอร์ภาพมากกว่าหนึ่งตัว
โมดูล image — การปรับปรุงลายเซ็นครั้งใหญ่ (major)¶
โมดูล image มีการเปลี่ยนแปลง API ที่กว้างที่สุดรองจาก csi — ลายเซ็นการวาด, ออบเจ็กต์ผลลัพธ์ และเครื่องตรวจจับหลายตัวล้วนเปลี่ยนแปลง
อาร์กิวเมนต์พิกัดต้องเป็น tuple
modules/py_image.c ถูกเขียนใหม่บน mp_arg_parse_all เมธอดการวาด/พิกเซลทั้งหมดที่เคยรับ x, y, ... แบบตำแหน่งแยกกัน ตอนนี้ต้องรับพิกัดเหล่านั้นในรูป tuple เดียว
Commits: d18bbc472, 0c60c94b9 (PR #3061)
ก่อน |
หลัง |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทั้งหมดเป็นเมธอดของ image.Image
ออบเจ็กต์ผลลัพธ์ถูกแปลงเป็น attrtuple
ประเภทเหล่านี้ตอนนี้เป็นออบเจ็กต์ attrtuple ของ MicroPython: similarity, statistics, percentile, threshold, line, circle, rect, qrcode, apriltag, datamatrix, barcode, displacement, kptmatch การเข้าถึง attribute โดยไม่มีวงเล็บเป็นรูปแบบมาตรฐานตอนนี้
Commit: 3399d302e
ก่อน (แบบเมธอด):
img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())
หลัง (แบบ attribute):
img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)
blob และ histogram ไม่เปลี่ยนแปลง — ยังคงใช้ประเภทที่มีอยู่และตัวเข้าถึง () (attrtuple ไม่สามารถแสดงค่าที่คำนวณแบบ lazy ของ blob หรือตัวเข้าถึงที่รับอาร์กิวเมนต์ของ histogram ได้)
การเปลี่ยนชื่อพารามิเตอร์ haar ของ find_features
image.Image.find_features() — scale_factor= ถูกเปลี่ยนชื่อเป็น scale=
Commit: be4c5cd73
get_regression — ตอนนี้ robust เสมอ, เพิ่ม target_size
image.Image.get_regression() ตอนนี้ ใช้ การถดถอยแบบ robust (Theil-Sen) เสมอ เส้นทาง least-squares แบบเร็วเก่าถูกลบออก ดังนั้นคีย์เวิร์ด robust= หายไป — สิ่งที่เคยต้องใช้ robust=True ตอนนี้เป็นพฤติกรรมเดียวเท่านั้น kwarg target_size=(w, h) ใหม่ (ค่าเริ่มต้น (80, 60)) ปรับขนาด ROI ลงก่อน Theil-Sen fit แบบ O(N^2) เพื่อให้รันบนขนาดภาพที่เหมาะสมเสมอ; จุดปลายเส้นที่ฟิตได้ถูกแมปกลับไปยังพิกัดต้นทาง ตัวอย่าง linear_regression_robust.py ถูกลบและ linear_regression_fast.py ถูกเปลี่ยนชื่อเป็น linear_regression.py
find_line_segments — อัลกอริทึมใหม่
image.Image.find_line_segments() — เครื่องตรวจจับ LSD เก่าถูกแทนที่ด้วย ED-Lines และได้รับ kwarg threshold=50 ใหม่ ผลลัพธ์ของสคริปต์ที่ปรับแต่งไว้ก่อนหน้าจะแตกต่างกัน
ไลบรารี AprilTag ถูกแทนที่
image.Image.find_apriltags() — เครื่องตรวจจับ AprilTag ถูกแทนที่ด้วยการใช้งานใหม่ ชุด family เปลี่ยนไป:
ถูกลบ |
เพิ่มใหม่ |
|---|---|
|
|
Commit: e813bada7
การติดตาม csi (minor)¶
การติดตามขนาดเล็กของ csi บน the csi migration
snapshot(update=...) ถูกลบ
kwarg update บน csi.CSI.snapshot() หายไปแล้ว เพื่อป้องกันไม่ให้อุปกรณ์ CSI ป้อน preview framebuffer ให้ออกจากการเลือกในเวลาสร้าง:
csi0 = csi.CSI(stream=False) # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img) # was: ...(update=False, ...)
อาร์กิวเมนต์ expand ของ framebuffers() ถูกลบ
csi.CSI.framebuffers() — อาร์กิวเมนต์ตำแหน่งที่สาม (expand) หายไปแล้ว ลายเซ็นตอนนี้คือ framebuffers([count])
Commit: 86cb3a5de
โมดูล protocol (minor)¶
มีผลเฉพาะสคริปต์ที่ขับเคลื่อนลิงก์โฮสต์โดยตรง ดู protocol
timer_ms เปลี่ยนชื่อเป็น poll_ms
protocol.init() — อาร์กิวเมนต์ timer_ms ถูกเปลี่ยนชื่อเป็น poll_ms
protocol.init(..., poll_ms=10) # was: timer_ms=10
protocol.poll() ถูกลบ
งาน protocol ถูกกำหนดเวลาภายในตอนนี้ การเรียก protocol.poll() จะ raise AttributeError
Commit: 8a0635e8c
อาร์กิวเมนต์ config soft_reboot ถูกลบ
protocol.init() — อาร์กิวเมนต์ soft_reboot หายไปแล้ว ทรานสปอร์ตปัจจุบันทั้งหมดทนต่อ soft-reboot ดังนั้นพฤติกรรมนี้จึงเป็นแบบไม่มีเงื่อนไขตอนนี้
Commit: 0bf766aa2
โมดูล display (minor)¶
ผลลัพธ์ทีวีตอนนี้ผ่านออบเจ็กต์ display.TVDisplay แทนโมดูล tv แบบเดี่ยว display ยังได้รับ ioctl() ทั่วไป
โมดูล tof (behavior)¶
API เหมือนเดิม; ค่าเริ่มต้นและการจัดการข้อผิดพลาดเปลี่ยนแปลง ดู tof
ค่า timeout เริ่มต้นเปลี่ยนแปลง
tof.read_depth() และ tof.snapshot() (เรียกด้วย timeout=-1) ตอนนี้ค่าเริ่มต้นเป็น 100 ms แทนการรอไม่มีที่สิ้นสุด ส่งค่าที่ใหญ่กว่าอย่างชัดเจนหากต้องการพฤติกรรมเดิม
Commit: b6772b80d
การกู้คืนอัตโนมัติ
ไดรเวอร์ตอนนี้ hard-reset บัส I2C และเซนเซอร์เมื่อเกิดข้อผิดพลาดในการวัดระยะ/timeout ตัวอย่างไม่เรียก tof.reset() ใน exception handler อีกต่อไป — โค้ดผู้ใช้ที่ทำการกู้คืนแบบ manual ควรลบออก (จะขัดแย้งกับการกู้คืนอัตโนมัติใหม่)
ไลบรารี ML (behavior)¶
API เหมือนเดิม ตัวเลขต่างกัน — ตรวจสอบ ML pipeline ที่ปรับแต่งไว้อีกครั้ง
การประมวลผลล่วงหน้าตอนนี้ stretch แทน letterbox
Normalization ตอนนี้ใช้ image.SCALE_ASPECT_IGNORE (stretch) แทน image.SCALE_ASPECT_EXPAND (letterbox) การโพสต์โปรเซส NMS ยังเปลี่ยนไปใช้การปรับขนาด x/y แบบอิสระ
Note
ผลกระทบ. เครื่องตรวจจับแบบ YOLO และ keypoint regressor โดยทั่วไปดีขึ้น ตัวอย่าง BlazeFace, BlazePalm, FaceLandmarks และ HandLandmarks ตอนนี้ต้องการการครอบตัดสี่เหลี่ยมจัตุรัสแบบ manual บน input ROI — สคริปต์ตัวอย่างถูกอัปเดตแล้ว; โค้ดผู้ใช้แบบกำหนดเองต้องทำเช่นเดียวกัน
Commit: 68dc29a33
helper ml.utils.mod() ถูกลบ
ulab 6.12.0 รองรับ % บน ndarray แบบเนทีฟ โค้ดที่ import mod จาก ml.utils ต้องใช้ a % b แทน
การสร้าง / tooling (tooling)¶
ไม่มีสิ่งใดที่ส่งผลต่อสคริปต์ MicroPython การสร้างเฟิร์มแวร์จากซอร์สโค้ดตอนนี้ต้องการ OpenMV SDK ภายนอก (1.6.0, เดิมอยู่ใน tree) เครื่องมือสร้างใน tree หลายตัวถูกลบออกและ N6 ย้ายไปยัง TinyUSB stack; การ fork ต้นน้ำควรตรวจสอบประวัติ firmware repository — โดยเฉพาะลายเซ็น file_open() ที่ลบอาร์กิวเมนต์ buffered ออก
รายการตรวจสอบการย้ายโค้ด¶
สำหรับการย้ายโค้ดไปยัง v5.0.0 อย่างสะอาด งานทั่วไปคือ:
แทนที่
import sensorด้วยimport csi; csi0 = csi.CSI()และแปลงการเรียกset_*/get_*ทุกครั้งไปยัง accessor ของcsi.CSI(the csi migration)ห่อหุ้มอาร์กิวเมนต์พิกัดของ
img.draw_*,get_pixel()และset_pixel()ด้วย tuple (the image module changes)ลบ
()จาก attrtuple result accessor หากต้องการรูปแบบใหม่ที่เป็นสำนวน หรือปล่อยรูปแบบเก่าไว้เนื่องจาก attrtuple ยังรองรับ accessor แบบ callable (the image module changes)ตรวจสอบ
find_line_segments(),get_regression()และการเลือก family ของfind_apriltags()(the image module changes)เปลี่ยนชื่อ
timer_ms→poll_msในการเรียกprotocol.init(); ลบprotocol.poll()และsoft_reboot=(the protocol module changes)สำหรับ ML workflow: ตรวจสอบโมเดลที่ต้องการ input แบบ letterboxed อีกครั้ง (the ML library changes)