v2.7.0

v2.7.0 hiện đại hóa API độ khuếch đại tự động / thời gian phơi sáng tự động / cân bằng trắng của sensor sang đơn vị vật lý (dB / micro giây), cải tiến toàn diện tương quan pha find_displacement() (thêm xoay/tỷ lệ), và bổ sung get_similarity() (SSIM), chrominvar() / illuminvar(), bộ đệm khung hình bổ sung, và thư viện MQTT. Đây là bản phát hành gây lỗi lớn — hãy đọc các thay đổi gây lỗi bên dưới.

Điểm nổi bật

  • API cảm biến hiện đạiset_auto_gain() / set_auto_exposure() / set_auto_whitebal() nay sử dụng dB / micro giây, với các hàm tương ứng get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • Tương quan pha — cải tiến find_displacement() với xoay / tỷ lệ và find_rotscale() / linpolar() / logpolar().

  • SSIMimage.get_similarity() đo độ tương đồng cấu trúc.

  • Bộ đệm khung hình bổ sungsensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT — một thư viện MQTT mới.

  • Thay đổi gây lỗi: API độ khuếch đại/thời gian phơi sáng/cân bằng trắng của cảm biến, find_displacement() / kích thước khung hình FFT, find_number(), công cụ firmware WINC, và z_rotation() của AprilTag đều đã thay đổi — xem các thay đổi gây lỗi.

Tính năng mới

  • Cảm biến — đã thêm sensor.get_gain_db(), sensor.get_exposure_us(), sensor.get_rgb_gain_db(), từ khóa gain_db_ceiling trên set_auto_gain(), hỗ trợ hmirror / vflip cho MT9V034, và sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() cho bộ đệm khung hình bổ sung trong RAM.

  • Ảnh — đã thêm remove_shadows(), min() / max() (so sánh khung hình), get_similarity() (SSIM) với ví dụ về độ tương đồng cấu trúc, chrominvar() / illuminvar(), find_rotscale(), linpolar() / logpolar(), các từ khóa threshold / offset / invert trên các bộ lọc thích ứng mean() / mode() / median() / midpoint(), len() / lập chỉ mục trên đối tượng điểm đặc trưng, và bộ truy cập .match() trên đối tượng khớp điểm đặc trưng.

  • Thư viện / mạng — đã thêm thư viện MQTT (với ví dụ WiFi MQTT) và chế độ network.WINC.MODE_BSP để lập trình firmware WINC qua UART gỡ lỗi.

  • Ví dụ — đã thêm các tập lệnh tiêu thụ điện thấp deep_sleep.py / stop_mode.py, dòng quang học nâng cao, và ví dụ về tọa độ cực tuyến tính/log; firmware nay phân tích uart.ini khi khởi động để kích hoạt REPL UART.

Các thay đổi và cải tiến khác

  • get_regression() đã được bổ sung các từ khóa area_threshold / pixels_threshold và hồi quy mạnh mẽ nhanh hơn (cho line-following / racing); get_pixel() nay hỗ trợ ảnh Bayer; đã thêm nền tảng STM32H7 (header CMSIS / HAL / bootloader — bo mạch H7 chưa sử dụng được); cập nhật firmware WINC1500 kèm theo (19.4.4 / 19.5.2).

Sửa lỗi

Hình ảnh:

  • Đã sửa lỗi truy cập ngoài biên trong tìm kiếm diamond của find_template(), lỗi gây hỏng logpolar / linpolar, và illuminvar() hoạt động sai với các giá trị màu gần không.

Cảm biến và hệ thống:

  • Đã sửa các lỗi kiểm soát độ khuếch đại tự động, khôi phục kích thước MAIN_FB trên snapshot() (để copy_to_fb ở độ phân giải khác, thay đổi kích thước FB, và gộp dòng quang học hoạt động lại), thời gian chờ gethostbyname của WINC, lệnh pydfu clear-status trên bootloader H7, và các chế độ tiết kiệm điện stop/standby.

Phần cứng và hỗ trợ bo mạch

  • STM32H7 — nền tảng (CMSIS / HAL / bootloader); bo mạch OpenMV H7 chưa sử dụng được trong bản phát hành này.

  • WINC1500 — cập nhật firmware kèm theo.

Các thay đổi API gây lỗi

Các thay đổi API hiển thị với người dùng giữa v2.6.0 và v2.7.0. Phạm vi: C-module Python trong modules/ và thư viện Python trong scripts/libraries/.

Mỗi thay đổi được gắn thẻ theo mức độ ảnh hưởng:

  • major — ảnh hưởng đến hầu hết các tập lệnh sử dụng tính năng này; bạn cần chỉnh sửa mã.

  • minor — API hẹp; chỉ ảnh hưởng đến các tập lệnh sử dụng nó.

  • behavior — cùng API, kết quả khác; hãy kiểm tra lại các tập lệnh đã được tinh chỉnh.

Các thay đổi được nhóm theo mức độ ảnh hưởng theo thứ tự đó. Nếu bạn chỉ muốn chuyển đổi mã của mình, hãy chuyển đến danh sách kiểm tra di chuyển ở cuối. Mỗi hash commit liên kết đến diff của nó trên GitHub.

