v4.5.3

v4.5.3 เป็นรุ่นใหญ่: รองรับออโตโฟกัสของ OV5640, การวาดเส้นแบบ anti-aliased, ตัวถอดรหัส JPEG ด้วยฮาร์ดแวร์ที่รวมเข้าหลัก, ความสามารถของ i.MX RT (RT1060) ที่เพิ่มขึ้นอย่างมาก, และการแก้ไขกล้อง/ISP จำนวนมาก โดยมีการลบเมธอดภาพที่ไม่ค่อยใช้บางส่วนและเปลี่ยน API ของ ISP/display — อ่านรายการเปลี่ยนแปลงแบบ breaking ด้านล่าง

Highlights

  • ออโตโฟกัส OV5640 — เปิดใช้งานบน OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)) พร้อมตัวอย่าง

  • draw_line() แบบ anti-aliased และตัวถอดรหัส JPEG ด้วยฮาร์ดแวร์ STM32 ที่รวมเข้าหลัก (ถอดรหัส JPEG ได้เร็วขึ้น)

  • OpenMV RT1060 ได้รับ ulab, การดำเนินการ ISP, set_framerate() / set_frame_callback(), บัฟเฟอร์เฟรมขนาดใหญ่ขึ้นมาก และไดรเวอร์ CAN

  • Breaking: Image.div() / cartoon() / mul() ถูกลบออก และ API บางส่วนของ ISP/display มีการเปลี่ยนแปลง — ดูรายการ breaking changes

New features

  • ออโตโฟกัส OV5640 — เฟิร์มแวร์ออโตโฟกัสเปิดใช้งานบน OPENMV4, OPENMV4P และ OPENMV RT1060; เปิดใช้งานด้วย sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS) มีการเพิ่มตัวอย่างใหม่ 07-Sensor-Control/autofocus.py

  • การวาดเส้นแบบ anti-aliaseddraw_line() ได้รับการรองรับ anti-aliasing

  • ตัวควบคุมจอแสดงผล SPI แบบกำหนดเองSPIDisplay รองรับคีย์เวิร์ด controller= และเปิดเผย hook bus_write สำหรับลำดับการเริ่มต้น/คำสั่งแบบกำหนดเอง

  • การอัปเกรด Image.ccm() — รองรับเมทริกซ์แบบซ้อน 3x3 / 4x3 / 3x4 / 4x4 และอาร์เรย์ ulab (พร้อมแถว offset ต่อช่องสัญญาณแบบเลือกได้); เพิ่มตัวอย่างการแก้ไขสี

  • การจับภาพ JPEG บน i.MX RT — รองรับการจับภาพ sensor.JPEG บน Arduino Portenta/Nicla Vision/Giga พร้อม set_framerate() และ set_frame_callback() บนพอร์ต mimxrt

  • การตรวจสอบโมเดล TFLite — โมเดลตอนนี้มีแฮชลำดับตัวดำเนินการและขนาดชุดตัวดำเนินการ

  • WiFi — เพิ่มค่าคงที่โหมดความปลอดภัย CYW43; สคริปต์ตัวอย่างการควบคุมบอร์ด i.MX RT ใหม่ (Pin/ADC/CAN/I2C/PWM/SPI/UART/...)

Other changes and improvements

  • MicroPython อัปเดตเป็น 1.22; CMSIS อัปเดตเป็น 5.9.0

  • ตัวถอดรหัส JPEG ด้วยฮาร์ดแวร์ STM32 รวมเข้าหลัก — ถอดรหัส JPEG เร็วขึ้นบน codec ในชิป

  • ปรับ Image.invert() / negate() และการดำเนินการภาพแบบ binary/math ให้เหมาะสมยิ่งขึ้น (CMSIS intrinsics)

  • ไลบรารี rpc และ vl53l1x ได้รับการทำให้พกพาได้ (ใช้ machine / time แทน pyb) จึงทำงานได้บนพอร์ตที่ไม่ใช่ STM32

  • DMA เร่งความเร็ว frame-buffer memcpy บน OpenMV H7 / H7 Plus / Pro / Pure Thermal และ Arduino Giga / Nicla Vision / Portenta H7; STM32 ตอนนี้สแกนอุปกรณ์ I2C ครั้งเดียวต่อการสแกนเพื่อบูตเร็วขึ้น

Bug fixes

กล้องและเซนเซอร์:

  • แก้ไข XCLK ของกล้อง STM32 ให้มี duty cycle 50% ที่แท้จริงและข้อบกพร่องเมื่อตั้งความถี่นาฬิกากล้องเป็นศูนย์; แก้ไข Bayer crop+transpose, การเลื่อนสี YUV422 และ set_windowing() บนพอร์ต mimxrt

  • แก้ไขการตรวจสอบ chip-ID ของ GC2145 และ hmirror/vflip บนการติดตั้งแบบหมุน; แก้ไข PAJ6100 บน RT1062 และบัฟเฟอร์ SPI overflow ของ PixArt PAJ7620/PAW3902

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

  • แก้ไขการตัด roi ของ find_rects(), การตัดทอน fractional offset ของ morph(), ค่าเริ่มต้น contrast/brightness ของ image.gamma(), offset A/B ของ get_threshold() บน RGB565 และการถอดรหัส JPEG สำหรับขนาดที่ไม่เป็นผลคูณของ 8

