v4.5.1

v4.5.1 เพิ่มคำใบ้การวางแนว/อัตราส่วนภาพสำหรับการวาด, การโหลดภาพโดยตรงจาก file path, GC2145 wide field-of-view ioctl และ API ตัวควบคุมแบ็กไลต์ใหม่ นอกจากนี้ยังปรับปรุง constructor Image(), API display และการแยกวิเคราะห์อาร์กิวเมนต์ของโมดูล — อ่านการเปลี่ยนแปลงที่ไม่รองรับย้อนหลังด้านล่าง

ไฮไลต์

  • คำใบ้การวาดdraw_image() ได้รับคำใบ้การวางแนว (HMIRROR/VFLIP/TRANSPOSE, ROTATE_90/180/270) และการปรับขนาดตามอัตราส่วน (SCALE_ASPECT_KEEP/EXPAND/IGNORE)

  • โหลดภาพจากดิสก์draw_image() / display.write() รับ string ของ file path

  • การควบคุมแบ็กไลต์ — คลาส DACBacklight / PWMBacklight ใหม่และอาร์กิวเมนต์ backlight= สำหรับการแสดงผล

  • การเปลี่ยนแปลงที่ไม่รองรับย้อนหลัง: constructor Image(), API display และการแยกวิเคราะห์อาร์กิวเมนต์ของโมดูลเปลี่ยนไป — ดูการเปลี่ยนแปลงที่ไม่รองรับย้อนหลัง

ฟีเจอร์ใหม่

  • คำใบ้การวางแนว draw_image()image.HMIRROR, image.VFLIP, image.TRANSPOSE รวมถึง image.ROTATE_90 / ROTATE_180 / ROTATE_270 ที่ใช้งานสะดวก

  • คำใบ้อัตราส่วนภาพ draw_image()image.SCALE_ASPECT_KEEP / SCALE_ASPECT_EXPAND / SCALE_ASPECT_IGNORE สำหรับ fit / expand / stretch

  • ค่าคงที่ paletteimage.PALETTE_RAINBOW และ image.PALETTE_IRONBOW (ย้ายเข้าไปในโมดูล image)

  • Wide field of view — ioctls sensor.IOCTL_SET_FOV_WIDE / IOCTL_GET_FOV_WIDE ใหม่ (บน GC2145 ขยายสเกลเซนเซอร์ได้สูงสุด 5x)

  • โหลดจากดิสก์draw_image() และ display.write() รับ string ของ file path ของภาพต้นทาง โหลดโดยตรงจากที่เก็บข้อมูล

  • ตัวควบคุมแบ็กไลต์ — คลาส DACBacklight และ PWMBacklight ใหม่ (import ได้จาก display) และอาร์กิวเมนต์ keyword-only backlight= บน constructor การแสดงผล SPI/parallel

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

  • ไดรเวอร์จอ ST7701 DSI ย้ายไปยังโมดูล st7701.py ของตัวเอง (ยัง import ได้ผ่าน from display import *) และถูก freeze บน Arduino Giga; ไดรเวอร์ IMU lsm9ds1 ถูก freeze บน Arduino Nano 33 BLE Sense

  • กล้อง MT9V022 / MT9V034 (global-shutter) ตอนนี้ใช้การแก้ไข row-noise เพื่อคุณภาพภาพที่ดีขึ้น

  • USB mass-storage ของ i.MX RT ตอนนี้มีป้ายกำกับเป็นดิสก์ OpenMV

การแก้ไขบั๊ก

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

  • แก้ไขการตรวจจับมุม (find_keypoints() FAST/AGAST) บนภาพที่มีความสูงมากกว่า 480 แถว — บัฟเฟอร์ต่อแถวตอนนี้ถูกปรับขนาดตามความสูงของภาพ

  • เพิ่มรองรับพิน FSYNC สำหรับ snapshot() ที่ซิงค์เฟรมบน i.MX RT (OpenMV RT1060) และแก้ไขสลับพิน SPI4 MOSI/MISO บน RT1060

