csi — חיישני מצלמה¶
המודול csi הוא הממשק המודרני, מוכוון-העצמים, לחיישן(י) המצלמה שב-OpenMV Cam. כל חיישן פיזי מיוצג על ידי מופע של CSI, כך שלוחות הדמיין הרב-ספקטרלי שמשלבים חיישן צבע עם חיישן תרמי או חיישן אירועים יכולים להפעיל כל אחד מהם באופן עצמאי על ידי העברת cid שונה לבנאי. מצלמות עם חיישן יחיד פשוט יוצרות מופע אחד של CSI.
אובייקט CSI הוא הבעלים של תצורת החיישן המלאה – פורמט פיקסל, framesize / חלון, חשיפה / הגבר (gain) / איזון לבן, שיקוף והיפוך חומרתיים, דפוס בדיקה של פסי צבע, שעון קצב פריימים, ROI לחשיפה אוטומטית, ופקודות ioctl ספציפיות לשבב. פריימים נלכדים באמצעות CSI.snapshot(), שמחזירה image.Image הנתמכת על ידי חוצץ הפריימים (frame buffer).
מודול זה מחליף את המודול הישן sensor (שחשף את אותה פונקציונליות כפונקציות ברמת המודול הקשורות לחיישן מוסתר יחיד). קוד חדש צריך להשתמש ב-CSI.
דוגמת שימוש:
import csi
# Setup camera.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000) # skip frames
# Take pictures.
while(True):
csi0.snapshot()
שימוש ב-Asyncio¶
לולאת CSI.snapshot() החוסמת שלמעלה אינה משתפת פעולה עם לולאת האירועים של asyncio – בזמן ש-snapshot ממתינה לפריים הבא, כל קורוטינה אחרת בתוכנית קפואה. כדי לאפשר ללולאת לכידה להתקיים יחד עם עבודה מקבילה אחרת (לקוח UART, צופה בלחצן, משימת רשת) עטוף את CSI במתאם קטן שהופך את snapshot לקורוטינה ידידותית ל-await על ידי דגימה של snapshot(blocking=False) והשבת השליטה ללולאת האירועים בין הבדיקות:
import asyncio
import csi
class AsyncCSI:
def __init__(self, *args, **kwargs):
self._csi = csi.CSI(*args, **kwargs)
def __getattr__(self, name):
return getattr(self._csi, name)
async def snapshot(self):
while True:
img = self._csi.snapshot(blocking=False)
if img is not None:
return img
await asyncio.sleep_ms(0)
__getattr__ מעביר כל מאפיין אחר (reset, pixformat, framesize, כפתורי החיישן) ל-CSI הבסיסי כך שהעוטף הוא תחליף ישיר. הקריאה הלא-חוסמת הראשונה גם מתחילה את לכידת ה-DMA של המצלמה אם היא לא הייתה כבר פעילה, כך שאין צורך באתחול נוסף.
לולאת לכידה משתלבת אז בתוכנית asyncio גדולה יותר פשוט כקורוטינה נוספת:
async def capture_loop(cam):
while True:
img = await cam.snapshot()
# process img here
async def main():
cam = AsyncCSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
asyncio.create_task(some_other_task())
await capture_loop(cam)
asyncio.run(main())
הגדרת framebuffers עדיין משמעותית בצורה זו – מצב חוצץ-יחיד גורם ל-snapshot(blocking=False) להחזיר None עד שהפריים הבא נלכד, בעוד שחציצה כפולה או משולשת מחליקה זאת כך שהעוטף בדרך כלל מוצא פריים מחוצץ ממתין בדגימה הראשונה. ראה את אבן הראשה AsyncCSI במדריך ה-asyncio להסבר המלא.
class CSI – ממשק חיישן המצלמה¶
המחלקה CSI משמשת לשליטה בחיישן מצלמה.
- class csi.CSI(cid: int = -1, delays: bool = True, fflush: bool = True, stream: bool | None = None)¶
יוצר אובייקט לתקשורת עם חיישן מצלמה. בלוחות עם מספר חיישנים, ניתן לבחור את אובייקט ה-CSI המסוים על ידי העברת
cidכמוcsi.LEPTONכדי לבחור מודול חיישן FLIR Lepton. אםcidהוא -1 נבחר החיישן הראשי (בדרך כלל מודול מצלמת צבע בלוחות מרובי-חיישנים).אם
delaysהואFalseאזי כל השהיות זמן ההתייצבות במנהל ההתקן csi מנוטרלות. כברירת מחדל מנהל התקן החיישן משהה לאחר איפוס / שינוי מצב כדי למנוע החזרת פריימים פגומים על ידיCSI.snapshot. ניטרול ההשהיות מאפשר לך לקבץ עדכונים ולהחיל השהיה אחת בסוף לפני קריאה ל-CSI.snapshot.אם
fflushהואFalseאזי השטיפה האוטומטית של חוצץ הפריימים המוזכרת ב-CSI.framebuffersמנוטרלת. הדבר מסיר כל מגבלת זמן על פריימים ב-fifo של חוצץ הפריימים (frame buffer).streamבוחר האם CSI זה הוא מקור הזרם הנשלח ל-IDE. אםNone(ברירת מחדל) ה-CSI הופך למקור הזרם רק אם הוא החיישן הראשי (הלא-משני). העברTrueכדי לכפות על CSI זה להיות מקור הזרם, או כל ערך שקרי כדי להשאיר את מקור הזרם הקיים ללא שינוי.מתודות¶
- reset(hard: bool = True) None¶
מאתחל את חיישן המצלמה. מבצע איפוס חומרתי על ידי החלפת אות RESET של ה-GPIO למודול המצלמה אם
hardהואTrue.hardצריך להיות מוגדר ל-false בעת איפוס חיישני מצלמה משניים שחולקים את אותו אות RESET של GPIO כמו המודול הראשי.
- shutdown(enable: bool) None¶
מעביר את המצלמה למצב צריכת חשמל נמוכה יותר משינה (אך יש לאפס את המצלמה בעת ההתעוררות).
- flush() None¶
מעתיק את תוכן חוצץ הפריימים הנוכחי לתצוגה המקדימה של ה-IDE. קרא לזה לאחר
CSI.snapshotהאחרון אם הסקריפט מסתיים כדי שה-IDE יציג את הפריים האחרון.
- snapshot(time: int = -1, frames: int = -1, blocking: bool = True, image: image.Image | None = None) image.Image | None¶
מצלם תמונה באמצעות המצלמה ומחזיר אובייקט
image.Image.אם מועברים
timeו/אוframessnapshot תחסום למשך אותםtimeמילישניות ו/אוframesשנלכדו מהמצלמה. ניתן להשתמש בשני הארגומנטים בו-זמנית. לאחר שעברוtimeו/אוframessnapshot תחזירNone.blockingעשוי להיותFalseכדי לאפשר התנהגות לא-חוסמת אשר תגרום ל-snapshot להחזירNoneכאשר התמונה הבאה מהמצלמה אינה מוכנה במקום להמתין.imageעשוי להיות אובייקטimage.Imageאחר לעדכון עם התמונה החדשה שנלכדה מהמצלמה במקום החזרת אובייקטimage.Imageחדש. תוכן התמונה הקודם נכתב מחדש באמצעות העתקה עמוקה.אם
CSI.auto_rotationמופעל מתודה זו תחזירimage.Imageשכבר עברה סיבוב.
- cid() int¶
מחזיר את מזהה השבב של מודול המצלמה. השווה מול אחד מ-
csi.OV2640,csi.OV5640,csi.OV7670,csi.OV7690,csi.OV7725,csi.OV9650,csi.MT9V022,csi.MT9V024,csi.MT9V032,csi.MT9V034,csi.MT9M114,csi.BOSON320,csi.BOSON640,csi.LEPTON,csi.HM01B0,csi.HM0360,csi.GC2145,csi.GENX320ES,csi.GENX320,csi.PAG7920,csi.PAG7936,csi.PAJ6100,csi.FROGEYE2020, אוcsi.SOFTCSI.
- readable() bool¶
מחזיר
Trueאם יש תמונה מוכנה להחזרה על ידיCSI.snapshotכך שקריאה ל-snapshot לא תחסום.
- pixformat(pixformat: int | None = None) int | None¶
מגדיר את פורמט הפיקסל של מודול המצלמה לאחד מ-
csi.GRAYSCALE,csi.RGB565,csi.BAYER,csi.YUV422, אוcsi.JPEG(רק ב-OV2640/OV5640).מחזיר את ה-pixformat הנוכחי אם נקרא ללא ארגומנטים.
- framesize(framesize: int | Tuple[int, int] | None = None) int | None¶
מגדיר את גודל הפריים של מודול המצלמה לאחד מקבועי הגודל (לדוגמה
csi.QVGA,csi.VGA,csi.HD, וכו« — ראה את מקטע הקבועים).לחלופין, ניתן להעביר framesize מותאם אישית כ-tuple
(w, h). כאשרCSI.snapshotנקרא ה-framesize המותאם אישית ייבדק מול כללי DMA. בדרך כלל framesizes צריכים להיות כפולה של 8 פיקסלים ו/או 16 בתים.מחזיר את ה-framesize הנוכחי אם נקרא ללא ארגומנטים.
- framerate(rate: int | None = None) int | None¶
מגדיר את קצב הפריימים ב-Hz עבור מודול המצלמה.
מחזיר את ה-framerate הנוכחי אם נקרא ללא ארגומנטים.
הערה
CSI.framerateעובד על ידי השמטת פריימים שמתקבלים ממודול המצלמה כדי לשמור על קצב הפריימים בקצב המצוין או מתחתיו. כברירת מחדל המצלמה תרוץ בקצב הפריימים המקסימלי. אם מיושם עבור חיישן המצלמה המסויםCSI.framerateגם יפחית את קצב הפריימים של חיישן המצלמה באופן פנימי כדי לחסוך בחשמל ולשפר את איכות התמונה על ידי הגדלת חשיפת החיישן.CSI.framerateעלול להתנגש עםCSI.auto_exposureבחלק מהמצלמות.
- window(roi: Tuple[int, int] | Tuple[int, int, int, int] | None = None) Tuple[int, int, int, int] | None¶
מגדיר את רזולוציית המצלמה לתת-אזור של הרזולוציה הנוכחית.
roiהוא tuple(x, y, w, h). ניתן גם להעביר(w, h)והחלון ימורכז.מחזיר את ה-tuple
(x, y, w, h)הנוכחי אם נקרא ללא ארגומנטים.
- gainceiling(gainceiling: int) bool¶
מגדיר את תקרת ההגבר (gainceiling) של תמונת המצלמה לאחד מ-2, 4, 8, 16, 32, 64, או 128.
מחזיר
Trueבהצלחה ו-Falseבכישלון.
- contrast(contrast: int) bool¶
מגדיר את הניגודיות של תמונת המצלמה.
מחזיר
Trueבהצלחה ו-Falseבכישלון.
- saturation(saturation: int) bool¶
מגדיר את הרוויה של תמונת המצלמה.
מחזיר
Trueבהצלחה ו-Falseבכישלון.
- quality(quality: int) bool¶
מגדיר את איכות דחיסת ה-JPEG של תמונת המצלמה. 0 - 100.
מחזיר
Trueבהצלחה ו-Falseבכישלון.הערה
רק עבור מצלמות OV2640/OV5640.
- colorbar(enable: bool) bool¶
מפעיל מצב פסי צבע (
True) או מכבה אותו (False). ברירת המחדל היא כבוי.מחזיר
Trueבהצלחה ו-Falseבכישלון.
- auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None¶
enableמפעיל בקרת הגבר אוטומטית (True) או מכבה אותה (False). המצלמה מתחילה את פעולתה עם בקרת הגבר אוטומטית מופעלת.אם
enableהואFalseניתן להגדיר הגבר קבוע בדציבלים עםgain_db.אם
enableהואTrueניתן להגדיר את תקרת ההגבר המקסימלית בדציבלים עםgain_db_ceilingעבור אלגוריתם בקרת ההגבר האוטומטית.הערה
עליך לכבות גם את איזון הלבן אם ברצונך לעקוב אחר צבעים.
- auto_exposure(enable: bool, exposure_us: int = -1) None¶
enableמפעיל בקרת חשיפה אוטומטית (True) או מכבה אותה (False). המצלמה מתחילה את פעולתה עם בקרת חשיפה אוטומטית מופעלת.אם
enableהואFalseניתן להגדיר זמן חשיפה קבוע במיקרושניות עםexposure_us.הערה
אלגוריתמי החשיפה האוטומטית של המצלמה די שמרניים לגבי כמה הם מכווננים את ערך החשיפה ובדרך כלל יימנעו משינוי משמעותי של ערך החשיפה. במקום זאת, הם משנים את ערך ההגבר רבות כדי להתמודד עם תאורה משתנה.
- auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None¶
enableמפעיל איזון לבן אוטומטי (True) או מכבה אותו (False). המצלמה מתחילה את פעולתה עם איזון לבן אוטומטי מופעל.אם
enableהואFalseניתן להגדיר הגבר קבוע בדציבלים עבור הערוצים האדום, הירוק והכחול בהתאמה עםrgb_gain_db.הערה
עליך לכבות גם את בקרת ההגבר אם ברצונך לעקוב אחר צבעים.
- rgb_gain_db() Tuple[float, float, float]¶
מחזיר tuple
(r, g, b)של ערכי ההגבר הנוכחיים של המצלמה לערוצים האדום, הירוק והכחול בדציבלים.
- auto_blc(enable: bool, regs: List[int] | None = None) None¶
מגדיר את כיול רמת השחור האוטומטי (BLC) במצלמה.
enableהעברTrueאוFalseכדי להפעיל או לכבות את BLC. בדרך כלל תמיד תרצה שזה יהיה מופעל.regsאם מנוטרל אזי ניתן להגדיר ידנית את ערכי אוגר ה-BLC מקריאה קודמת ל-CSI.blc_regs.
- blc_regs() List[int]¶
מחזיר את אוגרי ה-BLC של החיישן כרשימת מספרים שלמים. לשימוש עם
CSI.auto_blc.
- hmirror(enable: bool | None = None) bool | None¶
מפעיל מצב שיקוף אופקי (
True) או מכבה אותו (False). ברירת המחדל היא כבוי.מחזיר את ההגדרה הנוכחית אם נקרא ללא ארגומנטים.
- vflip(enable: bool | None = None) bool | None¶
מפעיל מצב היפוך אנכי (
True) או מכבה אותו (False). ברירת המחדל היא כבוי.מחזיר את ההגדרה הנוכחית אם נקרא ללא ארגומנטים.
- transpose(enable: bool | None = None) bool | None¶
מפעיל מצב שחלוף (transpose) (
True) או מכבה אותו (False). ברירת המחדל היא כבוי.vflip=False, hmirror=False, transpose=False -> סיבוב 0 מעלות
vflip=True, hmirror=False, transpose=True -> סיבוב 90 מעלות
vflip=True, hmirror=True, transpose=False -> סיבוב 180 מעלות
vflip=False, hmirror=True, transpose=True -> סיבוב 270 מעלות
מחזיר את ההגדרה הנוכחית אם נקרא ללא ארגומנטים.
- auto_rotation(enable: bool | None = None) bool | None¶
מפעיל מצב סיבוב אוטומטי (
True) או מכבה אותו (False). ברירת המחדל היא כבוי.מחזיר את ההגדרה הנוכחית אם נקרא ללא ארגומנטים.
הערה
מתודה זו עובדת רק כאשר ל-OpenMV Cam מותקן
imuוהיא מופעלת באופן אוטומטי.
- framebuffers(count: int | None = None) int | None¶
מגדיר את מספר חוצצי הפריימים המשמשים לקבלת נתוני תמונה. כברירת מחדל OpenMV Cam ינסה להקצות את המספר המקסימלי של חוצצי פריימים שביכולתו. הקצאה מחדש מתרחשת בכל פעם ש-
CSI.pixformat,CSI.framesize, אוCSI.windowנקראים.countשל 1 (חוצץ יחיד), 2 (חוצץ כפול), או 3 (חוצץ משולש) בוחר את מצב הלכידה המתאים. העבר 4 או יותר כדי להעביר את מנהל ההתקן למצב FIFO וידאו שבוcountחוצצים נמצאים בתור — שימושי להקלטת וידאו לכרטיס SD. בעת השמטת פריים, כל חוצצי הפריימים מלבד הפעיל מנוקים כך ש-CSI.snapshotתמיד מחזיר פריים עדכני.מחזיר את ה-count הנוכחי אם נקרא ללא ארגומנטים.
- special_effect(effect: int) bool¶
מגדיר את האפקט הדיגיטלי המיוחד (אחד מ-
csi.NORMALאוcsi.NEGATIVE).מחזיר
Trueבהצלחה ו-Falseבכישלון.
- lens_correction(enable: bool, radi: int, coef: int) bool¶
enableTrueכדי להפעיל,Falseכדי לנטרל.radiרדיוס שלם של פיקסלים לתיקון.coefעוצמת התיקון.מחזיר
Trueבהצלחה ו-Falseבכישלון.
- vsync_callback(cb: Callable[[int], None] | None = None) Callable[[int], None] | None¶
רושם פונקציית callback
cbלהרצה (בהקשר פסיקה) בכל פעם שמודול המצלמה מייצר פריים חדש (אך לפני שהפריים מתקבל).cbמקבל ארגומנט אחד ומועבר לו המצב הנוכחי של פין ה-vsync לאחר השינוי.מחזיר את פונקציית ה-callback הרשומה אם נקרא ללא ארגומנטים. העבר כל ערך שאינו ניתן לקריאה כפונקציה כדי לנקות את ה-callback.
- frame_callback(cb: Callable[[], None] | None = None) Callable[[], None] | None¶
רושם פונקציית callback
cbלהרצה (בהקשר פסיקה) בכל פעם שמודול המצלמה מייצר פריים חדש והפריים מוכן לקריאה באמצעותCSI.snapshot.cbאינו מקבל ארגומנטים. השתמש בזה כדי לתזמן קריאת פריים מאוחר יותר עםmicropython.schedule().מחזיר את פונקציית ה-callback הרשומה אם נקרא ללא ארגומנטים. העבר כל ערך שאינו ניתן לקריאה כפונקציה כדי לנקות את ה-callback.
- ioctl(request: int, *args) Any¶
מבצע בקשה ספציפית לחיישן.
requestהוא אחד מקבועיIOCTL_*; שאר הארגומנטים המיקומיים וערך ההחזרה תלויים בבקשה. הבקשות הנתמכות מקובצות לפי משפחת חיישנים להלן.כללי (כל חיישן):
ioctl(IOCTL_SET_READOUT_WINDOW, (x, y, w, h))ioctl(IOCTL_SET_READOUT_WINDOW, (w, h))מגדיר את חלון הקריאה של החיישן. חלון קטן יותר מעלה את קצב הפריימים על חשבון שדה הראייה.
ioctl(IOCTL_GET_READOUT_WINDOW)מחזיר את חלון הקריאה הנוכחי כ-tuple
(x, y, w, h).ioctl(IOCTL_SET_TRIGGERED_MODE, enable)מפעיל (
True) או מנטרל (False) מצב מותנה (triggered) ב-MT9V034.ioctl(IOCTL_GET_TRIGGERED_MODE)מחזיר את מצב המצב המותנה הנוכחי כ-
bool.ioctl(IOCTL_SET_FOV_WIDE, enable)כאשר
True, מורה ל-framesize()למטב עבור שדה ראייה במקום עבור קצב פריימים.ioctl(IOCTL_GET_FOV_WIDE)מחזיר את מצב FOV-wide הנוכחי כ-
bool.ioctl(IOCTL_SET_NIGHT_MODE, enable)מפעיל (
True) או מנטרל (False) את ”מצב הלילה“ של החיישן לתאורה נמוכה. OV7725 ו-OV5640 בלבד.ioctl(IOCTL_GET_NIGHT_MODE)מחזיר את מצב הלילה הנוכחי כ-
bool.ioctl(IOCTL_GET_RGB_STATS)מחזיר tuple בן 4 איברים של סטטיסטיקות ערוצי RGB גולמיות
(r, gb, gr, b)שנקראו מהחיישן (בדרך כלל משמש לכוונון איזון לבן).
OV5640 FPC – מיקוד אוטומטי:
ioctl(IOCTL_TRIGGER_AUTO_FOCUS)מתחיל סריקת מיקוד אוטומטי במודול OV5640 FPC.
ioctl(IOCTL_PAUSE_AUTO_FOCUS)משהה סריקת מיקוד אוטומטי בתהליך.
ioctl(IOCTL_RESET_AUTO_FOCUS)מאפס את מיקום המיקוד האוטומטי לברירת המחדל.
ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)חוסם עד שסריקת המיקוד האוטומטי הנוכחית מסתיימת.
timeout_msברירת המחדל היא 5000 אם הושמט.
FLIR Lepton:
ioctl(IOCTL_LEPTON_GET_WIDTH)מחזיר את רוחב תמונת ה-Lepton בפיקסלים.
ioctl(IOCTL_LEPTON_GET_HEIGHT)מחזיר את גובה תמונת ה-Lepton בפיקסלים.
ioctl(IOCTL_LEPTON_GET_RADIOMETRY)מחזיר את סוג ה-Lepton (רדיומטרי או לא) כ-int.
ioctl(IOCTL_LEPTON_GET_REFRESH)מחזיר את קצב הרענון של ה-Lepton ב-Hz.
ioctl(IOCTL_LEPTON_GET_RESOLUTION)מחזיר את רזולוציית ה-ADC של ה-Lepton בביטים.
ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)מריץ פקודת FLIR Lepton SDK.
cmdהוא מזהה הפקודה בן 16 הביטים שמוגדר על ידי ה-SDK.ioctl(IOCTL_LEPTON_SET_ATTRIBUTE, attr_id, payload)כותב מאפיין Lepton SDK.
attr_idהוא מזהה המאפיין בן 16 הביטים;payloadהואbytes/bytearrayשאורכו חייב להיות כפולה של 16 ביטים.ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)קורא מאפיין Lepton SDK.
attr_idהוא מזהה המאפיין בן 16 הביטים;wordsהוא מספר המילים בנות 16 הביטים לקריאה. מחזירbytearray.ioctl(IOCTL_LEPTON_GET_FPA_TEMP)מחזיר את טמפרטורת מערך מישור המוקד (focal-plane-array) של ה-Lepton במעלות צלזיוס.
ioctl(IOCTL_LEPTON_GET_AUX_TEMP)מחזיר את הטמפרטורה העזר של ה-Lepton במעלות צלזיוס.
ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled)ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled, high_temp_enabled)מחליף את ה-Lepton בין AGC לפלט טמפרטורה ישיר.
measurement_enabled=Trueמפעיל פלט טמפרטורה ישיר. הדגל האופציונליhigh_temp_enabledבוחר את טווח הטמפרטורות הגבוהות.ioctl(IOCTL_LEPTON_GET_MODE)מחזיר tuple בן 2 איברים
(measurement_enabled, high_temp_enabled).ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))מגדיר את טווח הטמפרטורות הממופה ל-
0..255כאשר מצב המדידה מופעל.ioctl(IOCTL_LEPTON_GET_RANGE)מחזיר את טווח
(min_celsius, max_celsius)הנוכחי.
Himax HM01B0 – זיהוי תנועה:
ioctl(IOCTL_HIMAX_MD_ENABLE, enable)מפעיל (
True) או מנטרל (False) את בלוק זיהוי התנועה שעל החיישן של ה-HM01B0.ioctl(IOCTL_HIMAX_MD_WINDOW, (x, y, w, h))ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))מגדיר את חלון זיהוי התנועה ב-HM01B0.
ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)מגדיר את סף זיהוי התנועה (
0–255).ioctl(IOCTL_HIMAX_MD_CLEAR)מנקה את תפס פסיקת זיהוי התנועה.
ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)מפעיל (
True) או מנטרל (False) את המתנד הפנימי של ה-HM01B0.
Prophesee GENX320 – חיישן אירועים:
ioctl(IOCTL_GENX320_SET_BIASES, preset)מחיל ערכה מוגדרת מראש של הטיות (bias).
presetהוא אחד מקבועיGENX320_BIASES_*.ioctl(IOCTL_GENX320_SET_BIAS, bias, value)מגדיר הטיה (bias) יחידה.
biasהוא אחד מקבועיGENX320_BIAS_*;valueהוא ההגדרה השלמה.ioctl(IOCTL_GENX320_SET_AFK, enable)ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)מגדיר את מסנן נוגד-ההבהוב (anti-flicker).
enableהוא bool; ארגומנטי התדר האופציונליים מגדירים את פס המעבר של המסנן.ioctl(IOCTL_GENX320_SET_STC, mode)ioctl(IOCTL_GENX320_SET_STC, mode, arg1[, arg2])מגדיר את מצב מסנן הניגודיות המרחבי-זמני (spatio-temporal contrast).
modeהוא אחד מקבועיGENX320_STC_*; עד שני ארגומנטים נוספים תלויים במצב.ioctl(IOCTL_GENX320_SET_MODE, mode)ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)מחליף את החיישן בין מצבי פריים ואירוע.
modeהוא אחד מקבועיGENX320_MODE_*. עבור מצב אירוע,evt_resהוא אורך ציר השורות של חוצץ האירועים המועבר ל-IOCTL_GENX320_READ_EVENTS.ioctl(IOCTL_GENX320_READ_EVENTS, buf)קורא אירועים אל
buf, מערךndarrayמסוגuint16בצורה(EVT_res, 6)שבוEVT_resהוא חזקה של שתיים בין 1024 ל-65536. העמודות הן:[0]– סוג האירוע (PIX_OFF_EVENT/PIX_ON_EVENT/ טריגר).[1]– שניות.[2]– מילישניות.[3]– מיקרושניות.[4]– קואורדינטתx.[5]– קואורדינטתy.
מחזיר את מספר האירועים שנכתבו.
ioctl(IOCTL_GENX320_READ_EVENTS_RAW)מחזיר
image.Imageהמכילה את פריים האירועים הגולמי מה-GENX320.ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)מכבה פיקסלים שהרעש שלהם גדול מ-
sigmaסטיות תקן מההתפלגות הנורמלית.iterationsהוא מספר שלם של מעברי כיול. מחזיר את מספר הפיקסלים שנוטרלו.
- color_palette(palette: int | None = None) int | None¶
מגדיר את פלטת הצבעים לשימוש עבור דברים כמו המרת FLIR Lepton מגווני אפור ל-RGB565 או הדמיית אירועי GENX320. אחד מ-
image.PALETTE_RAINBOW,image.PALETTE_IRONBOW, ו-(כאשר נתמך)image.PALETTE_DEPTH,image.PALETTE_EVT_DARK, אוimage.PALETTE_EVT_LIGHT.מחזיר את ההגדרה הנוכחית אם נקרא ללא ארגומנטים.
פונקציות¶
קבועים¶
- csi.BINARY: int¶
פורמט פיקסל BINARY (מפת סיביות). כל פיקסל הוא 1-ביט. שימושי לאחסון מסכה; ניתן להשתמש בו עם
image.Image().
- csi.YUV422: int¶
פורמט פיקסל YUV422. כל פיקסל מאוחסן כערך Y בגווני אפור בן 8-ביט ואחריו ערכי צבע U/V לסירוגין בני 8-ביט המשותפים בין שני ערכי Y (Y1, U, Y2, V, …). רק חלק ממתודות עיבוד התמונה עובדות עם YUV422.
- csi.JPEG: int¶
מצב JPEG. מודול המצלמה מוציא תמונות JPEG דחוסות. השתמש ב-
CSI.qualityכדי לשלוט באיכות ה-JPEG. עובד רק עבור מצלמות OV2640/OV5640.
- csi.NORMAL: int¶
מצב Normal עבור
CSI.special_effect.
- csi.NEGATIVE: int¶
מצב Negative עבור
CSI.special_effect.
- csi.IOCTL_SET_FOV_WIDE: int¶
מאפשר ל-
CSI.framesizeלמטב עבור שדה ראייה על פני FPS. ראהCSI.ioctl.
- csi.IOCTL_GET_FOV_WIDE: int¶
מחזיר האם
CSI.framesizeממטב עבור שדה ראייה על פני FPS. ראהCSI.ioctl.
- csi.IOCTL_PAUSE_AUTO_FOCUS: int¶
משהה מיקוד אוטומטי (בזמן ריצה) עבור מודול המצלמה OV5640 FPC. ראה
CSI.ioctl.
- csi.IOCTL_RESET_AUTO_FOCUS: int¶
מאפס מיקוד אוטומטי לברירת המחדל עבור מודול המצלמה OV5640 FPC. ראה
CSI.ioctl.
- csi.IOCTL_WAIT_ON_AUTO_FOCUS: int¶
ממתין לסיום המיקוד האוטומטי במודול המצלמה OV5640 FPC. ראה
CSI.ioctl.
- csi.IOCTL_SET_NIGHT_MODE: int¶
מפעיל או מכבה מצב לילה. מפחית את קצב הפריימים כדי להגדיל את החשיפה באופן דינמי. ראה
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_WIDTH: int¶
מחזיר את רוחב רזולוציית תמונת ה-FLIR Lepton בפיקסלים. ראה
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_HEIGHT: int¶
מחזיר את גובה רזולוציית תמונת ה-FLIR Lepton בפיקסלים. ראה
CSI.ioctl.
- csi.IOCTL_LEPTON_GET_RESOLUTION: int¶
מחזיר את רזולוציית ה-ADC של ה-FLIR Lepton בביטים. ראה
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_MODE: int¶
מגדיר את מנהל ההתקן של ה-FLIR Lepton למצב שבו כל פיקסל הוא ערך טמפרטורה. ראה
CSI.ioctl.
- csi.IOCTL_LEPTON_SET_RANGE: int¶
מגדיר את טווח הטמפרטורות הממופה לערכי פיקסל במצב מדידה. ראה
CSI.ioctl.
- csi.IOCTL_GENX320_SET_BIASES: int¶
מגדיר את הטיות (bias) חיישן ה-GENX320 לאחת מהערכות המוגדרות מראש
GENX320_BIASES_*. ראהCSI.ioctl. לאחרCSI.resetמנהל ההתקן מחיל אתcsi.GENX320_BIASES_LOW_NOISE, ולא אתcsi.GENX320_BIASES_DEFAULT— השתמש ב-ioctl זה כדי לעבור לערכה מוגדרת מראש אחרת כאשר היישום זקוק ליותר רגישות או רוחב פס.
- csi.GENX320_BIASES_DEFAULT: int¶
ברירות מחדל של גיליון הנתונים של GenX320 — רגישות, רעש ורוחב פס מאוזנים לסצנות כלליות.
- csi.GENX320_BIASES_LOW_LIGHT: int¶
מכוון לתנאי תאורה נמוכה — שני ספי הניגודיות מורפים לרגישות גבוהה יותר, FO מורד, HPF מנוטרל כך ששינויי בהירות איטיים עדיין נרשמים.
- csi.GENX320_BIASES_ACTIVE_MARKER: int¶
מכוון למעקב אחר נורות LED מהבהבות בעלות ניגודיות גבוהה (סמנים פעילים) — ספי הניגודיות מועלים כך שרק מעברים חדים מפעילים אירוע, FO ו-HPF מוגברים מאוד למקסום רוחב הפס ודחיית סחיפה איטית של תאורת הסביבה, REFR=0 כך שכל קצה הבהוב נלכד.
- csi.GENX320_BIASES_LOW_NOISE: int¶
ברירת המחדל של מנהל ההתקן — רגישות נמוכה יותר מ-
DEFAULT(ספי ניגודיות מועלים) ו-FO נמוך יותר לפעילות רעש רקע פחותה. הטוב ביותר לסצנות סטטיות או איטיות שבהן אירועי שווא ישתלטו.
- csi.GENX320_BIASES_HIGH_SPEED: int¶
מכוון לסצנות תנועה מהירה — FO גבוה יותר לרוחב פס פיקסל רחב יותר, HPF גבוה יותר לדחיית שינויים איטיים, REFR גבוה יותר לזמן מת ארוך יותר לאחר כל אירוע כך שהקריאה לא תרווה.
- csi.IOCTL_GENX320_SET_BIAS: int¶
מגדיר הטיה (bias) יחידה של חיישן ה-GENX320 לערך DAC. העבר קבוע
GENX320_BIAS_*(csi.GENX320_BIAS_DIFF_OFF,csi.GENX320_BIAS_DIFF_ON,csi.GENX320_BIAS_FO,csi.GENX320_BIAS_HPF, אוcsi.GENX320_BIAS_REFR) וערך DAC שלם. כל הטיה היא עצמאית — קרא ל-ioctl זה שוב ושוב כדי לכוונן רק את ההטיות שאתה צריך לאחר החלת ערכה מוגדרת מראש. ראהCSI.ioctl.
- csi.GENX320_BIAS_DIFF_OFF: int¶
סף ניגודיות של המשווה השלילי — שולט בכמה פיקסל צריך להחשיך לפני ש-
csi.PIX_OFF_EVENTנורה. ערך נמוך יותר = רגיש יותר (יותר אירועים).
- csi.GENX320_BIAS_DIFF_ON: int¶
סף ניגודיות של המשווה החיובי — שולט בכמה פיקסל צריך להבהיר לפני ש-
csi.PIX_ON_EVENTנורה. ערך נמוך יותר = רגיש יותר (יותר אירועים).
- csi.GENX320_BIAS_FO: int¶
תדר חיתוך של מסנן מעביר-נמוכים של הפיקסל — מאזן בין רוחב פס פיקסל (מהירות/השהיה) לבין פעילות רעש רקע. ערך גבוה יותר = תגובת פיקסל מהירה יותר, יותר רעש.
- csi.GENX320_BIAS_HPF: int¶
תדר חיתוך של מסנן מעביר-גבוהים של הפיקסל — דוחה שינויי בהירות איטיים. ערך גבוה יותר = שינויים איטיים יותר מסוננים החוצה (רק מעברים מהירים נרשמים).
- csi.GENX320_BIAS_REFR: int¶
תקופת השבירה (refractory) של הפיקסל — זמן מת לאחר שפיקסל פולט אירוע שבמהלכו הוא אינו יכול לירות שוב. ערך גבוה יותר = זמן מת ארוך יותר, פחות אירועים מפיקסל עמוס.
- csi.IOCTL_GENX320_SET_AFK: int¶
מגדיר את מסנן נוגד-ההבהוב (AFK) של ה-GENX320, אשר דוחה אירועים מפיקסלים המתחלפים בפס תדר מחזורי (תאורה פלואורסצנטית, צגים מונעי-LED, וכו«). העבר
enable(1 כדי להפעיל, 0 כדי לנטרל) וכאשר מפעילים, את קצות הפס בהרץ:(enable, freq_low_hz, freq_high_hz). ראהCSI.ioctl.
- csi.IOCTL_GENX320_SET_STC: int¶
מגדיר את מצב מסנן הניגודיות המרחבי-זמני (STC) של ה-GENX320. העבר קבוע
GENX320_STC_*(csi.GENX320_STC_DISABLE,csi.GENX320_STC_ONLY,csi.GENX320_STC_TRAIL_ONLY,csi.GENX320_STC_TRAIL) ואחריו את הסף(ים) שהמצב דורש (במילישניות). ראהCSI.ioctl.
- csi.GENX320_STC_ONLY: int¶
שומר את האירוע השני של מקבץ; משמיט את האירוע הראשון וכל אירוע מאוחר יותר. מקבל פרמטר אחד,
stc_thresholdבמילישניות — אירועים בתוך אותו חלון מאירוע קודם באותו פיקסל נחשבים חלק מאותו מקבץ.
- csi.GENX320_STC_TRAIL_ONLY: int¶
שומר את האירוע הראשון של מקבץ; משמיט אירועים עוקבים על אותו פיקסל עד שחלף
trail_threshold. מקבל פרמטר אחד,trail_thresholdבמילישניות.
- csi.GENX320_STC_TRAIL: int¶
שומר את האירוע הראשון של מקבץ בתוספת קצוות עוקבים — משלב את
csi.GENX320_STC_ONLYואתcsi.GENX320_STC_TRAIL_ONLY. מקבל שני פרמטרים,stc_thresholdו-trail_threshold(שניהם ms); החיישן דורש ששניהם יישארו בערך ביחס של 13:1.
- csi.IOCTL_GENX320_SET_MODE: int¶
מגדיר את מצב הפעולה של ה-GENX320. העבר
csi.GENX320_MODE_HISTOעבור היסטוגרמת האירועים שעל השבב (המצלמה מתנהגת כמו מצלמת גווני אפור רגילה בקצב הפריימים המוגדר) אוcsi.GENX320_MODE_EVENTואחריו את אורך ציר השורות שלndarrayהאירועים (חזקה של שתיים בין 1024 ל-65536) עבור הזרמת אירועים גולמית. ראהCSI.ioctl.
- csi.GENX320_MODE_HISTO: int¶
מצב היסטוגרמה — אירועים נצברים על השבב לתאי ערך לכל פיקסל ומדווחים כפריים בגווני אפור בגודל 320x320 בקצב המוגדר (~20-350 FPS). המצלמה נראית כמו מצלמה רגילה, כך שכל שגרות עיבוד התמונה הסטנדרטיות עובדות ישירות.
- csi.GENX320_MODE_EVENT: int¶
מצב אירוע — עוקף את ההיסטוגרמה שעל השבב ומזרים אירועים גולמיים לתוך
ndarrayשל numpy עם חותמות זמן במיקרושניות, עבור יישומים הזקוקים לפירוט זמני מלא ולא לפריים מחולק-תאים מראש.
- csi.IOCTL_GENX320_READ_EVENTS: int¶
קורא אירועים גולמיים לתוך
ndarrayמסוג uint16 בצורה(EVT_res, 6)(כאשרEVT_resתואם לגודל החוצץ שהועבר ל-csi.IOCTL_GENX320_SET_MODE). העמודות הן[0]סוג אירוע (csi.PIX_OFF_EVENT,csi.PIX_ON_EVENT,csi.EXT_TRIGGER_RISING/FALLING,csi.RST_TRIGGER_RISING/FALLING),[1]חותמת זמן בשניות,[2]מילישניות,[3]מיקרושניות,[4]קואורדינטת X (0-319),[5]קואורדינטת Y (0-319). מחזיר את מספר האירועים שנכתבו לחוצץ, ומשאיר שורות ישנות יותר מעבר לספירה זו ללא שינוי. ראהCSI.ioctl.
- csi.IOCTL_GENX320_CALIBRATE: int¶
מנטרל אוטומטית פיקסלים חמים — פיקסלים שיורים באופן מזויף אפילו בסצנה סטטית. מנהל ההתקן בונה ספירת פגיעות לכל פיקסל בגודל 320x320, מחשב את הממוצע וסטיית התקן, ומנטרל כל פיקסל שספירתו עולה על
mean + sigma * stddev. העבר תקציב ספירת אירועים (אירועים לסכימה לפני חישוב הסטטיסטיקה — גבוה יותר = אומדן אמין יותר, איטי יותר; ~10000 הוא ברירת מחדל טובה) וערך sigma מסוג float (נמוך יותר = אגרסיבי יותר, ~0.5 ברירת מחדל). מחזיר את מספר הפיקסלים שנוטרלו. כוון תחילה את המצלמה לסצנה סטטית כך שאירועים מונעי-תנועה לא ייספרו כנגד פיקסלים שלמעשה תקינים. ראהCSI.ioctl.
- csi.IOCTL_GENX320_READ_EVENTS_RAW: int¶
מחזיר
image.Imageשל פריים אירועים גולמי מה-GENX320, כשהאירועים עדיין בקידוד הארוז המקורי של השבב — שימושי אם ברצונך להעביר את הזרם הגולמי ל-PC לפענוח לא-מקוון במקום לעבד אותו במצלמה. ראהCSI.ioctl.
- csi.PIX_OFF_EVENT: int¶
סוג אירוע GENX320 (עמודה
[0]) — פיקסל זיהה ירידה בבהירות (סף הניגודיות השלילי נחצה). עמודות[4]/[5]נושאות את ה-X/Y של הפיקסל.
- csi.PIX_ON_EVENT: int¶
סוג אירוע GENX320 (עמודה
[0]) — פיקסל זיהה עלייה בבהירות (סף הניגודיות החיובי נחצה). עמודות[4]/[5]נושאות את ה-X/Y של הפיקסל.
- csi.RST_TRIGGER_RISING: int¶
סוג אירוע GENX320 (עמודה
[0]) — טריגר איפוס-פיקסל, קצה עולה. X/Y אינם בשימוש. אינו נוצר על ידי הקושחה בשלב זה.
- csi.RST_TRIGGER_FALLING: int¶
סוג אירוע GENX320 (עמודה
[0]) — טריגר איפוס-פיקסל, קצה יורד. X/Y אינם בשימוש. אינו נוצר על ידי הקושחה בשלב זה.