ระบบและไลบรารี:

  • machine.LED.value() ที่ไม่มีอาร์กิวเมนต์ตอนนี้คืนค่าสถานะ LED แทนที่จะล้าง; แก้ไข SPI SSEL deinit บน bus ที่ใช้ร่วมกัน, machine.deepsleep() บน RT1062, TF crash เมื่อขาด operator และการเปิดใช้งาน NIC อัตโนมัติของ WINC1500/ninaw10 บน connect()

Hardware and board support

  • OpenMV RT1060 — เปิดใช้งาน ulab และการดำเนินการ ISP, บัฟเฟอร์เฟรมขนาดใหญ่ขึ้น (10M→20M) / fb_alloc (2M→11M), กู้คืนไดรเวอร์ CAN, heap มากขึ้น

  • Arduino GIGA — รองรับกล้อง GC2145 พร้อมการตรวจจับอัตโนมัติ GC2145/OV5640 (ใช้ที่อยู่ I2C เดียวกัน)

  • i.MX RT — รองรับการจับภาพ sensor.JPEG

Breaking API changes

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

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

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

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

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

เมธอดภาพที่ถูกลบออก (minor)

Image.div(), Image.cartoon() (และตัวอย่าง) และ Image.mul() ถูกลบออก

Commits: 7c932602e, 055a468b8, 4fe7fb63b

Display module API (minor)

การ fallback ชื่อโมดูล udisplay แบบเดิมถูกลบออก — โมดูลนี้ลงทะเบียนเฉพาะในชื่อ display เมธอด dsi_write() / dsi_read() ที่ใช้เฉพาะ DSI ถูกแทนที่ด้วย bus_write() / bus_read() ซึ่งตอนนี้ใช้ได้กับตัวควบคุมจอแสดงผลทุกประเภท

Commits: 7df6694c3, 7d1f378a0

การเปลี่ยน API ของ MQTT และ tf.regression (minor)

MQTTClient ของไลบรารี mqtt ได้รับการปรับปรุงใหม่: port บังคับใส่ตอนนี้, เพิ่มคีย์เวิร์ด ssl_params / callback ใน constructor และอาร์กิวเมนต์ timeout ใน connect(), ลบค่าเริ่มต้น ssl= / port=0 เดิมออก และ check_msg() ตอนนี้ไม่บล็อก tf.regression() ได้รับการเขียนใหม่ — ลายเซ็นตอนนี้คือ regression(model, array) และรองรับโมเดล 1D/2D/3D และแบบ quantized (int8)

Commits: d12874c63, c5ec576c1

การเปลี่ยนแปลงพฤติกรรม ISP / sensor (behavior)

Image.awb() ได้รับการปรับปรุงใหม่ — gray-world (ค่าเริ่มต้น) เทียบกับ white-patch (max=True) ตอนนี้ระบุอย่างชัดเจน และอาร์กิวเมนต์ max รวมทั้งอาร์กิวเมนต์ gamma / contrast / brightness ของ Image.gamma() ตอนนี้เป็น keyword-only (การเรียกแบบ positional ต้องอัปเดต) Image transpose ถูกปิดใช้งานสำหรับ YUV422 (ก่อนหน้านี้ผลิตผลลัพธ์ไม่ถูกต้อง) และการเลื่อนสี YUV422 ได้รับการแก้ไขให้ตรงกับ Bayer เส้นทาง STM32 JPEG ตอนนี้แสดงข้อผิดพลาดเมื่อมีความไม่ตรงกันของ geometry ของ JPEG แทนที่จะสร้างภาพที่เสียหาย และโหมด WiFi AP ตอนนี้ใช้โหมดความปลอดภัยเริ่มต้นบนพอร์ต STM32 และ i.MX RT

Commits: 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

Migration checklist

สำหรับการพอร์ตที่สะอาดไปยัง v4.5.3 งานทั่วไปคือ:

  1. หยุดใช้ Image.div() / cartoon() / mul() (เมธอดที่ถูกลบ)

  2. นำเข้าโมดูล display เป็น display และเปลี่ยน dsi_write/ dsi_read เป็น bus_write/bus_read (การเปลี่ยน display API)

  3. อัปเดตการสร้าง MQTTClient (port จำเป็นต้องใส่; ssl_params/callback) และการเรียก tf.regression() (การเปลี่ยน library API)

  4. ส่ง max ของ awb() และ gamma/contrast/brightness ของ gamma() เป็น keyword argument และตรวจสอบสมมติฐาน YUV422/transpose และความปลอดภัยโหมด AP อีกครั้ง (การเปลี่ยน ISP/sensor)