CircuitPython正在ESP32-S2中添加摄像头功能

Adafruit CircuitPython相关
MicroPython重要分支
回复
头像
shaoziyang
帖子: 3917
注册时间: 2019年 10月 21日 13:48

CircuitPython正在ESP32-S2中添加摄像头功能

#1

帖子 shaoziyang »

图片

Adafruit的博客消息,circuitpython正在ESP32-S2上添加对摄像头的支持,只需要简单几行代码,就可以初始化、读取摄像头并显示图像。

Code: Select all

import time
import board
import busio
import displayio
import adafruit_ili9341

displayio.release_displays()

#spi = busio.SPI(MISO=board.LCD_MISO, MOSI=board.LCD_MOSI, clock=board.LCD_CLK)
spi = busio.SPI(MOSI=board.LCD_MOSI, clock=board.LCD_CLK)

display_bus = displayio.FourWire(spi, command=board.LCD_D_C, chip_select=board.LCD_CS)

kw = dict(width=240, height=320)
def init_with_madctl(madctl):
return adafruit_ili9341._INIT_SEQUENCE.replace(b'\x36\x01\x38',
bytes([0x36, 1, madctl]))

display = displayio.Display(display_bus,
init_with_madctl(0b010_110_00), width=320, height=240)

from adafruit_ov7670 import (
OV7670,
OV7670_SIZE_DIV1,
OV7670_SIZE_DIV16,
OV7670_TEST_PATTERN_COLOR_BAR,
OV7670_TEST_PATTERN_SHIFTING_1,
OV7670_TEST_PATTERN_COLOR_BAR_FADE,
)
from displayio import (
Bitmap,
Group,
TileGrid,
FourWire,
release_displays,
ColorConverter,
Colorspace,
)


bus = busio.I2C(scl=board.CAMERA_SIOC, sda=board.CAMERA_SIOD)

# Set up the camera (you must customize this for your board!)
cam = OV7670(
bus,
data_pins=board.CAMERA_DATA,
clock=board.CAMERA_PCLK,
vsync=board.CAMERA_VSYNC,
href=board.CAMERA_HREF,
mclk=board.CAMERA_XCLK,
mclk_frequency = 20_000_000,
)
#cam.test_pattern = OV7670_TEST_PATTERN_COLOR_BAR
width = display.width
height = display.height

bitmap = None
# Select the biggest size for which we can allocate a bitmap successfully, and
# which is not bigger than the display
for size in range(OV7670_SIZE_DIV1, OV7670_SIZE_DIV16 + 1):
cam.size = size
if cam.width > width:
continue
if cam.height > height:
continue
try:
bitmap = Bitmap(cam.width, cam.height, 65535)
break
except MemoryError:
continue

print(width, height, cam.width, cam.height)
if bitmap is None:
raise SystemExit("Could not allocate a bitmap")

g = Group(scale=1, x=(width - cam.width) // 2, y=(height - cam.height) // 2)
tg = TileGrid(
bitmap, pixel_shader=ColorConverter(input_colorspace=Colorspace.RGB565_SWAPPED)
)
g.append(tg)
display.show(g)

t0 = time.monotonic_ns()
display.auto_refresh = False
while True:
cam.capture(bitmap)
t1 = time.monotonic_ns()
bitmap.dirty()
display.refresh(minimum_frames_per_second=0)
t1 = time.monotonic_ns()
print("fps", 1e9 / (t1 - t0), end="\r")
t0 = t1
 
 
 
 

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章