13.1.14. พื้นที่เก็บข้อมูลของบุคคลที่สาม#

IDE จัดส่งบอร์ด เฟิร์มแวร์ ตัวอย่าง โมเดลการเรียนรู้ของเครื่อง และสตับของโปรแกรม OpenMV เอง แต่สามารถโหลดเนื้อหาประเภทเดียวกันจากบริษัทอื่นได้เช่นกัน เช่น บอร์ดที่พันธมิตรสร้างขึ้น เฟิร์มแวร์ที่ทำงานบนนั้น ตัวอย่างและโมเดลที่ปรับให้เหมาะสม และการเติมโค้ดให้สมบูรณ์สำหรับ API ที่เฟิร์มแวร์เพิ่ม สิ่งเหล่านี้มาถึงเป็น third-party repositories: โฟลเดอร์ของเนื้อหาที่ IDE ผสานเข้ากับตัวมันเองและคอยอัปเดตอยู่เสมอ

เพจนี้มีผู้ชมสองคน ส่วนใหญ่มีไว้สำหรับบุคคลที่ติดตั้งและจัดการพื้นที่เก็บข้อมูลที่ผู้อื่นเผยแพร่ ส่วนสุดท้าย authoring a repository ใช้สำหรับการสร้างผู้ขาย

13.1.14.1. หน้าพื้นที่เก็บข้อมูลของบุคคลที่สาม#

ทุกอย่างจัดการได้จาก Edit → Preferences → OpenMV → Third Party Repositories ตารางแสดงรายการที่เก็บที่ติดตั้งทั้งหมด และสำหรับแต่ละชื่อที่แสดง รหัสแบบสั้น ไม่ว่าจะเป็น Built-in หรือ User เวอร์ชันที่ติดตั้งของเนื้อหาแต่ละประเภทที่มีให้ เช่น เฟิร์มแวร์ ตัวอย่าง รุ่น สตับ และ URL ที่อัปเดต

Built-in หมายความว่าพื้นที่เก็บข้อมูลถูกวางไว้ในไดเร็กทอรีของแอปพลิเคชันโดยผู้ติดตั้งที่ผู้จำหน่ายจัดส่งมาให้ ซึ่งเป็นวิธีที่แพ็คเกจไดรเวอร์เพิ่มไฟล์ลงในโปรแกรม User หมายความว่าคุณติดตั้งด้วยตนเองจาก URL ข้อแตกต่างในทางปฏิบัติเพียงอย่างเดียวคือคุณไม่สามารถลบที่เก็บข้อมูลในตัวออกจาก IDE ได้ - มันถูกลบออกโดยการถอนการติดตั้งอะไรก็ตามที่วางไว้ตรงนั้น - ดังนั้นปุ่ม Remove จึงถูกปิดใช้งาน

13.1.14.2. การติดตั้งพื้นที่เก็บข้อมูล#

Install from URL จะขอที่อยู่ของพื้นที่เก็บข้อมูล config.json ซึ่งเป็นไฟล์ Manifest ขนาดเล็กที่ผู้จำหน่ายเผยแพร่ และติดตั้งทุกอย่างที่ชี้ไป วาง URL ที่ผู้ขายมอบให้คุณ IDE จะดาวน์โหลดไฟล์ Manifest ดึงเฟิร์มแวร์ ตัวอย่าง โมเดล และสตับแสดงรายการ และตรวจสอบการดาวน์โหลดแต่ละครั้ง การติดตั้ง การลบ และการอัปเดตพื้นที่เก็บข้อมูลทั้งหมดจะมีผลหลังจากการรีสตาร์ท ดังนั้น IDE จึงเสนอให้รีสตาร์ทเมื่อการติดตั้งเสร็จสิ้น

ผู้จำหน่ายยังสามารถกระจายพื้นที่เก็บข้อมูลเป็นตัวติดตั้งที่จะวางลงในไดเร็กทอรีแอปพลิเคชันโดยตรง ซึ่งในกรณีนี้พื้นที่เก็บข้อมูลจะแสดงเป็นแถว Built-in ในครั้งแรกที่คุณเปิดเพจ ไม่มีอะไรให้ติดตั้ง

