class ImageIO – אובייקט ImageIO¶
המחלקה ImageIO מקליטה ומנגנת זרמים של פריימים מסוג Image בפורמט הדיסק המקורי של OpenMV. זרם בודד יכול להכיל פריימים הטרוגניים (פורמטי פיקסל / גדלים שונים) ומקליט עבור כל אחד את מרווח הזמן בין הפריימים, כך שהניגון משחזר את קצב הפריימים המקורי.
קיימים שני מאגרי אחסון:
זרם קובץ – פריימים נקראים מתוך / מצורפים לקובץ במערכת הקבצים. הקובץ מתחיל בכותרת קסם (magic header) באורך 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(ברירת מחדל) הפריים המפוענח מוצב בחוצץ הפריימים של המצלמה (frame buffer) (אותו מקום שאליו מגיע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נסגר גם אוטומטית כאשר הוא נאסף על ידי אוסף הזבל (garbage-collected) (הוא רושם פעולת סיום בזמן הבנייה).
קבועים¶