class ImageIO -- كائن ImageIO¶
تسجّل فئة 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عبارة عن صفّ ثلاثي(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لتدفقات الذاكرة.
الإدخال/الإخراج¶
- 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أيضًا تلقائيًا عند جمعه كنفايات (فهو يسجّل دالة إنهاء عند الإنشاء).
الثوابت¶