v1.2.0

v1.2.0 là bản phát hành nền tảng rất lớn, xây dựng hầu hết API xử lý ảnh OpenMV cổ điển: các phương thức vẽ, các phép toán nhị phân / hình thái học, bộ mô tả điểm đặc trưng (FAST / FREAK / LBP), chuyển đổi màu sắcimage.statistics, đọc/ghi file BMP / PPM / JPEG, các module lcd, mjpeg, gif, và nhiệt mlx, camera OV7725, cùng nhiều điều khiển sensor. Một số hành vi cốt lõi của sensor đã thay đổi — hãy đọc các thay đổi phá vỡ bên dưới.

Điểm nổi bật

  • API Vẽdraw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints().

  • Nhị phân / hình thái họcbinary(), invert(), and/or/xor/..., erode() / dilate() / morph(), negate() / difference().

  • Điểm đặc trưng — bộ mô tả FAST / FREAK / LBP với match_descriptor() / save_descriptor() / load_descriptor().

  • Module mớilcd, mjpeg, gif (màu sắc), và nhiệt mlx.

  • Hỗ trợ camera OV7725; image.statistics; đọc/ghi file BMP/PPM/JPEG.

  • Thay đổi phá vỡ: hành vi của sensor.reset(), sensor.snapshot(), và sensor.set_pixformat() đã thay đổi — xem các thay đổi phá vỡ.

Tính năng mới

  • Vẽ — thêm image.draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() với các đối số từ khóa (màu sắc, độ dày, …).

  • Nhị phân / hình thái học — thêm image.binary(), invert(), and() / nand() / or() / nor() / xor() / xnor(), erode() / dilate() / morph(), negate() / difference(), pixels(), centroid(), orientation_radians() / orientation_degrees(), và width() / height() / format().

  • Điểm đặc trưng / bộ mô tả — trích xuất điểm đặc trưng FAST qua find_keypoints(), match_descriptor() thống nhất cùng save_descriptor() / load_descriptor() cho FREAK / LBP, thêm cascade Haar/LBP phát hiện mặt nghiêng.

  • Màu sắc / thống kêimage.statistics và các hàm chuyển đổi màu sắc (rgb_to_lab / lab_to_rgb / rgb_to_grayscale / grayscale_to_rgb).

  • Đọc/ghi file — tải và lưu BMP / PPM (P2/P3/P5/P6) / JPEG (bao gồm JPEG thang xám và lấy mẫu chroma 4:2:0 / 4:2:2).

  • Module — module lcd mới (LCD shield), mjpeg (ghi video), gif màu sắc (với Gif.loop()), và module camera nhiệt mlx, mỗi module có kèm tập lệnh ví dụ.

  • Sensor — thêm sensor.get_id() (+ hằng số PID OV9650/OV2640/OV7725), sensor.set_special_effect() (hằng số SDE_*), sensor.set_image_filter() (FILTER_BW / FILTER_SKIN), kích thước khung hình HQVGA, và image.set_pixel(x, y, …).

  • WiFi — thêm driver WiFi ATWINC1500 và nền tảng BSP OpenMV 1/2, cùng ví dụ BLE.

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

  • Bộ đệm khung hình giờ được nén JPEG trước khi truyền đến OpenMV IDE (băng thông thấp hơn); nén JPEG được thực hiện tại chỗ; H/V zoom OV7725 cho phép co giãn tùy ý; phát hiện khuôn mặt Haar được cải thiện (nhanh hơn) chạy ở QVGA.

Sửa lỗi

Xử lý ảnh:

  • Đã sửa: tính toán integral-image, lỗi hỏng bộ lọc median(), tính toán centroid, các bộ lọc da / đen trắng RGB trên đầu vào RGB, và đọc/ghi BMP/PPM thang xám nhanh hơn.

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

  • Đã sửa: bộ định thời pyb.Servo (Servo giờ hoạt động), độ phân giải HQVGA, độ tin cậy khởi tạo thẻ SD, tái khởi tạo bộ nhớ sau soft-reset, và chạy lại REPL khi không có tập lệnh.

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

  • Cảm biến camera OV7725.

  • LCD shield (module lcd), camera nhiệt mlx, và nền tảng WiFi ATWINC1500.

Thay đổi phá vỡ API

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

Cả ba thay đổi phá vỡ đều là thay đổi behavior đối với các hàm sensor cốt lõi (API giống nhau, hành vi khác nhau) — hãy kiểm tra lại các tập lệnh bị ảnh hưởng. Mỗi hash commit liên kết đến diff trên GitHub. (Phần lớn bản phát hành này là API mới được xây dựng trong phạm vi v1.1→v1.2 và do đó là bổ sung, không phá vỡ.)

sensor.reset() không còn áp dụng cấu hình mặc định (behavior)

sensor.reset() không còn áp dụng cấu hình mặc định tích hợp (pixformat / framesize / framerate / gain / contrast / brightness / saturation). Các tập lệnh dựa vào reset() để tạo ra cấu hình mặc định sử dụng được phải gọi tường minh sensor.set_pixformat()sensor.set_framesize() (và các cài đặt khác) sau reset().

Commits: d1e782df3

sensor.snapshot() phát sinh ngoại lệ khi hết thời gian (behavior)

sensor.snapshot() giờ phát sinh RuntimeError("Sensor Timeout!!") khi cảm biến hết thời gian thay vì treo vô thời hạn. Hãy bọc snapshot() trong try / except RuntimeError nếu bạn cần xử lý tình huống hết thời gian.

Commits: e3f41d674

sensor.set_pixformat() phát sinh ngoại lệ với định dạng không được hỗ trợ (behavior)

sensor.set_pixformat() giờ phát sinh ngoại lệ khi nhận định dạng điểm ảnh không được hỗ trợ thay vì trả về False. Code kiểm tra giá trị trả về False phải bắt ngoại lệ thay thế.

Commits: e0c5822c2

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

Để port sạch sang v1.2.0, công việc điển hình là:

  1. Gọi tường minh sensor.set_pixformat() / sensor.set_framesize() sau sensor.reset() (thay đổi reset).

  2. Bọc sensor.snapshot() trong try / except RuntimeError nếu bạn cần xử lý hết thời gian của cảm biến (thay đổi snapshot).

  3. Bắt ngoại lệ từ sensor.set_pixformat() thay vì kiểm tra False (thay đổi set_pixformat).

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