13.1.14. Úložiště třetích stran#

IDE dodává vlastní desky OpenMV, firmware, příklady, modely strojového učení a útržky editorů, ale může načítat stejný druh obsahu i od jiných společností – desku vytvořenou partnerem, firmware, který na ní běží, příklady a modely pro ni vyladěné a dokončování kódu pro API, která firmware přidává. Ty přicházejí jako third-party repositories: složky obsahu, které IDE spojuje se svým vlastním a udržuje je aktuální.

Tato stránka má dvě cílové skupiny. Většina z toho je pro osobu, která instaluje a spravuje úložiště, které publikoval někdo jiný. Poslední sekce, authoring a repository, je určena pro dodavatele.

13.1.14.1. Stránka Úložiště třetích stran#

Vše je spravováno z Edit → Preferences → OpenMV → Third Party Repositories. Tabulka uvádí každé nainstalované úložiště a pro každé jeho zobrazovaný název, jeho krátké id, ať už je to Built-in nebo User, nainstalovanou verzi každého druhu obsahu, který poskytuje – firmware, příklady, modely, stub – a adresu URL, ze které se aktualizuje.

Built-in znamená, že úložiště bylo umístěno do vlastního adresáře aplikace instalačním programem dodaným dodavatelem, podobně jako balíček ovladače přidává soubory do programu. User znamená, že jste si jej nainstalovali sami z adresy URL. Jediným praktickým rozdílem je, že z IDE nemůžete odstranit vestavěný repozitář - odstraní se odinstalováním čehokoli, co tam bylo umístěno - takže tlačítko Odebrat je pro něj zakázáno.

13.1.14.2. Instalace úložiště#

Instalace z URL vyžaduje adresu config.json úložiště – malý soubor manifestu, který prodejce zveřejňuje – a nainstaluje vše, na co ukazuje. Vložte adresu URL, kterou vám poskytl prodejce; IDE stáhne manifest, načte firmware, příklady, modely a útržky, které uvádí, a ověří každé stažení. Instalace, odebrání a aktualizace úložiště se projeví po restartu, takže IDE nabízí restartování po dokončení instalace.

Prodejce může také distribuovat úložiště jako instalační program, který jej uloží přímo do adresáře aplikace, v takovém případě je jednoduše přítomen jako řádek Built-in při prvním otevření stránky – nic k instalaci.

13.1.14.3. Udržování aktualizovaných úložišť#

Úložiště, které nese aktualizační URL, se kontroluje při každém spuštění IDE. Když je k dispozici novější obsah, IDE vám řekne, co – vypíše každý repozitář a příslušné verze – a nabídne jeho instalaci, to vše v jediné výzvě. Kontrola aktualizací spustí stejnou kontrolu na vyžádání.

13.1.14.4. Priorita a přednosti#

Úložiště jsou uspořádaný seznam s nejvyšší prioritou nahoře a Posunout nahoru a Posunout dolů mění pořadí vybraného. Na pořadí záleží pouze tehdy, když dva zdroje poskytují věc same: desku se stejným USB identifikátorem nebo příklad, model nebo pahýl se stejným názvem. Když k tomu dojde, vyhrává vyšší položka a každé úložiště vyhrává nad vestavěným obsahem OpenMV. Je to záměrné – jde o to, jak dodavatel dodává svůj vlastní firmware pro desku, která sdílí USB identifikátor desky OpenMV, čímž nahrazuje základní firmware, který by pro ni jinak nabízelo IDE, nebo nahrazuje příklad akcií takovým, který je napsán pro jejich hardware.

Protože přepsání tiše změní to, co dělá známé jméno, stránka jej nikdy neskryje. Panel Přepsat varování uvádí všechna platná přepsání – která deska, příklad, model nebo útržek úložiště přepisuje které – a stejný seznam se objeví jednou jako zpráva při prvním zobrazení úložiště. Pokud se deska, příklad nebo model nechová tak, jak popisuje dokumentace OpenMV, je tento panel prvním místem, kam se podívat.

