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 ต้องเป็นหนึ่งใน:

  • 'r' -- เปิดไฟล์ที่มีอยู่เพื่ออ่าน ส่วนหัวแมจิกจะถูกตรวจสอบความถูกต้องและบันทึกเวอร์ชัน (V1.0 / V1.1 / V2.0) เพื่อใช้โดย version()

  • 'w' -- ตัดทอน / สร้างไฟล์และเขียนส่วนหัวแมจิก V2.0 ใหม่ เฟรมจะถูกต่อท้ายในแต่ละ write()

หาก 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() ต่อท้ายเฟรม; สำหรับสตรีมหน่วยความจำค่านี้จะคงที่ตั้งแต่เวลาสร้าง

offset() int

คืนค่าดัชนีเฟรมปัจจุบัน เพิ่มขึ้นโดย read() และ write(), รีเซ็ตโดย seek()

version() int | None

คืนค่าเวอร์ชันรูปแบบบนดิสก์สำหรับสตรีมไฟล์ (10 สำหรับ V1.0, 11 สำหรับ V1.1, 20 สำหรับ V2.0) คืนค่า None สำหรับสตรีมหน่วยความจำ

buffer_size() int | None

คืนค่าขนาดบัฟเฟอร์พิกเซลต่อสล็อตในหน่วยไบต์สำหรับสตรีมหน่วยความจำ (ขนาดสล็อตลบส่วนหัวบุ๊คคีปปิ้งภายในของ Image) คืนค่า None สำหรับสตรีมไฟล์ ใช้ร่วมกับ count() เพื่อตรวจสอบว่าขนาดเฟรมเฉพาะจะพอดีหรือไม่

size() int

คืนค่าจำนวนไบต์ทั้งหมดที่สตรีมใช้ -- ขนาดไฟล์บนดิสก์สำหรับสตรีมไฟล์ หรือขนาดบัฟเฟอร์ RAM ทั้งหมด (count * per_slot_size รวมส่วนหัวต่อสล็อต) สำหรับสตรีมหน่วยความจำ

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() ไปยังเฟรม offset offset ต้องไม่เป็นลบ; ออฟเซ็ตของสตรีมหน่วยความจำต้องน้อยกว่า count() ด้วย

การค้นหาสตรีมไฟล์จะเดินเฟรมต่อเฟรมจากต้นเนื่องจากข้อมูลเฟรมมีขนาดแปรผัน -- คาดว่าจะใช้เวลา O(offset) สำหรับการกระโดดขนาดใหญ่

คืนค่า self เพื่อให้สามารถเชื่อมการเรียกได้

sync() ImageIO

ล้างการเขียนที่รอดำเนินการลงดิสก์สำหรับสตรีมไฟล์ (เรียก sync ของระบบไฟล์ที่อยู่เบื้องล่าง) ไม่ทำอะไรสำหรับสตรีมหน่วยความจำ

คืนค่า self เพื่อให้สามารถเชื่อมการเรียกได้

close() None

ปิดสตรีม ปล่อยบัฟเฟอร์หน่วยความจำ (สตรีมหน่วยความจำ) หรือปิดไฟล์ (สตรีมไฟล์) หลังจาก close() อ็อบเจกต์ ImageIO ไม่สามารถนำมาใช้ซ้ำได้; การดำเนินการที่ตามมาจะเกิด OSError("Stream closed") การเรียก close() สองครั้งไม่มีผลใดๆ

อ็อบเจกต์ ImageIO จะถูกปิดโดยอัตโนมัติเมื่อถูกเก็บขยะ (ลงทะเบียน finaliser ตอนสร้าง)

ค่าคงที่

FILE_STREAM: int

ค่าที่คืนโดย type() สำหรับสตรีมที่อิงไฟล์

MEMORY_STREAM: int

ค่าที่คืนโดย type() สำหรับสตรีมที่อยู่ในหน่วยความจำ