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)