v1.2.0¶
v1.2.0 to fundamentalne, bardzo duże wydanie, które rozbudowuje większość klasycznego API obrazowania OpenMV: metody rysowania, operacje binarne / morfologiczne, deskryptory punktów kluczowych (FAST / FREAK / LBP), konwersje kolorów oraz image.statistics, wejście/wyjście plików BMP / PPM / JPEG, moduły lcd, mjpeg, gif oraz termiczny mlx, kamerę OV7725 i wiele elementów sterujących sensor. Część podstawowego zachowania sensor uległa zmianie — przeczytaj poniższe zmiany powodujące niezgodność.
Najważniejsze zmiany¶
API rysowania —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().Operacje binarne / morfologiczne —
binary(),invert(),and/or/xor/...,erode()/dilate()/morph(),negate()/difference().Punkty kluczowe — deskryptory FAST / FREAK / LBP z
match_descriptor()/save_descriptor()/load_descriptor().Nowe moduły —
lcd,mjpeg,gif(kolorowy) oraz termicznymlx.Obsługa kamery OV7725;
image.statistics; wejście/wyjście plików BMP/PPM/JPEG.Niezgodność: zmieniło się zachowanie
sensor.reset(),sensor.snapshot()orazsensor.set_pixformat()— zobacz zmiany powodujące niezgodność.
Nowe funkcje¶
Rysowanie — dodano
image.draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints()z argumentami nazwanymi (kolor, grubość, …).Operacje binarne / morfologiczne — dodano
image.binary(),invert(),and()/nand()/or()/nor()/xor()/xnor(),erode()/dilate()/morph(),negate()/difference(),pixels(),centroid(),orientation_radians()/orientation_degrees()orazwidth()/height()/format().Punkty kluczowe / deskryptory — ekstrakcja punktów kluczowych FAST za pomocą
find_keypoints(), ujednoliconematch_descriptor()orazsave_descriptor()/load_descriptor()dla FREAK / LBP, a także kaskada Haar/LBP dla twarzy z profilu.Kolor / statystyki —
image.statisticsoraz funkcje konwersji kolorów (rgb_to_lab/lab_to_rgb/rgb_to_grayscale/grayscale_to_rgb).Wejście/wyjście plików — wczytywanie i zapis BMP / PPM (P2/P3/P5/P6) / JPEG (w tym JPEG w skali szarości oraz podpróbkowanie chrominancji 4:2:0 / 4:2:2).
Moduły — nowy
lcd(nakładka LCD),mjpeg(nagrywanie wideo), kolorowygif(zGif.loop()) oraz moduły kamery termicznejmlx, każdy z przykładowymi skryptami.Sensor — dodano
sensor.get_id()(+ stałe PID OV9650/OV2640/OV7725),sensor.set_special_effect()(stałe SDE_*),sensor.set_image_filter()(FILTER_BW / FILTER_SKIN), rozmiar ramkiHQVGAorazimage.set_pixel(x, y, …).WiFi — dodano sterownik WiFi ATWINC1500 oraz podstawy BSP dla OpenMV 1/2, a także przykład BLE.
Pozostałe zmiany i ulepszenia¶
Bufor ramki jest teraz kompresowany do JPEG przed przesłaniem strumieniowym do OpenMV IDE (mniejsze zużycie pasma); kompresja JPEG odbywa się w miejscu; powiększenie poziome/pionowe OV7725 umożliwia dowolne skalowanie; ulepszone (szybsze) wykrywanie twarzy metodą Haara działające przy QVGA.
Poprawki błędów¶
Obrazowanie:
Naprawiono obliczanie obrazu całkowego, uszkodzenia filtra
median(), obliczanie centroidu, filtry skóry RGB / czarno-białe na wejściu RGB oraz przyspieszono odczyt/zapis BMP/PPM w skali szarości.
Sensor i system:
Naprawiono liczniki czasu
pyb.Servo(Servo teraz działa), rozdzielczość HQVGA, niezawodność inicjalizacji karty SD, ponowną inicjalizację pamięci masowej po miękkim resecie oraz ponowne uruchamianie REPL, gdy nie ma żadnego skryptu.
Sprzęt i obsługa płytek¶
Sensor kamery OV7725.
Nakładka LCD (moduł
lcd), kamera termicznamlxoraz podstawy WiFi ATWINC1500.
Zmiany API powodujące niezgodność¶
Widoczne dla użytkownika niezgodności API między v1.1.0 a v1.2.0. Zakres: moduły C dla Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.
Wszystkie trzy zmiany powodujące niezgodność to zmiany zachowania podstawowych funkcji sensor (to samo API, inne zachowanie) — ponownie sprawdź dotknięte skrypty. Każdy skrót commita prowadzi do jego diffa na GitHubie. (Zdecydowana większość tego wydania to nowe API zbudowane w zakresie v1.1→v1.2, a więc jest to rozbudowa, a nie niezgodność.)
sensor.reset() nie stosuje już domyślnej konfiguracji (zachowanie)¶
sensor.reset() nie stosuje już wbudowanej domyślnej konfiguracji (pixformat / framesize / framerate / wzmocnienie / kontrast / jasność / nasycenie). Skrypty, które polegały na tym, że reset() pozostawia użyteczne ustawienia domyślne, muszą teraz jawnie wywołać sensor.set_pixformat() oraz sensor.set_framesize() (i wszelkie inne ustawienia) po reset().
Commity: d1e782df3
sensor.snapshot() zgłasza wyjątek przy przekroczeniu limitu czasu (zachowanie)¶
sensor.snapshot() zgłasza teraz RuntimeError("Sensor Timeout!!"), gdy sensor przekroczy limit czasu, zamiast zawieszać się w nieskończoność. Owiń snapshot() w try / except RuntimeError, jeśli musisz tolerować przekroczenia limitu czasu.
Commity: e3f41d674
sensor.set_pixformat() zgłasza wyjątek przy nieobsługiwanym formacie (zachowanie)¶
sensor.set_pixformat() zgłasza teraz wyjątek, gdy poda się nieobsługiwany format pikseli, zamiast zwracać False. Kod, który sprawdzał zwracaną wartość False, musi teraz zamiast tego przechwytywać wyjątek.
Commity: e0c5822c2
Lista kontrolna migracji¶
Dla czystego przeniesienia na v1.2.0 typowa praca to:
Jawnie ustaw
sensor.set_pixformat()/sensor.set_framesize()posensor.reset()(zmiana reset).Owiń
sensor.snapshot()wtry/except RuntimeError, jeśli musisz tolerować przekroczenia limitu czasu sensora (zmiana snapshot).Przechwytuj wyjątek z
sensor.set_pixformat()zamiast sprawdzaćFalse(zmiana set_pixformat).
Wszystkie pozostałe skrypty działają bez zmian.