v2.4.0¶
v2.4.0 viết lại find_lines() thành bộ phát hiện biến đổi Hough, thêm find_line_segments(), find_datamatrices() để giải mã ma trận dữ liệu, sensor.set_vsync_output(), đọc/ghi lát cắt ảnh, và nhiều kích thước khung hình tỉ lệ mới để đạt FPS cao hơn. find_lines(), match_descriptor(), và skip_frames() đã thay đổi — hãy đọc các thay đổi gây lỗi bên dưới.
Điểm nổi bật¶
find_lines()— được viết lại thành bộ phát hiện đường thẳng biến đổi Hough trả về các đối tượng đường thẳng (nay hoạt động trên RGB565, không chỉ thang xám).find_line_segments()— phát hiện các đoạn thẳng hữu hạn.find_datamatrices()— giải mã ma trận dữ liệu.sensor.set_vsync_output()— điều khiển VSYNC trên chân I/O để đồng bộ hóa camera.Thêm kích thước khung hình — nhiều độ phân giải tỉ lệ bổ sung để đạt FPS cao hơn.
Thay đổi gây lỗi:
find_lines(),match_descriptor(), vàskip_frames()đã thay đổi — xem phần thay đổi gây lỗi.
Tính năng mới¶
image.find_line_segments()— tìm các đoạn thẳng không vô hạn; các đối tượng đường thẳng có thêm bộ truy cập.length().image.find_datamatrices()— giải mã ma trận dữ liệu, cùng các tập lệnh ví dụ.sensor.set_vsync_output(pin)— xuất tín hiệu VSYNC trên chân GPIO để đồng bộ hóa camera (OpenMV 2 / OpenMV 3).Lát cắt ảnh — subscript ảnh / giao thức bộ đệm nay hỗ trợ đọc và ghi các lát cắt dữ liệu ảnh.
Thêm nhiều kết hợp độ phân giải / kích thước khung hình tỉ lệ bổ sung để hỗ trợ tốc độ khung hình cao hơn;
clock.fps()nay đặt lại bộ tích lũy mỗi 2 giây để FPS được báo cáo phản ánh tốc độ gần đây.
Các thay đổi và cải tiến khác¶
OV7725 được cửa sổ hóa thành QVGA khi độ phân giải ≤ VGA (ít bỏ khung hình hơn ở tốc độ chụp cao) và PLL được đặt thành 6× với đồng hồ ngoài giảm (OpenMV 2 48 MHz, OpenMV 3 54 MHz), thay đổi thời gian khung hình của cảm biến.
Sửa lỗi¶
Xử lý ảnh:
Sửa lỗi kích thước bộ đệm
compress_for_ide()(marker bắt đầu/kết thúc), giải mã QR (cùng các sửa lỗi thượng nguồn quirc về chỉ mục bitmap ô và giới hạn mẫu căn chỉnh).
Cảm biến và kết nối:
Giảm đồng hồ cảm biến OpenMV 2 để hoạt động với PLL cảm biến cao hơn (khởi tạo/đồng bộ camera) và làm cho WINC
socket.recvfrom()trả về kích thước thực sự nhận được (báo lỗi khi kích thước không dương thay vì trả về giá trị cũ).
Hỗ trợ phần cứng và bo mạch¶
Đầu ra VSYNC trên chân GPIO (OpenMV 2 / OpenMV 3) hỗ trợ
sensor.set_vsync_output().OpenMV 3 — kích hoạt UART1
pyb.UART.
Thay đổi API gây lỗi¶
Các thay đổi API hiển thị với người dùng giữa v2.3.0 và v2.4.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.
find_lines() được viết lại thành bộ phát hiện Hough (major)¶
image.find_lines() đã được viết lại thành bộ phát hiện biến đổi Hough. Nó không còn trả về danh sách các bộ giá trị (x1, y1, x2, y2) — mà trả về các đối tượng đường thẳng (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — và nay cũng hoạt động trên RGB565 (không chỉ thang xám). Tham số threshold thay đổi từ số thực 0.0–1.0 thành số nguyên tổng độ lớn cạnh, line.magnitude nay là số nguyên, và các từ khóa mới theta_margin / rho_margin được thêm vào. Hãy chuyển mã giải nén bộ giá trị sang đối tượng đường thẳng và tinh chỉnh lại threshold.
match_descriptor() trả về đối tượng kết khớp (minor)¶
image.match_descriptor() (ORB) nay trả về đối tượng kptmatch với các bộ truy cập .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() thay vì bộ giá trị 8 phần tử thông thường. Đối tượng vẫn có thể subscript/slice nên truy cập theo vị trí vẫn hoạt động, nhưng mã dùng isinstance(result, tuple) (hoặc các phương thức tuple) phải chuyển sang bộ truy cập mới.
Commits: e960546b6
sensor.skip_frames() nay dựa trên thời gian (behavior)¶
sensor.skip_frames() được làm lại để chấp nhận từ khóa time= (mặc định ~300 ms) và nay dựa trên thời gian theo mặc định thay vì chạy số khung hình cố định, dừng sớm khi hết thời gian. Các tập lệnh dựa vào số khung hình chính xác nên truyền số đếm tường minh và/hoặc đặt time= tương ứng.
Commits: a039b5d1c
Danh sách kiểm tra di chuyển¶
Để chuyển đổi sạch sẽ sang v2.4.0, công việc thông thường là:
Chuyển giải nén bộ giá trị
find_lines()sang đối tượng đường thẳng và tinh chỉnh lạithresholdkiểu số nguyên (việc viết lại find_lines).Dùng các bộ truy cập
kptmatchthay vì coi kết quảmatch_descriptor()là bộ giá trị (thay đổi match_descriptor).Truyền số đếm tường minh và/hoặc
time=chosensor.skip_frames()nếu bạn dựa vào số khung hình cố định (thay đổi skip_frames).
Tất cả các tập lệnh khác chạy không thay đổi.