13.1.14. Üçüncü taraf depolar
IDE, OpenMV’nin kendi anakartlarını, donanım yazılımını, örneklerini, makine öğrenimi modellerini ve editör taslaklarını gönderir, ancak diğer şirketlerden de aynı türden içerikleri yükleyebilir - bir iş ortağının oluşturduğu bir kart, üzerinde çalışan donanım yazılımı, bunun için ayarlanmış örnekler ve modeller ve donanım yazılımının eklediği API’ler için kod tamamlama. Bunlar third-party repositories olarak gelir: IDE’nin kendi içeriğiyle birleştirdiği ve güncel tuttuğu içerik klasörleri.
Bu sayfanın iki hedef kitlesi var. Çoğu, başka birinin yayınladığı bir veri havuzunu kuran ve yöneten kişi içindir. Son bölüm olan authoring a repository, satıcının bir bölüm oluşturması içindir.
13.1.14.1. Üçüncü Taraf Depoları sayfası
Her şey Düzenle → Tercihler → OpenMV → Üçüncü Taraf Depolarından yönetilir. Tablo, yüklü her depoyu ve her biri için görünen adını, kısa kimliğini, ister Built-in ister User olsun, sağladığı her tür içeriğin (ürün yazılımı, örnekler, modeller, taslaklar) yüklü sürümünü ve güncellendiği URL’yi listeler.
Built-in, sürücü paketinin bir programa dosya ekleme şekli gibi, deponun satıcının gönderdiği yükleyici tarafından uygulamanın kendi dizinine yerleştirildiği anlamına gelir. User, uygulamayı bir URL’den kendinizin yüklediğiniz anlamına gelir. Tek pratik fark, yerleşik bir depoyu IDE’den kaldıramayacağınızdır - oraya koyan her ne varsa kaldırılarak kaldırılır - dolayısıyla Kaldır düğmesi bunun için devre dışı bırakılır.
13.1.14.2. Depo kurulumu
URL’den yükle, bir havuzun config.json adresini (satıcının yayınladığı küçük bildirim dosyası) sorar ve işaret ettiği her şeyi yükler. Satıcının size verdiği URL’yi yapıştırın; IDE manifestoyu indirir, listelediği bellenimi, örnekleri, modelleri ve taslakları getirir ve her indirmeyi doğrular. Bir havuzun kurulması, kaldırılması ve güncellenmesi yeniden başlatmanın ardından etkili olur, bu nedenle IDE, yükleme tamamlandığında yeniden başlatmayı önerir.
Bir satıcı aynı zamanda bir depoyu, onu doğrudan uygulama dizinine bırakan bir yükleyici olarak da dağıtabilir; bu durumda, sayfayı ilk açtığınızda basitçe Built-in satırı olarak sunulur; yüklenecek bir şey yoktur.
13.1.14.3. Depoların güncel tutulması
IDE her başlatıldığında güncelleme URL’si taşıyan bir depo kontrol edilir. Daha yeni içerik mevcut olduğunda, IDE size ne olduğunu söyler (her bir depoyu ve ilgili sürümleri listeler) ve onu yüklemeyi teklif eder, üstelik hepsi tek bir istemde yapılır. Güncellemeleri Kontrol Et, talep üzerine aynı kontrolü çalıştırır.
13.1.14.4. Öncelik ve geçersiz kılmalar
Depolar sıralı bir listedir, en yüksek öncelik en üsttedir ve Yukarı Taşı ve Aşağı Taşı seçilenleri yeniden sıralar. Sıra yalnızca iki kaynak same şeyini sağladığında önemlidir: aynı USB tanımlayıcısına sahip bir kart veya aynı adı taşıyan bir örnek, model veya saplama. Bu gerçekleştiğinde, daha yüksek olan giriş kazanır ve her depo, OpenMV’nin yerleşik içeriğini kazanır. Bu kasıtlıdır - bu, bir satıcının bir OpenMV kartının USB tanımlayıcısını paylaşan, IDE’nin aksi takdirde sunacağı stok ürün yazılımını değiştiren veya bir stok örneğini kendi donanımları için yazılmış bir örnekle değiştiren bir kart için kendi donanım yazılımını nasıl sağladığıdır.
Geçersiz kılma, tanıdık bir adın yaptıklarını sessizce değiştirdiğinden, sayfa hiçbir zaman adı gizlemez. Geçersiz kılma uyarıları paneli, geçerli olan her geçersiz kılmayı (hangi deponun panosu, örneği, modeli veya saplaması hangisini geçersiz kılıyor) listeler ve aynı liste, bir depo ilk kez görüldüğünde bir mesaj olarak bir kez görünür. Bir kart, örnek veya model OpenMV belgelerinde tanımlandığı gibi davranmıyorsa bakılacak ilk yer bu paneldir.
13.1.14.5. Bir depo ne sağlar?
Dört tür içeriğin her biri IDE’de normal yerlerinde görünür, dolayısıyla bir depo kurulduğunda öğrenilecek yeni bir şey kalmaz:
Boards and firmware. Deponun panosu tam olarak bir OpenMV panosu gibi davranır; bağlantı sırasında tanınır, türü durum çubuğunda gösterilir ve En Son Geliştirme Sürümünü Yükle yolu da dahil olmak üzere IDE aracılığıyla ürün yazılımı güncellemeleri yapılır. Bakınız Aygıt yazılımı güncellemeleri ve kurtarma.
Examples. Deponun örnekleri Dosya → Örnekler bölümünde kategori ağacıyla birleştirilmiş olarak görünür: Satıcının OpenMV kategorisiyle aynı adı taşıyan bir kategorideki örnek, OpenMV kategorilerinin yanında yer alır ve yeni bir kategori kendi alt menüsü haline gelir. Herhangi bir örnekte olduğu gibi destekledikleri panolara göre filtrelenirler. Bakınız Betikler, örnekler ve belgeler klasörü.
Models. Deponun modelleri, satıcının kendi açıklamalarıyla aynı şekilde tarayıcı ağacıyla birleştirilmiş olarak Model Zoo’de görünür.
Stubs. Bir depo, .pyi saplama dosyalarını gönderebilir, böylece editor, donanım yazılımının eklediği işlevler için tamamlama, imzalar ve belgeler sunar; bir satıcının özel API’si için OpenMV’nin kendi modülleri için elde ettiğiniz tamamlamanın aynısı.
13.1.14.6. Depo yazma
Depo, satıcının adını taşıyan, config.json bildirimini ve sağladığı her içerik türü için bir alt klasörü tutan bir klasördür:
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
Klasör adı, depo kimliğidir: küçük harfler, rakamlar, - ve _, bir harfle başlar. Her parça klasörü isteğe bağlıdır; yalnızca sahip olduğunuz şeyleri gönderin. Her parça klasörünün yanında, IDE’nin bir güncellemenin ne zaman daha yeni olacağına karar vermek için kullandığı tek bir sürüm dizesini (1.2.0) tutan bir <part>.version dosyası bulunur.
13.1.14.6.1. manifesto
config.json depoyu adlandırır ve her parça için indirilebilir bir arşivi işaret eder:
{
"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 klasör adıyla eşleşmelidir. configUrl aynı dosyanın barındırıldığı adrestir; IDE, güncellemeleri kontrol etmek için onu yeniden getirir, bu nedenle onu yalnızca hiçbir zaman güncellenmeyecek bir depo için atlayın. Her parçanın bir release kanalı vardır ve ürün yazılımının En Son Geliştirme Sürümünü Yükle tarafından kullanılan bir development kanalı da olabilir. Sürüm version değerleri sayı olarak karşılaştırılıyor, dolayısıyla güncelleme olarak daha yüksek olanı sunuluyor; geliştirme sürümleri yalnızca değişiklik için karşılaştırılır. sha256 isteğe bağlıdır ancak mevcut olduğunda doğrulanır.
Her url, .zip’yi (yalnızca zip) gösterir. Bir arşiv tam olarak one top-level folder dosyasını içerir ve IDE bu klasörün contents dosyasını parça olarak yükler; dolayısıyla ürün yazılımı arşivi şu şekilde paketlenir:
acme-fw-1.2.0.zip
acme-firmware/ one wrapping folder; its name does not matter
settings.json
ACME_CAM1/
firmware.bin
romfs0.img
ve daha önce gösterilen firmware/ klasörüne paketi açar. Örnekler, modeller ve taslak arşivleri aynı şekilde paketlenmiştir; examples/, models/ veya stubs/’nin içinde yer alacak öğeleri tutan bir sarma klasörü. Sarma klasörünün adı dikkate alınmaz; önemli olan tam olarak bir tane olmasıdır. Dosyaları arşiv kökünde sarma klasörü olmadan sıkıştırmak veya birden fazla klasöre sarmak yüklenmeyecektir. Bunu doğru yapmanın en basit yolu, klasörün kendisini sıkıştırmaktır; içeriğini seçmek yerine acme-firmware’yi seçin ve sıkıştırın.
13.1.14.6.2. Panolar, örnekler, modeller ve taslaklar
firmware/settings.json, IDE’nin gönderdiği donanım yazılımıyla aynı kart açıklama formatını kullanır; panolarınızın her biri için boards girişi ekleyin. Birkaç kural üçüncü taraf panolara özeldir: boardFirmwareFolder benzersiz olmalıdır (ikili dosyalarınızın bulunduğu klasörü adlandırdığından henüz OpenMV veya başka bir satıcı tarafından kullanılmamaktadır), her pano kendi firmware_version’sini taşımalıdır (bağlantıda güncelleme istemini yönlendiren şey budur) ve bir kart, o panonun stok örneklerini ve modellerini devralmak için bir OpenMV panosunun donanım yazılımı klasörü adına boardFirmwareFolderAlias ayarlayabilir - kaçış kapısı OpenMV ile donanım yazılımı uyumlu bir kart. OpenMV önyükleyici tanımlayıcılarının yeniden kullanılması beklenir (imzalı Windows sürücülerini taşırlar); Yerleşik bir panoyla çarpışan bir uygulama tanımlayıcısı, uyarıları geçersiz kıl panelinin bildirdiği panoyu geçersiz kılar.
Örnekler, OpenMV’ler (01-Getting-Started) gibi numaralandırılmış kategori klasörlerinde bulunur; OpenMV ile aynı adı verdiğiniz bir kategori buna eklenir ve yeni bir ad, kendi menü bölümü haline gelir. Model, .tflite ve eşleşen .txt sınıf etiketlerini tutan ve index.html (ve isteğe bağlı bir görüntü) Model Hayvanat Bahçesi’nde yanında gösterilen açıklama olan bir klasör altında gruplandırılmış bir klasördür. examples/index.csv ve models/index.csv, OpenMV’nin kendi örnek ve modellerinin kullandığı aynı kart ve sensör filtre dosyalarıdır, örnek ve model yollarınızla eşleştirilir ve hanginizin hangi kart için gösterileceğine karar verir. Taslaklar sıradan .pyi dosyalarıdır; IDE, klasörlerini dil sunucusuna aktarır, böylece OpenMV’lerle birlikte çözümlenirler ve mevcut bir modül (csi.pyi) için adlandırılan bir saplama, o modülün tamamlanmasını geçersiz kılar.
13.1.14.6.3. Yayınlama ve güncelleme
Yayınlamak için config.json dosyasını ve referans verdiği arşivleri sabit URL’lerde barındırın ve kullanıcılara kurulum için config.json URL’sini verin. HTTPS üzerinden düz dosyalar sunan herhangi bir yer (bir web sunucusu, bir nesne deposu veya bir kod ana bilgisayarı) çalışır. Bir güncelleme göndermek için yeni arşivler yükleyin, barındırılan config.json’de etkilenen version değerlerini yükseltin ve her kullanıcının IDE’si bir sonraki başlatılışında güncellemeyi sunar. Depoyu bir yükleyici aracılığıyla yükleyen kullanıcılar, yüklü config.json, configUrl taşıdığı sürece güncellemeleri aynı şekilde alırlar.
13.1.14.6.4. GitHub’da barındırma
GitHub kullanışlı bir ana bilgisayardır ve IDE, kendi kaynaklarını aldığı gibi buradan da gelir. Yerleştirilecek iki parça var: manifesto ve arşivler.
config.json dosyasını bir depoda tutun ve kullanıcılara raw URL’sini verin; dosyayı görüntüleyen GitHub sayfası değil, dosyanın doğrudan sunulduğu adres. Dosyadaki Raw düğmesi bunu gösterir; bir formu var
https://raw.githubusercontent.com/<user>/<repo>/<branch>/config.json
Bu ham URL, bir kullanıcının URL’den Kur’a yapıştırdığı ve manifestin kendi configUrl dosyasına koyduğunuz şeydir, böylece IDE güncellemeleri kontrol etmek için onu yeniden getirir. Bunu bir şubeye (main) işaret etmek, yeni bir taahhüdün değişikliği yayınlaması anlamına gelir; bunu bir etikete işaret etmek, kullanıcıları bunun yerine sabit bir sürüme sabitler.
.zip arşivlerini taahhüt etmek yerine release assets olarak barındırın; sürümler ikili indirmeler için oluşturulmuştur, bu nedenle multi megabaytlık bir ürün yazılımı paketi, deponun geçmişine değil, oraya aittir. Her arşivi bir GitHub sürümüne ekleyin ve şu formu içeren indirme URL’sini kullanın:
https://github.com/<user>/<repo>/releases/download/<tag>/acme-fw-1.2.0.zip
manifest’in url alanlarının her birinde arşivin sha256’si bulunur. O zaman bir güncelleme göndermek şu anlama gelir: yeni arşivleri bir sürüme ekleyin, config.json’yi düzenleyerek onlara işaret edin ve sürümleri öne çıkarın ve taahhüt edin. IDE değişikliği bir sonraki açılışında alır (ham dosya, gönderimden birkaç dakika sonra yenilenen bir önbellek aracılığıyla sunulur).