13.1.14. Kho lưu trữ của bên thứ ba
IDE cung cấp các bo mạch, chương trình cơ sở, ví dụ, mô hình máy học và sơ khai trình soạn thảo của OpenMV nhưng nó cũng có thể tải cùng loại nội dung từ các công ty khác -- một bảng do đối tác xây dựng, chương trình cơ sở chạy trên đó, các ví dụ và mô hình được điều chỉnh cho nó cũng như hoàn thiện mã cho các API mà chương trình cơ sở bổ sung. Chúng xuất hiện dưới dạng third-party repositories: các thư mục nội dung mà IDE hợp nhất với chính nó và luôn cập nhật.
Trang này có hai đối tượng. Hầu hết nó dành cho người cài đặt và quản lý kho lưu trữ mà người khác đã xuất bản. Phần cuối cùng, authoring a repository, dành cho nhà cung cấp việc xây dựng.
13.1.14.1. Trang Kho lưu trữ của bên thứ ba
Mọi thứ được quản lý từ Chỉnh sửa → Tùy chọn → OpenMV → Kho lưu trữ của bên thứ ba. Bảng liệt kê mọi kho lưu trữ đã cài đặt và đối với mỗi kho lưu trữ, tên hiển thị, id rút gọn của nó, cho dù đó là Built-in hay User, phiên bản đã cài đặt của từng loại nội dung mà nó cung cấp -- chương trình cơ sở, ví dụ, mô hình, sơ khai -- và URL mà nó cập nhật từ đó.
Built-in nghĩa là kho lưu trữ được trình cài đặt mà nhà cung cấp chuyển đến đặt vào thư mục riêng của ứng dụng, giống như cách gói trình điều khiển thêm tệp vào chương trình. User có nghĩa là bạn đã tự cài đặt nó từ một URL. Sự khác biệt thực tế duy nhất là bạn không thể xóa kho lưu trữ tích hợp khỏi IDE -- nó bị xóa bằng cách gỡ cài đặt bất cứ thứ gì đặt nó ở đó -- vì vậy nút Xóa bị vô hiệu hóa đối với nó.
13.1.14.2. Cài đặt kho lưu trữ
Cài đặt từ URL yêu cầu địa chỉ config.json của kho lưu trữ -- tệp kê khai nhỏ mà nhà cung cấp xuất bản -- và cài đặt mọi thứ mà nó trỏ tới. Dán URL mà nhà cung cấp đã cung cấp cho bạn; IDE tải xuống tệp kê khai, tìm nạp chương trình cơ sở, ví dụ, mô hình và các sơ khai mà nó liệt kê, đồng thời xác minh mỗi lần tải xuống. Việc cài đặt, xóa và cập nhật kho lưu trữ đều có hiệu lực sau khi khởi động lại, vì vậy IDE đề nghị khởi động lại khi quá trình cài đặt kết thúc.
Nhà cung cấp cũng có thể phân phối kho lưu trữ dưới dạng trình cài đặt thả thẳng vào thư mục ứng dụng, trong trường hợp đó, kho lưu trữ chỉ hiển thị dưới dạng hàng Built-in vào lần đầu tiên bạn mở trang -- không có gì để cài đặt.
13.1.14.3. Luôn cập nhật kho lưu trữ
Kho lưu trữ mang URL cập nhật sẽ được kiểm tra mỗi khi IDE khởi chạy. Khi có nội dung mới hơn, IDE sẽ cho bạn biết nội dung -- liệt kê từng kho lưu trữ và các phiên bản liên quan -- và đề nghị cài đặt nó, tất cả chỉ trong một lời nhắc. Kiểm tra các bản cập nhật thực hiện kiểm tra tương tự theo yêu cầu.
13.1.14.4. Ưu tiên và ghi đè
Các kho lưu trữ là một danh sách có thứ tự, mức độ ưu tiên cao nhất ở trên cùng và Move Up và Move Down sắp xếp lại danh sách đã chọn. Thứ tự chỉ quan trọng khi hai nguồn cung cấp thứ same: một bảng có cùng mã định danh USB hoặc một ví dụ, kiểu máy hoặc sơ khai có cùng tên. Khi điều đó xảy ra, mục nhập cao hơn sẽ chiến thắng và mọi kho lưu trữ sẽ chiến thắng nội dung tích hợp của OpenMV. Điều này là có chủ ý -- đó là cách một nhà cung cấp cung cấp chương trình cơ sở của riêng họ cho một bảng chia sẻ mã nhận dạng USB của bảng OpenMV, thay thế chương trình cơ sở gốc mà IDE sẽ cung cấp cho nó hoặc thay thế một ví dụ chứng khoán bằng một ví dụ được viết cho phần cứng của họ.
Vì phần ghi đè âm thầm thay đổi chức năng của một tên quen thuộc nên trang này không bao giờ ẩn tên đó. Bảng cảnh báo ghi đè liệt kê mọi ghi đè có hiệu lực -- bảng, ví dụ, mô hình hoặc sơ khai của kho lưu trữ nào đang ghi đè cái nào -- và danh sách tương tự sẽ xuất hiện một lần dưới dạng thông báo vào lần đầu tiên người ta nhìn thấy kho lưu trữ. Nếu một bảng, ví dụ hoặc mô hình không hoạt động theo cách tài liệu của OpenMV mô tả thì bảng này là nơi đầu tiên bạn cần xem xét.
13.1.14.5. Kho lưu trữ cung cấp những gì
Bốn loại nội dung này đều xuất hiện ở vị trí thông thường trong IDE, do đó, sau khi cài đặt kho lưu trữ, bạn sẽ không có gì mới để tìm hiểu:
Boards and firmware. Bảng của kho lưu trữ hoạt động chính xác giống như bảng OpenMV -- nó được nhận dạng khi kết nối, loại của nó hiển thị trên thanh trạng thái và các bản cập nhật chương trình cơ sở của nó thông qua IDE, bao gồm cả đường dẫn Cài đặt Bản phát hành Phát triển Mới nhất. Xem Cập nhật firmware và khôi phục.
Examples. Các ví dụ của kho lưu trữ xuất hiện trong Tệp → Ví dụ, được hợp nhất vào cây danh mục: một ví dụ trong danh mục mà nhà cung cấp đặt tên giống với danh mục OpenMV nằm cùng với các danh mục OpenMV và một danh mục mới trở thành menu con của riêng nó. Chúng được lọc vào các bảng mà chúng hỗ trợ giống như bất kỳ ví dụ nào. Xem Tập lệnh, ví dụ và thư mục tài liệu.
Models. Các mô hình của kho lưu trữ xuất hiện trong Model Zoo, được hợp nhất vào cây trình duyệt theo cách tương tự, với các mô tả riêng của nhà cung cấp.
Stubs. Một kho lưu trữ có thể gửi các tệp sơ khai .pyi để editor cung cấp phần hoàn thiện, chữ ký và tài liệu cho các chức năng mà chương trình cơ sở của nó bổ sung -- sự hoàn thành tương tự mà bạn nhận được đối với các mô-đun riêng của OpenMV, dành cho API tùy chỉnh của nhà cung cấp.
13.1.14.6. Tạo một kho lưu trữ
Kho lưu trữ là một thư mục được đặt tên theo nhà cung cấp, chứa tệp kê khai config.json và thư mục con cho từng loại nội dung mà nó cung cấp:
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
Tên thư mục là id kho lưu trữ: chữ cái viết thường, chữ số, - và _, bắt đầu bằng một chữ cái. Mỗi thư mục phần là tùy chọn; chỉ gửi những gì bạn có. Bên cạnh mỗi thư mục phần là một tệp <part>.version chứa một chuỗi phiên bản (1.2.0) mà IDE sử dụng để quyết định khi nào có bản cập nhật mới hơn.
13.1.14.6.1. Bản kê khai
config.json đặt tên cho kho lưu trữ và đối với mỗi phần, chỉ vào kho lưu trữ có thể tải xuống:
{
"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 phải khớp với tên thư mục. configUrl là địa chỉ mà tệp này được lưu trữ tại đó; IDE tìm nạp lại nó để kiểm tra các bản cập nhật, vì vậy hãy bỏ qua nó chỉ đối với một kho lưu trữ sẽ không bao giờ cập nhật. Mỗi phần có kênh release và chương trình cơ sở cũng có thể có kênh development được sử dụng để Cài đặt Bản phát hành phát triển mới nhất. Các giá trị phát hành version được so sánh dưới dạng số, do đó, giá trị cao hơn sẽ được cung cấp dưới dạng bản cập nhật; các phiên bản phát triển chỉ được so sánh để thay đổi. sha256 là tùy chọn nhưng được xác minh khi có mặt.
Mỗi url trỏ tới .zip (chỉ zip). Một kho lưu trữ chứa chính xác one top-level folder và IDE cài đặt contents của thư mục đó làm một phần -- vì vậy kho lưu trữ chương trình cơ sở được đóng gói như thế này:
acme-fw-1.2.0.zip
acme-firmware/ one wrapping folder; its name does not matter
settings.json
ACME_CAM1/
firmware.bin
romfs0.img
và giải nén vào thư mục firmware/ được hiển thị trước đó. Các kho lưu trữ ví dụ, mô hình và sơ khai được đóng gói theo cùng một cách -- một thư mục gói chứa những gì sẽ nằm bên trong examples/, models/ hoặc stubs/. Tên của thư mục gói bị bỏ qua; điều quan trọng là có chính xác một. Việc nén các tập tin ở thư mục gốc của kho lưu trữ mà không có thư mục gói hoặc gói chúng vào nhiều thư mục sẽ không cài đặt được. Cách đơn giản nhất để làm đúng là nén chính thư mục đó -- chọn acme-firmware và nén nó, thay vì chọn nội dung của nó.
13.1.14.6.2. Bảng, ví dụ, mô hình và sơ khai
firmware/settings.json sử dụng định dạng mô tả bảng giống như phần sụn mà IDE cung cấp; thêm mục boards cho mỗi bảng của bạn. Một số quy tắc dành riêng cho bảng của bên thứ ba: boardFirmwareFolder phải là duy nhất (nó chưa được OpenMV hoặc nhà cung cấp khác sử dụng, vì nó đặt tên cho thư mục mà các tệp nhị phân của bạn tồn tại), mỗi bảng phải mang firmware_version riêng (đây là nguyên nhân thúc đẩy lời nhắc cập nhật khi kết nối) và một bảng có thể đặt boardFirmwareFolderAlias thành tên thư mục chương trình cơ sở của bảng OpenMV để kế thừa các ví dụ và mô hình chứng khoán của bảng đó -- cửa thoát hiểm cho bảng đó tương thích với phần mềm cơ sở với OpenMV. Dự kiến sẽ sử dụng lại số nhận dạng bộ tải khởi động OpenMV (chúng mang trình điều khiển Windows đã ký); một mã nhận dạng ứng dụng va chạm với một bảng tích hợp sẽ ghi đè lên bảng đó mà bảng cảnh báo Ghi đè sẽ báo cáo.
Ví dụ nằm trong các thư mục danh mục được đánh số như OpenMV's (01-Getting-Started); một danh mục mà bạn đặt tên giống với danh mục OpenMV sẽ xen vào danh mục đó và tên mới sẽ trở thành phần menu riêng của danh mục đó. Mô hình là một thư mục chứa .tflite và .txt nhãn lớp phù hợp, được nhóm trong một thư mục có index.html (và một hình ảnh tùy chọn) là mô tả hiển thị bên cạnh nó trong Model Zoo. examples/index.csv và models/index.csv là các tệp bảng mạch và bộ lọc cảm biến giống nhau mà các ví dụ và mô hình của OpenMV sử dụng, khớp với các đường dẫn mẫu và mô hình của bạn, đồng thời quyết định tệp nào của bạn hiển thị cho bảng nào. Sơ khai là các tệp .pyi thông thường; IDE chuyển thư mục của chúng đến máy chủ ngôn ngữ để chúng phân giải cùng với OpenMV và một sơ khai được đặt tên cho mô-đun hiện có (csi.pyi) sẽ ghi đè quá trình hoàn thành của mô-đun đó.
13.1.14.6.3. Xuất bản và cập nhật
Để xuất bản, hãy lưu trữ config.json và các kho lưu trữ mà nó tham chiếu tại các URL ổn định, đồng thời cung cấp cho người dùng URL config.json để cài đặt. Bất cứ nơi nào cung cấp các tệp đơn giản qua HTTPS đều hoạt động -- máy chủ web, kho lưu trữ đối tượng hoặc máy chủ lưu trữ mã. Để gửi bản cập nhật, hãy tải các kho lưu trữ mới lên, tăng các giá trị version bị ảnh hưởng trong config.json được lưu trữ và lần tiếp theo khi IDE của mỗi người dùng khởi chạy, nó sẽ cung cấp bản cập nhật. Thay vào đó, người dùng đã cài đặt kho lưu trữ thông qua trình cài đặt sẽ nhận được các bản cập nhật theo cách tương tự, miễn là config.json đã cài đặt mang configUrl.
13.1.14.6.4. Lưu trữ trên GitHub
GitHub là một máy chủ tiện lợi và IDE tìm nạp từ nó giống như cách nó tìm nạp tài nguyên của chính nó. Có hai phần cần đặt: bảng kê khai và kho lưu trữ.
Giữ config.json trong kho lưu trữ và cung cấp cho người dùng URL raw -- địa chỉ mà tệp được cung cấp trực tiếp chứ không phải trang GitHub hiển thị nó. Nút Raw trên tệp hiển thị nó; nó có dạng
https://raw.githubusercontent.com/<user>/<repo>/<branch>/config.json
URL thô đó là URL mà người dùng dán vào Cài đặt từ URL và là URL bạn đặt trong configUrl của chính tệp kê khai để IDE tìm nạp lại URL đó để kiểm tra các bản cập nhật. Trỏ nó vào một nhánh (main) có nghĩa là đẩy một cam kết mới sẽ công bố thay đổi; thay vào đó, việc trỏ nó vào một thẻ sẽ ghim người dùng vào một phiên bản cố định.
Lưu trữ các kho lưu trữ .zip dưới dạng release assets thay vì cam kết chúng -- các bản phát hành được xây dựng để tải xuống nhị phân, do đó, gói chương trình cơ sở nhiều megabyte thuộc về đó, không có trong lịch sử của kho lưu trữ. Đính kèm từng kho lưu trữ vào bản phát hành GitHub và sử dụng URL tải xuống của nó, có dạng
https://github.com/<user>/<repo>/releases/download/<tag>/acme-fw-1.2.0.zip
trong các trường url của tệp kê khai, mỗi trường có sha256 của kho lưu trữ. Sau đó, gửi một bản cập nhật là: đính kèm các kho lưu trữ mới vào một bản phát hành, chỉnh sửa config.json để chỉ vào chúng và sửa đổi các phiên bản, rồi cam kết. IDE sẽ tiếp nhận thay đổi trong lần khởi chạy tiếp theo (tệp thô được cung cấp thông qua bộ nhớ đệm sẽ làm mới trong vòng vài phút sau lần đẩy).