v3.9.0

v3.9.0 เป็น major release ซึ่งเพิ่ม nRF port พร้อม Arduino Nano 33 BLE Sense (กล้อง โมดูล audio แบบ PDM, ulab, ไดรเวอร์เซนเซอร์แบบ frozen) นำเข้าเซนเซอร์ความร้อน FLIR Lepton พร้อม MLX90641 / MLX90621 และโมดูล fir ที่ถูกปรับปรุงอย่างมาก ioctls สำหรับ autofocus ของ OV5640 และประเภทสตรีม image.ImageIO ใหม่ โมดูล nn ของ CMSIS-NN แบบเดิมและคลาส ImageReader / ImageWriter เก่าถูกลบออก — อ่านการเปลี่ยนแปลงที่ทำให้โค้ดเสียหายด้านล่าง

จุดเด่น

  • Arduino Nano 33 BLE Sense — nRF52840 port ใหม่พร้อมกล้อง โมดูล audio แบบ PDM, ulab และไดรเวอร์เซนเซอร์แบบ frozen

  • ความร้อน — รองรับ FLIR Lepton, MLX90641 และ MLX90621 พร้อมโมดูล fir ที่ปรับปรุงใหม่ (palette, mirroring, scaling, radiometry, FFC)

  • OV5640 autofocus — ioctls sensor.IOCTL_*_AUTO_FOCUS ใหม่

  • image.ImageIO — ประเภทสตรีมรูปภาพแบบรวม (memory หรือไฟล์ อ่าน/เขียน/seek/size/close) แทนที่ ImageReader / ImageWriter

  • การเปลี่ยนแปลงที่ทำให้โค้ดเสียหาย: โมดูล nn ของ CMSIS-NN และ image.ImageReader / image.ImageWriter ถูกลบออก และพฤติกรรมของ find_lines() / fir เปลี่ยนแปลง — ดูการเปลี่ยนแปลงที่ทำให้โค้ดเสียหาย

ฟีเจอร์ใหม่

  • nRF port / Arduino Nano 33 BLE Sense — nRF52840 port และการรองรับบอร์ดใหม่ พร้อมโมดูล audio ใหม่ (audio.init(), audio.start_streaming(), audio.stop_streaming()), ulab เปิดใช้งาน และไดรเวอร์เซนเซอร์ apds9960 / lps22h / lsm9ds1 / hts221 แบบ frozen

  • image.ImageIO — ประเภทสตรีมรูปภาพใหม่รองรับทั้ง memory และ file streams ด้วย read() / write() / seek() / size() / close() พร้อมตัวอย่างการอ่าน/เขียน/memory ของ ImageIO

  • FLIR Lepton — เพิ่มการรองรับ FIR_LEPTON ด้วย fir.radiometric(), fir.trigger_ffc() และ fir.register_vsync_cb()

  • เซนเซอร์ความร้อน — เพิ่มการรองรับ MLX90641 (FIR_MLX90641) และ MLX90621 thermopile (ไดรเวอร์ Melexis อย่างเป็นทางการ)

  • Palette / orientation ของ fir — เพิ่มค่าคงที่ fir.PALETTE_RAINBOW / PALETTE_IRONBOW / GRAYSCALE / RGB565 และ fir.read_ir() ตอนนี้รับ hmirror / vflip / transpose

  • OV5640 autofocus — เพิ่ม sensor.IOCTL_TRIGGER_AUTO_FOCUS / IOCTL_PAUSE_AUTO_FOCUS / IOCTL_RESET_AUTO_FOCUS / IOCTL_WAIT_ON_AUTO_FOCUS (OpenMV 2/3/4/4 Plus/PT/Portenta)

  • จัดระเบียบตัวอย่าง Arduino ใหม่เป็นไดเรกทอรีต่อบอร์ด

