โมดูลกล้อง Global Shutter

โมดูลกล้อง Global Shutter เป็น sensor โมโนโครมที่จับภาพการเคลื่อนไหวเร็วโดยไม่มี rolling-shutter artifacts เหมาะสำหรับการติดตามความเร็วสูง โดรน และสแนปช็อตการมองเห็นของเครื่อง โมดูลมาพร้อมกับ sensor MT9V024 หรือ MT9V034

Global Shutter Camera Module

สำหรับ datasheet ฉบับเต็ม รูปภาพ และการสั่งซื้อ ดูได้ที่ หน้าผลิตภัณฑ์ Global Shutter Camera Module

จุดเด่น

  • sensor โมโนโครม global-shutter ความละเอียด 752x480

  • 80 FPS ที่ QVGA, 200 FPS ที่ QQVGA, 400 FPS ที่ QQQVGA

  • ช่วงไดนามิก 55 dB

  • เข้ากันได้กับ base boards โมดูลทั้งหมดของ OpenMV Cam

การใช้งาน

สตรีมวิดีโอระดับสีเทาที่ 320x240 (QVGA):

import csi
import time

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
clock = time.clock()

while True:
    clock.tick()
    img = csi0.snapshot()
    print(clock.fps())

sensor จะเปิดใช้งาน pixel binning อัตโนมัติที่ความละเอียดต่ำกว่า — 2x ที่ QVGA (320x240) หรือเล็กกว่า, 4x ที่ QQVGA (160x120) หรือเล็กกว่า — ซึ่งลดเวลา readout ตามสัดส่วนและผลักดันอัตราเฟรมขึ้น อย่างไรก็ตาม กล้องยังต้องรวมแสงตาม exposure window ที่ต้องการ ดังนั้นให้จับคู่การลด framesize กับ exposure cap สั้นกว่าผ่าน csi.CSI.auto_exposure เพื่อบรรลุอัตราที่สูงขึ้นจริงๆ (ภาพจะมืดลง — วางแผนใช้แสงเพิ่มเติม):

import csi
import time

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000)  # let auto-exposure settle
csi0.auto_exposure(True, exposure_us=5000)  # cap exposure
clock = time.clock()

while True:
    clock.tick()
    img = csi0.snapshot()
    print(clock.fps())

โหมด Triggered จะจัดแนว pixel integration ให้ตรงกับการเรียก csi.CSI.snapshot แต่ละครั้ง ทำให้การจับภาพซิงค์กับ snapshot แทนที่จะเป็น frame clock แบบ free-running ของกล้อง — มีประโยชน์สำหรับการซิงค์กับเหตุการณ์ภายนอกหรือ sensor อื่น เปิดใช้งานผ่าน csi.CSI.ioctl พร้อม csi.IOCTL_SET_TRIGGERED_MODE — อัตราเฟรมลดลงเหลือประมาณครึ่งหนึ่งของโหมด free-running เนื่องจาก readout ไม่ทำ pipeline กับการ integration ของเฟรมถัดไปอีกต่อไป:

import csi
import time

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.VGA)
csi0.snapshot(time=2000)

csi0.ioctl(csi.IOCTL_SET_TRIGGERED_MODE, True)

clock = time.clock()
while True:
    clock.tick()
    img = csi0.snapshot()
    print(clock.fps())