v5.0.1#
v5.0.1 เป็นรุ่นบำรุงรักษาที่ต่อยอดจาก v5.0.0 — โมดูล sensor แบบเก่ากลายเป็นเลเยอร์ความเข้ากันได้แบบ Python บน csi ภาพที่โหลดเข้าบัฟเฟอร์เฟรมจะแสดงพรีวิวเหมือนเฟรมจากกล้อง ตัวเข้ารหัส JPEG ไม่มีขีดจำกัดเอาต์พุต 1 MB อีกต่อไปและจัดการกรณีล้นได้อย่างถูกต้อง พร้อมด้วยชุดการแก้ไขสำหรับกล้อง โปรโตคอล เครือข่าย และไลบรารี ML รุ่นนี้ ไม่มีการเปลี่ยนแปลง API ที่ไม่เข้ากันกับรุ่นก่อน สำหรับสคริปต์ที่เขียนกับ csi ส่วนการเปลี่ยนแปลงพฤติกรรมจำนวนหนึ่งได้ระบุไว้ภายใต้ การเปลี่ยนแปลง API ที่ไม่เข้ากันกับรุ่นก่อน
ไฮไลต์#
โมดูล
sensorเป็นโมดูล Python แบบ frozen แล้ว ซึ่งสร้างขึ้นบนcsiจะพิมพ์คำเตือนการยกเลิกใช้งานเมื่อนำเข้า และฟังก์ชันจำนวนหนึ่งที่โมดูลcsiไม่สามารถรองรับได้จะแสดงข้อผิดพลาดOSErrorดูเพิ่มเติมที่ การเปลี่ยนแปลงของโมดูล sensorภาพที่โหลดจะแสดงพรีวิวเหมือนเฟรมจากกล้อง ภาพที่ถูกวางลงในบัฟเฟอร์เฟรมด้วย
copy_to_fb=True(image.Image,image.ImageIO.read(),fir.snapshot(),tof.snapshot()) จะถูก flush ไปยัง IDE — พร้อมกับสิ่งที่วาดลงไป — เมื่อภาพถัดไปเขียนทับบัฟเฟอร์เฟรม แทนที่จะส่งทันที ดูเพิ่มเติมที่ การเปลี่ยนแปลงของพรีวิวการยกเครื่องตัวเข้ารหัส JPEG ขีดจำกัดบัฟเฟอร์เอาต์พุต 1 MB ถูกยกเลิก (ขนาดบัฟเฟอร์จะกำหนดจากหน่วยความจำว่าง) กรณีล้นทั้งในเส้นทางซอฟต์แวร์และฮาร์ดแวร์จะถูกจัดการแทนการเขียนไฟล์ที่ถูกตัดทอน และการบันทึกภาพที่บีบอัดแล้วด้วยนามสกุลของรูปแบบบีบอัดอีกแบบจะแสดงข้อผิดพลาดแทนการเขียนข้อมูลขยะ
ใหม่
protocol.poll()และ วิดเจ็ต CBOR ใหม่หกตัว (text,lineedit,pushbutton,spinbox,radio,waveform) สำหรับprotocol.CBORChannelโพสต์โปรเซสเซอร์ YOLO Pro, การรองรับ FLIR Lepton 3.1R / UW, การอ่าน IMU แบบ burst, CAN บน OpenMV N6 และเป้าหมาย simulator ที่รองรับเครือข่าย
ฟีเจอร์ใหม่#
YoloPro— โพสต์โปรเซสเซอร์ใหม่สำหรับโมเดลตรวจจับวัตถุ YOLO Pro ของ Edge Impulse พร้อมตัวอย่างyolo_pro_detector.py(f3f150ebd, ea7bbb398)protocol.poll()— รันการวนซ้ำหนึ่งรอบของงานโปรโตคอลตามต้องการ สำหรับทรานสปอร์ตแบบกำหนดเองที่ไม่ได้ถูกขับเคลื่อนด้วยอินเทอร์รัปต์ USB หรือตัวตั้งเวลาpoll_msนอกจากนี้ยังสามารถเรียกprotocol.init()อีกครั้งเพื่อเริ่มต้นสแตกใหม่ได้ (c00c215f9, f849ffb1b)วิดเจ็ตช่องสัญญาณ CBOR เพิ่มเติม —
protocol.CBORChannel.add()เพิ่มtext(สตริงคงที่),lineedit(สตริงที่เขียนได้),pushbutton(การกระทำชั่วขณะ),spinbox(ช่องป้อนตัวเลขแบบขั้น),radio(กลุ่มตัวเลือก) และwaveform(อนุกรมเวลา 1 มิติพร้อมอาร์กิวเมนต์sample_rate,seriesและtypecodeกำหนดไบต์ตัวอย่างแบบสลับกันให้เพื่อสตรีม) (8016d29ba)csi.CUSTOM— ตอนนี้csi.CSI.framesize()จะคืนค่าคงที่ที่ใช้งานได้หลังจากตั้งค่าความละเอียด(w, h)แบบกำหนดเอง แทนที่จะเป็นจำนวนเต็มที่ไม่มีชื่อ (af8841654)การอ่าน IMU แบบ burst —
imu.__read_reg()รับบัฟเฟอร์ที่เขียนได้เป็นอาร์กิวเมนต์เสริม และเติมข้อมูลจากรีจิสเตอร์ที่ต่อเนื่องกันในการทำธุรกรรมเดียว (244ca480a)FLIR Lepton 3.1R และ Lepton UW ได้รับการรู้จักโดยไดรเวอร์ Lepton รวมถึงโหมด gain แบบ radiometric ของแต่ละรุ่น (0fc356632)
เครือข่ายบน simulator — เป้าหมาย QEMU
MPS2_AN500มี lwIP และ NIC แบบ user-mode แล้ว พร้อมrequests,mqttและsensorที่ frozen รวมมาด้วย และมี unit test สำหรับเครือข่าย (23546dfb1, 61d187305, 15096c3a2)ตัวอย่าง API ที่เข้ากันได้กับ OpenAI —
openai_compatible.pyถ่าย snapshot เป็น JPEG แล้วโพสต์ไปยังปลายทาง chat-completions เพื่อบรรยายฉาก (79033c6aa)ตัวอย่าง SX126x LoRa — ไดรเวอร์
lora-sx126xของ micropython-lib (พร้อมlora-sync/lora-async) ถูก frozen รวมเข้าในเฟิร์มแวร์ OpenMV RT1062 พร้อมตัวอย่างผู้ส่ง/ผู้รับ/ping-pong/สตรีมภาพ สำหรับการต่อสายโมดูล SX1261 หรือ SX1262 เข้ากับบัส SPI นี่เป็นการรองรับที่ชุมชนมีส่วนร่วมพัฒนา OpenMV ไม่ได้จำหน่ายฮาร์ดแวร์ LoRa (19576e1b1)
การเปลี่ยนแปลงและการปรับปรุงอื่นๆ#
เขียนไลบรารี
requestsใหม่ — การตอบกลับแบบ chunked transfer จะถูกถอดรหัส มีอาร์กิวเมนต์timeout(ค่าเริ่มต้น 5 วินาที) ให้ใช้ เนื้อหาแบบ JSON และสตริงถูกซีเรียลไลซ์/เข้ารหัสอย่างถูกต้อง ส่วนหัวถูกแยกวิเคราะห์โดยไม่สนใจตัวพิมพ์ใหญ่-เล็กและบรรทัดสถานะถูกแยกตามตำแหน่ง dictheadersของผู้เรียกจะถูกคัดลอก (ดังนั้นauthจะไม่รั่วไหลไปยังคำขอครั้งถัดไปอีกต่อไป) และเนื้อหาจะถูกอ่านเป็นบล็อกลงในbytearray(889f0b096)mqttนำเข้าsslแบบ lazy ดังนั้นโมดูลและการเชื่อมต่อแบบธรรมดา (ไม่ใช่ TLS) จึงใช้งานได้บนบิลด์ที่ไม่รองรับ SSL (c2e0899e8)ขนาดบัฟเฟอร์เอาต์พุต JPEG กำหนดจากหน่วยความจำว่าง แทนขีดจำกัดคงที่ 1 MB ตัวเข้ารหัสจะตัดบัฟเฟอร์ให้เท่ากับขนาดที่เข้ารหัสได้ก่อนเขียนภาพออกไป ดังนั้นการจับภาพจากเซนเซอร์ขนาดใหญ่ที่คุณภาพสูงจะไม่ล้มเหลวอีกต่อไป (aa1ca6776)
การจัดระเบียบโพสต์โปรเซสซิงของ ML — การสร้าง bounding box ถูกทำให้เป็นมาตรฐานเดียวกันในโพสต์โปรเซสเซอร์ของ Darknet, Edge Impulse และ Ultralytics และเอาต์พุตของ YOLOv8 จะถูกทรานสโพสหลังการกรองด้วย threshold เพื่อให้เก็บข้อมูลหนึ่งแถวต่อการตรวจจับเช่นเดียวกับโมเดลอื่นๆ (b5c7853f2, c45f99cad)
การปิด PAG7936 อย่างปลอดภัย — แฟล็กหยุดเซนเซอร์ตัวใหม่จะสั่งให้ PAG7936 เข้าสู่โหมดหลับก่อนสลับ RESET/PWDN ซึ่งแก้ปัญหาการค้างเมื่อใช้เซนเซอร์กับสายต่อขยาย นอกจากนี้ไดรเวอร์ยังเลือกชุดรีจิสเตอร์แบบ MIPI CSI-2 หรือแบบขนานจากที่อยู่ I2C ของเซนเซอร์ขณะรันไทม์แทนที่จะเลือกตอนบิลด์ (10026530c, f6acf14ec, 5f0251c74)
การจัดจังหวะการเล่นของ
ImageIOจะให้บริการเหตุการณ์ที่ค้างอยู่ระหว่างรอช่วงเวลาระหว่างเฟรม แทนการหลับในWFI(a54790193)การอัปเดตซับโมดูล MicroPython — รองรับเครือข่ายเต็มรูปแบบบนพอร์ต QEMU,
machine.mem_backupบน STM32 ผ่าน backup SRAM/รีจิสเตอร์ BKP, คงการปิดใช้ hardware flow control ของ SDIO บน STM32F4 และการใช้แอตทริบิวต์ MPU ซ้ำสำหรับพื้นที่ที่ไม่ใช้แคช (31ada5626, ab61d27a6, 06bddf13a)differential-translation.pyจับภาพผ่านวัตถุcsi.CSIของตนเองแทนโมดูลsensorที่ถูกยกเลิกแล้ว และการเว้นบรรทัดของ import ในตัวอย่างถูกทำให้เป็นมาตรฐานเดียวกัน (68c866e7f, 9ceff4513)
การแก้ไขข้อบกพร่อง#
กล้องและเซนเซอร์:
การตั้งค่าความละเอียด
(w, h)แบบกำหนดเองสองครั้งติดกันทำให้เซนเซอร์ยังคงอยู่ที่ขนาดแรก ในขณะที่csi.CSI.width()/height()รายงานขนาดที่สอง ตอนนี้เส้นทางลัด "ไม่มีการเปลี่ยนแปลง" จะไม่รวมขนาดแบบกำหนดเองแล้ว (cfbb70156)csi.CSI.lens_correction()แยกวิเคราะห์radiและcoefเป็นค่าบูลีน ทำให้ค่าที่ส่งไปยังไดรเวอร์ไม่ใช่ค่าที่ระบุไว้ (ab44b3a77)PAG7936: การตั้งค่า exposure และ gain ติดต่อกันจะเขียนทับกันเอง (ทั้งสองใช้โหมดแมนนวลร่วมกันหนึ่งโหมด และรีจิสเตอร์ที่อ่านกลับจะล่าช้าไปหนึ่งเฟรม) ตอนนี้ไดรเวอร์จะกำหนดค่าเริ่มต้นให้รีจิสเตอร์แมนนวลเฉพาะตอนเข้าสู่โหมดแมนนวล และเขียนเฉพาะตัวควบคุมที่กำลังตั้งค่าเท่านั้น (e7a18c0a0)
การจับภาพแบบ BAYER ของ PAG7936 และ PS5520 บน OpenMV N6 ล้มเหลวด้วยข้อความ "Failed to initialize the CSI interface" ที่ทุกขนาดยกเว้นความละเอียดเต็ม เนื่องจาก ISP ของ N6 ไม่สามารถปรับขนาด Bayer ดิบได้ ตอนนี้เซนเซอร์จะทำงานที่โหมดเนทีฟที่ตรงกับขนาดที่ร้องขอสำหรับ BAYER (PS5520: VGA, HD, SXGA-M, FHD, QHD, WQXGA2 ส่วน QVGA ไม่มีโหมดเนทีฟและไม่รองรับ) (fe6790055, b7622b245)
การเข้ารหัสและการบันทึกภาพ:
ตัวเข้ารหัส JPEG แบบซอฟต์แวร์: การล้นของบัฟเฟอร์เอาต์พุตเป็นข้อผิดพลาดร้ายแรงเสมอเนื่องจากเส้นทาง realloc ถูกปิดใช้งาน ตอนนี้จะขยายบัฟเฟอร์ (ครั้งละครึ่งหนึ่งของขนาดเดิม) เมื่อเป็นเจ้าของบัฟเฟอร์นั้น ถอยกลับอย่างถูกต้องเมื่อหน่วยความจำหมด และตัดผลลัพธ์ให้พอดี
jpeg_write/mjpeg_writeจะไม่เขียนบัฟเฟอร์ออกไปอีกต่อไปหลังจากการเข้ารหัสล้มเหลว (28e1110be)ตัวเข้ารหัส JPEG แบบฮาร์ดแวร์ (STM32): กรณีล้นจะคืนภาพที่เข้ารหัสได้เพียงบางส่วนพร้อมขนาดที่จัดสรร ทำให้ได้ไฟล์ที่ถูกตัดทอนโดยไม่มีเครื่องหมาย EOI (เช่น การจับภาพ 5 MP ที่คุณภาพ 100 โดยครึ่งล่างว่างเปล่า) ตอนนี้จะรายงานการล้น ปล่อยบัฟเฟอร์เมื่อล้มเหลว และตัดบัฟเฟอร์ให้พอดีเมื่อสำเร็จ (22ce9619c)
ตัวเข้ารหัส VC8000 สร้าง chroma แบบ 4:2:0 อย่างเงียบๆ สำหรับทุกคำขอ ตอนนี้การสุ่มตัวอย่างย่อยที่ไม่ใช่ 4:2:0 จะถอยกลับไปใช้ codec ฮาร์ดแวร์ที่รองรับแทน (71f2be7f2)
image.Image.save()ของภาพ PNG เป็น.jpgเขียนข้อมูลฮีปที่ไม่ได้กำหนดค่าออกไปได้ถึง 1 MB และของภาพ JPEG เป็น.pngเขียนไฟล์ว่าง ตอนนี้ทั้งสองกรณีจะแสดงข้อผิดพลาด ส่วนภาพที่อยู่ในรูปแบบเป้าหมายอยู่แล้วจะยังคงถูกคัดลอกตามเดิม (6c1fdf822)ตอนนี้
png_writeจะตรวจสอบค่าที่คืนจากตัวบีบอัดและบีบอัดก่อนสร้างไฟล์ ดังนั้นความล้มเหลวจะไม่ทิ้งไฟล์ว่างไว้อีกต่อไป (557f52d66)
โมดูล image:
image.Image.get_pixel()พร้อมrgbtuple=Trueบนภาพ BAYER และ YUV เขียนพิกเซลที่แปลงแล้วเลยตัวแปรโลคัลบนสแตกไปที่ออฟเซ็ตซึ่งผู้เรียกควบคุมได้ (13f2a17b6)gif.Gif.add_frame()ลบสาขาการแปลง Bayer/YUV ที่ไม่มีทางถูกเรียกถึงออก รับเฉพาะภาพ GRAYSCALE และ RGB565 เท่านั้น ตามที่ API ของ Python บังคับไว้อยู่แล้ว (f20d99d96)
โปรโตคอล:
การลงทะเบียนช่องสัญญาณแบบไดนามิกในขณะที่ทุกช่องถูกใช้งานอยู่แล้วทำให้เกิดการเขียนนอกขอบเขต ตอนนี้จะตรวจสอบ ID ของช่องสัญญาณก่อน และมีการ assert แบบสถิตว่า ID ช่องสัญญาณที่สงวนไว้พอดีกับตารางช่องสัญญาณ (68f635d1f)
วัตถุช่องสัญญาณแบบไดนามิกยังคงอยู่ใน root pointer หลัง soft reset ทำให้ GC ยังคงสแกนบล็อกฮีปเก่าจากการรันครั้งก่อน ตอนนี้ตารางจะถูกล้างเมื่อ init (ef0ebb03b, e23641145)
พอร์ต:
i.MX RT: เพิ่มการ de-initialize ของ CAN และ Encoder ที่ขาดหายไปเมื่อ soft reset (7cb9d3dc2)
ฮาร์ดแวร์และการรองรับบอร์ด#
OpenMV N6 — เปิดใช้งาน CAN แล้ว (
machine.CAN) (294f0febd, 91e1c9573)OpenMV AE3 — ไดรเวอร์ SPI
sdcardถูก frozen รวมมาด้วยสำหรับซ็อกเก็ต microSD บน AE3 Battery Shield (a258f4814)OpenMV RT1062 —
lora-sx126x/lora-sync/lora-asyncถูก frozen รวมมาด้วย (ดูฟีเจอร์ใหม่)FLIR Lepton 3.1R / UW — ได้รับการรู้จักโดยไดรเวอร์ Lepton บนทุกบอร์ดที่รองรับ Lepton
PAG7936 — การหยุดเพื่อปิดอย่างปลอดภัย การเลือกอินเทอร์เฟซขณะรันไทม์ การแก้ไข exposure/gain และการจับภาพแบบ BAYER บน N6
PS5520 — การจับภาพแบบ BAYER บน N6 ที่ขนาดเนทีฟ
Simulator (MPS2_AN500) — ระบบเครือข่าย
ทุกบอร์ด — โมดูลความเข้ากันได้
sensorถูก frozen รวมเข้าใน manifest ของทุกบอร์ด
การเปลี่ยนแปลง API ที่ไม่เข้ากันกับรุ่นก่อน#
v5.0.1 ไม่มีการเปลี่ยนแปลงที่ไม่เข้ากันกับรุ่นก่อนใน API ของ csi หรือ image สคริปต์ที่ทำงานบน v5.0.0 จะทำงานได้โดยไม่ต้องแก้ไข โดยมีการเปลี่ยนแปลงพฤติกรรมดังต่อไปนี้
โมดูล sensor (behavior)#
โมดูล sensor แบบเนทีฟ (modules/py_csi.c) ถูกลบออกและแทนที่ด้วยโมดูล Python แบบ frozen ที่ใช้งาน API เดียวกันบน csi ดูที่ sensor
Commit: 5e3d40631
import sensorจะพิมพ์WARNING: The sensor module is deprecated and will be removed in a future release. Please use the csi module instead.ไปยังเทอร์มินัลวัตถุ
csi.CSIที่ซ่อนอยู่จะถูกสร้างเมื่อนำเข้า ดังนั้นหากไม่มีกล้องจะเกิดข้อผิดพลาดตั้งแต่import sensorแทนที่จะเป็นตอนsensor.reset()ฟังก์ชันเหล่านี้จะแสดงข้อผิดพลาด
OSErrorแล้ว เนื่องจากcsiไม่มีสิ่งที่เทียบเท่า:get_fb(),alloc_extra_fb(),dealloc_extra_fb(),set_auto_rotation(),get_auto_rotation(),disable_delays(),disable_full_flush()(ฟังก์ชัน*_extra_fbทั้งสองแสดงข้อผิดพลาดอยู่แล้วตั้งแต่ v5.0.0) ให้ใช้csi.CSI(delays=False)/csi.CSI(fflush=False)แทนสองฟังก์ชันสุดท้ายframesize ที่
csiไม่ได้ส่งออก (QQCIF,QQSIF,QQQQVGA,HQQQQVGA,HQQQVGA,HQQVGA,B64X32,B64X64,B128X64,B128X128,B160X160,B320X320,LCD,QQVGA2) ตอนนี้เป็น tuple(w, h)ที่ถูกส่งผ่านในฐานะความละเอียดแบบกำหนดเองget_framesize()จะคืน tuple ที่ตั้งค่าไว้ตราบใดที่กล้องยังอยู่ที่ขนาดนั้น ดังนั้นการตรวจสอบความเท่ากันกับค่าคงที่จึงยังคงใช้งานได้ioctl()จะส่งต่ออาร์กิวเมนต์หลังคำขอได้สูงสุดสี่ตัวsleep()/shutdown()จะแสดงข้อผิดพลาดOSErrorเมื่อล้มเหลวเช่นเดิม (RuntimeErrorของcsiจะถูกแปลงให้)
ย้ายไปใช้ csi — ดูที่ ตารางการย้ายโค้ดของ v5.0.0
การโหลดภาพเข้าบัฟเฟอร์เฟรม (behavior)#
ฟังก์ชันที่โหลดภาพเข้าบัฟเฟอร์เฟรม — image.Image ที่ใช้ copy_to_fb=True, image.Image.copy() / image.Image.scale() และการแปลง to_* ที่ใช้ copy_to_fb=True, image.ImageIO.read(), fir.snapshot() และ tof.snapshot() ที่ใช้ copy_to_fb=True — เดิมจะส่งภาพใหม่ไปยังพรีวิวของ IDE ทันที ทำให้สิ่งที่วาดลงบนภาพที่คืนค่ามาไม่เคยถูกมองเห็น ตอนนี้ฟังก์ชันเหล่านี้จะทำเครื่องหมายบัฟเฟอร์เฟรมว่ารอดำเนินการ และ flush พร้อมกับทุกสิ่งที่วาดลงไป ทันทีก่อนที่ภาพถัดไปจะเขียนทับ — ซึ่งเป็นพฤติกรรมเดียวกับ csi.CSI.snapshot()
Commits: 87b6db5ee, 7b1a35c2f, f773c740d
ลูปที่อ่านสตรีมของภาพไม่ต้องแก้ไขใดๆ และตอนนี้จะแสดงสิ่งที่วาดไว้ด้วย สคริปต์ที่โหลดภาพ เพียงภาพเดียว แล้วหยุดจะต้อง flush ภาพนั้นอย่างชัดเจน:
img = image.Image("example.bmp", copy_to_fb=True)
img.flush() # new: send it to the IDE preview now
time.sleep_ms(1000)
ไลบรารี ML (behavior)#
มีผลเฉพาะกับโค้ดที่สืบทอดคลาสหรือคัดลอกโพสต์โปรเซสเซอร์ที่มาพร้อมเฟิร์มแวร์เท่านั้น ตอนนี้ YoloV8 จะทรานสโพสเอาต์พุตของโมเดลหลังการกรองด้วย threshold เพื่อให้การตรวจจับที่ผ่านการกรองถูกเก็บเป็นหนึ่ง แถว ต่อกล่อง (bb[:, 4:]) เช่นเดียวกับโพสต์โปรเซสเซอร์ของ Darknet และ Edge Impulse แทนที่จะเป็นหนึ่งคอลัมน์ต่อกล่อง (bb[4:, :]) ผลลัพธ์สาธารณะ ((x, y, w, h), score) ไม่เปลี่ยนแปลง
โมดูล protocol (minor)#
protocol.poll() กลับมาแล้ว v5.0.0 ได้ลบฟังก์ชันนี้ออกเมื่องานโปรโตคอลย้ายไปทำงานบนตัวตั้งเวลา ตอนนี้กลับมาเป็นวิธีที่ชัดเจนในการขับเคลื่อนงานสำหรับทรานสปอร์ตแบบกำหนดเอง ไม่มีสิ่งอื่นเปลี่ยนแปลง — สคริปต์ที่ไม่เคยเรียกฟังก์ชันนี้จะไม่ได้รับผลกระทบ
Commit: c00c215f9
การสร้าง / tooling (tooling)#
ทั้งหมดนี้ไม่มีผลต่อสคริปต์ MicroPython py_image.c ถูกแยกออก โดยวัตถุ descriptor (cascade, keypoints, LBP, keypoint match) ย้ายไปยัง py_image_descriptor.c และวัตถุสถิติ (similarity, statistics, percentile, threshold, histogram) ย้ายไปยัง py_image_stats.c API ตัวเข้ารหัสของ imlib ถูกปรับให้สอดคล้องกับส่วนที่เหลือของ imlib: jpeg_compress / png_compress คืนค่า 0 เมื่อสำเร็จและ -1 เมื่อผิดพลาด และ jpeg_compress ไม่มีอาร์กิวเมนต์ realloc อีกต่อไป (การปรับขนาดขึ้นอยู่กับความเป็นเจ้าของบัฟเฟอร์) OMV_PROTOCOL_MAX_CHANNELS เปลี่ยนเป็น OMV_PROTOCOL_CHANNEL_MAX ใน omv_protocol_channel.h และตอนนี้พอร์ตต่างๆ จะเรียก py_protocol_init0() เมื่อ init การกำหนดค่าบอร์ด OMV_PAG7936_MIPI_CSI2 ถูกลบออกแล้ว (อินเทอร์เฟซจะถูกเลือกขณะรันไทม์) ปิดท้ายด้วยการอัปเดต dependency ของ CI และการแก้ไขกรณี changelog ของรุ่นว่างเปล่า ดูรายละเอียดที่เกี่ยวข้องกับ fork ได้จากประวัติของ ที่เก็บเฟิร์มแวร์
รายการตรวจสอบการย้ายโค้ด#
ยังใช้
import sensorอยู่หรือไม่? ยังใช้งานได้ แต่มีคำเตือน ให้ย้ายไปใช้csi(การย้ายโค้ดไป v5.0.0) แทนที่disable_delays/disable_full_flushด้วยอาร์กิวเมนต์ของตัวสร้างcsi.CSI()และลบการเรียกget_fb/ auto-rotation ออกโหลดภาพเพียงภาพเดียวด้วย
copy_to_fb=Trueและคาดว่าจะเห็นภาพหรือไม่? เพิ่มimg.flush()หลังจากโหลดคัดลอกโพสต์โปรเซสเซอร์ YOLOv8 ไปใช้หรือไม่? ให้เข้าถึงเอาต์พุตที่ผ่านการกรองด้วย threshold ตามแถว (
bb[:, 4:]) แทนตามคอลัมน์เปรียบเทียบ
csi0.framesize()หลังจากตั้งค่า tuple หรือไม่? ตอนนี้จะคืนค่าcsi.CUSTOMส่วนอื่นๆ ทั้งหมด: แฟลชเฟิร์มแวร์ใหม่แล้วรันได้เลย