配套 OV2640攝像頭:200W像素通用24P攝像頭
具有200萬像素(1632x1232像素),其體積小、工作電壓低,提供單片UXGA攝像和影像處理器的所有功能。通過SCCB總線控制,可以輸出整幀、子采樣、取窗口等方式的各種分辨率10位采樣數據。該產品UXGA圖像最高達到15幀/秒。用戶可以完全控制圖像質量、數據格式和傳輸方式。所有圖像處理功能過程包括伽瑪曲線、白平衡、飽和度、色度等都可以通過SCCB接口編程。OmmiVision圖像傳感器應用獨有的傳感器技術,通過減少或消除光學或電子缺陷如固定圖案噪聲、托尾、浮散等,提高圖像質量,得到清晰的穩定的彩色圖像。
OV2640主要參數
可以支持定制FPC長度,鏡頭角度(70-160度)可以支持定制FPC長度,鏡頭角度(70-160度)
感光陣列1632x1232 最大格式UXGA
IO電壓1.7V-3.3V 模擬電壓2.5-3.0v(內部LDO給核供電1.2V)
功耗工作TBD 休眠<20μA
溫度操作-30℃到70℃
穩定工作0℃到50℃
輸出格式(8位)YUV/YCbCr4:2:2 RGB565/555/444 GRB4:2:2 Raw RGB Data
光學尺寸1/4"
視場角70度
最大貞率15fps SXGA
靈敏度1.3V/(Lux-sec)
信噪比40 dB
動態范圍50 dB
瀏覽模式逐行
電子曝光1行到1247行
像素面積2.2μm x 2.2μm
暗電流15mV/s at 60℃
工作電流40mA
OV2640內部方塊圖
攝像頭電原理圖
#MicroPython動手做(06)——零基礎學MaixPy之單目攝像頭
#實驗程序之一:測試單目攝像頭
#MicroPython動手做(06)——零基礎學MaixPy之單目攝像頭 #實驗程序之一:測試單目攝像頭 import sensor import lcd lcd.init() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) while True: img = sensor.snapshot() lcd.display(img)
單目攝像頭sensor驅動
傳感器模塊,進行攝像頭配置及圖像抓取等,用於控制開發板攝像頭完成攝像任務。
1. 初始化單目攝像頭
重置並初始化單目攝像頭
sensor.reset([freq=24000000, set_regs=True, dual_buff=False])
參數
freq: 設置攝像頭時鍾頻率,頻率越高幀率越高,但是畫質可能更差。默認 24MHz, 如果攝像頭有彩色斑點(ov7740),可以適當調低比如 20MHz
set_regs: 允許程序寫攝像頭寄存器,默認為 True。 如果需要自定義復位序列,可以設置為False,然后使用sensor.__write_reg(addr, value) 函數自定義寫寄存器序列
dual_buff: 允許使用雙緩沖,會增高幀率,但是內存占用也會增加(大約為384KiB)
2. 捕獲圖像控制
啟動或關閉捕獲圖像功能(默認經過復位,設置幀大小,設置像素格式后會自動啟動攝像頭,不調用run(1)也會開始采集圖像)
sensor.run(enable)
參數
enable: 1 表示開啟 0 表示停止
返回值
return: 返回 1
3. 設置幀大小
用於設置攝像頭輸出幀大小,k210最大支持VGA格式,大於VGA將無法獲取圖像
MaixPy開發板配置的屏幕是320*240分辨率,推薦設置為QVGA格式
sensor.set_framesize(framesize[, set_regs=True])
參數
framesize: 幀大小
set_regs: 允許程序寫攝像頭寄存器,默認為 True。 如果需要自定義設置幀大小的序列,可以設置為False,然后使用sensor.__write_reg(addr, value) 函數自定義寫寄存器序列
返回值
True : 設置成功
False: 設置錯誤
#MicroPython動手做(06)——零基礎學MaixPy之單目攝像頭
#測試程序之二:嘗試拍一張照片
#MicroPython動手做(06)——零基礎學MaixPy之單目攝像頭 #測試程序之二:嘗試拍一張照片 import sensor, lcd, image print("init") lcd.init(freq=15000000) sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) sensor.skip_frames(40) print("init ok") path = "/sd/image.jpg" img = sensor.snapshot() print("save image") img.save(path) print("read image") img_read = image.Image(path) lcd.display(img_read) print("ok")
串口輸出
init
init i2c2
[MAIXPY]: find gc3028
True
True
init ok
save image
{"w":320, "h":240, "type"="rgb565", "size":153600}
read image
ok
MicroPython v0.5.0-31-gd3e71c0 on 2020-03-13; Sipeed_M1 with kendryte-k210
單目攝像頭sensor驅動
傳感器模塊,進行攝像頭配置及圖像抓取等,用於控制開發板攝像頭完成攝像任務。
4. 設置幀格式
用於設置攝像頭輸出格式
MaixPy開發板配置的屏幕使用的是RGB565,推薦設置為RGB565格式
sensor.set_pixformat(format[, set_regs=True])
參數
format: 幀格式
set_regs: 允許程序寫攝像頭寄存器,默認為 True。 如果需要自定義設置像素格式的序列,可以設置為False,然后使用sensor.__write_reg(addr, value) 函數自定義寫寄存器序列
可選的幀格式有GRAYSCALE, RGB565, YUV422
返回值
True : 設置成功
False: 設置錯誤
5. 圖像捕捉控制
圖像捕捉功能控制
sensor.run(enable)
參數
enable: 1 表示開始抓取圖像 0 表示停止抓取圖像
返回值
True : 設置成功
False: 設置錯誤
6. 拍攝圖像
使用攝像頭拍攝一張照片
sensor.snapshot()
參數
無
返回值
img: 返回的圖像對象
#MicroPython動手做(06)——零基礎學MaixPy之單目攝像頭
#測試程序之三:錄制一段視頻(30秒)
#MicroPython動手做(06)——零基礎學MaixPy之單目攝像頭 #測試程序之三:錄制一段視頻(30秒) import video, sensor, image, lcd, time lcd.init(freq=15000000) sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) sensor.skip_frames(30) v = video.open("/sd/capture.avi", record=1, interval=200000, quality=50) i = 0 tim = time.ticks_ms() while True: tim = time.ticks_ms() img = sensor.snapshot() lcd.display(img) img_len = v.record(img) # print("record",time.ticks_ms() - tim) i += 1 if i > 100: break print("finish") v.record_finish() lcd.clear()
串口輸出
>>> init i2c2
[MAIXPY]: find gc3028
True
True
finish
MicroPython v0.5.0-31-gd3e71c0 on 2020-03-13; Sipeed_M1 with kendryte-k210
Maixduino開發板上的micro-SD卡插槽,我插入的是4G
在電腦上打開micro-SD卡,里面有程序二拍的照片,及程序三錄制的一小段視頻(實際只有25秒)
錄制視頻的截圖
單目攝像頭sensor驅動
傳感器模塊,進行攝像頭配置及圖像抓取等,用於控制開發板攝像頭完成攝像任務。
7. 攝像頭控制
關閉攝像頭/切換攝像頭
sensor.shutdown(enable/select)
參數
單目攝像頭
enable: True 表示開啟攝像頭 False 表示關閉攝像頭
雙目攝像頭
select: 通過寫入 0 或 1 來切換攝像頭
返回值
無
8. 跳幀
跳過指定幀數或者跳過指定時間內的圖像,讓相機圖像在改變相機設置后穩定下來
sensor.skip_frames([n,time])
參數
n: 跳過 n 幀圖像
time: 跳過指定時間,單位為ms
若 n 和 time 皆未指定,該方法跳過300毫秒的幀;若二者皆指定,該方法會跳過 n 數量的幀,但將在 time 毫秒后返回
返回值
無
9. 分辨率寬度
獲取攝像頭分辨率寬度
sensor.width()
參數
無
返回值
int類型的攝像頭分辨率寬度
10. 分辨率高度
獲取攝像頭分辨率高度
sensor.height()
參數
無
返回值
int類型的攝像頭分辨率高度
11. 獲取幀緩沖
獲取當前幀緩沖區
sensor.get_fb()
參數
無
返回值
image類型的對象
#MicroPython動手做(06)——零基礎學MaixPy之單目攝像頭
#測試程序之四:獲取和顯示實時幀數
#MicroPython動手做(06)——零基礎學MaixPy之單目攝像頭 #測試程序之四:獲取和顯示實時幀數 import sensor import image import lcd import time clock = time.clock() lcd.init() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) sensor.skip_frames(30) while True: clock.tick() img = sensor.snapshot() fps =clock.fps() img.draw_string(2,2, ("%2.1ffps" %(fps)), color=(0,128,0), scale=2) lcd.display(img)
燈光下實時幀數大約15-17幀(fps)
單目攝像頭sensor驅動
傳感器模塊,進行攝像頭配置及圖像抓取等,用於控制開發板攝像頭完成攝像任務。
12. 獲取ID
獲取當前攝像頭ID
sensor.get_id()
參數
無
返回值
int類型的ID
13. 設置彩條測試模式
將攝像頭設置為彩條測試模式
開啟彩條測試模式后,攝像頭會輸出一彩條圖像,常用來檢測攝像機總線是否連接正確。
sensor.set_colorbar(enable)
參數
enable: 1 表示開啟彩條測試模式 0 表示關閉彩條測試模式
返回值
無
14. 設置對比度
設置攝像頭對比度
sensor.set_contrast(contrast)
參數
constrast: 攝像頭對比度,范圍為[-2,+2]
返回值
True : 設置成功
False: 設置錯誤
15. 設置亮度
設置攝像頭亮度
sensor.set_brightness(brightness)
參數
constrast: 攝像頭亮度,范圍為[-2,+2]
返回值
True : 設置成功
False: 設置錯誤
16. 設置飽和度
設置攝像頭飽和度
sensor.set_saturation(saturation)
參數
constrast: 攝像頭飽和度,范圍為[-2,+2]
返回值
True : 設置成功
False: 設置錯誤
視頻:k210開發板采集圖像,顯示實時幀數(20秒)
https://v.youku.com/v_show/id_XNDYxODk0MjMwNA==.html
燈光下的實驗場景
單目攝像頭sensor驅動
傳感器模塊,進行攝像頭配置及圖像抓取等,用於控制開發板攝像頭完成攝像任務。
17. 設置自動增益
設置攝像自動增益模式
sensor.set_auto_gain(enable,gain_db)
參數
enable: 1 表示開啟自動增益 0 表示關閉自動增益
gain_db: 關閉自動增益時,設置的攝像頭固定增益值,單位為dB
如果需要追蹤顏色,需要關閉自動增益
返回值
無
18. 獲取增益值
獲取攝像頭增益值
sensor.get_gain_db()
參數
無
返回值
float類型的增益值
19. 設置水平鏡像
設置攝像頭水平鏡像
sensor.set_hmirror(enable)
參數
enable: 1 表示開啟水平鏡像 0 表示關閉水平鏡像
返回值
無
20. 寫入寄存器
往攝像頭寄存器寫入指定值
sensor.__write_reg(address, value)
參數
address: 寄存器地址
value : 寫入值
返回值
無
21. 讀取寄存器
讀取攝像頭寄存器值
sensor.__read_reg(address)
參數
address: 寄存器地址
返回值
int類型的寄存器值