v2.7.0

v2.7.0 modernizuje API automatycznego wzmocnienia / automatycznej ekspozycji / balansu bieli modułu sensor, przechodząc na jednostki fizyczne (dB / mikrosekundy), gruntownie przerabia korelację fazową find_displacement() (dodając obrót/skalę) oraz dodaje get_similarity() (SSIM), chrominvar() / illuminvar(), dodatkowe bufory ramek i bibliotekę MQTT. To duże, przełomowe wydanie — przeczytaj poniższe zmiany przełomowe.

Najważniejsze zmiany

  • Nowoczesne API sensoraset_auto_gain() / set_auto_exposure() / set_auto_whitebal() używają teraz dB / mikrosekund, wraz z odpowiadającymi get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • Korelacja fazowa — przerobione find_displacement() z obrotem / skalą oraz find_rotscale() / linpolar() / logpolar().

  • SSIM — podobieństwo strukturalne image.get_similarity().

  • Dodatkowe bufory rameksensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT — nowa biblioteka MQTT.

  • Przełomowe: zmieniły się API wzmocnienia/ekspozycji/balansu bieli sensora, find_displacement() / rozmiary ramek FFT, find_number(), narzędzia firmware WINC oraz z_rotation() dla AprilTag — zobacz zmiany przełomowe.

Nowe funkcje

  • Sensor — dodano sensor.get_gain_db(), sensor.get_exposure_us(), sensor.get_rgb_gain_db(), słowo kluczowe gain_db_ceiling w set_auto_gain(), obsługę hmirror / vflip dla MT9V034 oraz sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() dla dodatkowych buforów ramek w pamięci RAM.

  • Image — dodano remove_shadows(), min() / max() (różnicowanie ramek), get_similarity() (SSIM) wraz z przykładem podobieństwa strukturalnego, chrominvar() / illuminvar(), find_rotscale(), linpolar() / logpolar(), słowa kluczowe threshold / offset / invert w filtrach adaptacyjnych mean() / mode() / median() / midpoint(), len() / indeksowanie na obiekcie keypoints oraz akcesor .match() na obiekcie dopasowania punktów kluczowych.

  • Biblioteki / sieć — dodano bibliotekę MQTT (wraz z przykładem WiFi MQTT) oraz tryb network.WINC.MODE_BSP do programowania firmware WINC przez debugowy UART.

  • Przykłady — dodano niskoenergetyczne deep_sleep.py / stop_mode.py, zaawansowany przepływ optyczny oraz skrypty przykładowe liniowo/logarytmiczno-biegunowe; oprogramowanie układowe parsuje teraz przy starcie uart.ini, aby włączyć UART dla REPL.

Pozostałe zmiany i ulepszenia

  • get_regression() zyskało słowa kluczowe area_threshold / pixels_threshold oraz szybszą, odporną regresję (do podążania za linią / wyścigów); get_pixel() obsługuje teraz obrazy Bayera; dodano podwaliny pod STM32H7 (nagłówki CMSIS / HAL / bootloader — płytka H7 nie jest jeszcze używalna); zaktualizowano dołączone firmware WINC1500 (19.4.4 / 19.5.2).

Poprawki błędów

Obrazowanie:

  • Naprawiono błąd wyjścia poza zakres w przeszukiwaniu rombowym find_template(), uszkodzenie logpolar / linpolar oraz rozjeżdżanie się illuminvar() przy wartościach kolorów bliskich zeru.

Sensor i system:

  • Naprawiono błędy automatycznej regulacji wzmocnienia, przywrócono rozmiar MAIN_FB przy snapshot() (dzięki czemu copy_to_fb w innej rozdzielczości, zmiana rozmiaru FB oraz pooling przepływu optycznego znów działają), limit czasu gethostbyname w WINC, czyszczenie statusu pydfu w bootloaderze H7 oraz niskoenergetyczne tryby stop/standby.

Sprzęt i obsługa płytek

  • STM32H7 — podwaliny (CMSIS / HAL / bootloader); płytka OpenMV H7 nie jest jeszcze używalna w tym wydaniu.

  • WINC1500 — zaktualizowane dołączone firmware.

Przełomowe zmiany API

Widoczne dla użytkownika zmiany przełomowe API między v2.6.0 a v2.7.0. Zakres: moduły C dla Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.

Każda zmiana jest oznaczona swoim 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; ponownie sprawdź 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 hash commita prowadzi do jego diffa na GitHubie.

sensor.set_auto_gain() przerobione na dB (major)

sensor.set_auto_gain() nie przyjmuje już całkowitego słowa kluczowego value= i nie zwraca już True / False. Użyj sensor.set_auto_gain(False, gain_db=...) (wartość zmiennoprzecinkowa w dB), odczytaj ją z powrotem nowym sensor.get_gain_db() i opakuj wywołanie w try / except, ponieważ niepowodzenie zgłasza teraz ValueError.

