13.1.14. Spremišta trećih strana#

IDE isporučuje OpenMV-ove vlastite ploče, firmware, primjere, modele strojnog učenja i uređivačke datoteke, ali može učitati iste vrste sadržaja i od drugih tvrtki – ploču koju je izradio partner, firmware koji radi na njoj, primjere i modele podešene za nju i dovršavanje koda za API-je koje firmware dodaje. One stižu kao third-party repositories: mape sadržaja koje IDE spaja sa svojima i ažurira ih.

Ova stranica ima dvije publike. Većina je za osobu koja instalira i upravlja repozitorijem koji je netko drugi objavio. Posljednji odjeljak, authoring a repository, je za onaj koji gradi dobavljač.

13.1.14.1. Stranica Repozitorija treće strane#

Svime se upravlja iz Uredi → Postavke → OpenMV → Spremišta trećih strana. Tablica navodi svako instalirano spremište i, za svako, njegovo ime za prikaz, njegov kratki ID, bilo da je Built-in ili User, instaliranu verziju svake vrste sadržaja koji nudi – firmware, primjere, modele, stubove – i URL s kojeg se ažurira.

Built-in znači da je repozitorij smjestio u vlastiti direktorij aplikacije program za instalaciju koji je isporučio dobavljač, na način na koji paket upravljačkog programa dodaje datoteke u program. User znači da ste ga sami instalirali s URL-a. Jedina praktična razlika je u tome što ne možete ukloniti ugrađeno spremište iz IDE-a – ono se uklanja deinstalacijom onoga što ga je tamo stavilo – tako da je gumb Ukloni za njega onemogućen.

13.1.14.2. Instaliranje repozitorija#

Instaliraj s URL-a traži adresu config.json repozitorija – male datoteke manifesta koju objavljuje dobavljač – i instalira sve na što upućuje. Zalijepite URL koji vam je dobavljač dao; IDE preuzima manifest, dohvaća firmware, primjere, modele i zaglavke koje navodi i provjerava svako preuzimanje. Instaliranje, uklanjanje i ažuriranje repozitorija stupaju na snagu nakon ponovnog pokretanja, tako da IDE nudi ponovno pokretanje kada instalacija završi.

Dobavljač također može distribuirati repozitorij kao instalacijski program koji ga ispušta ravno u direktorij aplikacije, u kojem slučaju je jednostavno prisutan kao redak Built-in kada prvi put otvorite stranicu – ništa za instalaciju.

13.1.14.3. Održavanje repozitorija ažuriranim#

Repozitorij koji nosi URL ažuriranja provjerava se svaki put kada se IDE pokrene. Kada je noviji sadržaj dostupan, IDE vam govori što – navodeći svako spremište i uključene verzije – i nudi instalaciju, sve u jednom upitu. Provjera ažuriranja pokreće istu provjeru na zahtjev.

13.1.14.4. Prioritet i nadjačavanja#

Spremišta su poredani popis, najviši prioritet na vrhu, a Pomakni gore i Pomakni dolje mijenja redoslijed odabranog. Redoslijed je bitan samo kada dva izvora daju same stvar: ploča s istim USB identifikatorom ili primjer, model ili stub s istim nazivom. Kada se to dogodi viši unos pobjeđuje, a svako spremište pobjeđuje nad ugrađenim sadržajem OpenMV-a. Ovo je namjerno – to je način na koji dobavljač isporučuje vlastiti firmware za ploču koja dijeli USB identifikator OpenMV ploče, zamjenjujući dionički firmware koji bi IDE inače ponudio za nju, ili zamjenjuje dionički primjer s onim napisanim za njihov hardver.

Budući da nadjačavanje tiho mijenja ono što poznato ime radi, stranica ga nikada ne skriva. Ploča s upozorenjima o nadjačavanju navodi svako nadjačavanje koje je na snazi ​​– koja ploča spremišta, primjer, model ili završetak nadjačava koje – i isti popis pojavljuje se jednom kao poruka prvi put kada se spremište vidi. Ako se ploča, primjer ili model ne ponašaju onako kako je opisano u dokumentaciji OpenMV-a, ovaj panel je prvo mjesto koje trebate pogledati.