การเปลี่ยนแปลงและการปรับปรุงอื่น ๆ

  • เปลี่ยนไปใช้ข้อความข้อผิดพลาด MicroPython แบบบีบอัด (exception strings สั้นลง) อาร์กิวเมนต์ type ของ fir.init() ตอนนี้ตรวจจับอัตโนมัติผ่านการสแกน I2C bus เมื่อไม่ได้ระบุ exception xalloc ตอนนี้รายงานจำนวนไบต์ที่ขอ เปิดใช้งาน UART 8 บน Portenta และตัวอย่าง FIR ถูกรวมเป็น thermal_camera.py / thermal_overlay.py / thermal_overlay_lcd.py เพื่อให้พอดีกับแฟลช image.get_similarity() และ selective search ถูกปิดใช้งานในบิลด์ OpenMV 4 และไลบรารีรูปภาพตอนนี้สามารถสร้างได้โดยไม่มี filesystem (สำหรับบอร์ดที่ไม่มี filesystem)

การแก้ไขบัก

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

  • แก้ไขการคำนวณ PCLK ของ OV5640 เพิ่ม I2C IRQ handlers ที่หายไป (แก้ไขการค้างของ I2C transfer) ปรับปรุง cambus I2C read/write ใหม่เพื่อความน่าเชื่อถือ ทำให้ Lepton I2C bus เลือกได้ ย้าย pin กู้คืน cambus bus ไปยังการกำหนดค่าต่อบอร์ด ลองสแกน cambus อีกครั้งก่อนล้มเหลว และทำให้ OpenMV PT (Lepton + กล้องที่ใช้ I2C ร่วมกัน) ทำงานได้

ความร้อน:

  • แก้ไขการคำนวณค่าสูงสุดใน fir get_ir() / draw_ir() และ image.get_similarity() (FLT_MIN-FLT_MAX) การจัดการ AMG8833 12→16 บิต และความแม่นยำของ MLX90621 (ไดรเวอร์ Melexis อย่างเป็นทางการ)

จอแสดงผล เสียง และระบบ:

  • ย้าย STM32 SPI LCD transfers ไปยัง HAL SPI callbacks (ความน่าเชื่อถือของจอแสดงผล) แก้ไข Nano 33 audio.init() (HF oscillator + PDM ratio เพื่อให้ไมโครโฟนทำงาน) สถานะ timer ของ H7 กับ HAL ใหม่ nRF gc_collect และการ init/deinit บอร์ดก่อนกำหนด และหยุดการพิมพ์ข้อความ "uh oh, no preference for overlapping detection" ที่ไม่ถูกต้องระหว่าง find_apriltags() / find_rects()

ฮาร์ดแวร์และการรองรับบอร์ด

  • Arduino Nano 33 BLE Sense — nRF52840 บอร์ดใหม่ (กล้อง PDM audio, ulab, ไดรเวอร์เซนเซอร์แบบ frozen)

  • เซนเซอร์ความร้อน FLIR Lepton, MLX90641 และ MLX90621

  • OV5640 autofocus — OpenMV 2/3/4/4 Plus/PT/Portenta

  • Portenta — เปิดใช้งาน UART 8

การเปลี่ยนแปลง API ที่ทำให้โค้ดเสียหาย

การเปลี่ยนแปลง API ที่มองเห็นได้โดยผู้ใช้ระหว่าง v3.8.0 และ v3.9.0 ขอบเขต: Python C-modules ใน modules/ และ Python libraries ใน scripts/libraries/

การเปลี่ยนแปลงแต่ละรายการได้รับการระบุด้วยผลกระทบ:

  • major — ส่งผลกระทบต่อสคริปต์ส่วนใหญ่ที่ใช้ฟีเจอร์นี้ คุณจะต้องพอร์ตโค้ด

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

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

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

ลบโมดูล nn ของ CMSIS-NN (major)

โมดูล nn ของ CMSIS-NN ถูกลบออก รวมถึง nn.load(), net.forward(), net.search() และ helper nn_class การอนุมานโมเดลย้ายไปยังโมดูล TensorFlow Lite (tf) สคริปต์ที่โหลดโมเดล .network ด้วย nn ต้องพอร์ตไปยัง tf พร้อมโมเดล TensorFlow Lite

