v2.1.0¶
v2.1.0 là một bản phát hành hiện đại hóa API toàn diện. Bản này thay thế bộ mô tả điểm đặc trưng FREAK bằng ORB, làm lại find_blobs() / biểu đồ tần suất / thống kê thành API dựa trên đối tượng, đổi tên các hàm tự động phơi sáng/khuếch đại/cân bằng trắng của sensor, thêm phát hiện mã QR và hiệu chỉnh ống kính OV7725, đồng thời hỗ trợ bo mạch OpenMV Cam M7 ban đầu. Nhiều API đã thay đổi — hãy đọc các thay đổi gây lỗi bên dưới.
Điểm nổi bật¶
Điểm đặc trưng ORB — bộ mô tả FREAK được thay thế bằng ORB (
find_keypoints()/match_descriptor()được làm lại).API đối tượng —
find_blobs(),get_histogram(),get_statistics()giờ đây trả về các đối tượng có bộ truy cập được đặt tên.Mã QR — thêm tính năng phát hiện
image.find_qrcodes().OpenMV Cam M7 — hỗ trợ bo mạch ban đầu.
Cảm biến —
set_auto_whitebal()/set_auto_gain()/set_auto_exposure()(đổi tên) vàset_lens_correction().Thay đổi gây lỗi: các API điểm đặc trưng/bộ mô tả, blob/biểu đồ tần suất/thống kê, hàm tự động của cảm biến, và một số API khác đã thay đổi — xem phần thay đổi gây lỗi.
Tính năng mới¶
OpenMV Cam M7 — thêm hỗ trợ bo mạch OpenMV 3 (M7) ban đầu.
Mã QR — thêm
image.find_qrcodes()cùng ví dụqrcodes.py.Điểm đặc trưng ORB — hệ thống bộ mô tả ORB mới:
find_keypoints()với tham sốcorner_detector(CORNER_FAST/CORNER_AGAST),max_keypoints/scale_factor;match_descriptor()với từ khóafilter_outliersvà ước tính góc quay; lưu/tải điểm đặc trưng.API đối tượng —
image.get_histogram()/get_statistics()/get_percentile()trả về các đối tượng biểu đồ tần suất/thống kê;find_blobs()trả về các đối tượng blob (rect()/cx()/cy()/code()/area()/pixels()) vớiarea_threshold/pixels_threshold/merge/margin/invertvàx_stride/y_stride.Cảm biến — thêm
sensor.set_lens_correction(enable, radi, coef)để bù bóng ống kính OV7725,sensor.set_windowing()nay cũng chấp nhận bộ giá trị(w, h)(tự động căn giữa), vàimage.Image(..., copy_to_fb=True)/load_image(copy_to_fb=True).Thêm các tập lệnh ví dụ về theo dõi màu sắc, SPI/I2C-slave trên Arduino, điểm đặc trưng, và biểu đồ tần suất/thống kê.
Các thay đổi và cải tiến khác¶
IDE nay có thể ngắt
main.pyđang chạy;find_blobs()/find_qrcodes()/get_statistics()nhanh hơn; ORB dùng khoảng cách Hamming popcount; hiệu chỉnh ống kính dùng ít RAM hơn; quy tắcudevtrên Linux ngăn ModemManager chiếm cổng nối tiếp.
Sửa lỗi¶
Camera và xử lý ảnh:
Sửa lỗi làm sạch/hủy hợp lệ bộ nhớ đệm DMA trên M7 (khung hình bị hỏng), đường thừa ở cuối mỗi khung hình, tràn bộ đệm JPEG, giải phóng bộ đệm khung hình khi
compress()thất bại, độ chính xác ORB / ROI / xử lý tập rỗng, và hình họcload_image(copy_to_fb=True).
Hệ thống:
Sửa hỗ trợ ADC trên F7, tên thanh ghi OV7725, thời gian bootloader/USB, sử dụng WFI khi chờ ảnh chụp, và làm cho ví dụ MJPEG streamer không chặn với thời gian chờ theo từng máy khách.
Hỗ trợ phần cứng và bo mạch¶
OpenMV Cam M7 (OpenMV 3) — hỗ trợ bo mạch ban đầu.
OV7725 — hỗ trợ hiệu chỉnh ống kính (bù bóng).
Thay đổi API gây lỗi¶
Các thay đổi API hiển thị với người dùng giữa v2.0.0 và v2.1.0. Phạm vi: các 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:
major — ảnh hưởng đến hầu hết các tập lệnh sử dụng tính năng đó; bạn cần chuyển đổi mã.
minor — API hẹp; chỉ ảnh hưởng đến các tập lệnh sử dụng nó.
behavior — API giống nhau, kết quả khác nhau; hãy 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 mã, hãy chuyển đến danh sách kiểm tra di chuyển ở cuối trang. Mỗi mã hash commit liên kết đến diff của nó trên GitHub.
FREAK được thay thế bằng ORB; API bộ mô tả được làm lại (major)¶
Bộ mô tả điểm đặc trưng FREAK đã bị xóa và thay thế bằng ORB: image.FREAK không còn tồn tại (dùng image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() không còn nhận tham số loại bộ mô tả đứng đầu (nó được suy ra từ đối tượng), match_descriptor() nay trả về bộ giá trị 8 phần tử (cx, cy, x, y, w, h, match_count, rotation) (phần tử cuối là số đếm thô, không phải phần trăm), và draw_keypoints() yêu cầu đối tượng keypoints thay vì danh sách (x, y, angle) thô. find_keypoints() nhận thêm corner_detector / max_keypoints / scale_factor với giá trị mặc định thay đổi.
Đổi tên hàm tự động của cảm biến (major)¶
sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() được đổi tên thành sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (tên cũ đã bị xóa). Mỗi hàm có thêm từ khóa tùy chọn value= để đặt giá trị thủ công thay vì tự động.
Commits: 1b22a2961
Biểu đồ tần suất / thống kê được làm lại thành API đối tượng (major)¶
Giao diện biểu đồ tần suất/thống kê được làm lại thành dạng đối tượng qua image.get_histogram() / get_statistics() / get_percentile() trả về các đối tượng biểu đồ/thống kê. Kết quả biểu đồ/thống kê dạng phẳng cũ và các phương thức bin_count / l_bin_count / a_bin_count / b_bin_count đã bị xóa (dùng len(histogram.bins()) v.v.).
Đổi tên scale trong find_features() (major)¶
image.find_features() (Haar) đổi tên từ khóa scale= thành scale_factor=. Hãy cập nhật các lệnh gọi find_features(cascade, scale=...) thành scale_factor=....
Commits: 96e4f770c
find_blobs() trả về đối tượng; find_markers() bị xóa (minor)¶
image.find_blobs() nay trả về các đối tượng blob với bộ truy cập được đặt tên (truy cập theo chỉ mục vẫn hoạt động để tương thích ngược), và image.find_markers() đã bị xóa — hãy dùng find_blobs(..., merge=True, margin=...) thay thế. Hàm gọi lại lọc blob màu nâng cao không còn được hỗ trợ.
Commits: af15ec6eb
img.copy_to_fb() được thay thế (minor)¶
Phương thức img.copy_to_fb() được thay thế bằng từ khóa copy_to_fb= trên image.Image / load_image(). Dùng image.Image(path, copy_to_fb=True) để tải ảnh lớn trực tiếp vào bộ đệm khung hình.
Commits: 1645ab94b
compress() từ chối chất lượng ngoài phạm vi (behavior)¶
image.compress() / compressed() nay phát sinh lỗi khi quality nằm ngoài phạm vi 1–100 thay vì âm thầm giới hạn lại. Hãy giới hạn quality vào 1–100 trước khi gọi. Ngoài ra, bộ đệm JPEG của OpenMV 3 đã được giảm từ 64 KB xuống 23000 byte, vì vậy các khung hình lớn có thể phát sinh lỗi hết bộ nhớ — hãy giảm chất lượng JPEG hoặc kích thước khung hình.
Zoom của lens_corr() nay hoạt động (behavior)¶
image.lens_corr() nay thực sự áp dụng tham số zoom (trước đây được phân tích nhưng không có hiệu lực), vì vậy đầu ra sẽ khác với các tập lệnh đã truyền zoom không mặc định. Hãy kiểm tra lại việc tinh chỉnh lens_corr().
Commits: d6b49adef
Danh sách kiểm tra di chuyển¶
Để chuyển đổi sạch sẽ sang v2.1.0, công việc thông thường là:
Thay
image.FREAKbằngimage.ORB, bỏ tham số loại bộ mô tả, và cập nhật giải nén bộ giá trịmatch_descriptor()/draw_keypoints()sang đối tượng keypoints (việc làm lại ORB).Đổi tên
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()thành dạngset_auto_*(việc đổi tên hàm tự động).Chuyển mã biểu đồ tần suất/thống kê sang các phương thức đối tượng (việc làm lại biểu đồ/thống kê).
Đổi tên
scale=trongfind_features()thànhscale_factor=(việc đổi tên find_features).Dùng bộ truy cập đối tượng blob và thay
find_markers()bằngfind_blobs(merge=True, ...)(thay đổi find_blobs); thayimg.copy_to_fb()bằng từ khóacopy_to_fb=(thay đổi copy_to_fb).Giới hạn chất lượng
compress()vào 1–100 và kiểm tra lại kích thước JPEG trên OpenMV 3 (thay đổi compress); tinh chỉnh lại zoom củalens_corr()(thay đổi lens_corr).
Tất cả các tập lệnh khác chạy không thay đổi.