13.1.14.3. การปรับปรุงที่เก็บข้อมูล#

พื้นที่เก็บข้อมูลที่มี URL การอัพเดตจะถูกตรวจสอบทุกครั้งที่เปิดใช้งาน IDE เมื่อมีเนื้อหาใหม่ IDE จะบอกคุณว่า - แสดงรายการพื้นที่เก็บข้อมูลแต่ละแห่งและเวอร์ชันที่เกี่ยวข้อง - และเสนอให้ติดตั้ง ทั้งหมดในพร้อมท์เดียว ตรวจสอบการอัปเดตจะดำเนินการตรวจสอบเดียวกันตามความต้องการ

13.1.14.4. ลำดับความสำคัญและการแทนที่#

ที่เก็บเป็นรายการที่เรียงลำดับ มีลำดับความสำคัญสูงสุดที่ด้านบน และเลื่อนขึ้นและเลื่อนลงเพื่อจัดลำดับรายการที่เลือกใหม่ ลำดับจะมีความสำคัญก็ต่อเมื่อมีแหล่งที่มาสองแหล่งให้สิ่งที่ same: บอร์ดที่มีตัวระบุ USB เดียวกัน หรือตัวอย่าง รุ่น หรือต้นขั้วที่มีชื่อเดียวกัน เมื่อสิ่งนั้นเกิดขึ้น รายการที่สูงกว่าจะชนะ และพื้นที่เก็บข้อมูลทุกแห่งจะชนะเนื้อหาในตัวของ OpenMV นี่เป็นการจงใจ - เป็นวิธีที่ผู้ขายจัดหาเฟิร์มแวร์ของตนเองสำหรับบอร์ดที่ใช้ตัวระบุ USB ของบอร์ด OpenMV ร่วมกัน แทนที่เฟิร์มแวร์หุ้นที่ IDE จะเสนอให้ หรือแทนที่ตัวอย่างหุ้นด้วยอันที่เขียนขึ้นสำหรับฮาร์ดแวร์ของพวกเขา

เนื่องจากการแทนที่จะเปลี่ยนการทำงานของชื่อที่คุ้นเคย เพจจึงไม่มีการซ่อนชื่อใดเลย แผงคำเตือนการแทนที่จะแสดงรายการการแทนที่ทั้งหมดที่มีผล - บอร์ดของพื้นที่เก็บข้อมูล ตัวอย่าง โมเดล หรือต้นขั้วกำลังแทนที่ส่วนใด - และรายการเดียวกันนี้จะปรากฏหนึ่งครั้งเป็นข้อความในครั้งแรกที่เห็นพื้นที่เก็บข้อมูล หากบอร์ด ตัวอย่าง หรือรุ่นไม่ทำงานตามที่เอกสารของ OpenMV อธิบาย แผงนี้เป็นสถานที่แรกที่ต้องพิจารณา

13.1.14.5. สิ่งที่พื้นที่เก็บข้อมูลมอบให้#

