v3.6.1

v3.6.1 เป็นการอัปเดตครั้งใหญ่ที่นำเสนอโมดูล imu (LSM6DS3), ชุด API getter ใหม่ของ sensor พร้อม การหมุนอัตโนมัติที่ขับเคลื่อนด้วย IMU, การแก้ไขมุมมองสี่จุด rotation_corr(), และรองรับ Arduino Portenta H7 พร้อมกล้อง HIMAX HM01B0 และ OV7690 มี API ของ sensor / image บางส่วนที่เปลี่ยนแปลง และ TensorFlow ถูกยกเลิกบน M7 — อ่านการเปลี่ยนแปลงที่ส่งผลกระทบด้านล่าง

ไฮไลต์

  • โมดูล imu — มาตรวัดความเร่ง / ไจโร / อุณหภูมิ / roll / pitch บน LSM6DS3 (OpenMV 4 / Portenta)

  • Sensor getters + การหมุนอัตโนมัติget_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation(), และการหมุนสแนปช็อตที่ขับเคลื่อนด้วย IMU

  • การแก้ไขมุมมองrotation_corr() รองรับคีย์เวิร์ด fov และ corners (สี่จุด)

  • ฮาร์ดแวร์ใหม่ — Arduino Portenta H7, HIMAX HM01B0, และกล้อง OV7690

  • การเปลี่ยนแปลงที่ส่งผลกระทบ: set_pixformat() / set_framesize() ตอนนี้คืนค่า None, sensor.set_framerate() ถูกลบออก, TensorFlow ถูกยกเลิกบน M7, และ lens_corr() / linpolar() ต้องการขนาดคู่ — ดูการเปลี่ยนแปลงที่ส่งผลกระทบ

ฟีเจอร์ใหม่

  • imu — โมดูล IMU ใหม่: imu.acceleration_mg(), imu.angular_rate_mdps(), imu.temperature_c(), imu.roll(), imu.pitch(), และ imu.sleep() (LSM6DS3 บน OpenMV 4 / Portenta)

  • Sensor getters — เพิ่ม sensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose(), และ set_auto_rotation() / get_auto_rotation()

  • การหมุนอัตโนมัติsensor.snapshot() ใช้ IMU เพื่อพลิก / สะท้อน / สลับเปลี่ยนเฟรมเมื่อเปิดใช้งานการหมุนอัตโนมัติ

  • rotation_corr() — เพิ่มคีย์เวิร์ด fov และ corners (มุมมองสี่จุด) พร้อมตัวอย่างการแก้ไขมุมมอง

  • lcd.init() — เพิ่มอาร์กิวเมนต์คีย์เวิร์ด bgr

  • collections.deque — เปิดใช้งานในบิลด์ MicroPython

  • เพิ่มค่าคงที่ id sensor.OV7690 และ sensor.HM01B0 และตัวอย่างตัวกรองภาพ ulab แบบ numpy

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

  • ปรับปรุงตัวกรองภาพ (median / mode / mean / …) และ find_circles() และการแก้ไขเลนส์อย่างมีนัยสำคัญ; alloc_extra_fb สามารถจัดสรรไบต์ได้ตามต้องการ; โมเดลการตรวจจับบุคคลถูกสร้างใหม่พร้อม op average-pool ใหม่

การแก้ไขบัก

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

  • แก้ไข sleep() ของ OV2640 (ตอนนี้ใช้รีจิสเตอร์ standby COM2 แทนขา power-down), การกำหนดค่าขา FSYNC, ขั้วสัญญาณ HSYNC/VSYNC และที่อยู่/การสแกน I2C ของ HM01B0, GPIO power-down เซนเซอร์ Portenta และขา reset กล้อง, และปิดใช้งานการหมุนอัตโนมัติเมื่อ IMU pitch อยู่ใกล้ 90°/270°

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

  • แก้ไขบักการตรวจสอบขอบเขตของตัวกรองภาพ, hardfault เมื่อปิดใช้งาน D-cache, การบูตบนบอร์ดที่ไม่มี SD card, บักของ tf.load() load_to_fb, stack overflow ในการตรวจจับบุคคล (H7 stack ยกขึ้นเป็น ≥12 KB), และออฟเซ็ต USB descriptor สำหรับโหมดความเร็วสูงบน OpenMV 4 Plus

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

  • Arduino Portenta H7 — การเริ่มต้นใช้งานบอร์ดครั้งแรก (การกำหนดค่า clock/OSC/HSE ของ STM32H747, CMSIS headers, ADC, SDRAM, Arduino USB PID)

  • HIMAX HM01B0 — ไดรเวอร์กล้องขาวดำใหม่ (Bayer, clock oscillator ภายนอก)

  • OV7690 — ไดรเวอร์กล้องใหม่

  • LSM6DS3 IMU — OpenMV 4 / Portenta

การเปลี่ยนแปลง API ที่ส่งผลกระทบ

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

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

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

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

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

sensor.set_framerate() ถูกลบออก (minor)

stub sensor.set_framerate() ที่ไม่ทำงานถูกลบออก; การเรียกใช้งานตอนนี้จะเกิด AttributeError ให้ลบการเรียกใช้งานออกและควบคุม timing เฟรมผ่าน framesize/exposure แทน (set_framerate() ที่ทำงานได้ถูกนำกลับมาใน v4.0.2)

Commits: 705e98f91

TensorFlow ถูกยกเลิกบน OpenMV Cam M7 (minor)

TensorFlow (โมดูล tf) ถูกปิดใช้งานบน OpenMV Cam M7 / OpenMV 3 (ไม่พอดีอีกต่อไป) import tf บน M7 จะล้มเหลว — ใช้กล้องคลาส H7 สำหรับ TensorFlow (tf ถูกเปิดใช้งานใหม่บน F7 ใน v3.6.3)

Commits: 2ae875077

set_pixformat() / set_framesize() คืนค่า None (behavior)

sensor.set_pixformat() และ sensor.set_framesize() ตอนนี้คืนค่า None แทน True, และรูปแบบพิกเซลที่ไม่รองรับจะเกิด ValueError แทน assertion โค้ดที่ตรวจสอบค่าที่ส่งกลับ (เช่น if sensor.set_pixformat(...):) ต้องหยุดทำเช่นนั้น และโค้ดที่ catch AssertionError สำหรับรูปแบบที่ไม่รองรับต้อง catch ValueError แทน

Commits: f314ac4e7

lens_corr() / linpolar() / logpolar() ต้องการขนาดคู่ (behavior)

image.lens_corr() และ image.linpolar() / image.logpolar() ต้องการความกว้างและความสูงของภาพเป็นจำนวนคู่ และจะเกิดข้อผิดพลาดหากขนาดเป็นเลขคี่ ให้ crop หรือ resize ภาพให้เป็นขนาดคู่ก่อนเรียกเมธอดเหล่านี้

Commits: b36460a36, 2b26ca17b

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

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

  1. ลบการเรียก sensor.set_framerate() (การลบ set_framerate)

  2. ย้ายงาน TensorFlow ออกจาก OpenMV Cam M7 (การเปลี่ยนแปลง M7 TensorFlow)

  3. หยุดพึ่งพาค่าที่ส่งกลับของ set_pixformat() / set_framesize() และ catch ValueError สำหรับรูปแบบพิกเซลที่ไม่รองรับ (การเปลี่ยนแปลงค่าที่ส่งกลับ)

  4. ตรวจสอบให้แน่ใจว่าขนาดภาพเป็นเลขคู่ก่อน lens_corr() / linpolar() / logpolar() (ข้อกำหนดขนาดคู่)

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