Commity: b906c5f19

sensor.set_auto_exposure() przerobione na mikrosekundy (major)

sensor.set_auto_exposure() nie przyjmuje już całkowitego słowa kluczowego value= i nie zwraca już True / False. Użyj sensor.set_auto_exposure(False, exposure_us=...), odczytaj ją z powrotem nowym sensor.get_exposure_us() i obsłuż ValueError zgłaszany przy niepowodzeniu.

Commity: 7be0a7a18

find_displacement() / rozmiary ramek FFT gruntownie przerobione (major)

Korelacja fazowa została gruntownie przerobiona. image.find_displacement() zwraca teraz obiekt przesunięcia (z x_translation() / y_translation() — dawniej x_offset / y_offset — oraz rotation() / scale() i nowymi słowami kluczowymi logpolar / fix_rotation_scale); osobny obiekt rot-scale został usunięty, a dodano find_rotscale(). Stałe rozmiarów ramek FFT zostały zmienione/usunięte: sensor.B40x30 zostało całkowicie usunięte, a sensor.B64x32 / B64x64 zmieniono na pisane wielkimi literami sensor.B64X32 / B64X64 (z nowymi B128X64 / B128X128).

Commity: c78f91b42, 213396d09

sensor.set_auto_whitebal() przerobione na dB (minor)

sensor.set_auto_whitebal() zastąpiło swoje całkowite słowo kluczowe value=[r, g, b] przez rgb_gain_db=[r, g, b] (zmiennoprzecinkowe dB) i zwraca teraz None (zgłaszając ValueError przy niepowodzeniu) zamiast True / False. Aby odczytać wzmocnienia z powrotem, użyj nowego sensor.get_rgb_gain_db().

Commity: 30ecbdc4f

set_hmirror() / set_vflip() zwracają None (minor)

sensor.set_hmirror() i sensor.set_vflip() zwracają teraz None i zgłaszają ValueError przy niepowodzeniu, zamiast zwracać status True / False. Usuń wszelki kod rozgałęziający się na podstawie ich wartości zwracanej.

Commity: aeb023804

Narzędzia firmware WINC wymagają ścieżki do pliku (minor)

Narzędzia firmware network.WINC uległy zmianie: wlan.fw_dump() / wlan.fw_update() przyjmują teraz obowiązkowy argument ze ścieżką do pliku firmware, a WINC jest otwierany w trybie programowania (network.WINC(mode=...)). Zaktualizuj wywołania bez argumentów, aby przekazywały ścieżkę (np. wlan.fw_update("/winc_19_5_2.bin")).

Commity: fcc3b0b9c

image.find_number() wymaga ROI 28x28 (behavior)

image.find_number() (LeNet) wymaga teraz dokładnie ROI 28x28 mieszczącego się wewnątrz obrazu i w przeciwnym razie zgłasza błąd (zamiast działać na dowolnym/pełnoobrazowym ROI). Przekaż jawne roi=(x, y, 28, 28).

Commity: 4d09a13f3

Znak z_rotation() dla AprilTag odwrócony (behavior)

z_rotation() dla AprilTag (oraz powiązane rotation()) używa teraz prawoskrętnej konwencji układu współrzędnych, więc zwracany kąt jest zanegowany względem poprzednich wydań. Skrypty zależne od dawnego znaku muszą odwrócić wartość lub dostosować swoje obliczenia kąta.

Commity: 7673aaf74

Lista kontrolna migracji

Aby czysto przejść na v2.7.0, typowa praca obejmuje:

  1. Przeniesienie set_auto_gain() na gain_db= + get_gain_db() i obsługę ValueError (przeróbka automatycznego wzmocnienia).

  2. Przeniesienie set_auto_exposure() na exposure_us= + get_exposure_us() (przeróbka automatycznej ekspozycji).

  3. Aktualizacja find_displacement() do obiektu przesunięcia i zmiana nazw stałych rozmiarów ramek FFT (przeróbka find_displacement).

  4. Przeniesienie set_auto_whitebal() na rgb_gain_db= + get_rgb_gain_db() (przeróbka balansu bieli) oraz zaprzestanie sprawdzania wartości zwracanej przez set_hmirror() / set_vflip() (zmiana mirror/flip).

  5. Przekazanie ścieżki do firmware narzędziom fw_* WINC (zmiana narzędzi WINC).

  6. Przekazanie roi 28x28 do find_number() (zmiana find_number) oraz dostosowanie obliczeń kąta AprilTag do odwróconego znaku z_rotation() (zmiana z_rotation).

Wszystkie pozostałe skrypty działają bez zmian.