v4.5.3

v4.5.3 là một bản phát hành lớn: tính năng lấy nét tự động OV5640, vẽ đường kẻ có khử răng cưa, bộ giải mã JPEG phần cứng được tích hợp chính thức, cải tiến đáng kể năng lực cho i.MX RT (RT1060), và nhiều bản sửa lỗi camera/ISP. Một số phương thức ảnh ít dùng đã bị xóa và một số API ISP/hiển thị đã thay đổi — xem các thay đổi gây phá vỡ bên dưới.

Điểm nổi bật

  • Lấy nét tự động OV5640 — được kích hoạt trên OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)), kèm theo ví dụ minh họa.

  • draw_line() có khử răng cưa và bộ giải mã JPEG phần cứng STM32 được tích hợp chính thức (giải nén JPEG nhanh hơn).

  • OpenMV RT1060 đã được bổ sung ulab, các thao tác ISP, set_framerate() / set_frame_callback(), bộ đệm khung hình lớn hơn nhiều và driver CAN.

  • Phá vỡ: Image.div() / cartoon() / mul() đã bị xóa và một số API ISP/hiển thị đã thay đổi — xem phần thay đổi gây phá vỡ.

Tính năng mới

  • Lấy nét tự động OV5640 — firmware lấy nét tự động được kích hoạt trên OPENMV4, OPENMV4P và OPENMV RT1060; kích hoạt bằng sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS). Một ví dụ mới 07-Sensor-Control/autofocus.py đã được thêm vào.

  • Vẽ đường kẻ có khử răng cưadraw_line() đã được bổ sung tính năng khử răng cưa.

  • Bộ điều khiển màn hình SPI tùy chỉnhSPIDisplay giờ chấp nhận từ khóa controller= và cung cấp hook bus_write cho các chuỗi lệnh/khởi tạo tùy chỉnh.

  • Nâng cấp Image.ccm() — giờ chấp nhận ma trận lồng nhau 3x3 / 4x3 / 3x4 / 4x4 và mảng ulab (với hàng offset tùy chọn theo từng kênh); đã thêm ví dụ hiệu chỉnh màu sắc.

  • Chụp ảnh JPEG trên i.MX RT — hỗ trợ chụp sensor.JPEG trên Arduino Portenta/Nicla Vision/Giga, cùng với set_framerate()set_frame_callback() trên port mimxrt.

  • Xác thực mô hình (ML) TFLite — các mô hình (ML) giờ mang theo mã băm thứ tự toán tử và kích thước tập toán tử.

  • WiFi — đã thêm các hằng số chế độ bảo mật CYW43; các tập lệnh ví dụ điều khiển board mới cho i.MX RT (Pin/ADC/CAN/I2C/PWM/SPI/UART/...).

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

  • MicroPython cập nhật lên 1.22; CMSIS cập nhật lên 5.9.0.

  • Bộ giải mã JPEG phần cứng STM32 được tích hợp chính thức — giải nén JPEG nhanh hơn trên bộ giải mã tích hợp sẵn trên chip.

  • Tối ưu hóa Image.invert() / negate() và các thao tác ảnh nhị phân/toán học (CMSIS intrinsics).

  • Các thư viện rpcvl53l1x đã được làm cho có thể di chuyển được (sử dụng machine / time thay vì pyb), nên chúng chạy được trên các port không phải STM32.

  • Memcpy bộ đệm khung hình được tăng tốc bằng DMA trên OpenMV H7 / H7 Plus / Pro / Pure Thermal và Arduino Giga / Nicla Vision / Portenta H7; STM32 giờ quét thiết bị I2C một lần mỗi lần quét để khởi động nhanh hơn.

Sửa lỗi

Camera và cảm biến:

  • Đã sửa XCLK camera STM32 về chu kỳ nhiệm vụ 50% đúng và một lỗi khi tần số clock camera được đặt về không; đã sửa lỗi cắt xén+hoán vị Bayer, dịch màu YUV422 và set_windowing() trên port mimxrt.

  • Đã sửa lỗi dò chip-ID GC2145 và hmirror/vflip trên các giá đỡ được xoay; đã sửa lỗi PAJ6100 trên RT1062 và tràn bộ đệm SPI PixArt PAJ7620/PAW3902.