Commits: fbc767b36

แทนที่ ImageReader / ImageWriter ด้วย image.ImageIO (major)

image.ImageReader / image.ImageWriter และเมธอด next_frame() / add_frame() ถูกลบออกและแทนที่ด้วยประเภท image.ImageIO ใหม่ ซึ่งรองรับทั้ง memory และ file streams ผ่าน read() / write() / seek() / size() / close() โค้ดที่ใช้คลาส reader/writer เก่าต้องพอร์ตไปยัง image.ImageIO (ดูตัวอย่างที่เปลี่ยนชื่อเป็น imageio_read.py / imageio_write.py)

Commits: 783a78754

ลบคีย์เวิร์ด scale ของ fir.draw_ir() (minor)

fir.draw_ir() ถูกเขียนใหม่บน pipeline การวาดรูปภาพใหม่ คีย์เวิร์ด scale=(min, max) ถูกลบออก และเพิ่ม hint, x_scale, y_scale, roi และอาร์กิวเมนต์ตำแหน่ง x/y สคริปต์ที่ส่ง scale=(min, max) ไปยัง fir.draw_ir() ต้องลบออกและใช้อาร์กิวเมนต์ใหม่

Commits: 0a29103b1

การประมาณค่าของ find_lines() (behavior)

image.find_lines() ตอนนี้ประมาณขนาด gradient เป็น (abs(gx) + abs(gy)) / 2 และข้ามขนาดที่ต่ำกว่า 126 ซึ่งเร็วกว่าแต่เปลี่ยนชุดเส้นที่ตรวจจับได้และค่า accumulator ดังนั้นควร re-check และปรับแต่ง threshold / theta_margin / rho_margin ใหม่

Commits: 902ae3c98

ปรับปรุง fir.snapshot() ใหม่ (behavior)

fir.snapshot() ได้รับการปรับปรุงอย่างมากพร้อม API คีย์เวิร์ดใหม่ (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb) และตัวอย่างที่รวมมาถูกเขียนใหม่ พฤติกรรมตำแหน่ง/pixformat-only เดิมเปลี่ยนแปลง; พอร์ตสคริปต์ FIR ไปยังรูปแบบคีย์เวิร์ดใหม่ (ดูตัวอย่าง thermopile-shield ที่อัปเดตแล้ว)

Commits: 53f2248b8

fir.init() raise เมื่อเกิดความล้มเหลว (behavior)

fir.init() ตอนนี้ raise (และ de-init อย่างสะอาด) เมื่อไม่ตรวจพบเซนเซอร์ความร้อน แทนที่จะดำเนินการต่อแบบเงียบ ใส่ fir.init() ใน try / except (หรือตรวจสอบให้แน่ใจว่าเซนเซอร์เชื่อมต่ออยู่) ในที่ที่คุณเคยพึ่งพาการไม่ raise

Commits: 4b2f972f3

รายการตรวจสอบการย้าย

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

  1. พอร์ตการอนุมานโมเดล CMSIS-NN nn ไปยังโมดูล TensorFlow Lite tf (การลบ nn)

  2. แทนที่ image.ImageReader / image.ImageWriter ด้วย image.ImageIO (การเปลี่ยนแปลง ImageIO)

  3. ลบคีย์เวิร์ด scale=(min, max) ออกจาก fir.draw_ir() และใช้อาร์กิวเมนต์ใหม่ (การเปลี่ยนแปลง draw_ir)

  4. ปรับแต่งพารามิเตอร์ find_lines() ใหม่กับเมตริก magnitude แบบประมาณ (การเปลี่ยนแปลง find_lines)

  5. พอร์ตสคริปต์ FIR ไปยัง API คีย์เวิร์ดของ fir.snapshot() ใหม่ (การเปลี่ยนแปลง fir.snapshot) และจัดการ fir.init() ที่ raise เมื่อเซนเซอร์หายไป (การเปลี่ยนแปลง fir.init)

สคริปต์อื่น ๆ ทั้งหมดทำงานได้โดยไม่มีการเปลี่ยนแปลง