IDE постачає власні плати OpenMV, мікропрограми, приклади, моделі машинного навчання та заглушки редакторів, але також може завантажувати той самий вміст від інших компаній — плату, створену партнером, мікропрограму, яка на ній працює, приклади та моделі, налаштовані для неї, і доповнення коду для API, які додає мікропрограма. Вони надходять як third-party repositories: папки вмісту, які IDE об’єднує зі своїми та підтримує актуальність.
Ця сторінка має дві аудиторії. Більша частина призначена для особи, яка встановлює та керує репозиторієм, опублікованим кимось іншим. Останній розділ, authoring a repository, призначений для розробників.
13.1.14.1. Сторінка сторонніх сховищ
Усім керується в меню «Правка» → «Параметри» → OpenMV → «Сховища сторонніх розробників». У таблиці перелічено кожне встановлене сховище та для кожного його відображуване ім’я, його короткий ідентифікатор (Built-in або User), встановлену версію кожного типу вмісту, який він надає – мікропрограми, приклади, моделі, заглушки – та URL-адресу, з якої відбувається оновлення.
Built-in означає, що репозиторій було розміщено у власному каталозі програми інсталятором, наданим постачальником, як пакет драйверів додає файли до програми. User означає, що ви встановили його самостійно з URL-адреси. Єдина практична відмінність полягає в тому, що ви не можете видалити вбудоване сховище з IDE — воно видаляється видаленням того, що його туди помістило — тому кнопка «Видалити» для нього вимкнена.
13.1.14.2. Встановлення репозиторію
Інсталяція з URL-адреси запитує адресу config.json сховища – невеликого файлу маніфесту, який публікує постачальник – і встановлює все, на що він вказує. Вставте URL-адресу, надану вам постачальником; IDE завантажує маніфест, отримує мікропрограму, приклади, моделі та заглушки, які він перераховує, і перевіряє кожне завантаження. Встановлення, видалення та оновлення репозиторію набувають чинності після перезапуску, тому IDE пропонує перезапуститися після завершення встановлення.
Постачальник також може розповсюджувати репозиторій як інсталятор, який скидає його прямо в каталог додатків, і в цьому випадку він просто присутній як рядок Built-in, коли ви вперше відкриваєте сторінку – нічого для встановлення.
13.1.14.4. Пріоритет і перевизначення
Сховища – це впорядкований список, найвищий пріоритет у верхній частині, а функції «Перемістити вгору» та «Перемістити вниз» змінюють порядок вибраного. Порядок має значення лише тоді, коли два джерела надають річ same: плата з однаковим ідентифікатором USB або приклад, модель чи заглушка з однаковою назвою. Коли це відбувається, виграє вищий запис, і кожне сховище виграє над вбудованим вмістом OpenMV. Це зроблено навмисно — так постачальник постачає власну мікропрограму для плати, яка має спільний USB-ідентифікатор плати OpenMV, замінюючи стандартну мікропрограму, яку IDE інакше пропонувала б для неї, або замінює стандартний приклад програмного забезпечення, написаним для їх апаратного забезпечення.
Оскільки перевизначення мовчки змінює те, що робить знайоме ім’я, сторінка ніколи не приховує жодного. Панель попереджень про перевизначення містить перелік усіх перевизначень, які діють, – яка плата, приклад, модель чи заглушка сховища замінює які – і той самий список з’являється один раз як повідомлення, коли сховище з’являється вперше. Якщо плата, приклад або модель поводяться не так, як описано в документації OpenMV, перше місце, на яке слід звернути увагу, — ця панель.
13.1.14.6. Створення репозиторію
Репозиторій — це папка, названа на честь постачальника, яка містить маніфест config.json і вкладену папку для кожного типу вмісту, який він надає:
acme/
config.json
firmware/
settings.json board descriptions
ACME_CAM1/ one folder per board, named by boardFirmwareFolder
firmware.bin
romfs0.img
firmware.version
examples/
index.csv which examples show for which board / sensor
01-Getting-Started/ numbered category folders, same as OpenMV's
hello_acme.py
read_sensor.py
02-Acme-Widgets/
spin_widget.py
examples.version
models/
index.csv which models show for which board
acme/ a group; its index.html + image describe it
index.html
image.jpg
person_detector/ one folder per model
person_detector.tflite
person_detector.txt class labels
models.version
stubs/
acme_hal.pyi a module the firmware adds
csi.pyi overrides OpenMV's to add methods
stubs.version
Ім’я папки – це ідентифікатор сховища: малі літери, цифри, - та _, починаючи з літери. Кожна папка частини необов’язкова; відправляйте лише те, що маєте. Біля кожної папки частини є файл <part>.version, що містить один рядок версії (1.2.0), який IDE використовує, щоб визначити, чи оновлення є новішим.
13.1.14.6.1. Маніфест
config.json називає репозиторій і для кожної частини вказує на архів, який можна завантажити:
{
"name": "acme",
"displayName": "Acme Robotics",
"homepage": "https://acme.example",
"configUrl": "https://acme.example/openmv/config.json",
"firmware": {
"release": { "version": "1.2.0", "url": "https://acme.example/acme-fw-1.2.0.zip", "sha256": "..." },
"development": { "version": "dev-20260701", "url": "https://acme.example/acme-fw-dev.zip", "sha256": "..." }
},
"examples": { "release": { "version": "1.1.0", "url": "https://acme.example/acme-examples-1.1.0.zip", "sha256": "..." } },
"models": { "release": { "version": "1.0.0", "url": "https://acme.example/acme-models-1.0.0.zip", "sha256": "..." } },
"stubs": { "release": { "version": "1.0.0", "url": "https://acme.example/acme-stubs-1.0.0.zip", "sha256": "..." } }
}
name має відповідати назві папки. configUrl – це адреса, на якій розміщено цей самий файл; IDE повторно отримує його, щоб перевірити наявність оновлень, тому пропускайте його лише для репозиторію, який ніколи не оновлюватиметься. Кожна частина має канал release, а вбудоване програмне забезпечення також може мати канал development, який використовується для встановлення останнього випуску розробки. Значення випуску version порівнюються як числа, тому більш високе пропонується як оновлення; версії розробки порівнюються лише для зміни. sha256 є необов’язковим, але перевіряється, якщо він є.
Кожен url вказує на .zip (тільки zip). Архів містить саме one top-level folder, а IDE встановлює contents цієї папки як частину – тому архів мікропрограми упакований так:
acme-fw-1.2.0.zip
acme-firmware/ one wrapping folder; its name does not matter
settings.json
ACME_CAM1/
firmware.bin
romfs0.img
і розпаковується в папку firmware/, показану раніше. Архіви прикладів, моделей і заглушок упаковані однаково — одна папка-обгортка, у якій міститься те, що міститиметься всередині examples/, models/ або stubs/. Ім’я папки обгортання ігнорується; важливо, що є саме один. Заархівування файлів у корені архіву без папки обгортання або запакування їх у декілька папок не встановить. Найпростіший спосіб зробити це правильно — заархівувати саму папку — виберіть acme-firmware і стисніть її, а не вибирайте її вміст.
13.1.14.6.2. Дошки, приклади, моделі та заглушки
firmware/settings.json використовує той самий формат опису плати, що й мікропрограмне забезпечення IDE; додайте запис boards для кожної вашої дошки. Кілька правил стосуються плат сторонніх розробників: boardFirmwareFolder має бути унікальним (він ще не використовується OpenMV чи іншим постачальником, оскільки він називає папку, у якій зберігаються двійкові файли), кожна плата має містити власний firmware_version (це те, що керує підказкою оновлення під час підключення), а плата може встановити boardFirmwareFolderAlias для назви папки прошивки плати OpenMV, щоб успадкуйте базові приклади та моделі цієї плати — аварійний люк для плати, сумісної з прошивкою OpenMV. Очікується повторне використання ідентифікаторів завантажувача OpenMV (вони містять підписані драйвери Windows); ідентифікатор програми, який стикається з вбудованою платою, замінює цю плату, про що повідомляє панель попереджень Override.
Examples go in numbered category folders like OpenMV’s (01-Getting-Started); a category you name the same as an OpenMV one interleaves into it, and a new name becomes its own menu section. Модель — це папка, що містить її .tflite і відповідні .txt міток класів, згрупованих у папці, index.html (і необов’язкове зображення) якої є описом, показаним поруч у Model Zoo. examples/index.csv і models/index.csv — це ті самі файли плат і сенсорних фільтрів, які використовуються у власних прикладах і моделях OpenMV, які зіставляються з вашими шляхами прикладів і моделей і визначають, які з ваших показів для якої дошки. Заглушки — це звичайні файли .pyi; IDE передає їхню папку мовному серверу, щоб вони вирішувалися разом із OpenMV, а заглушка, названа для існуючого модуля (csi.pyi), замінює завершення цього модуля.
13.1.14.6.3. Публікація та оновлення
Щоб опублікувати, розмістіть config.json та архіви, на які він посилається, за стабільними URL-адресами та надайте користувачам URL-адресу config.json для встановлення. Працює будь-де, де обслуговуються звичайні файли через HTTPS – веб-сервер, сховище об’єктів або хост коду. Щоб надіслати оновлення, завантажте нові архіви, перемістіть уражені значення version у розміщені config.json, і під час наступного запуску IDE кожного користувача воно запропонує оновлення. Користувачі, які встановили репозиторій за допомогою інсталятора, отримують оновлення таким же чином, якщо встановлений config.json містить configUrl.
13.1.14.6.4. Хостинг на GitHub
GitHub є зручним хостом, і IDE отримує з нього так само, як вона отримує власні ресурси. Потрібно розмістити дві частини: маніфест і архіви.
Зберігайте config.json у сховищі та надсилайте користувачам його URL-адресу raw — адресу, за якою файл обслуговується безпосередньо, а не сторінку GitHub, на якій він відображається. Кнопка Raw у файлі показує це; воно має форму
https://raw.githubusercontent.com/<user>/<repo>/<branch>/config.json
Ця необроблена URL-адреса — це те, що користувач вставляє в Install from URL, і те, що ви вставляєте у власний маніфест configUrl, щоб IDE повторно завантажувала його, щоб перевірити наявність оновлень. Вказівка на гілку (main) означає, що натискання нового коміту публікує зміну; вказуючи його на тег, користувачі натомість прикріплюються до фіксованої версії.
Розміщуйте архіви .zip як release assets, а не фіксуйте їх — випуски створено для двійкових завантажень, тому багатомегабайтний пакет прошивки належить саме туди, а не в історію сховища. Додайте кожен архів до випуску GitHub і використовуйте його URL-адресу для завантаження, яка має форму
https://github.com/<user>/<repo>/releases/download/<tag>/acme-fw-1.2.0.zip
у полях маніфесту url, кожне з яких містить sha256 архіву. Тоді надсилання оновлення полягає в наступному: прикріпіть нові архіви до випуску, відредагуйте config.json, щоб вказати на них, підштовхнути версії та зафіксувати. IDE підбирає зміни під час наступного запуску (необроблений файл подається через кеш, який оновлюється протягом кількох хвилин після надсилання).