13.1.14.5. Co úložiště poskytuje#

Každý ze čtyř druhů obsahu se objeví na svém obvyklém místě v IDE, takže jakmile je úložiště nainstalováno, není se co nového naučit:

  • Boards and firmware. Deska úložiště se chová přesně jako deska OpenMV – je rozpoznána při připojení, její typ se zobrazí ve stavovém řádku a její firmware se aktualizuje prostřednictvím IDE, včetně cesty Install the Latest Development Release. Viz Aktualizace a obnova firmwaru.

  • Examples. Příklady úložiště se objeví v Soubor → Příklady, sloučené do stromu kategorií: příklad v kategorii, kterou dodavatel pojmenoval stejně jako kategorie OpenMV, se nachází vedle kategorií OpenMV a nová kategorie se stane vlastní podnabídkou. Jsou filtrovány na desky, které podporují, jako každý příklad. Viz Skripty, příklady a složka dokumentů.

  • Models. Modely úložiště se objeví v Model Zoo, začleněné do stromu prohlížeče stejným způsobem, s vlastními popisy dodavatele.

  • Stubs. Repozitář může dodávat .pyi stub souborů, takže editor nabízí dokončení, podpisy a dokumentaci pro funkce, které přidává jeho firmware – stejné dokončení, jaké získáte pro vlastní moduly OpenMV, pro vlastní API dodavatele.

13.1.14.6. Vytvoření úložiště#

Úložiště je složka pojmenovaná podle dodavatele, která obsahuje manifest config.json a podsložku pro každý druh obsahu, který poskytuje:

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

Název složky je id úložiště: malá písmena, číslice, - a _, začínající písmenem. Každá složka součástí je volitelná; zasílejte jen to, co máte. Vedle každé složky součástí je soubor <part>.version obsahující jeden řetězec verze (1.2.0), který IDE používá k rozhodnutí, kdy je aktualizace novější.

13.1.14.6.1. Manifest#

config.json pojmenuje úložiště a pro každou část odkazuje na archiv ke stažení:

{
  "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 musí odpovídat názvu složky. configUrl je adresa, na které je hostován stejný soubor; IDE jej znovu načte, aby zkontroloval aktualizace, takže jej vynechejte pouze u úložiště, které se nikdy neaktualizuje. Každá část má kanál release a firmware může mít také kanál development, který používá Install the Latest Development Release. Hodnoty verze version jsou porovnávány jako čísla, takže vyšší je nabízena jako aktualizace; vývojové verze se porovnávají pouze pro změnu. sha256 je volitelný, ale je ověřen, pokud je přítomen.

Každých url ukazuje na .zip (pouze zip). Archiv obsahuje přesně one top-level folder a IDE nainstaluje contents této složky jako součást – takže archiv firmwaru je zabalen takto:

acme-fw-1.2.0.zip
  acme-firmware/           one wrapping folder; its name does not matter
    settings.json
    ACME_CAM1/
      firmware.bin
      romfs0.img

a rozbalí se do složky firmware/ zobrazené výše. Archivy příkladů, modelů a útržků jsou zabaleny stejným způsobem – jedna obalová složka obsahující to, co by se vešlo dovnitř examples/, models/ nebo stubs/. Název obalové složky je ignorován; důležité je, že existuje přesně jeden. Zkomprimování souborů v kořenovém adresáři archivu bez zalamovací složky nebo jejich zabalení do více než jedné složky se nenainstaluje. Nejjednodušší způsob, jak to udělat správně, je zazipovat samotnou složku – vyberte acme-firmware a komprimujte ji, místo abyste vybírali její obsah.

13.1.14.6.2. Tabule, příklady, modely a útržky#

firmware/settings.json používá stejný formát popisu desky jako firmware dodávaný IDE; přidejte položku boards pro každou ze svých nástěnek. Několik pravidel je specifických pro desky třetích stran: boardFirmwareFolder musí být unikátní (dosud ji nepoužívá OpenMV ani jiný prodejce, protože pojmenovává složku, ve které se nacházejí vaše binární soubory), každá deska musí nést své vlastní firmware_version (to je to, co řídí výzvu k aktualizaci modelů při připojení) a deska může nastavit boardFirmwareFolderAlias v příkladech firmwaru a názvu desky OpenMV na desce. únikový poklop pro desku, která je firmware kompatibilní s OpenMV. Očekává se opětovné použití identifikátorů zavaděče OpenMV (nesou podepsané ovladače Windows); identifikátor aplikace, který koliduje s vestavěnou deskou, přepíše tuto desku, což hlásí panel Přepsat varování.

Příklady jsou v číslovaných složkách kategorií, jako je OpenMV’s (01-Getting-Started); kategorie, kterou pojmenujete stejně jako OpenMV, se do ní vloží a nový název se stane vlastní sekcí nabídky. Model je složka obsahující .tflite a odpovídající .txt štítků tříd, seskupená pod složkou, jejíž index.html (a volitelný obrázek) je popis zobrazený vedle ní v Zoo modelu. examples/index.csv a models/index.csv jsou stejné soubory filtrů desek a senzorů, které používají vlastní příklady a modely OpenMV, porovnané s vaším příkladem a cestami modelu a rozhodnout, který z vašich se zobrazí pro kterou desku. Pahýly jsou běžné soubory .pyi; IDE předá svou složku jazykovému serveru, takže se vyřeší společně s OpenMV a útržek pojmenovaný pro existující modul (csi.pyi) přepíše dokončení tohoto modulu.

13.1.14.6.3. Publikování a aktualizace#

Chcete-li publikovat, hostujte config.json a archivy, na které odkazuje, na stabilních adresách URL a poskytněte uživatelům adresu URL config.json, ze které mohou instalovat. Funguje kdekoli, kde jsou poskytovány prosté soubory přes HTTPS – webový server, úložiště objektů nebo hostitel kódu. Chcete-li odeslat aktualizaci, nahrajte nové archivy, vložte dotčené hodnoty version do hostovaného config.json a při příštím spuštění IDE každého uživatele nabídne aktualizaci. Uživatelé, kteří místo toho nainstalovali úložiště prostřednictvím instalačního programu, získají aktualizace stejným způsobem, pokud nainstalované config.json nese configUrl.

13.1.14.6.4. Hostování na GitHubu#

GitHub je pohodlný hostitel a IDE z něj načítá stejným způsobem, jakým načítá své vlastní zdroje. Je třeba umístit dva kusy: manifest a archivy.

Udržujte config.json v úložišti a poskytněte uživatelům jeho raw URL – adresu, na které je soubor přímo obsluhován, nikoli stránku GitHubu, která jej zobrazuje. Tlačítko Raw na souboru to zobrazí; má podobu

https://raw.githubusercontent.com/<user>/<repo>/<branch>/config.json

Tato nezpracovaná adresa URL je to, co uživatel vloží do Instalovat z adresy URL a co vložíte do vlastního manifestu configUrl, takže je IDE znovu načte, aby zkontrolovalo aktualizace. Nasměrování na větev (main) znamená, že zatlačení nového potvrzení publikuje změnu; nasměrování na značku místo toho připne uživatele k pevné verzi.

Hostujte archivy .zip jako release assets spíše než je odevzdávejte – vydání jsou vytvořena pro binární stahování, takže multimegabajtový balíček firmwaru tam patří, nikoli do historie úložiště. Připojte každý archiv k vydání GitHubu a použijte jeho adresu URL ke stažení, která má formulář

https://github.com/<user>/<repo>/releases/download/<tag>/acme-fw-1.2.0.zip

v polích url manifestu, každé s sha256 archivu. Odeslání aktualizace je pak následující: připojte nové archivy k vydání, upravte config.json tak, aby na ně ukazovaly a zvyšte verze, a potvrďte. IDE změnu zaznamená při příštím spuštění (soubor nezpracovaných dat je doručen prostřednictvím mezipaměti, která se obnoví během několika minut po odeslání).