13.1.14. Repositori pihak ketiga
IDE mengirimkan papan, firmware, contoh, model pembelajaran mesin, dan stub editor milik OpenMV sendiri, tetapi IDE juga dapat memuat jenis konten yang sama dari perusahaan lain -- papan yang dibuat oleh mitra, firmware yang berjalan di dalamnya, contoh dan model yang disesuaikan untuk itu, dan penyelesaian kode untuk API yang ditambahkan firmware. Ini tiba sebagai third-party repositories: folder konten yang digabungkan IDE dengan miliknya sendiri dan selalu diperbarui.
Halaman ini memiliki dua audiens. Sebagian besar diperuntukkan bagi orang yang menginstal dan mengelola repositori yang diterbitkan orang lain. Bagian terakhir, authoring a repository, ditujukan untuk vendor pembuat.
13.1.14.1. Halaman Repositori Pihak Ketiga
Semuanya dikelola dari Edit → Preferensi → OpenMV → Repositori Pihak Ketiga. Tabel ini mencantumkan setiap repositori yang terinstal dan, untuk setiap repositori, nama tampilannya, id singkatnya, apakah itu Built-in atau User, versi terinstal dari setiap jenis konten yang disediakan -- firmware, contoh, model, stub -- dan URL asal pembaruannya.
Built-in berarti repositori ditempatkan ke dalam direktori aplikasi itu sendiri oleh penginstal yang dikirimkan vendor, seperti halnya paket driver menambahkan file ke suatu program. User berarti Anda menginstalnya sendiri dari URL. Satu-satunya perbedaan praktis adalah Anda tidak dapat menghapus repositori bawaan dari IDE -- repositori tersebut dihapus dengan menghapus instalasi apa pun yang menyimpannya di sana -- sehingga tombol Hapus dinonaktifkan untuk repositori tersebut.
13.1.14.2. Menginstal repositori
Instal dari URL meminta alamat config.json repositori -- file manifes kecil yang diterbitkan vendor -- dan menginstal semua yang ditunjuknya. Tempelkan URL yang diberikan vendor kepada Anda; IDE mengunduh manifes, mengambil firmware, contoh, model, dan stub yang dicantumkannya, dan memverifikasi setiap unduhan. Menginstal, menghapus, dan memperbarui repositori semuanya berlaku setelah restart, sehingga IDE menawarkan untuk memulai ulang ketika instalasi selesai.
Vendor juga dapat mendistribusikan repositori sebagai penginstal yang memasukkannya langsung ke direktori aplikasi, dalam hal ini repositori hanya ditampilkan sebagai baris Built-in saat pertama kali Anda membuka halaman -- tidak ada yang perlu diinstal.
13.1.14.3. Terus memperbarui repositori
Repositori yang membawa URL pembaruan diperiksa setiap kali IDE diluncurkan. Ketika konten yang lebih baru tersedia, IDE akan memberi tahu Anda apa saja -- mencantumkan setiap repositori dan versi yang terlibat -- dan menawarkan untuk menginstalnya, semuanya dalam satu prompt. Periksa Pembaruan menjalankan pemeriksaan yang sama sesuai permintaan.
13.1.14.4. Prioritas dan penggantian
Repositori adalah daftar yang diurutkan, prioritas tertinggi di atas, dan Pindah ke Atas dan Pindah ke Bawah menyusun ulang yang dipilih. Urutan hanya penting jika dua sumber menyediakan hal same: papan dengan pengenal USB yang sama, atau contoh, model, atau rintisan dengan nama yang sama. Ketika itu terjadi, entri yang lebih tinggi akan menang, dan setiap repositori menang atas konten bawaan OpenMV. Hal ini disengaja -- ini adalah cara vendor menyediakan firmware mereka sendiri untuk board yang berbagi pengenal USB board OpenMV, menggantikan firmware bawaan yang seharusnya ditawarkan oleh IDE, atau mengganti contoh stok dengan yang ditulis untuk perangkat keras mereka.
Karena override secara diam-diam mengubah fungsi nama yang sudah dikenal, halaman tidak pernah menyembunyikannya. Panel peringatan Override mencantumkan setiap override yang berlaku -- papan, contoh, model, atau stub repositori mana yang ditimpa -- dan daftar yang sama muncul satu kali sebagai pesan saat pertama kali repositori dilihat. Jika sebuah papan, contoh, atau model tidak berperilaku seperti yang dijelaskan dalam dokumentasi OpenMV, panel ini adalah tempat pertama yang harus dicari.
13.1.14.5. Apa yang disediakan oleh repositori
Keempat jenis konten tersebut masing-masing muncul di tempat biasanya di IDE, jadi setelah repositori diinstal, tidak ada hal baru yang perlu dipelajari:
Boards and firmware. Papan repositori berperilaku persis seperti papan OpenMV -- papan tersebut dikenali saat terhubung, jenisnya ditampilkan di bilah status, dan pembaruan firmware melalui IDE, termasuk jalur Instal Rilis Pengembangan Terbaru. Lihat Pembaruan firmware dan pemulihan.
Examples. Contoh repositori muncul di File → Contoh, digabungkan ke dalam pohon kategori: contoh dalam kategori yang diberi nama vendor sama dengan kategori OpenMV berada di samping kategori OpenMV, dan kategori baru menjadi submenu tersendiri. Mereka disaring ke papan yang mereka dukung seperti contoh lainnya. Lihat Skrip, contoh, dan folder dokumen.
Models. Model repositori muncul di Model Zoo, digabungkan ke dalam pohon browser dengan cara yang sama, dengan deskripsi vendor sendiri.
Stubs. Repositori dapat mengirimkan .pyi file rintisan sehingga editor menawarkan penyelesaian, tanda tangan, dan dokumentasi untuk fungsi yang ditambahkan oleh firmware -- penyelesaian yang sama yang Anda dapatkan untuk modul OpenMV sendiri, untuk API khusus vendor.
13.1.14.6. Membuat repositori
Repositori adalah folder yang diberi nama vendor, berisi manifes config.json dan subfolder untuk setiap jenis konten yang disediakan:
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
Nama folder adalah id repositori: huruf kecil, angka, - dan _, dimulai dengan huruf. Setiap folder bagian bersifat opsional; kirimkan hanya apa yang Anda punya. Di samping setiap folder bagian terdapat file <part>.version yang menyimpan string versi tunggal (1.2.0) yang digunakan IDE untuk memutuskan kapan pembaruan lebih baru.
13.1.14.6.1. Manifes
config.json memberi nama repositori dan, untuk setiap bagian, menunjuk pada arsip yang dapat diunduh:
{
"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 harus sesuai dengan nama folder. configUrl adalah alamat tempat file yang sama ini dihosting; IDE mengambilnya kembali untuk memeriksa pembaruan, jadi hilangkan hanya untuk repositori yang tidak akan pernah diperbarui. Setiap bagian memiliki saluran release, dan firmware mungkin juga memiliki saluran development yang digunakan oleh Instal Rilis Pengembangan Terbaru. Nilai rilis version dibandingkan sebagai angka, sehingga nilai yang lebih tinggi ditawarkan sebagai pembaruan; versi pengembangan dibandingkan hanya untuk perubahan. sha256 bersifat opsional tetapi diverifikasi jika ada.
Setiap url menunjuk pada .zip (hanya zip). Arsip menampung persis one top-level folder, dan IDE menginstal contents folder tersebut sebagai bagiannya -- sehingga arsip firmware dikemas seperti ini:
acme-fw-1.2.0.zip
acme-firmware/ one wrapping folder; its name does not matter
settings.json
ACME_CAM1/
firmware.bin
romfs0.img
dan buka paketnya ke folder firmware/ yang ditunjukkan sebelumnya. Arsip contoh, model, dan stub dikemas dengan cara yang sama -- satu folder pembungkus yang menampung apa yang ada di dalam examples/, models/, atau stubs/. Nama folder pembungkus diabaikan; yang penting ada satu. Melakukan zip file pada root arsip tanpa folder pembungkus, atau membungkusnya dalam lebih dari satu folder, tidak akan diinstal. Cara termudah untuk melakukannya dengan benar adalah dengan meng-zip folder itu sendiri -- pilih acme-firmware dan kompres, daripada memilih isinya.
13.1.14.6.2. Papan, contoh, model, dan rintisan
firmware/settings.json menggunakan format deskripsi papan yang sama dengan firmware yang dikirimkan IDE; tambahkan entri boards untuk setiap papan Anda. Beberapa aturan khusus untuk papan pihak ketiga: boardFirmwareFolder harus unik (belum digunakan oleh OpenMV atau vendor lain, karena ini memberi nama folder tempat biner Anda berada), setiap papan harus membawa firmware_version sendiri (inilah yang mendorong perintah update-on-connect), dan papan dapat menetapkan boardFirmwareFolderAlias ke nama folder firmware papan OpenMV untuk mewarisi contoh dan model stok papan tersebut -- jalan keluar untuk papan papan yang kompatibel dengan firmware dengan OpenMV. Diharapkan menggunakan kembali pengidentifikasi bootloader OpenMV (mereka membawa driver Windows yang ditandatangani); pengidentifikasi aplikasi yang bertabrakan dengan papan internal akan mengambil alih papan tersebut, yang dilaporkan oleh panel peringatan Abaikan.
Contohnya masuk dalam folder kategori bernomor seperti OpenMV (01-Getting-Started); kategori yang Anda beri nama sama dengan OpenMV disisipkan ke dalamnya, dan nama baru menjadi bagian menunya sendiri. Model adalah folder yang menyimpan .tflite dan .txt label kelas yang cocok, dikelompokkan dalam folder yang index.html (dan gambar opsional) adalah deskripsi yang ditampilkan di sampingnya di Model Zoo. examples/index.csv dan models/index.csv adalah file papan dan filter sensor yang sama dengan yang digunakan oleh contoh dan model OpenMV, dicocokkan dengan jalur contoh dan model Anda, dan tentukan milik Anda yang mana yang ditampilkan untuk papan mana. Stub adalah file .pyi biasa; IDE menyerahkan folder mereka ke server bahasa sehingga mereka menyelesaikannya bersama OpenMV, dan sebuah stub yang diberi nama untuk modul yang ada (csi.pyi) menggantikan penyelesaian modul tersebut.
13.1.14.6.3. Penerbitan dan pembaruan
Untuk mempublikasikan, host config.json dan arsip yang dirujuknya pada URL stabil dan berikan pengguna config.json URL untuk menginstal. Di mana pun yang menyajikan file biasa melalui HTTPS berfungsi -- server web, penyimpanan objek, atau host kode. Untuk mengirimkan pembaruan, unggah arsip baru, masukkan nilai version yang terpengaruh di config.json yang dihosting, dan saat berikutnya setiap IDE pengguna diluncurkan, ia akan menawarkan pembaruan. Pengguna yang menginstal repositori melalui penginstal mendapatkan pembaruan dengan cara yang sama, selama config.json yang diinstal membawa configUrl.
13.1.14.6.4. Hosting di GitHub
GitHub adalah host yang nyaman, dan IDE mengambilnya dengan cara yang sama seperti mengambil sumber dayanya sendiri. Ada dua bagian yang harus ditempatkan: manifes dan arsip.
Simpan config.json di repositori dan berikan URL raw kepada pengguna -- alamat tempat file disajikan secara langsung, bukan halaman GitHub yang menampilkannya. Tombol Raw pada file menunjukkannya; itu memiliki bentuk
https://raw.githubusercontent.com/<user>/<repo>/<branch>/config.json
URL mentah tersebut adalah apa yang ditempelkan pengguna ke dalam Instal dari URL, dan apa yang Anda masukkan ke dalam manifes configUrl sehingga IDE mengambilnya kembali untuk memeriksa pembaruan. Menunjuknya ke cabang (main) berarti mendorong komit baru untuk menerbitkan perubahan; mengarahkannya ke tag akan menyematkan pengguna ke versi tetap.
Host arsip .zip sebagai release assets daripada mengkomitnya -- rilis dibuat untuk pengunduhan biner, sehingga bundel firmware multi-megabita ada di sana, bukan dalam riwayat repositori. Lampirkan setiap arsip ke rilis GitHub dan gunakan URL unduhannya, yang memiliki formulir
https://github.com/<user>/<repo>/releases/download/<tag>/acme-fw-1.2.0.zip
di kolom manifes url, masing-masing berisi sha256 arsip. Pengiriman pembaruan kemudian: lampirkan arsip baru ke rilis, edit config.json untuk menunjuk ke sana dan ubah versinya, lalu komit. IDE mengambil perubahan pada peluncuran berikutnya (file mentah disajikan melalui cache yang disegarkan dalam beberapa menit setelah push).