v2.5.0

v2.5.0 to bogate w funkcje wydanie dotyczące przetwarzania obrazu: dodaje find_rects(), find_circles(), get_regression() (dopasowanie linii/regresji), find_number() (cyfry LeNet), klasy strumieniowe ImageWriter / ImageReader, sensor.flush() / width() / height() oraz obsługę pyb.RTC. Ładowanie obrazu jest teraz oparte na framebufferze — przeczytaj poniżej o zmianach łamiących.

Najważniejsze zmiany

  • image.find_rects() — detektor prostokątów / czworokątów z wyjściem narożników.

  • image.find_circles() — wykrywanie okręgów metodą Hougha.

  • image.get_regression() — dopasowanie linii metodą najmniejszych kwadratów oraz odporne (Theil-Sen).

  • image.find_number() — rozpoznawanie cyfr LeNet.

  • ImageWriter / ImageReader — nagrywanie i odtwarzanie strumieni obrazu.

  • Obsługa pyb.RTC, a także sensor.flush() / sensor.width() / sensor.height().

  • Zmiana łamiąca: ładowanie obrazu jest teraz oparte na framebufferze i zgłasza błąd, jeśli obraz jest zbyt duży — zobacz zmiany łamiące.

Nowe funkcje

  • Wykrywanie cech — dodano image.find_rects() (detektor czworokątów AprilTag; obiekty rect z x / y / w / h / corners / magnitude), image.find_circles() (Hough), image.get_regression() (dopasowanie linii metodą najmniejszych kwadratów + odporne Theil-Sen) oraz image.find_number() (rozpoznawanie cyfr LeNet), każdy z przykładowymi skryptami.

  • Narożniki wyników — dodano atrybut corners do obiektów wyniku kodów QR / AprilTag / data matrix / kodów kreskowych.

  • Strumienie obrazu — dodano klasy image.ImageWriter / image.ImageReader (format fragmentów wyrównanych do 16 bajtów) z przykładami image_writer.py / image_reader.py.

  • Sensor — dodano sensor.flush() (przesłanie framebuffera do IDE bez zrzutu obrazu) oraz sensor.width() / sensor.height().

  • pyb.RTC — włączono obsługę RTC z przykładem rtc.py.

  • Dodano kaskadę Haara dla pyska kota oraz przykład Servo-Shield (PCA9685); narzędzie hostowe openmv-cascade.py zyskało obsługę nowego formatu kaskad OpenCV XML.

Pozostałe zmiany i usprawnienia

  • Framebuffer został przebudowany, dzięki czemu metody obrazu copy_to_fb aktualizują podgląd w IDE; ścieżki HaarCascade() nie wymagają już początkowego / (wbudowana vs. plik jest wykrywana automatycznie); nagrywanie GIF/MJPEG obsługuje teraz VGA (oraz GIF-y BAYER); zaktualizowano wbudowany README.txt, a plik sterownika openmv.inf nie jest już tworzony na świeżym systemie plików.

Poprawki błędów

Przetwarzanie obrazu:

  • Naprawiono akumulację głosów w find_circles(), przesunięcie rho w get_regression() przy ROI oraz wyciek pamięci, scalanie odcinków w find_lines(), uśrednianie kątów w find_blobs() i domyślne (najmniej restrykcyjne) granice kolorów, stabilność sortowania punktów kluczowych ORB / kolejność deskryptorów oraz flagę dopasowania, a także buforowane ładowanie kaskady Haara (niewyrównane odczyty).

System:

  • Włączono pyb Servo 3 (P9) (#256), naprawiono inicjalizację RTC, zwiększono limit czasu znaku UART (#240) oraz naprawiono niezainicjalizowaną flagę „enabled” framebuffera sensora.

Sprzęt i obsługa płytek

  • Obsługa pyb.RTC oraz pyb Servo 3 (P9); przykład Servo-Shield (PCA9685).

Zmiany łamiące API

Widoczne dla użytkownika zmiany łamiące API między v2.4.1 a v2.5.0. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.

Zmiana łamiąca to zmiana behavior (to samo API, inny wynik) — sprawdź ponownie dotknięte skrypty. Każdy skrót commita prowadzi do jego diffa na GitHubie.

Ładowanie obrazu jest oparte na framebufferze (behavior)

image.Image / ładowanie obrazu kopiuje teraz załadowany obraz do głównego framebuffera i zgłasza wyjątek, jeśli obraz jest zbyt duży, aby się zmieścić. Ładowania, które wcześniej kończyły się powodzeniem do bufora sterty, mogą teraz zawieść — upewnij się, że ładowane obrazy mieszczą się w framebufferze (lub obsłuż nowy błąd).

Commity: 87d53385a

Lista kontrolna migracji

Upewnij się, że ładowane obrazy mieszczą się w framebufferze (lub przechwyć nowy błąd „image too large”) tam, gdzie wcześniej polegałeś na ładowaniu obrazów opartym na stercie (zmiana ładowania obrazu). Wszystkie pozostałe skrypty działają bez zmian.