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แบบ frozenimage.ImageIO— ประเภทสตรีมรูปภาพใหม่รองรับทั้ง memory และ file streams ด้วยread()/write()/seek()/size()/close()พร้อมตัวอย่างการอ่าน/เขียน/memory ของ ImageIOFLIR 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/transposeOV5640 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 เมื่อไม่ได้ระบุ exceptionxallocตอนนี้รายงานจำนวนไบต์ที่ขอ เปิดใช้งาน 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 ร่วมกัน) ทำงานได้
ความร้อน:
แก้ไขการคำนวณค่าสูงสุดใน
firget_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 ใหม่ nRFgc_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 งานทั่วไปคือ:
พอร์ตการอนุมานโมเดล CMSIS-NN
nnไปยังโมดูล TensorFlow Litetf(การลบ nn)แทนที่
image.ImageReader/image.ImageWriterด้วยimage.ImageIO(การเปลี่ยนแปลง ImageIO)ลบคีย์เวิร์ด
scale=(min, max)ออกจากfir.draw_ir()และใช้อาร์กิวเมนต์ใหม่ (การเปลี่ยนแปลง draw_ir)ปรับแต่งพารามิเตอร์
find_lines()ใหม่กับเมตริก magnitude แบบประมาณ (การเปลี่ยนแปลง find_lines)พอร์ตสคริปต์ FIR ไปยัง API คีย์เวิร์ดของ
fir.snapshot()ใหม่ (การเปลี่ยนแปลง fir.snapshot) และจัดการfir.init()ที่ raise เมื่อเซนเซอร์หายไป (การเปลี่ยนแปลง fir.init)
สคริปต์อื่น ๆ ทั้งหมดทำงานได้โดยไม่มีการเปลี่ยนแปลง