v1.4.0

v1.4.0 — это основополагающая реорганизация imlib. find_blobs() / find_markers() были переписаны для прямого отслеживания по цветовому порогу, многие отдельные методы изображения были свернуты в кортежи блобов, а несколько методов изображения были переименованы (subimgcopy, blitreplace, find_eyesfind_eye, compresscompressed). Также добавлены sensor.get_fb() / переключатели AGC / AEC и ~60 примеров скриптов. Это выпуск с большим количеством критических изменений — ознакомьтесь с критическими изменениями ниже.

Основные моменты

  • Отслеживание блобов на основе цветаfind_blobs() принимает цветовые пороги напрямую и возвращает плоский список кортежей блобов.

  • Очистка imlibsubimg()copy(), blit()replace(), find_eyes()find_eye(), compress()compressed().

  • Датчик — добавлены sensor.get_fb() и переключатели включения AGC/AEC.

  • Добавлены/расширены ~60 примеров скриптов.

  • Критическое: API блобов, удаленные методы изображения и несколько переименований — см. критические изменения.

Новые возможности

  • Датчик — добавлены sensor.get_fb() (получить буфер кадра последнего снимка), sensor.set_gain_ctrl(enable) (переключение AGC) и sensor.set_exposure_ctrl(enable) (переключение AEC).

  • Изображение — индексация изображения (img[i]) теперь поддерживает как чтение, так и запись пикселей (grayscale / RGB565 / JPEG); добавлены image.compress() с обработкой на месте и именованный аргумент quality= в функциях JPEG; find_blobs() / find_markers() / find_features() теперь возвращают пустой (итерируемый) список вместо нелиста, когда ничего не найдено.

  • Добавлены ~60 примеров скриптов (управление платой, фильтры изображения, отслеживание цвета, обнаружение лиц / глаз / признаков, WiFi-шилд) и второй пример обнаружения радужки.

Прочие изменения и улучшения

  • image.histeq() теперь работает с изображениями RGB565, а не только в оттенках серого.

Исправления ошибок

  • Инициализирован pyb.DAC при загрузке, чтобы DAC работал (#121), исправлен сломанный image.dilate(), повреждение при нулевом числе байт в client.send() WINC, повторная итерация при слиянии блобов, ошибка повторной инициализации файлового буфера, ломавшая файловую систему после первого использования, вычисление To_min / To_max термопары (#113), а также применен апстрим-патч HAL I2C/DMA из MicroPython.

Аппаратное обеспечение и поддержка плат

  • WiFi-шилд — WINC1500 обновлен до файлов платы Rev-B.

  • pyb.DAC — периферийное устройство DAC включено.

Критические изменения API

Видимые пользователю изменения API между v1.3.0 и v1.4.0. Область: C-модули Python в modules/ и библиотеки Python в scripts/libraries/.

Каждое изменение помечено его влиянием:

  • major — затрагивает большинство скриптов, использовавших эту функцию; вам потребуется портировать код.

  • minor — узкий API; затрагивает только использовавшие его скрипты.

Изменения сгруппированы по влиянию в этом порядке. Если вы просто хотите портировать свой код, перейдите к контрольному списку миграции в конце. Каждый хеш коммита ведет на его diff на GitHub.

find_blobs() / find_markers() переписаны (major)

image.find_blobs() / find_markers() были переписаны для отслеживания на основе цвета: теперь вы передаете цветовые пороги (и необязательную функцию-фильтр) напрямую, вместо работы над предварительно сегментированным изображением, а результат — это единый плоский список кортежей блобов из 10 элементов (с полем цветового кода) вместо вложенного дерева по цветам. Переработайте скрипты отслеживания цвета, чтобы передавать цветовые пороги и итерировать плоский список.

Коммиты: d1ff36602, 16daeb83a

Отдельные методы изображения удалены (major)

image.threshold, image.centroid(), image.orientation_radians(), image.orientation_degrees() и image.pixels() были удалены. Данные центроида / ориентации / счетчика пикселей теперь доступны как поля кортежей блобов, возвращаемых find_blobs().

Коммиты: 9e5d379c1

Переименования методов imlib (major)

Несколько методов изображения были переименованы/переработаны: image.subimg()image.copy(), image.blit()image.replace(), а image.blend() был изменен для соответствия двум другим операциям с двумя изображениями. Методы image.scale() / scaled() / rainbow() были удалены (rainbow перенесен в модуль FIR). Обновите вызовы на новые имена.

Коммиты: b534dc6ff

find_eyes() переименован в find_eye() (minor)

image.find_eyes() был переименован в image.find_eye() и теперь возвращает 2-кортеж радужки (x, y) вместо прежнего кортежа глаз. Переименуйте вызов и обновите обработку возвращаемого значения.

Коммиты: 7a01a9bed

image.compress() переименован в compressed() (minor)

image.compress() (который возвращал новое изображение JPEG) был переименован в image.compressed(); новый image.compress() вместо этого сжимает изображение на месте и возвращает None. image.save() также получил именованный аргумент quality= и теперь возвращает None вместо True. Перенесите img.compress(q) (ожидающий возвращаемого изображения) на img.compressed(quality=q).

Коммиты: 367e5fdd3

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

Для чистого переноса на v1.4.0 типичная работа такова:

  1. Переработайте код отслеживания цвета, чтобы передавать цветовые пороги в find_blobs() / find_markers() и итерировать плоский список кортежей блобов (переработка find_blobs).

  2. Читайте данные центроида / ориентации / пикселей из кортежей блобов вместо удаленных отдельных методов (удаленные методы изображения).

  3. Переименуйте subimgcopy, blitreplace, исправьте вызовы blend() и замените scale / scaled / rainbow (переименования imlib).

  4. Переименуйте find_eyes()find_eye() (переименование find_eye) и compress()compressed() (переименование compress).

Все остальные скрипты работают без изменений.