class ImageIO -- ImageIO object¶
คลาส ImageIO บันทึกและเล่นกลับสตรีมของเฟรม Image ในรูปแบบดิสก์ดั้งเดิมของ OpenMV สตรีมเดียวสามารถบรรจุเฟรมที่หลากหลาย (รูปแบบพิกเซล/ขนาดต่างกัน) และบันทึกช่วงเวลาระหว่างเฟรมสำหรับแต่ละเฟรม เพื่อให้การเล่นกลับสร้างอัตราเฟรมต้นฉบับขึ้นใหม่
มีที่เก็บข้อมูลสำรองสองประเภท:
สตรีมไฟล์ -- เฟรมถูกอ่านจาก / ต่อท้ายไฟล์บนระบบไฟล์ ไฟล์เริ่มต้นด้วยส่วนหัวแมจิก 16 ไบต์
OMV IMG STR Vx.yตามด้วยข้อมูลต่อเฟรม ตัวเขียนปัจจุบันส่งออกV2.0; ไฟล์รุ่นเก่าV1.0และV1.1ยังคงอ่านได้อยู่สตรีมหน่วยความจำ -- เฟรมถูกอ่านจาก / เขียนลงบัฟเฟอร์ RAM ขนาดคงที่ที่จัดสรรตอนสร้างอ็อบเจกต์ มีประโยชน์สำหรับการส่งเฟรมผ่านตัวกรองที่ต้องการการบันทึกโดยไม่ต้องใช้ระบบไฟล์
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
สร้างสตรีม
ImageIOหาก
pathเป็น สตริง จะเปิดสตรีมไฟล์ที่พาธนั้นmodeต้องเป็นหนึ่งใน:หาก
pathเป็น 3-tuple(w, h, pixformat)จะจัดสรรสตรีมหน่วยความจำmodeจะเป็นจำนวนเต็ม จำนวนสล็อตเฟรม ที่ต้องจัดสรรล่วงหน้า บัฟเฟอร์ถูกปรับขนาดสำหรับเฟรมcountเฟรมของ(w, h, pixformat)และไม่อนุญาตให้ขยายหลังจากสร้างpixformatเป็นหนึ่งในimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEG, หรือimage.PNGสำหรับรูปแบบบีบอัด (image.JPEG,image.PNG) ขนาดต่อสล็อตจะถูกประมาณที่ 2 bpp; เฟรมที่ใหญ่กว่าค่าประมาณจะเกิดValueErrorที่เวลาwrite()การตรวจสอบ¶
- type() int¶
คืนค่าที่เก็บข้อมูลสำรองของสตรีม:
FILE_STREAMสำหรับสตรีมไฟล์,MEMORY_STREAMสำหรับสตรีมหน่วยความจำ
- is_closed() bool¶
คืนค่า
Trueหากclose()ถูกเรียกบนอ็อบเจกต์นี้แล้ว เมื่อปิดแล้ว สตรีมจะเกิดOSError("Stream closed")สำหรับการอ่าน/เขียน/ค้นหาเพิ่มเติมใดๆ
- count() int¶
คืนค่าจำนวนเฟรมที่เก็บอยู่ในสตรีมในปัจจุบัน สำหรับสตรีมไฟล์ค่านี้จะเพิ่มขึ้นเมื่อ
write()ต่อท้ายเฟรม; สำหรับสตรีมหน่วยความจำค่านี้จะคงที่ตั้งแต่เวลาสร้าง
- version() int | None¶
คืนค่าเวอร์ชันรูปแบบบนดิสก์สำหรับสตรีมไฟล์ (
10สำหรับV1.0,11สำหรับV1.1,20สำหรับV2.0) คืนค่าNoneสำหรับสตรีมหน่วยความจำ
I/O¶
- write(img: Image) ImageIO¶
ต่อท้าย (สตรีมไฟล์) หรือบันทึกที่ออฟเซ็ต (สตรีมหน่วยความจำ)
imgและเพิ่มoffset()ขึ้นหนึ่งสำหรับสตรีมไฟล์ ไฟล์จะขยายขึ้นเมื่อเฟรมถูกต่อท้าย การเขียนที่ออฟเซ็ตที่ไม่ใช่จุดสิ้นสุดจะตัดทอนส่วนที่เหลือของไฟล์ทำให้จำนวนอาจลดลง
สำหรับสตรีมหน่วยความจำ เฟรมจะถูกเขียนลงในสล็อตปัจจุบัน; การเขียนเกินสล็อตสุดท้ายจะเกิด
EOFError("End of stream")และการเขียนเฟรมที่ใหญ่กว่าbuffer_size()จะเกิดValueError("Invalid frame size")คืนค่า
selfเพื่อให้สามารถเชื่อมการเรียกได้
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
อ่านเฟรมที่
offset()ปัจจุบัน เพิ่มออฟเซ็ต และคืนค่าImageใหม่ เป็นส่วนเสริมของฝั่งเล่นกลับของwrite()copy_to_fb-- เมื่อTrue(ค่าเริ่มต้น) เฟรมที่ถอดรหัสจะถูกวางในบัฟเฟอร์เฟรมกล้อง (ตำแหน่งเดียวกับที่csi.CSI.snapshot()ใช้) เพื่อให้Imageที่คืนมาสามารถวาดผ่านตัวอย่างใน IDE ได้ เมื่อFalseเฟรมจะถูกจัดสรรบนฮีปของ MicroPython แทนloop(เฉพาะสตรีมไฟล์) -- เมื่อTrue(ค่าเริ่มต้น) การอ่านเกินเฟรมสุดท้ายจะกลับไปเฟรมแรกและดำเนินการต่อ เมื่อFalseการเรียกจะคืนค่าNoneเมื่อถึงจุดสิ้นสุดของไฟล์pause-- เมื่อTrue(ค่าเริ่มต้น) การเรียกจะหยุดรอจนกว่าช่วงเวลาระหว่างเฟรมที่บันทึกไว้เดิมจะผ่านไป เพื่อให้การเล่นกลับทำงานที่อัตราเฟรมดั้งเดิมของการบันทึก ตั้งค่าเป็นFalseสำหรับการเล่นกลับเร็วที่สุดเท่าที่เป็นไปได้
- seek(offset: int) ImageIO¶
ย้าย
offset()ไปยังเฟรมoffsetoffsetต้องไม่เป็นลบ; ออฟเซ็ตของสตรีมหน่วยความจำต้องน้อยกว่าcount()ด้วยการค้นหาสตรีมไฟล์จะเดินเฟรมต่อเฟรมจากต้นเนื่องจากข้อมูลเฟรมมีขนาดแปรผัน -- คาดว่าจะใช้เวลา O(offset) สำหรับการกระโดดขนาดใหญ่
คืนค่า
selfเพื่อให้สามารถเชื่อมการเรียกได้
- sync() ImageIO¶
ล้างการเขียนที่รอดำเนินการลงดิสก์สำหรับสตรีมไฟล์ (เรียก
syncของระบบไฟล์ที่อยู่เบื้องล่าง) ไม่ทำอะไรสำหรับสตรีมหน่วยความจำคืนค่า
selfเพื่อให้สามารถเชื่อมการเรียกได้
- close() None¶
ปิดสตรีม ปล่อยบัฟเฟอร์หน่วยความจำ (สตรีมหน่วยความจำ) หรือปิดไฟล์ (สตรีมไฟล์) หลังจาก
close()อ็อบเจกต์ImageIOไม่สามารถนำมาใช้ซ้ำได้; การดำเนินการที่ตามมาจะเกิดOSError("Stream closed")การเรียกclose()สองครั้งไม่มีผลใดๆอ็อบเจกต์
ImageIOจะถูกปิดโดยอัตโนมัติเมื่อถูกเก็บขยะ (ลงทะเบียน finaliser ตอนสร้าง)
ค่าคงที่¶