Xử lý ảnh:

  • Đã sửa lỗi cắt xén ROI find_rects(), cắt cụt offset phân số morph(), mặc định độ tương phản/độ sáng image.gamma(), offset A/B get_threshold() trên RGB565, và giải mã JPEG của kích thước không phải bội số của 8.

Hệ thống và thư viện:

  • machine.LED.value() không có đối số giờ trả về trạng thái LED thay vì xóa nó; đã sửa lỗi deinit SPI SSEL trên bus dùng chung, machine.deepsleep() trên RT1062, crash TF khi thiếu toán tử, và tự kích hoạt NIC WINC1500/ninaw10 khi connect().

Phần cứng và hỗ trợ board

  • OpenMV RT1060 — đã kích hoạt ulab và các thao tác ISP, bộ đệm khung hình lớn hơn (10M→20M) / fb_alloc (2M→11M), khôi phục driver CAN, thêm heap.

  • Arduino GIGA — hỗ trợ camera GC2145, với tự động phát hiện GC2145/OV5640 (chúng dùng chung địa chỉ I2C).

  • i.MX RT — hỗ trợ chụp sensor.JPEG.

Các thay đổi API gây phá vỡ

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

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

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

  • behavior — cùng API, kết quả khác; kiểm tra lại các tập lệnh đã 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 code, hãy chuyển đến danh sách kiểm tra di chuyển ở cuối. Mỗi mã hash commit liên kết đến diff của nó trên GitHub.

Các phương thức ảnh đã bị xóa (minor)

Image.div(), Image.cartoon() (và ví dụ của nó) và Image.mul() đã bị xóa.

Commits: 7c932602e, 055a468b8, 4fe7fb63b

API module hiển thị (minor)

Fallback tên module udisplay cũ đã bị xóa — module chỉ được đăng ký là display. Các phương thức dsi_write() / dsi_read() chỉ dành cho DSI đã được thay thế bằng bus_write() / bus_read(), giờ có sẵn trên tất cả các bộ điều khiển màn hình.

Commits: 7df6694c3, 7d1f378a0

Thay đổi API MQTT và tf.regression (minor)

MQTTClient của thư viện mqtt đã được làm lại: port giờ là bắt buộc, các từ khóa constructor mới ssl_params / callback và đối số timeout trên connect() đã được thêm, các giá trị mặc định cũ ssl= / port=0 đã bị xóa, và check_msg() giờ không chặn. tf.regression() đã được viết lại — chữ ký của nó giờ là regression(model, array) và xử lý các mô hình (ML) 1D/2D/3D và lượng tử hóa (int8).

Commits: d12874c63, c5ec576c1

Thay đổi hành vi ISP / cảm biến (behavior)

Image.awb() đã được làm lại — gray-world (mặc định) và white-patch (max=True) giờ được chỉ rõ, và đối số max cùng các đối số gamma / contrast / brightness của Image.gamma() giờ chỉ là keyword (các lệnh gọi theo vị trí phải được cập nhật). Hoán vị ảnh giờ bị vô hiệu hóa cho YUV422 (trước đây tạo ra đầu ra không đúng) và dịch màu YUV422 đã được sửa để khớp với Bayer. Đường dẫn JPEG STM32 giờ đưa ra lỗi khi không khớp kích thước JPEG thay vì tạo ảnh bị hỏng, và chế độ WiFi AP giờ áp dụng chế độ bảo mật mặc định trên các port STM32 và i.MX RT.

Commits: 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

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

Để chuyển đổi sạch sang v4.5.3, công việc thông thường là:

  1. Ngừng sử dụng Image.div() / cartoon() / mul() (các phương thức đã bị xóa).

  2. Import module hiển thị là display và chuyển dsi_write/ dsi_read sang bus_write/bus_read (thay đổi API hiển thị).

  3. Cập nhật cấu tạo MQTTClient (port là bắt buộc; ssl_params/callback) và các lệnh gọi tf.regression() bất kỳ (thay đổi API thư viện).

  4. Truyền awb() maxgamma() gamma/contrast/ brightness dưới dạng đối số keyword, và kiểm tra lại các giả định về YUV422/hoán vị và bảo mật chế độ AP (thay đổi ISP/cảm biến).