v2.4.0¶
v2.4.0 przepisuje find_lines() jako detektor oparty na transformacie Hougha, dodaje find_line_segments(), dekodowanie data matrix find_datamatrices(), sensor.set_vsync_output(), odczyt/zapis wycinków obrazu oraz wiele nowych skalowanych rozmiarów ramki dla wyższej liczby FPS. Funkcje find_lines(), match_descriptor() i skip_frames() uległy zmianie — przeczytaj poniżej o zmianach łamiących.
Najważniejsze zmiany¶
find_lines()— przepisana jako detektor linii oparty na transformacie Hougha, zwracający obiekty linii (działa teraz na RGB565, nie tylko na skali szarości).find_line_segments()— wykrywanie skończonych odcinków linii.find_datamatrices()— dekodowanie data matrix.sensor.set_vsync_output()— wystawienie VSYNC na pin I/O w celu synchronizacji kamery.Więcej rozmiarów ramki — wiele dodatkowych skalowanych rozdzielczości dla wyższej liczby FPS.
Zmiana łamiąca:
find_lines(),match_descriptor()iskip_frames()uległy zmianie — zobacz zmiany łamiące.
Nowe funkcje¶
image.find_line_segments()— wyszukiwanie nieskończonych odcinków linii; obiekty linii zyskały akcesor.length().image.find_datamatrices()— dekodowanie data matrix, z przykładowymi skryptami.sensor.set_vsync_output(pin)— wystawienie sygnału VSYNC na pin GPIO w celu synchronizacji kamery (OpenMV 2 / OpenMV 3).Wycinki obrazu — indeksowanie obrazu / protokół bufora obsługują teraz odczyt i zapis wycinków danych obrazu.
Dodano wiele dodatkowych kombinacji skalowanej rozdzielczości / rozmiaru ramki, aby umożliwić wyższe liczby klatek;
clock.fps()resetuje teraz swoje akumulatory co 2 s, dzięki czemu raportowane FPS odzwierciedla bieżącą liczbę klatek.
Pozostałe zmiany i usprawnienia¶
OV7725 jest okienkowany do QVGA, gdy rozdzielczość wynosi ≤ VGA (mniej pominiętych ramek przy wysokiej szybkości przechwytywania), a jego PLL ustawiono na 6× ze zmniejszonym zegarem zewnętrznym (OpenMV 2 48 MHz, OpenMV 3 54 MHz), co zmienia taktowanie ramek sensora.
Poprawki błędów¶
Przetwarzanie obrazu:
Naprawiono błąd rozmiaru bufora w
compress_for_ide()(znacznik start/end), dekodowanie QR (oraz poprawki indeksowania bitmapy komórek i granic wzorca wyrównania w upstream quirc).
Sensor i łączność:
Obniżono zegar sensora OpenMV 2, aby współpracował z wyższym PLL sensora (inicjalizacja/synchronizacja kamery), oraz sprawiono, że WINC
socket.recvfrom()zwraca rzeczywisty odebrany rozmiar (zgłaszając błąd przy rozmiarze niedodatnim zamiast zwracać nieaktualną wartość).
Sprzęt i obsługa płytek¶
Wyjście VSYNC na pinie GPIO (OpenMV 2 / OpenMV 3) wspierające
sensor.set_vsync_output().OpenMV 3 — włączono
pyb.UARTUART1.
Zmiany łamiące API¶
Widoczne dla użytkownika zmiany łamiące API między v2.3.0 a v2.4.0. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.
Każda zmiana jest oznaczona jej wpływem:
major — dotyczy większości skryptów korzystających z danej funkcji; konieczne będzie przeniesienie kodu.
minor — wąskie API; dotyczy tylko skryptów, które z niego korzystały.
behavior — to samo API, inne wyniki; sprawdź ponownie dostrojone skrypty.
Zmiany są pogrupowane według wpływu w tej kolejności. Jeśli chcesz po prostu przenieść swój kod, przejdź do listy kontrolnej migracji na końcu. Każdy skrót commita prowadzi do jego diffa na GitHubie.
find_lines() przepisana jako detektor Hougha (major)¶
image.find_lines() została przepisana jako detektor oparty na transformacie Hougha. Nie zwraca już listy krotek (x1, y1, x2, y2) — zwraca obiekty linii (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — i działa teraz również na RGB565 (nie tylko na skali szarości). Argument threshold zmienił się z liczby zmiennoprzecinkowej 0.0–1.0 na całkowitą sumę magnitudy krawędzi, line.magnitude jest teraz liczbą całkowitą, a także dodano nowe słowa kluczowe theta_margin / rho_margin. Przenieś kod rozpakowujący krotki na obiekty linii i ponownie dostrój threshold.
match_descriptor() zwraca obiekt dopasowania (minor)¶
image.match_descriptor() (ORB) zwraca teraz obiekt kptmatch z akcesorami .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() zamiast zwykłej 8-elementowej krotki. Obiekt nadal można indeksować/wycinać, więc indeksowanie pozycyjne nadal działa, ale kod, który używał isinstance(result, tuple) (lub metod krotek), musi korzystać z nowych akcesorów.
Commity: e960546b6
sensor.skip_frames() jest teraz oparta na czasie (behavior)¶
sensor.skip_frames() została przerobiona tak, aby przyjmować słowo kluczowe time= (domyślnie ~300 ms), i jest teraz domyślnie oparta na czasie, zamiast wykonywać stałą liczbę ramek, kończąc działanie wcześniej po upływie czasu. Skrypty, które polegały na dokładnej liczbie ramek, powinny przekazać jawną liczbę i/lub odpowiednio ustawić time=.
Commity: a039b5d1c
Lista kontrolna migracji¶
Dla czystego przeniesienia do v2.4.0 typowa praca obejmuje:
Przenieś rozpakowywanie krotek
find_lines()na obiekty linii i ponownie dostrój całkowitythreshold(przepisanie find_lines).Używaj akcesorów
kptmatchzamiast traktować wynikimatch_descriptor()jako krotkę (zmiana match_descriptor).Przekaż jawną liczbę i/lub
time=dosensor.skip_frames(), jeśli polegałeś na stałej liczbie ramek (zmiana skip_frames).
Wszystkie pozostałe skrypty działają bez zmian.