การแสดงผลและวิดีโอ:

  • แก้ไขลำดับอาร์กิวเมนต์ constructor ของ SPIDisplay (bgr, byte_swap, triple_buffer ถูกใช้กับพารามิเตอร์ผิด)

  • แก้ไขความเสียหายของภาพ TV-shield เมื่อวาดภาพด้วยสี่เหลี่ยมที่กำหนด และขอบเขตเฟรม MJPEG ที่ไม่ถูกต้องเมื่อบันทึกเฟรมที่ปรับขนาด

เครือข่าย:

  • โหมด WINC WiFi AP ไม่บังคับใช้ข้อจำกัด WEP เท่านั้นที่ล้าสมัยอีกต่อไป — โหมด AP แบบเปิดและ WPA ทำงานได้พร้อมการจัดการ PSK ที่ถูกต้อง

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

  • OpenMV RT1060 — พิน FSYNC และแก้ไขพิน SPI4

  • Arduino GIGA — วิธีแก้ปัญหาความน่าเชื่อถือ QSPI; ST7701 display ถูก freeze ลง

  • Arduino Nano 33 BLE Sense — ไดรเวอร์ IMU lsm9ds1 ถูก freeze ลง

การเปลี่ยนแปลง API ที่ไม่รองรับย้อนหลัง

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

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

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

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

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

constructor Image() และ API display (minor)

constructor image.Image ถูกปรับปรุงให้ใช้ keyword arguments (height, pixformat, buffer=, copy_to_fb=); ตอนนี้สามารถสร้างภาพจาก bytearray/buffer ที่มีอยู่ และต้องใช้ buffer สำหรับรูปแบบที่บีบอัด display.write() ถูกปรับปรุง: x_scale/y_scale ตอนนี้รับ float (อัตราส่วนสเกล) หรือ int (ขนาดเป้าหมายเป็นพิกเซล) และ keyword x_size/y_size แยกถูกลบออก อาร์กิวเมนต์ตำแหน่งแรกของ WINC.connect() ถูกเปลี่ยนชื่อ essidssid และผลลัพธ์การสแกน WINC WiFi เปลี่ยนเป็น (ssid_bytes, bssid_bytes, channel, rssi, security, N) (SSID/BSSID ตอนนี้เป็น bytes; BSSID ไม่ใช่ string MAC ที่จัดรูปแบบแล้ว)

Commits: 6752c95ac, 161737092, 8178c237c, b6cdf8de1

ช่วงแบ็กไลต์, การปรับขนาด และ keyword-only arguments (behavior)

Display.backlight() ตอนนี้รับค่าความเข้ม 0–100 (0 = ปิด, 100 = เต็ม) แทน 0–255 โดยยก ValueError หากอยู่นอกช่วง ค่า x_scale/y_scale แบบ integer ตอนนี้ถูกถือว่าเป็นตัวคูณสเกล (เหมือนกับ float) แทนขนาดพิกเซลเป้าหมาย — ส่งผลกระทบต่อ fir.snapshot()/draw_ir(), tof.snapshot()/draw_depth(), display และการปรับขนาด tv การแยกวิเคราะห์อาร์กิวเมนต์ในโมดูล sensor, fir, tof, tv, mjpeg, gif, imageio, tf และ audio ถูกรวมเป็นหนึ่ง ทำให้ตัวเลือกที่เคยเป็น positional หลายรายการกลายเป็น keyword-only (ชื่อ, ค่าเริ่มต้น และพฤติกรรมไม่เปลี่ยนแปลง)

Commits: 391ec443f, 8bd25d6cd, 477312656, 08bf62a32, a4c0f20bf, 9b411a66d, 3d679f5a6, d15fc6b8d, 555e67ecd

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

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

  1. อัปเดตการสร้าง Image() เป็นรูปแบบ keyword ใหม่, เปลี่ยน display.write() จาก x_size/y_size และเปลี่ยนชื่อ WINC.connect() essidssid (จัดการ tuple การสแกนแบบ bytes ใหม่) (การเปลี่ยนแปลง constructor/display/WINC)

  2. ปรับขนาด Display.backlight() calls เป็น 0–100, ตรวจสอบการใช้ x_scale/y_scale แบบ integer อีกครั้ง และส่งตัวเลือกโมดูลที่เคยเป็น positional เป็น keyword (การเปลี่ยนแปลงพฤติกรรม)