v1.2.0

v1.2.0 — це базовий, дуже великий реліз, який формує більшу частину класичного API OpenMV для роботи із зображеннями: методи малювання, операції бінаризації / морфології, ключові дескриптори (FAST / FREAK / LBP), перетворення кольору та image.statistics, файловий ввід/вивід BMP / PPM / JPEG, модулі lcd, mjpeg, gif та теплова камера mlx, камера OV7725 та численні елементи керування sensor. Деяка базова поведінка sensor змінилася — ознайомтеся з критичними змінами нижче.

Основні можливості

  • API малюванняdraw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints().

  • Бінаризація / морфологіяbinary(), invert(), and/or/xor/..., erode() / dilate() / morph(), negate() / difference().

  • Ключові точки — дескриптори FAST / FREAK / LBP з match_descriptor() / save_descriptor() / load_descriptor().

  • Нові модуліlcd, mjpeg, gif (кольоровий) та теплова камера mlx.

  • Підтримка камери OV7725; image.statistics; файловий ввід/вивід BMP/PPM/JPEG.

  • Критична зміна: поведінка sensor.reset(), sensor.snapshot() та sensor.set_pixformat() змінилася — перегляньте критичні зміни.

Нові можливості

  • Drawing — додано image.draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() з ключовими аргументами (color, thickness, …).

  • Бінаризація / морфологія — додано image.binary(), invert(), and() / nand() / or() / nor() / xor() / xnor(), erode() / dilate() / morph(), negate() / difference(), pixels(), centroid(), orientation_radians() / orientation_degrees(), а також width() / height() / format().

  • Ключові точки / дескриптори — виявлення ключових точок FAST через find_keypoints(), єдиний match_descriptor() та save_descriptor() / load_descriptor() для FREAK / LBP, плюс профільний каскад Хаара/LBP для обличчя.

  • Колір / статистикаimage.statistics та функції перетворення кольору (rgb_to_lab / lab_to_rgb / rgb_to_grayscale / grayscale_to_rgb).

  • Файловий ввід/вивід — завантаження та збереження BMP / PPM (P2/P3/P5/P6) / JPEG (включно з JPEG у відтінках сірого та субдискретизацією кольоровості 4:2:0 / 4:2:2).

  • Модулі — нові модулі lcd (LCD-щит), mjpeg (запис відео), кольоровий gifGif.loop()), та mlx (тепловізійна камера), кожен з прикладами скриптів.

  • Sensor — додано sensor.get_id() (+ константи PID для OV9650/OV2640/OV7725), sensor.set_special_effect() (константи SDE_*), sensor.set_image_filter() (FILTER_BW / FILTER_SKIN), розмір кадру HQVGA та image.set_pixel(x, y, …).

  • WiFi — додано драйвер WiFi ATWINC1500, основу BSP для OpenMV 1/2, а також приклад BLE.

Інші зміни та вдосконалення

  • Кадровий буфер тепер стискається у JPEG перед потоковою передачею до OpenMV IDE (менша пропускна здатність); стиснення JPEG виконується на місці; H/V зум OV7725 забезпечує довільне масштабування; покращене (швидше) виявлення облич Хаара, яке працює при QVGA.

Виправлення помилок

Робота із зображеннями:

  • Виправлено обчислення інтегрального зображення, пошкодження фільтром median(), обчислення центроїда, фільтри шкіри RGB / чорно-білий на RGB-вхідних даних, а також прискорено читання/запис BMP/PPM у відтінках сірого.

Датчик та система:

  • Виправлено таймери pyb.Servo (Servo тепер працює), роздільну здатність HQVGA, надійність ініціалізації SD-картки, повторну ініціалізацію пам’яті після м’якого скидання та повторне виконання REPL, коли скрипт відсутній.

Апаратне забезпечення та підтримка плат

  • Датчик камери OV7725.

  • LCD-щит (модуль lcd), теплова камера mlx та основа WiFi ATWINC1500.

Критичні зміни API

Критичні зміни API, видимі користувачу, між v1.1.0 та v1.2.0. Область дії: C-модулі Python у modules/ та бібліотеки Python у scripts/libraries/.

Всі три критичні зміни — це зміни behavior базових функцій sensor (той самий API, інша поведінка) — перевірте відповідні скрипти. Кожен хеш коміту посилається на його diff на GitHub. (Переважна більшість цього релізу — новий API, доданий у діапазоні v1.1→v1.2, і тому є додатковим, а не критичним.)

sensor.reset() більше не застосовує конфігурацію за замовчуванням (behavior)

sensor.reset() більше не застосовує вбудовану конфігурацію за замовчуванням (pixformat / framesize / framerate / gain / contrast / brightness / saturation). Скрипти, які покладалися на те, що reset() залишає придатну конфігурацію, тепер мають явно викликати sensor.set_pixformat() та sensor.set_framesize() (та інші параметри) після reset().

Коміти: d1e782df3

sensor.snapshot() викидає виключення при таймауті (behavior)

sensor.snapshot() тепер викидає RuntimeError("Sensor Timeout!!") при таймауті датчика замість нескінченного зависання. Обгорніть snapshot() у try / except RuntimeError, якщо потрібно обробляти таймаути.

Коміти: e3f41d674

sensor.set_pixformat() викидає виключення для непідтримуваного формату (behavior)

sensor.set_pixformat() тепер викидає виключення при непідтримуваному форматі пікселів замість повернення False. Код, який перевіряв повернення False, має замість цього перехоплювати виключення.

Коміти: e0c5822c2

Контрольний список міграції

Для чистого переходу на v1.2.0 зазвичай потрібно:

  1. Явно встановити sensor.set_pixformat() / sensor.set_framesize() після sensor.reset() (зміна reset).

  2. Обгорнути sensor.snapshot() у try / except RuntimeError, якщо потрібно обробляти таймаути датчика (зміна snapshot).

  3. Перехоплювати виключення від sensor.set_pixformat() замість перевірки False (зміна set_pixformat).

Всі інші скрипти працюють без змін.