13.1.14.5. Što repozitorij pruža#

Svaka od četiri vrste sadržaja pojavljuje se na svom uobičajenom mjestu u IDE-u, tako da nakon što se repozitorij instalira, više se ne može naučiti ništa novo:

  • Boards and firmware. Ploča repozitorija ponaša se točno kao OpenMV ploča – prepoznaje se pri povezivanju, njen tip se prikazuje na statusnoj traci, a firmver se ažurira putem IDE-a, uključujući stazu Instaliraj najnovije razvojno izdanje. Vidi Ažuriranja i oporavak ugrađenog programa (firmware).

  • Examples. Primjeri repozitorija pojavljuju se u Datoteka → Primjeri, spojeni u stablo kategorije: primjer u kategoriji koju je dobavljač nazvao isto kao OpenMV kategorija nalazi se pored onih OpenMV, a nova kategorija postaje vlastiti podizbornik. Filtriraju se na ploče koje podržavaju kao i svaki drugi primjer. Vidi Skripte, primjeri i mapa dokumenata.

  • Models. Modeli repozitorija pojavljuju se u Model Zoo, spojeni u stablo preglednika na isti način, s vlastitim opisima dobavljača.

  • Stubs. Repozitorij može slati .pyi stub datoteke tako da editor nudi dovršetak, potpise i dokumentaciju za funkcije koje dodaje njegov firmware – isti dovršetak koji dobivate za vlastite module OpenMV-a, za prilagođeni API dobavljača.

13.1.14.6. Izrada repozitorija#

Repozitorij je mapa nazvana prema dobavljaču, koja sadrži manifest config.json i podmapu za svaku vrstu sadržaja koju pruža:

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

Naziv mape je ID spremišta: mala slova, znamenke, - i _, počevši od slova. Svaka mapa dijela nije obavezna; šaljite samo ono što imate. Pokraj svake mape dijela nalazi se datoteka <part>.version koja sadrži jednu verziju niza (1.2.0) koju IDE koristi da odluči kada je ažuriranje novije.

13.1.14.6.1. Manifest#

config.json imenuje repozitorij i, za svaki dio, pokazuje na arhivu za preuzimanje:

