k210
─ k210模块¶
提供与k210相关的函数接口
Image 类¶
图像处理相关
构建对象¶
-
class
k210.
Image
(repl, ref=None)¶
兼容掌控板绘图相关¶
为了便于使用和教学,提供一些与掌控板相兼容的绘图函数接口。注意,这些函数并不是MaixPy原生所有。
Image.
DispChar
(text, x, y, color=(255, 255, 255))¶在图像中的(x, y)位置开始绘制文本。字体采用 Google Noto Sans CJK 开源无衬线字体字体。字体高度16像素点,支持英文,简体中文繁体中文,日文和韩文语言。
text
-- 绘制的文本x
、y
-- 起点坐标color
-- 字体颜色
Image.
pixel
(x, y, c)¶设置图像像素点颜色
x
、y
-- 像素点坐标c
-- 颜色
Image.
hline
(x, y, w, c=(255, 255, 255), thickness=1)¶在图像中绘制水平线
x
、y
-- 起点坐标w
-- 线宽thickness
-- 线粗
Image.
vline
(x, y, h, c=(255, 255, 255), thickness=1)¶在图像中绘制垂直线
x
、y
-- 起点坐标w
-- 线高thickness
-- 线粗
Image.
line
(x0, y0, x1, y1, c=(255, 255, 255), thickness=1)¶在图像中绘制任意线
x0
、y0
-- 起点位置x1
、y1
-- 终点位置c
-- 颜色thickness
-- 线粗
Image.
rect
(x, y, w, h, c=(255, 255, 255), thickness=1)¶在图像中绘制矩形框
x
、y
-- 左上坐标w
、h
-- 宽,高c
-- 颜色thickness
-- 线粗
Image.
fill_rect
(x, y, w, h, c=(255, 255, 255))¶在图像中绘制实心矩形
x
、y
-- 左上坐标w
、h
-- 宽,高c
-- 颜色
OpenMV¶
移植于MaixPy的OpenMV函数
Image.
load
(path, copy_to_fb=True)¶从
path
中的文件中创建一个新的图像对象。可以把图片存放至SD卡中,将对应图片文件路径作为该函数参数,将会创建该帧图片对象。支持bmp/pgm/ppm/jpg/jpeg格式的图像文件。若
copy_to_fb
为True,图像会直接载入帧缓冲区,您就可以加载大幅图片了。若为False,图像会载入MicroPython的堆中,堆远比帧缓冲区小。copy_to_fb
为False,您应该尽量把图像大小控制在8KB以下。若为True,则图像最大可为160KB。注意
使用时需要注意图片分辨率大小,过大的话会导致内存错误!
k210.
save
(path, roi=None, quality=50)¶将图像的副本保存到
path
中的k210的文件系统支持bmp/pgm/ppm/jpg/jpeg格式的图像文件。注意:您无法将jpeg格式的压缩图像保存成未压缩的格式。
roi
是一个用以复制的矩形的感兴趣区域(x, y, w, h)。如果未指定,ROI即复制整个图像的图像矩形。但这不适用于JPEG
图像。
quality
指在图像尚未被压缩时将图像保存为JPEG格式的JPEG压缩质量。
Image.
width
()¶返回以像素计的图像的宽度。
Image.
height
()¶返回以像素计的图像的高度。
Image.
format
()¶返回用于灰度图的 sensor.GRAYSCALE 、用于RGB图像的 sensor.RGB565
Image.
size
()¶返回以字节计的图像大小。
Image.
clear
()¶将图像中的所有像素设置为零(非常快)。
返回图像对象,以便您可以使用 . 表示法调用另一个方法。
不支持压缩图像。
Image.
pix_to_ai
()¶将图像的所有像素点转换成AI运算的数据
Image.
binary
(threshold, invert=False, zero=False)¶根据像素是否在阈值列表
thresholds
中的阈值内,将图像中的所有像素设置为黑色或白色。
thresholds
必须是元组列表。 [(lo, hi), (lo, hi), ..., (lo, hi)] 定义你想追踪的颜色范围。 对于灰度图像,每个元组需要包含两个值 - 最小灰度值和最大灰度值。 仅考虑落在这些阈值之间的像素区域。 对于RGB565图像,每个元组需要有六个值(l_lo,l_hi,a_lo,a_hi,b_lo,b_hi) - 分别是LAB L,A和B通道的最小值和最大值。 为方便使用,此功能将自动修复交换的最小值和最大值。此外,如果元组大于六个值,则忽略其余值。 相反,如果元组太短,则假定其余阈值处于最大范围。
invert
反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。设置
zero
为True
来使阈值像素为零,并使不在阈值列表中的像素保持不变。不支持压缩图像和bayer图像。
Image.
strech_char
(de_dark)¶预处理消除暗角
Image.
invert
()¶将二进制图像0(黑色)变为1(白色),1(白色)变为0(黑色),非常快速地翻转二进制图像中的所有像素值。
不支持压缩图像和Bayer图像。
Image.
draw_string
(x, y, text, scale=1, x_spacing=0, y_spacing=0, mono_space=True)¶从图像中的(x, y)位置开始绘制8x10文本。您可以单独传递x,y,也可以作为元组(x,y)传递。
text
- 是写入图像的字符串。 n, r, 和 rn 结束符将光标移至下一行。color
- 是用于灰度或RGB565图像的元组。默认为白色。但是,您也可以传递灰度图像的基础像素值(0-255)或RGB565图像的字节反转RGB565值。scale
- 增加图像上文本的大小,仅整数值。x_spacing
- 允许你在字符之间添加(如果是正数)或减去(如果是负数)x像素,设置字符间距。y_spacing
- 允许你在字符之间添加(如果是正数)或减去(如果是负数)y像素,设置行间距。mono_space
- 默认为True,强制文本间距固定。对于大文本,这看起来很糟糕。设置False以获得非固定宽度的字符间距。
Image.
draw_line
(x0, y0, x1, y1, color=(255, 255, 255), thickness=1)¶在图像上绘制一条从(x0,y0)到(x1,y1)的线。 您可以单独传递x0,y0,x1,y1,也可以传递给元组(x0,y0,x1,y1)。
color
- 是用于灰度或RGB565图像的元组。默认为白色。但是,您也可以传递灰度图像的基础像素值(0-255)或RGB565图像的字节反转RGB565值。thickness
- 控制线的粗细像素。
Image.
draw_circle
(x, y, radius, color=(255, 255, 255), thickness=1, fill=False)¶在图像上绘制一个圆形。 您可以单独传递x,y,半径 或 作为元组(x,y,radius)传递。
color
- 是用于灰度或RGB565图像的元组。默认为白色。但是,您也可以传递灰度图像的基础像素值(0-255)或RGB565图像的字节反转RGB565值。thickness
- 控制线的粗细像素。fill
- 设置为True以填充圆形。
Image.
draw_rectangle
(x, y, w, h, color=(255, 255, 255), thickness=1, fill=False)¶在图像上绘制一个矩形。 您可以单独传递x,y,w,h或作为元组(x,y,w,h)传递。
color
- 是用于灰度或RGB565图像的元组。默认为白色。但是,您也可以传递灰度图像的基础像素值(0-255)或RGB565图像的字节反转RGB565值。thickness
- 控制线的粗细像素。fill
- 设置为True以填充矩形。
Image.
draw_cross
(x, y, color=(255, 255, 255), size=5, thickness=1)¶在图像上绘制一个十字。 您可以单独传递x,y或作为元组(x,y)传递。
color
-- 是用于灰度或RGB565图像的RGB888元组。默认为白色。但是,您也可以传递灰度图像的基础像素值(0-255)或RGB565图像的字节反转RGB565值。size
-- 控制十字线的延伸长度。thickness
-- 控制边缘的像素厚度。返回图像对象,以便您可以使用 . 表示法调用另一个方法。
不支持压缩图像和bayer图像。
Image.
draw_arrow
(x0, y0, x1, y1, color=(255, 255, 255), thickness=1)¶在图像上绘制一条从(x0,y0)到(x1,y1)的箭头。
color
- 是用于灰度或RGB565图像的元组。默认为白色。但是,您也可以传递灰度图像的基础像素值(0-255)或RGB565图像的字节反转RGB565值。thickness
- 控制线的粗细像素。
Image.
draw_image
(image, x, y, x_scale=1.0, y_scale=1.0, alpha=256)¶绘制一个
image
,其左上角从位置x,y开始。
x_scale
-- 控制图像在x方向(浮点数)缩放的程度。y_scale
-- 控制图像在y方向(浮点数)缩放的程度。alpha
-- 控制另一幅图像与这幅图像的混合程度。 alpha 应该是0到256之间的一个整数值。接近零的值会将更多其他图像混合到该图像中,而接近256的值则相反。返回图像对象,以便您可以使用 . 表示法调用另一个方法。
不支持压缩图像和bayer图像。
Image.
get_pixel
(x, y)¶灰度图:返回(x, y)位置的灰度像素值。
RGB565:返回(x, y)位置的RGB888像素元组(r, g, b)。
不支持压缩图像。
Image.
set_pixel
(x, y, pixel)¶灰度图:将(x, y) 位置的像素设置为灰度值
pixel
。RGB图像:将(x, y) 位置的像素设置为RGB888元组(r, g, b) pixel 。
不支持压缩图像。
Image.
mean_pool
(x_div, y_div)¶在图像中找到
x_div
*y_div
正方形的平均值,并返回由每个正方形的平均值组成的修改图像。此方法允许您在原来图像上快速缩小图像。
不支持压缩图像和bayer图像。
Image.
to_rainbow
()¶将图像转换为彩虹图像。 此方法也会修改基础图像像素,以字节为单位更改图像大小,因此只能在RGB565图像上进行。
Image.
copy
(roi, copy_to_fb=True)¶创建一个图像对象的副本。
roi
-- 是一个用以复制的矩形的感兴趣区域(x, y, w, h)。如果未指定,ROI即复制整个图像的图像矩形。但这不适用于JPEG图像。copy_to_fb
-- 如果copy_to_fb
为True
,则该方法将帧缓冲替换为图像。 帧缓冲区具有比堆大得多的空间,并且可以容纳大图像。
Image.
to_grayscale
(copy=False, rgb_channel=-1)¶将图像转换为灰度图像。 此方法也会修改基础图像像素,以字节为单位更改图像大小,因此只能在灰度图像或RGB565图像上进行。 否则
copy
必须为True才能在堆上创建新的修改图像。
rgb_channel
如果设置为0/1/2,则分别从R/G/B通道创建一个灰度图像, 而如果在 RGB565 图像上调用此方法,则从 RGB565 像素计算灰度值。返回图像对象,以便您可以使用 . 表示法调用另一个方法。
不支持压缩图像和bayer图像。
Image.
resize
(w, h)¶改变图像大小,
w
、h
为图像修改后的图像宽高
Image.
find_blobs
(thresholds, invert=False, roi=None, x_stride=2, y_stride=1, area_threshold=10, pixels_threshold=10, merge=False, margin=0)¶查找图像中所有色块,并返回一个包括每个色块的色块对象的列表。请观察
blob
对象以获取更多信息。
thresholds
- 必须是元组列表。[(lo, hi), (lo, hi), ..., (lo, hi)] 定义你想追踪的颜色范围。对于灰度图像,每个元组需要包含两个值-最小灰度值和最大灰度值。仅考虑落在这些阈值之间的像素区域。对于RGB565图像,每个元组需要有六个值(l_lo,l_hi,a_lo,a_hi,b_lo,b_hi) - 分别是LAB L,A和B通道的最小值和最大值。为方便使用,此功能将自动修复交换的最小值和最大值。此外,如果元组大于六个值,则忽略其余值。相反,如果元组太短,则假定其余阈值处于最大范围。invert
- 反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。roi
- 感兴趣区域的矩形元组(x,y,w,h)。如果未指定,ROI即整个图像的图像矩形。操作范围仅限于roi
区域内的像素。x_stride
- 查找某色块时需要跳过的x像素的数量。找到色块后,直线填充算法将精确像素。若已知色块较大,可增加x_stride
来提高查找色块的速度。y_stride
- 查找某色块时需要跳过的y像素的数量。找到色块后,直线填充算法将精确像素。若已知色块较大,可增加y_stride
来提高查找色块的速度。area_threshold
- 若一个色块的边界框区域小于area_threshold
,则会被过滤掉。pixel_threshold
- 若一个色块的像素数小于pixel_threshold
,则会被过滤掉。merge
- 若为True,则合并所有没有被过滤掉的色块,这些色块的边界矩形互相交错重叠。margin
- 可在相交测试中用来增大或减小色块边界矩形的大小。例如:边缘为1、相互间边界矩形为1的色块将被合并。合并色块使颜色代码追踪得以实现。每个色块对象有一个代码值
code
,该值为一个位向量。 例如:若您在 image.find_blobs 中输入两个颜色阈值,则第一个阈值代码为1,第二个代码为2(第三个代码为4,第四个代码为8,以此类推)。 合并色块对所有的code使用逻辑或运算,以便您知道产生它们的颜色。这使得您可以追踪两个颜色,若您用两种颜色得到一个色块对象,则可能是一种颜色代码。若您使用严格的颜色范围,无法完全追踪目标对象的所有像素,您可能需要合并色块。最后,若您想要合并色块,但不想两种不同阈值颜色的色块被合并,只需分别两次调用
image.find_blobs
,不同阈值色块就不会被合并。
blob
对象为字典类型,含关键字如下述:
关键字 说明 corners 返回对象的4个角的4 (x,y)元组列表。从左上方开始按顺时针顺序返回角。 min_corners 返回包含4个角的4 (x,y)元组的列表,该元组的边界大于该Blob的最小面积矩形的边界。 与 blob.corners() 不同,最小面积矩形的角并不一定位于blob上。 x 色块的边界框的x坐标(int) y 色块的边界框的y坐标(int) w 色块的边界框的宽 h 色块的边界框的高 pixels 属于色块(int)一部分的像素数量 cx 色块(int)的中心x位置 cy 色块(int)的中心y位置 rotation 返回色块的旋转(单位:弧度)。如果色块类似铅笔或钢笔,那么这个值就是介于0-180之间的唯一值。 如果这个色块圆的,那么这个值就没有效用。 rotation_deg 以度为单位返回blob的旋转角度。 rotation_rad 以弧度为单位返回blob的旋转度数。这个方法比 blob.rotation() 更具描述性。 code 返回一个32位的二进制数字,其中为每个颜色阈值设置一个位,这是色块的一部分。 例如,如果您通过 image.find_blobs 来寻找三个颜色阈值,这个色块可以设置为0/1/2位。 注意:除非以 merge=True 调用 image.find_blobs ,否则每个色块只能设置一位。 那么颜色阈值不同的多个色块就可以合并在一起了。 您也可以用这个方法以及多个阈值来实现颜色代码跟踪。 count 返回合并到此Blob中的Blob数。 perimeter 返回该blob周长上的像素数。 roundness 返回0到1之间的值,表示对象的圆度。一个圆将是1。 elongation 返回一个介于0和1之间的值,该值表示对象的长度(不是圆形)。一条线将是1。 area 返回色块周围的边框面积(w * h) density 返回这个色块的密度比。这是在色块边界框区域内的像素点的数量。 总的来说,较低的密度比意味着这个对象的锁定得不是很好。 结果在0和1之间。
查找图像内的所有AprilTag, 并返回一个 image.apriltag 对象的列表。请参考 image.apriltag 对象以获取更多信息。
与二维码相比,AprilTags可在更远距离、较差光线和更扭曲的图像环境下被检测到。 AprilTags可应对所有种类的图像失真问题,而二维码并不能。也就是说,AprilTags只能将数字ID编码作为其有效载荷。 AprilTag使用的是 TAG36H11 。
apriltag
对象为字典类型,含关键字如下述:
关键字 说明 corners 返回对象的4个角的4 (x,y)元组列表。从左上方开始按顺时针顺序返回角。 x AprilTag的边界框的x坐标(int) y AprilTag的边界框的y坐标(int) cx AprilTag(int)的中心x位置 cy AprilTag(int)的中心y位置 id 返回AprilTag的数字ID。TAG36H11 -> 0 to 586。 rotation 返回以弧度计的AprilTag的旋度(int)。 decision_margin 返回AprilTag匹配的色饱和度(取值0.0 - 1.0),其中1.0为最佳。 hamming 返回AprilTag的可接受的数位误差数值。 goodness 返回AprilTag图像的色饱和度(取值0.0 - 1.0),其中1.0为最佳。 x_translation 返回距离摄像机x方向的变换,距离的单位未知。 y_translation 返回距离摄像机y方向的变换,距离的单位未知。 z_translation 返回距离摄像机z方向的变换,距离的单位未知。 x_rotation 返回以弧度计的AprilTag在X平面上的旋度。例:目视AprilTag,从左至右移动摄像头。 y_rotation 返回以弧度计的AprilTag在Y平面上的旋度。例:目视AprilTag,从上至下移动摄像头。 z_rotation 返回以弧度计的AprilTag在Z平面上的旋度。例:目视AprilTag,旋转摄像头。
Sensor 类¶
摄像头传感器模块,进行摄像头配置及图像抓取等,用于控制开发板摄像头完成摄像任务。
构建对象¶
-
class
k210.
Sensor
(repl)¶ -
snapshot
()¶
摄像头拍摄图像,返回
Image
对象。-
set_vflip
(enable)¶
垂直翻转模式。
True
打开或False
关闭。默认关闭。-
set_hmirror
(enable)¶
水平镜像模式。
True
打开或False
关闭。默认关闭。-
set_framesize
(framesize)¶
用于设置摄像头输出帧大小,k210最大支持VGA格式,大于VGA将无法获取图像。推荐设置为
Sensor.QVGA
大小。- Sensor.QVGA -- 320x240
- Sensor.QQVGA -- 160x120
- Sensor.QQQVGA -- 80x60
- Sensor.QQQQVGA -- 40x30
-
set_pixformat
(format)¶
用于设置摄像头输出格式,推荐设置为
Sensor.RGB565
格式- Sensor.RGB565 -- 8-bits per pixel.
- Sensor.GRAYSCALE -- 16-bits per pixel.
-
set_windowing
(roi)¶
设置摄像头窗口大小。例如:你可以 set_windowing((224,224)) , 然后
Sensor.snapshot()
以捕捉由摄像头输出的320*240分辨率的224x224中心像素。 您可使用窗口来获得定制的分辨率。-
skip_frames
([n, time])¶
跳过指定帧数或者跳过指定时间内的图像,让相机图像在改变相机设置后稳定下来
n
-- 跳过 n 帧图像time
-- 跳过指定时间,单位为ms
若 n 和 time 皆未指定,该方法跳过300毫秒的帧;若二者皆指定,该方法会跳过 n 数量的帧,但将在 time 毫秒后返回
-
run
(enable)¶
启动或关闭捕获图像功能(默认经过复位,设置帧大小,设置像素格式后会自动启动摄像头,不调用run(1)也会开始采集图像)
enable
-- 1 表示开启 0 表示停止
-
shutdown
(enable)¶
关闭摄像头/切换摄像头
-
width
()¶
获取摄像头分辨率宽度
-
height
()¶
获取摄像头分辨率高度
-
reset
([freq=24000000, set_regs=True, dual_buff=False])¶
重置并初始化摄像头
-
set_colorbar
(enable)¶
将摄像头设置为彩条测试模式。
开启彩条测试模式后,摄像头会输出一彩条图像,常用来检测摄像机总线是否连接正确。
-
set_brightness
(brightness)¶
设置摄像头亮度
brightness
-- 摄像头亮度,范围为[-2,+2]
-
set_contrast
(contrast)¶
设置摄像头对比度
contrast
-- 摄像头对比度,范围为[-2,+2]
-
set_saturation
(saturation)¶
设置摄像头饱和度
saturation
-- 摄像头饱和度,范围为[-2,+2]
-
set_auto_gain
(enable, gain_db)¶
设置摄像自动增益模式
enable
-- 1 表示开启自动增益 0 表示关闭自动增益gain_db
-- 关闭自动增益时,设置的摄像头固定增益值,单位为dB
如果需要追踪颜色,需要关闭自动增益
-
get_gain_db
()¶
获取摄像头增益值
-
set_auto_whitebal
(enable)¶
设置摄像自动白平衡模式,默认打开
-
LCD 类¶
显示屏控制
构建对象¶
-
class
k210.
LCD
¶ -
display
(image[, roi, oft])¶
在液晶屏上显示一张 image(GRAYSCALE或RGB565)。
image
-- 为Image对象roi
-- 一个感兴趣区域的矩形元组(x, y, w, h)。若未指定,即为图像矩形oft
-- 图像显示位置
-
init
([type=1, freq=15000000, color=LCD.BLACK])¶
初始化 LCD 屏幕显示
-
clear
(color=LCD.BLACK)¶
将液晶屏清空为黑色或者指定的颜色
-
LCD.draw_string(x, y, text [, font_color=LCD.RED, bg_color=LCD.BLACK]):
在lcd屏上绘制文本。从(x,y)位置开始绘制text文本,
font_color
为文本的颜色。bg_color
为背景颜色。-
rotation
(dir)¶
设置 LCD 屏幕方向
dir
-- 取值范围 [0,3], 从0到3依次顺时针旋转
-
mirror
(invert)¶
设置 LCD 是否镜面显示
invert
-- 是否镜面显示
-
width
()¶
返回 LCD 的宽度(水平分辨率)
-
height
()¶
返回 LCD 的高度(垂直分辨率)
-
deinit
()¶
注销 LCD 驱动,释放I/O引脚
颜色常量
-
BLACK
¶
-
NAVY
¶
-
DARKGREEN
¶
-
DARKCYAN
¶
-
MAROON
¶
-
PURPLE
¶
-
OLIVE
¶
-
LIGHTGREY
¶
-
DARKGREY
¶
-
BLUE
¶
-
GREEN
¶
-
RED
¶
-
MAGENTA
¶
-
YELLOW
¶
-
WHITE
¶
-
ORANGE
¶
-
GREENYELLOW
¶
-
PINK
¶
-
KPU 类¶
KPU是通用的神经网络处理器,它可以在低功耗的情况下实现卷积神经网络计算,时时获取被检测目标的大小、坐标和种类,对人脸或者物体进行检测和分类。
KPU 具备以下几个特点:
- 支持主流训练框架按照特定限制规则训练出来的定点化模型
- 对网络层数无直接限制,支持每层卷积神经网络参数单独配置,包括输入输出通道数目、输入输 出行宽列高
- 支持两种卷积内核 1x1 和 3x3
- 支持任意形式的激活函数
- 实时工作时最大支持神经网络参数大小为 5.5MiB 到 5.9MiB
- 非实时工作时最大支持网络参数大小为(Flash 容量-软件体积)
构建对象¶
-
class
k210.
KPU
¶ -
load
(path)¶
从flash或者文件系统中加载模型。加载后,返回 kpu_net 模型网络对象 。path 可以是模型在 flash 中的偏移大小,如 0xd00000 表示模型烧录在13M起始的地方,或者模型在文件系统中为文件名, 如 "/sd/xxx.kmodel"
AI Camera 、1956 、实验箱均在flash里烧录好一些常用的模型,如下:
模型 flash地址 人脸追踪(yolo2) 0x300000 手写数字(分类器) 0x600000 20类(yolo2) 0x640000 -
init_yolo2
(kpu_net, threshold, nms_value, anchor_num, anchor)¶
为yolo2网络模型传入初始化参数。
kpu_net
-- KPU.load() 返回的模型网络对象threshold
-- 概率阈值nms_value
-- box_iou 门限anchor_num
-- 锚点数anchor
-- 锚点参数与模型参数一致
-
run_yolo2
(kpu_net, image_t)¶
运行yolo2网络。如侦测到对象,函数会返回含侦测到对象的列表,无,则返回 None 。每个对象为一个字典类型的成员。返回如下:
>>> [{'classid': 14, 'objnum': 1, 'w': 302, 'index': 0, 'y': 5, 'x': 19, 'h': 240, 'value': 0.546819},{'classid': 14, 'objnum': 1, 'w': 232, 'index': 0, 'y': 38, 'x': 0, 'h': 216, 'value': 0.898214}]
kpu_net
-- KPU.load() 返回的模型网络对象image_t
-- 从 sensor 采集到的图像
-
forward
(kpu_net, img)¶
计算已加载的神经网络网络模型。返回,模型运算的最终结果,为元组类型,可用于图像分类的模型应用。
kpu_net
-- KPU.load() 返回的模型网络对象img
-- 从 sensor 采集到的图像
-
deinit
()¶
反初始化,释放模型资源。
-