sensor.set_auto_gain() cải tiến sang dB (major)

sensor.set_auto_gain() không còn chấp nhận từ khóa số nguyên value= và không còn trả về True / False. Hãy sử dụng sensor.set_auto_gain(False, gain_db=...) (giá trị dB kiểu float), đọc lại bằng sensor.get_gain_db() mới, và bọc lệnh gọi trong try / except vì lỗi nay phát sinh ValueError.

Commits: b906c5f19

sensor.set_auto_exposure() cải tiến sang micro giây (major)

sensor.set_auto_exposure() không còn chấp nhận từ khóa số nguyên value= và không còn trả về True / False. Hãy sử dụng sensor.set_auto_exposure(False, exposure_us=...), đọc lại bằng sensor.get_exposure_us() mới, và xử lý ValueError phát sinh khi thất bại.

Commits: 7be0a7a18

find_displacement() / kích thước khung hình FFT được cải tiến toàn diện (major)

Tương quan pha đã được cải tiến toàn diện. image.find_displacement() nay trả về đối tượng displacement (với x_translation() / y_translation() — trước đây là x_offset / y_offset — cùng rotation() / scale() và các từ khóa mới logpolar / fix_rotation_scale); đối tượng rot-scale riêng đã bị xóa và find_rotscale() được thêm vào. Các hằng số kích thước khung hình FFT đã được đổi tên/xóa: sensor.B40x30 đã bị xóa hoàn toàn, và sensor.B64x32 / B64x64 được đổi tên thành chữ hoa sensor.B64X32 / B64X64 (cùng với các hằng số mới B128X64 / B128X128).

Commits: c78f91b42, 213396d09

sensor.set_auto_whitebal() cải tiến sang dB (minor)

sensor.set_auto_whitebal() đã thay thế từ khóa số nguyên value=[r, g, b] bằng rgb_gain_db=[r, g, b] (dB kiểu float) và nay trả về None (phát sinh ValueError khi thất bại) thay vì True / False. Hãy sử dụng sensor.get_rgb_gain_db() mới để đọc lại các giá trị độ khuếch đại.

Commits: 30ecbdc4f

set_hmirror() / set_vflip() trả về None (minor)

sensor.set_hmirror()sensor.set_vflip() nay trả về None và phát sinh ValueError khi thất bại thay vì trả về trạng thái True / False. Hãy xóa bất kỳ mã nào rẽ nhánh dựa trên giá trị trả về của chúng.

Commits: aeb023804

Công cụ firmware WINC yêu cầu đường dẫn tệp (minor)

Công cụ firmware network.WINC đã thay đổi: wlan.fw_dump() / wlan.fw_update() nay nhận đối số đường dẫn tệp firmware bắt buộc và WINC được mở ở chế độ lập trình (network.WINC(mode=...)). Hãy cập nhật các lệnh gọi không có đối số để truyền đường dẫn (ví dụ: wlan.fw_update("/winc_19_5_2.bin")).

Commits: fcc3b0b9c

image.find_number() yêu cầu ROI 28x28 (behavior)

image.find_number() (LeNet) nay yêu cầu ROI chính xác 28x28 nằm trong ảnh và phát sinh lỗi nếu không (thay vì chạy trên ROI tùy ý/toàn ảnh). Hãy truyền roi=(x, y, 28, 28) tường minh.

Commits: 4d09a13f3

Dấu z_rotation() của AprilTag bị đảo (behavior)

z_rotation() (và rotation() liên quan) của AprilTag nay sử dụng quy ước tọa độ thuận tay phải, do đó góc trả về bị đảo dấu so với các bản phát hành trước. Các tập lệnh phụ thuộc vào dấu cũ phải đảo ngược giá trị hoặc điều chỉnh phép tính góc.

Commits: 7673aaf74

Danh sách kiểm tra di chuyển

Để chuyển đổi sạch sang v2.7.0, công việc điển hình là:

  1. Chuyển đổi set_auto_gain() sang gain_db= + get_gain_db() và xử lý ValueError (cải tiến auto-gain).

  2. Chuyển đổi set_auto_exposure() sang exposure_us= + get_exposure_us() (cải tiến auto-exposure).

  3. Cập nhật find_displacement() sang đối tượng displacement và đổi tên các hằng số kích thước khung hình FFT (cải tiến toàn diện find_displacement).

  4. Chuyển đổi set_auto_whitebal() sang rgb_gain_db= + get_rgb_gain_db() (cải tiến cân bằng trắng) và dừng kiểm tra giá trị trả về của set_hmirror() / set_vflip() (thay đổi mirror/flip).

  5. Truyền đường dẫn firmware cho công cụ WINC fw_* (thay đổi công cụ WINC).

  6. Truyền roi 28x28 cho find_number() (thay đổi find_number) và điều chỉnh phép tính góc AprilTag cho dấu z_rotation() bị đảo (thay đổi z_rotation).

Tất cả các tập lệnh khác chạy không thay đổi.