{
  "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 mora odgovarati nazivu mape. configUrl je adresa na kojoj se nalazi ova ista datoteka; IDE ga ponovno dohvaća kako bi provjerio ima li ažuriranja, stoga ga izostavite samo za spremište koje se nikada neće ažurirati. Svaki dio ima release kanal, a firmware također može imati development kanal koji koristi Instalacija najnovijeg razvojnog izdanja. Vrijednosti izdanja version uspoređuju se kao brojevi, tako da se viša nudi kao ažuriranje; razvojne verzije uspoređuju se samo radi promjene. sha256 nije obavezno, ali se potvrđuje ako postoji.

Svaki url pokazuje na .zip (samo zip). Arhiva sadrži točno one top-level folder, a IDE instalira contents te mape kao dio – tako da je arhiva firmvera pakirana ovako:

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

i raspakira se u mapu firmware/ prikazanu ranije. Arhive primjera, modela i dopuna zapakirane su na isti način – jedna omotna mapa koja sadrži ono što bi se nalazilo unutar examples/, models/ ili stubs/. Naziv mape za omatanje se zanemaruje; bitno je da postoji točno jedan. Komprimiranje datoteka u korijenu arhive bez mape za omatanje ili njihovo omatanje u više od jedne mape neće se instalirati. Najjednostavniji način da to učinite kako treba je komprimirati samu mapu – odaberite acme-firmware i komprimirajte je, umjesto da odaberete njezin sadržaj.

13.1.14.6.2. Ploče, primjeri, modeli i dopune#

firmware/settings.json koristi isti format opisa ploče kao firmware koji isporučuje IDE; dodajte boards unos za svaku svoju ploču. Nekoliko je pravila specifično za ploče trećih strana: boardFirmwareFolder mora biti jedinstven (još ga ne koristi OpenMV ili neki drugi proizvođač, budući da imenuje mapu u kojoj žive vaše binarne datoteke), svaka ploča mora nositi vlastiti firmware_version (to je ono što pokreće upit za ažuriranje pri povezivanju), a ploča može postaviti boardFirmwareFolderAlias na naziv mape firmware-a OpenMV ploče naslijedite zalihe primjera i modela te ploče – otvor za spas za ploču koja je firmware kompatibilna s OpenMV. Očekuje se ponovno korištenje OpenMV identifikatora bootloadera (oni nose potpisane Windows upravljačke programe); identifikator aplikacije koji se sudara s ugrađenom pločom poništava tu ploču, o čemu izvješćuje ploča upozorenja Nadjačavanje.

Primjeri idu u numerirane mape kategorija kao što su OpenMV (01-Getting-Started); kategorija koju imenujete isto kao i OpenMV umeće se u nju, a novi naziv postaje vlastiti odjeljak izbornika. Model je mapa koja sadrži svoj .tflite i odgovarajuće .txt oznaka klase, grupiranu pod mapom čiji je index.html (i opcijska slika) opis prikazan pored nje u Model Zoo-u. examples/index.csv i models/index.csv iste su datoteke filtara ploče i senzora koje koristi vlastiti primjer i modeli OpenMV-a, uspoređuju se s vašim primjerima i stazama modela i odlučuju koji će se vaši prikazati za koju ploču. Stubovi su obične datoteke .pyi; IDE predaje njihovu mapu jezičnom poslužitelju tako da se oni rješavaju zajedno s OpenMV-om, a stub nazvan prema postojećem modulu (csi.pyi) nadjačava završetak tog modula.

13.1.14.6.3. Objavljivanje i ažuriranje#

Za objavljivanje, hostirajte config.json i arhive na koje se poziva na stabilnim URL-ovima i dajte korisnicima config.json URL s kojeg mogu instalirati. Bilo gdje koje poslužuje obične datoteke preko HTTPS-a radi – web poslužitelj, pohrana objekata ili host koda. Da biste poslali ažuriranje, učitajte nove arhive, prebacite zahvaćene vrijednosti version u hostirani config.json i sljedeći put kada se IDE svakog korisnika pokrene, nudi ažuriranje. Korisnici koji su instalirali repozitorij putem programa za instalaciju umjesto toga dobivaju ažuriranja na isti način, sve dok instalirani config.json nosi configUrl.

13.1.14.6.4. Hosting na GitHubu#

GitHub je zgodan host, a IDE dohvaća s njega na isti način na koji dohvaća vlastite resurse. Postoje dva dijela za mjesto: manifest i arhiva.

Zadržite config.json u repozitoriju i dajte korisnicima njegov raw URL – adresu na kojoj se datoteka poslužuje izravno, a ne GitHub stranicu koja je prikazuje. Gumb Raw na datoteci to prikazuje; ima oblik

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

Taj neobrađeni URL je ono što korisnik zalijepi u Install from URL i ono što vi stavite u vlastiti configUrl manifesta tako da ga IDE ponovno dohvaća da provjeri ima li ažuriranja. Usmjeravanje na granu (main) znači guranje novog predavanja objavljuje promjenu; usmjeravanjem na oznaku prikvačuje korisnike umjesto toga na fiksnu verziju.

Hranite .zip arhive kao release assets radije nego da ih predajete – izdanja su napravljena za binarna preuzimanja, tako da paket firmvera od više megabajta pripada tamo, a ne u povijest repozitorija. Priložite svaku arhivu GitHub izdanju i upotrijebite njen URL za preuzimanje, koji ima obrazac

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

u poljima url manifesta, svako s sha256 arhive. Slanje ažuriranja je tada: priložite nove arhive izdanju, uredite config.json da biste ukazali na njih i podigli verzije, te počinite. IDE preuzima promjenu pri svom sljedećem pokretanju (neobrađena datoteka se poslužuje kroz predmemoriju koja se osvježava unutar nekoliko minuta od pokretanja).