v4.8.0¶
v4.8.0 เป็นรุ่นที่มีฟีเจอร์หลักสำคัญ ไฮไลต์ได้แก่: โมดูลกล้อง csi แบบคลาสใหม่พร้อมรองรับหลายกล้อง, บอร์ด OpenMV N6 (STM32N6) พร้อม Neural-ART NPU, แบ็กเอนด์การอนุมานด้วย NPU, โหมด RAW event ของกล้อง GenX320, โมดูล crc ใหม่, ไลบรารี ML post-processing ที่จัดใหม่, และ MicroPython 1.26 นอกจากนี้ยังลบ API เดิมบางส่วน ได้แก่ โมดูล buzzer และการควบคุม FLIR Lepton ในโมดูล fir — โปรดอ่านการเปลี่ยนแปลงที่ทำให้โค้ดเดิมใช้ไม่ได้ด้านล่าง
ไฮไลต์¶
โมดูลกล้อง
csiใหม่ — API แบบคลาสcsi.CSIพร้อมรองรับกล้องหลายตัวพร้อมกัน นำเสนอควบคู่กับโมดูลsensorเดิมOpenMV N6 — บอร์ด STM32N6 พร้อม Neural-ART NPU, triple buffering, Soft-CSI และโมดูล ToF
การอนุมานด้วย NPU — แบ็กเอนด์ ST Neural-ART (STAI) สำหรับการอนุมานโมเดลที่เร่งด้วยฮาร์ดแวร์
โหมด event ของ GenX320 — เอาต์พุต RAW event พร้อม
draw_event_histogram()สำหรับการเรนเดอร์กล้อง eventML post-processing ที่จัดใหม่ — แพ็กเกจย่อยของผู้จำหน่าย (
ml.postprocessing.ultralytics,mediapipe,edgeimpulse,darknet) พร้อมตัวตรวจจับ BlazeFace / BlazePalm / มือและจุดสำคัญบนใบหน้าใหม่โมดูล
crcใหม่ — CRC-16 / CRC-32 เร่งด้วยฮาร์ดแวร์MicroPython อัปเดตเป็น 1.26.0
การเปลี่ยนแปลงที่ทำให้โค้ดเดิมใช้ไม่ได้: โมดูล
buzzerและการควบคุม Lepton ในโมดูลfirถูกลบออก (Lepton กลายเป็นกล้องปกติแล้ว) ดู การเปลี่ยนแปลง fir/Lepton และ การลบ buzzer
ฟีเจอร์ใหม่¶
โมดูลกล้อง
csiใหม่ — ออบเจกต์csi.CSIแบบคลาสพร้อมรองรับกล้องพร้อมกันหลายตัว (สูงสุดสามตัวบน N6), สแนปช็อตแบบ non-blocking, ขนาดเฟรม(w, h)กำหนดเองได้, และprint()/ repr ที่ให้ข้อมูลครบถ้วน นำเสนอควบคู่กับโมดูลsensorเดิม (ไม่ใช่ตัวแทนแบบ drop-in)crc—crc.crc16()และcrc.crc32()เร่งด้วยฮาร์ดแวร์พร้อม software fallback บน OpenMV N6 และ AE3image.Image.draw_image()ได้รับคีย์เวิร์ดtransform=ใหม่ (เมทริกซ์ndarrayfloat 2 มิติสำหรับการบิดเบือนแบบ affine/perspective เร่งด้วย GPU บน STM32 และ Alif) โดย transform เดียวกันนี้ใช้ได้ในการแปลงภาพด้วยdraw_event_histogram()— เรนเดอร์ฮิสโตแกรมของกล้อง eventโหมด RAW event ของ GenX320 —
csi.IOCTL_GENX320_SET_MODEพร้อมcsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT,csi.IOCTL_GENX320_READ_EVENTS,csi.IOCTL_GENX320_CALIBRATE, ค่าคงที่ประเภท event และสคริปต์ตัวอย่างใหม่ML — แบ็กเอนด์ NPU ST Neural-ART (STAI);
ml.Modelได้รับคีย์เวิร์ดpostprocess=(post-processor ทำงานอัตโนมัติภายในpredict()แม้ไม่มี callback);ml.postprocessingถูกจัดใหม่เป็นแพ็กเกจย่อยของผู้จำหน่าย ได้แก่ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo), และml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — ชื่อแบบ snake_case เดิมยังคงเป็น alias; เพิ่มml.utils.draw_keypoints()และml.utils.draw_skeleton(); โมเดล ROMFS ที่รวมมาเพิ่มขึ้น (BlazeFace, YOLO-LC, YOLOv8n, landmark ของฝ่ามือ/มือ/ใบหน้า)audio— อินพุตไมโครโฟนดิจิทัล MDF บน STM32N6จอแสดงผล — ไดรเวอร์ SSD1351 OLED และตัวอย่าง; คอนโทรลเลอร์
SPIDisplayสามารถแทนที่คำสั่ง init ได้; ตัวสร้าง SPI display ได้รับคีย์เวิร์ดhmirror/vflipProfiler บนอุปกรณ์ — ตัวนับรอบ/เหตุการณ์ SysTick + Armv8.1-M PMU พร้อม instrumentation ระดับฟังก์ชัน อ่านได้ผ่านลิงก์ debug (
pyopenmvได้รับการรองรับ profiling และสัญลักษณ์ ELF)รองรับ sensor ใหม่ — PixArt PS5520; FLIR BOSON บน OpenMV H7 Plus; GenX320 auto-detect
การเปลี่ยนแปลงและการปรับปรุงอื่น ๆ¶
MicroPython อัปเดตเป็น 1.26.0
การเริ่มต้นกล้อง — นาฬิกา sensor ถูกแยกออกจากสถานะ CSI, การตรวจจับกล้องตอนบูตเร็วขึ้น (ลองการกำหนดค่าที่ใช้บ่อยที่สุดก่อน) และนาฬิกาเริ่มต้นของ OpenMV 3 OV7725 ได้รับการแก้ไขแล้ว
คุณภาพภาพ — การแก้ไข gamma ด้วย software ISP (Alif และ STM32) และการแก้ไขพิกเซลเสีย (STM32) เปิดใช้งานโดยค่าเริ่มต้น; sensor PAG7936 และ PS5520 ได้รับการควบคุม auto-white-balance
ประสิทธิภาพ —
image.Image.to_ndarray()เร่งด้วย Helium SIMD และ FOMO post-processor ถูก vectorize ด้วย ulabไดรเวอร์ FLIR Lepton เขียนใหม่ เพื่อรับเฟรมแบบ asynchronous ในเบื้องหลัง — การหมุน/
transposeใช้งานได้แล้ว, การวาดขยายแบบ bilinear และการ reset เร็วขึ้นปริมาณงาน Capture — i.MX RT1062 CSI ใช้ DMA offload เต็มรูปแบบแล้ว และ STM32 N6 มี
draw_image()ด้วย hardware-GPU
การแก้ไขบัก¶
กล้องและ sensor:
แก้ไขโหมด RGB565 / GRAYSCALE / BAYER / YUV422 บน sensor STM32, PAJ6100 บน OpenMV H7 / H7 Plus, OpenMV 2 QVGA RGB565 และการกำหนดค่า mono / RGB-YUV ของ N6 CSI; กล้องทดสอบซอฟต์แวร์ตอนนี้ reset ได้อย่างแน่นอน
Auto-white-balance ไม่ทำให้ภาพเป็นสีเขียวอีกต่อไปที่อัตราเฟรมต่ำหรือแปรผัน (ค่าเฉลี่ยเคลื่อนที่ 250 มิลลิวินาทีแทนการสุ่มตัวอย่างทุก 100 เฟรม) และแก้ไขการกะพริบของความสว่าง PS5520 แล้ว
การประมวลผลภาพ:
แก้ไขข้อบกพร่องในการเรนเดอร์เส้น;
image.Image.flush()ตอนนี้ flush บัฟเฟอร์ JPEG ของภาพที่ถูกเรียก;Normalizationตอนนี้ใช้ mean/stdev กับ float input; การจัดสรรภาพจากไฟล์ได้รับการแก้ไขแล้ว
การ capture ของกล้อง:
แก้ไขความเสียหายของภาพร้ายแรงบนการถ่ายโอนแบบ non-JPEG (frame interrupt เปิดใช้งานเฉพาะในโหมด JPEG เท่านั้น), รองรับ JPEG mode-3 และการล็อกของ DMA line-size และ small-buffer บน STM32; การซิงค์ VOSPI / Lepton เชื่อถือได้มากขึ้น โดยเฉพาะบน N6
เบ็ดเตล็ด:
omv.board_id()คืนค่า UID ที่ถูกต้องบน RT1060;YoloV2ไม่ crash เมื่อสร้างโดยไม่ระบุ anchors อีกต่อไป
ฮาร์ดแวร์และการรองรับบอร์ด¶
OpenMV N6 — STM32N6 พร้อม Neural-ART NPU, triple buffering, SPI LCD/TV output, Soft-CSI, โมดูล
tofและโมเดล ROMFS ที่รวมมาArduino GIGA — เอาต์พุตจอแสดงผล MIPI DSI
Sensor ใหม่ — PixArt PS5520; FLIR BOSON บน OpenMV H7 Plus; GenX320 auto-detect
OpenMV Pure Thermal — FLIR Lepton กลายเป็น sensor กล้อง (รอง) ปกติแล้ว
Alif AE3 — การแก้ไข gamma ด้วย software ISP, โมดูล
crcและการแก้ไข SPI
การเปลี่ยนแปลง API ที่ทำให้โค้ดเดิมใช้ไม่ได้¶
การเปลี่ยนแปลง API ที่ผู้ใช้มองเห็นได้ระหว่าง v4.7.0 และ v4.8.0 ขอบเขต: C-module ของ Python ใน modules/ และไลบรารี Python ใน scripts/libraries/
การเปลี่ยนแปลงแต่ละรายการถูกแท็กด้วยผลกระทบ:
major — สคริปต์ส่วนใหญ่ที่ใช้มันต้องแก้ไข
minor — API แคบ; ส่งผลเฉพาะสคริปต์ที่ใช้งาน
behavior — API เดิม ผลลัพธ์ต่างกัน; ตรวจสอบสคริปต์ที่ปรับแต่งแล้วอีกครั้ง
tooling — ส่งผลเฉพาะเครื่องมือ host / การ build จากซอร์ส
การเปลี่ยนแปลงถูกจัดกลุ่มตามผลกระทบตามลำดับนั้น — major ก่อน, จากนั้น minor, behavior และ tooling หากต้องการย้ายโค้ดเท่านั้น ข้ามไปที่ รายการตรวจสอบการย้าย ที่ท้ายสุดสำหรับรายการสรุป แต่ละ commit hash เชื่อมโยงไปยัง diff บน GitHub
FLIR Lepton ย้ายออกจากโมดูล fir (major)¶
FLIR Lepton ตอนนี้ถูกขับเคลื่อนเป็น sensor กล้องปกติแทนที่จะผ่านโมดูล fir การควบคุม Lepton ถูกลบออกจาก fir: ประเภท FIR_LEPTON และเมธอด radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() และ trigger_ffc() ถูกลบออก ให้ capture Lepton เหมือนกล้องอื่น ๆ (ปรากฏเป็น sensor รองบน OpenMV Pure Thermal); ตัวอย่าง Pure Thermal ถูกเขียนใหม่เป็น API ใหม่ sensor fir ที่ไม่ใช่ Lepton (Grid-EYE, MLX, AMG8833) ไม่มีการเปลี่ยนแปลง
โมดูล buzzer ถูกลบออก (minor)¶
โมดูล buzzer ถูกลบออกจาก port STM32 และ i.MX RT ให้ขับ buzzer ด้วย machine.PWM แทน; เพิ่มตัวอย่าง buzzer Pure Thermal โดยใช้ PWM
omv.disable_fb() ถูกลบออก (minor)¶
ฟังก์ชัน omv.disable_fb() ถูกลบออก; การสตรีมบัฟเฟอร์เฟรมถูกควบคุมผ่าน camera API แล้ว สคริปต์ desktop RPC เดิมที่อาศัยมันก็ถูกลบออกด้วย
csi เป็นโมดูลใหม่ — API ยังไม่ถูกตรึง (minor)¶
โมดูล csi ถูกนำเสนอใน v4.8.0 และ API มีการพัฒนาระหว่างการออกรุ่น: csi.fb() ถูกลบออก และ csi.CSI.snapshot() (image=...) ตอนนี้ต้องการภาพที่ แก้ไขได้ และวาด/ปรับขนาดเฟรมที่ capture ลงในภาพนั้นแทนการ deep copy แบบ raw ผู้ที่รับรุ่นใหม่ของโมดูลนี้ก่อนใครควรทดสอบใหม่; sensor API เดิมไม่ได้รับผลกระทบ
โหมดสตรีมและ close() ของ image.ImageIO (minor)¶
image.ImageIO — อาร์กิวเมนต์ mode ตอนนี้รับเฉพาะตัวพิมพ์เล็ก 'r' / 'w' (ตัวพิมพ์ใหญ่จะถูกปฏิเสธพร้อมข้อความแสดงข้อผิดพลาดที่อัปเดต) และการเปิดด้วย 'w' จะ truncate/สร้างไฟล์ใหม่เสมอแทนที่จะรักษาสตรีมที่มีอยู่ ImageIO.close() ตอนนี้ทำงานแบบ idempotent (การปิดสตรีมที่ปิดแล้วจะไม่ raise) และคืนค่า None แทนออบเจกต์สตรีม
ค่าที่ส่งกลับของ BlazeFace / BlazePalm (minor)¶
post-processor BlazeFace และ BlazePalm (ใหม่ในรุ่นนี้) ตอนนี้คืนรายการกรอบล้อมรอบเดียวแทนรายการต่อคลาสเต็ม — ผู้เรียกจะ index ผลลัพธ์โดยตรงแทน [0]
Commit: 75e16b573
ML post-processor callback รับ raw tensor (behavior)¶
callback post-process ของ ml.Model predict() ตอนนี้รับการอ้างอิง output-tensor แบบ raw (quantized) แทน ndarray float ที่แปลงล่วงหน้า — เพื่อหลีกเลี่ยงการใช้หน่วยความจำหมดบนโมเดลขนาดใหญ่ หากไม่มี callback ระบุ ndarray float ยังคงถูกส่งกลับ callback กำหนดเองต้อง dequantize tensor เอง (post-processor ในตัวทำสิ่งนี้อยู่แล้ว)
Commit: 84e6ee650
นาฬิกา sensor แยกจากสถานะ CSI (behavior)¶
นาฬิกา sensor ตอนนี้เป็นอิสระจากสถานะ CSI set_clock / set_frequency กำหนดค่านาฬิกาใหม่เฉพาะเมื่อความถี่ที่ร้องขอต่างจากค่าที่ยอมรับได้ และ get_clk_frequency รับ boolean เพื่อคืนความถี่ที่แน่นอน (แทนค่าที่กำหนด) นาฬิกาเริ่มต้นคือ 24 MHz บน OpenMV N6 และ AE3 ดังนั้นไม่จำเป็นต้องเรียก set_clock() ตอนบูต สคริปต์ที่สลับนาฬิกาสำหรับการ capture ที่ไวต่อเวลาควรตรวจสอบสมมติฐานใหม่
Commits: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca
โปรโตคอล USB debug และ firmware target (tooling)¶
ไม่มีสิ่งใดนี้ส่งผลต่อสคริปต์ MicroPython คำสั่ง USBDBG ที่ล้าสมัย (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) ถูกลบออก และคำสั่งที่ไม่รองรับจาก IDE รุ่นเก่าตอนนี้ถูก flush แทนการ crash บอร์ด TinyUSB เมื่อเชื่อมต่อ; firmware target UVC STM32 เดิมถูกลบออก เครื่องมือ host เก่าควรอัปเดต; ดูประวัติ firmware repository สำหรับรายละเอียด
รายการตรวจสอบการย้าย¶
สำหรับการย้ายไปยัง v4.8.0 อย่างสะอาด งานทั่วไปคือ:
หากคุณใช้ FLIR Lepton ผ่าน
firให้เปลี่ยนไปใช้การ capture เป็น sensor กล้อง (การเปลี่ยนแปลง fir/Lepton)แทนที่การใช้
buzzerด้วยmachine.PWM(การลบ buzzer)ลบการเรียก
omv.disable_fb()(การลบ omv.disable_fb())สำหรับ
image.ImageIO: ใช้ตัวพิมพ์เล็ก'r'/'w'และคาดหวังว่า'w'จะ truncate (การเปลี่ยนแปลง ImageIO)สำหรับ callback ML post-process กำหนดเอง: dequantize การอ้างอิง raw tensor เอง หรืออาศัยเส้นทาง float เริ่มต้น (การเปลี่ยนแปลง callback)
ตรวจสอบสคริปต์ใด ๆ ที่ขับนาฬิกา sensor สำหรับการ capture ที่ไวต่อเวลาอีกครั้ง (การเปลี่ยนแปลงนาฬิกา)