5.34. Підсумок

Модуль image – найбільший API, який надає камера, і ця глава щойно охопила його загальний огляд: як зображення представлено в пам’яті, як камера зчитує та записує окремі пікселі, як малює у захоплені кадри, як перетворює їх арифметично та геометрично, як виконує порогову класифікацію та фільтрацію, як витягує вимірювання та виявлення, як декодує надруковані символи, як порівнює одне зображення з іншим і як передає та приймає результати.

Набір інструментів є широким навмисно. Класичний конвеєр технічного зору, що виконується на невеликій вбудованій камері, виконує більшість роботи перед тим, як щось досягне моделі машинного навчання (якщо вона є) – порогова обробка очищає вхідні дані, фільтри усувають шум, регіони звужують пошук, детектори плям і ліній локалізують кандидати, оцінка схожості вирішує, чи є кандидат цікавим, а рівень введення-виведення передає результат наступному етапу. Кожна сторінка цієї глави охопила одну з цих операцій; правильний конвеєр для будь-якого конкретного застосунку – це послідовність таких операцій, складена в порядку, якого вимагає задача.

5.34.1. Структура конвеєра

Більшість нетривіальних застосунків камери дотримуються однієї схеми. Захоплення кадру з датчика. Попередня обробка: конвертація форматів, вирівнювання гістограми, розмиття шуму. Локалізація областей або ознак інтересу: виявлення плям, ліній, зіставлення шаблонів, декодування кодів. Аналіз знайденого: геометричні вимірювання, оцінка схожості, статистика. Прийняття рішення на основі аналізу: спрацювання GPIO, передача корисного навантаження, захоплення та журналювання, передача кадру в модель (МН). Виведення рішення або захопленого артефакту: збереження, кодування, передача, малювання назад у кадр для попереднього перегляду в IDE.

Жодна окрема сторінка глави не охопила кожен крок; глава охопила будівельні блоки, з яких складається конвеєр. Вибір блоків і порядку їх використання – це робота скрипту застосунку.

5.34.2. Де ця глава веде далі

Модуль image працює із зображеннями як зображеннями – пікселі, регіони, малювання, виявлення. Чимало роботи з захопленими даними не вкладається в цю концепцію. Обчислення статистики над довільним числовим масивом, векторизована арифметика над сирими даними датчика, застосування власного матричного перетворення без відповідного методу в модулі image, підготовка даних для моделі машинного навчання, яка потребує певного тензорного компонування – все це завдання для бібліотеки числових масивів, а не бібліотеки обробки зображень.

Наступна глава охоплює саме це. Модуль ulab.numpy, що постачається разом з MicroPython на камері, є підмножиною NumPy, і два мости з’єднують його з модулем image: to_ndarray() копіює пікселі кадру в ndarray для числової обробки, а конструктор Image приймає ndarray для побудови нового зображення з результату, готового для відображення, збереження або повернення в бібліотеку зображень. Обидва модулі доповнюють один одного – кожен робить те, чого інший не може, і разом вони покривають числову й візуальну роботу, яка потрібна застосунку для вбудованого зору.