เนื้อหาทั้งสี่ประเภทแต่ละประเภทจะปรากฏในตำแหน่งปกติใน IDE ดังนั้นเมื่อติดตั้งพื้นที่เก็บข้อมูลแล้ว จะไม่มีอะไรใหม่ให้เรียนรู้:

  • Boards and firmware. บอร์ดของพื้นที่เก็บข้อมูลทำงานเหมือนกับบอร์ด OpenMV ทุกประการ โดยจะรับรู้ได้เมื่อเชื่อมต่อ ประเภทของบอร์ดจะแสดงในแถบสถานะ และอัพเดตเฟิร์มแวร์ผ่าน IDE รวมถึงเส้นทางการติดตั้งการพัฒนาล่าสุด ดู การอัปเดตและการกู้คืนเฟิร์มแวร์

  • Examples. ตัวอย่างของพื้นที่เก็บข้อมูลปรากฏใน File → Examples ซึ่งรวมเข้ากับแผนผังหมวดหมู่: ตัวอย่างในหมวดหมู่ที่ผู้จำหน่ายชื่อเหมือนกับหมวดหมู่ OpenMV อยู่ข้างๆ OpenMV และหมวดหมู่ใหม่จะกลายเป็นเมนูย่อยของตัวเอง พวกเขาจะถูกกรองไปยังบอร์ดที่พวกเขาสนับสนุนเหมือนตัวอย่างอื่นๆ ดู สคริปต์ ตัวอย่าง และโฟลเดอร์เอกสาร

  • Models. โมเดลของพื้นที่เก็บข้อมูลปรากฏใน Model Zoo ซึ่งรวมเข้ากับแผนผังเบราว์เซอร์ในลักษณะเดียวกัน โดยมีคำอธิบายของผู้ขายเอง

  • Stubs. ที่เก็บสามารถจัดส่งไฟล์ .pyi stub ได้ ดังนั้น editor จึงเสนอการกรอกข้อมูล ลายเซ็น และเอกสารประกอบสำหรับฟังก์ชันที่เฟิร์มแวร์เพิ่มไว้ ซึ่งเป็นการดำเนินการแบบเดียวกับที่คุณได้รับจากโมดูลของ OpenMV สำหรับ API ที่กำหนดเองของผู้จำหน่าย

13.1.14.6. การเขียนที่เก็บข้อมูล#

พื้นที่เก็บข้อมูลคือโฟลเดอร์ที่ตั้งชื่อตามผู้ขาย โดยเก็บรายการ config.json และโฟลเดอร์ย่อยสำหรับเนื้อหาแต่ละประเภทที่มีให้:

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

ชื่อโฟลเดอร์คือรหัสที่เก็บ: ตัวอักษรตัวพิมพ์เล็ก, ตัวเลข, - และ _ โดยขึ้นต้นด้วยตัวอักษร โฟลเดอร์ทุกส่วนเป็นทางเลือก จัดส่งเฉพาะสิ่งที่คุณมี ข้างโฟลเดอร์แต่ละส่วนจะมีไฟล์ <part>.version ที่เก็บสตริงเวอร์ชันเดียว (1.2.0) ที่ IDE ใช้ในการตัดสินใจว่าเมื่อใดที่การอัปเดตจะใหม่กว่า

13.1.14.6.1. รายการ#

config.json ตั้งชื่อพื้นที่เก็บข้อมูล และชี้ไปที่ไฟล์เก็บถาวรที่ดาวน์โหลดได้สำหรับแต่ละส่วน:

{
  "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 ต้องตรงกับชื่อโฟลเดอร์ configUrl คือที่อยู่ที่ไฟล์เดียวกันนี้โฮสต์อยู่ IDE จะดึงข้อมูลอีกครั้งเพื่อตรวจสอบการอัปเดต ดังนั้นให้ละเว้นเฉพาะพื้นที่เก็บข้อมูลที่จะไม่อัปเดตเท่านั้น แต่ละส่วนมีช่อง release และเฟิร์มแวร์อาจมีช่อง development ที่ใช้โดยการติดตั้งรีลีสการพัฒนาล่าสุด ค่า Release version จะถูกเปรียบเทียบเป็นตัวเลข ดังนั้นจึงเสนอค่าที่สูงกว่าเป็นการอัปเดต เวอร์ชันการพัฒนาจะถูกเปรียบเทียบเพื่อการเปลี่ยนแปลงเท่านั้น sha256 เป็นทางเลือก แต่จะได้รับการยืนยันเมื่อมี

แต่ละ url ชี้ไปที่ .zip (เฉพาะ zip) ไฟล์เก็บถาวรเก็บ one top-level folder ทุกประการ และ IDE จะติดตั้ง contents ของโฟลเดอร์นั้นเป็นส่วน - ดังนั้นไฟล์เก็บถาวรเฟิร์มแวร์จึงถูกบรรจุในลักษณะนี้:

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

และแตกไฟล์ไปที่โฟลเดอร์ firmware/ ที่แสดงก่อนหน้านี้ ตัวอย่าง โมเดล และไฟล์เก็บถาวร stubs ได้รับการบรรจุในลักษณะเดียวกัน -- โฟลเดอร์ตัดคำเดียวที่บรรจุสิ่งที่จะอยู่ภายใน examples/, models/ หรือ stubs/ ชื่อของโฟลเดอร์การตัดคำจะถูกละเว้น สิ่งที่สำคัญคือมีหนึ่งเดียว การซิปไฟล์ที่รูทของไฟล์เก็บถาวรโดยไม่มีโฟลเดอร์ตัดคำ หรือการรวมไฟล์ไว้ในโฟลเดอร์มากกว่าหนึ่งโฟลเดอร์ จะไม่ถูกติดตั้ง วิธีที่ง่ายที่สุดในการแก้ไขให้ถูกต้องคือการซิปโฟลเดอร์ -- เลือก acme-firmware และบีบอัดมัน แทนที่จะเลือกเนื้อหาในนั้น

13.1.14.6.2. บอร์ด ตัวอย่าง โมเดล และสตับ#

firmware/settings.json ใช้รูปแบบคำอธิบายบอร์ดเดียวกันกับเฟิร์มแวร์ที่ IDE จัดส่ง เพิ่มรายการ boards ให้กับแต่ละบอร์ดของคุณ กฎบางข้อมีผลเฉพาะกับบอร์ดบุคคลที่สาม: boardFirmwareFolder จะต้องไม่ซ้ำกัน (OpenMV หรือผู้จำหน่ายรายอื่นยังไม่ได้ใช้ เนื่องจากเป็นชื่อโฟลเดอร์ที่ไบนารีของคุณอาศัยอยู่) แต่ละบอร์ดจะต้องมี firmware_version ของตัวเอง (นี่คือสิ่งที่ขับเคลื่อนพรอมต์การอัพเดตเมื่อเชื่อมต่อ) และบอร์ดอาจตั้งค่า boardFirmwareFolderAlias เป็นชื่อโฟลเดอร์เฟิร์มแวร์ของบอร์ด OpenMV เพื่อสืบทอดตัวอย่างและรุ่นหุ้นของบอร์ดนั้น - การหลบหนี ฟักออกมาสำหรับบอร์ดที่เข้ากันได้กับเฟิร์มแวร์กับ OpenMV คาดว่าจะนำตัวระบุ bootloader ของ OpenMV มาใช้ซ้ำ (มีไดรเวอร์ Windows ที่ลงนามแล้ว) ตัวระบุแอปที่ขัดแย้งกับบอร์ดในตัวจะแทนที่บอร์ดนั้น ซึ่งแผงคำเตือนแทนที่จะรายงาน

ตัวอย่างอยู่ในโฟลเดอร์หมวดหมู่ที่มีหมายเลขกำกับ เช่น OpenMV's (01-Getting-Started); หมวดหมู่ที่คุณตั้งชื่อเหมือนกับ OpenMV จะแทรกเข้าไป และชื่อใหม่จะกลายเป็นส่วนเมนูของตัวเอง โมเดลคือโฟลเดอร์ที่เก็บ .tflite และป้ายกำกับคลาส .txt ที่ตรงกัน ซึ่งจัดกลุ่มไว้ภายใต้โฟลเดอร์ที่มี index.html (และรูปภาพเสริม) เป็นคำอธิบายที่แสดงอยู่ข้างๆ ใน ​​Model Zoo examples/index.csv และ models/index.csv เป็นไฟล์บอร์ดและฟิลเตอร์เซ็นเซอร์เดียวกัน ตัวอย่างและโมเดลที่ OpenMV ใช้ จับคู่กับตัวอย่างและเส้นทางโมเดลของคุณ และตัดสินใจว่าไฟล์ใดของคุณจะแสดงสำหรับบอร์ดใด Stubs เป็นไฟล์ .pyi ธรรมดา; IDE มอบโฟลเดอร์ของตนไปยังเซิร์ฟเวอร์ภาษาเพื่อให้แก้ไขควบคู่ไปกับ OpenMV และต้นขั้วที่ตั้งชื่อสำหรับโมดูลที่มีอยู่ (csi.pyi) จะแทนที่ความสมบูรณ์ของโมดูลนั้น

13.1.14.6.3. การเผยแพร่และการปรับปรุง#

หากต้องการเผยแพร่ ให้โฮสต์ config.json และไฟล์เก็บถาวรที่อ้างอิงถึง URL ที่เสถียร และมอบ URL config.json ให้กับผู้ใช้เพื่อใช้ในการติดตั้ง ทุกที่ที่ให้บริการไฟล์ธรรมดาบน HTTPS ใช้งานได้ ไม่ว่าจะเป็นเว็บเซิร์ฟเวอร์ ที่เก็บอ็อบเจ็กต์ หรือโฮสต์โค้ด หากต้องการจัดส่งการอัปเดต ให้อัปโหลดไฟล์เก็บถาวรใหม่ เพิ่มค่า version ที่ได้รับผลกระทบในโฮสต์ config.json ที่โฮสต์ และในครั้งถัดไปที่ IDE ของผู้ใช้แต่ละคนเปิดตัวก็จะเสนอการอัปเดต ผู้ใช้ที่ติดตั้งพื้นที่เก็บข้อมูลผ่านโปรแกรมติดตั้งจะได้รับการอัปเดตในลักษณะเดียวกันแทน ตราบใดที่ config.json ​​ที่ติดตั้งนั้นมี configUrl

13.1.14.6.4. โฮสติ้งบน GitHub#

GitHub เป็นโฮสต์ที่สะดวก และ IDE ดึงข้อมูลจากมันในลักษณะเดียวกับที่ดึงทรัพยากรของตัวเอง มีสองส่วนในการวาง: รายการและไฟล์เก็บถาวร

เก็บ config.json ไว้ในที่เก็บและให้ผู้ใช้ raw URL ซึ่งเป็นที่อยู่ที่ให้บริการไฟล์โดยตรง ไม่ใช่หน้า GitHub ที่แสดงไฟล์นั้น ปุ่ม Raw บนไฟล์จะแสดงขึ้นมา มันมีแบบฟอร์ม

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

URL แบบดิบนั้นคือสิ่งที่ผู้ใช้วางลงในการติดตั้งจาก URL และสิ่งที่คุณใส่ไว้ในรายการ configUrl ของตัวเอง ดังนั้น IDE จึงดึงข้อมูลอีกครั้งเพื่อตรวจสอบการอัปเดต การชี้ไปที่สาขา (main) หมายถึงการผลักดันการกระทำใหม่เพื่อเผยแพร่การเปลี่ยนแปลง การชี้ไปที่แท็กจะทำให้ผู้ใช้ปักหมุดเป็นเวอร์ชันที่แก้ไขแล้วแทน

โฮสต์ไฟล์เก็บถาวร .zip เป็น release assets แทนที่จะคอมมิต -- รีลีสถูกสร้างขึ้นสำหรับการดาวน์โหลดแบบไบนารี ดังนั้นชุดเฟิร์มแวร์หลายเมกะไบต์จึงอยู่ในนั้น ไม่ใช่ในประวัติของพื้นที่เก็บข้อมูล แนบไฟล์เก็บถาวรแต่ละรายการกับรุ่น GitHub และใช้ URL ดาวน์โหลดซึ่งมีแบบฟอร์ม

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

ในช่อง url ของไฟล์ Manifest โดยแต่ละช่องจะมี sha256 ของไฟล์เก็บถาวร การจัดส่งการอัปเดตคือ: แนบไฟล์เก็บถาวรใหม่ไปยังรีลีส แก้ไข config.json เพื่อชี้ไปที่ไฟล์เหล่านั้นและชนเวอร์ชันต่างๆ และคอมมิต IDE จะรับการเปลี่ยนแปลงในการเปิดตัวครั้งถัดไป (ไฟล์ Raw จะถูกส่งผ่านแคชที่รีเฟรชภายในไม่กี่นาทีของการพุช)