ai
— AI人工智能¶
ai
模块能够执行量化的yolov5模型或其他AI模型 在znzpi AI相机上(可用运行软件推理,但强烈建议使用硬件推理RKNN)。
您可以阅读更多关于如何创建可以运行在znzpi AI相机上的自己的模型,here . 特别的:
或者,只要遵循谷歌的深度的指南 here. 如果您对谷歌的深度的指南有任何问题,请联系谷歌寻求帮助。
最终的输出``.rknn`` 模型可以让znzpi AI相机直接加载和运行。 也就是说,模型和模型的要求的初始RAM必须 符合在您的znzpi AI相机上可用的帧缓冲堆栈RAM。
znzpi AI相机拥有约32MB帧缓冲内存。 请保证你的模型和它需要的初始RAM小于16MB。
znzpi AI相机拥有约32MB帧缓冲内存。 请保证你的模型和它需要的初始RAM小于16MB。
znzpi AI相机拥有约32MB帧缓冲内存。 请保证你的模型和它需要的初始RAM小于16MB。
另外,还可以将模型加载到MicroPython堆或znzpi AI相机框架缓冲区中。 然而,这在很大程度上限制了所有znzpi AI相机sensor的模型大小。
函数¶
- ai.classify(img[, roi[, min_scale=1.0[, scale_mul=0.5[, x_overlap=0[, y_overlap=0]]]]])¶
在
img
上运行AI图像分类模型,并返回一个ai_classification
对象列表。 这个方法对图像使用可控滑动方式,执行多次模型(默认算法在整个图像帧上只执行网络一次)。znzpi AI相机的磁盘上的
.rknn
模型的路径需要通过load
加载。 为了节省内存,只通过这一个函数,模型被加载到内存中,执行并释放所有内存。 传递"person_detection"
可以从你的znzpi AI相机的内部FLASH加载内置的人检测模型。roi
代表感兴趣区域的元组(x,y,w,h).如果没有指定,它等于整个图像。只有roi
中像素才会参与运算min_scale
控制网络的缩放尺度。在默认值网络不缩放。 当值为0.5时,会允许检测大小为图像roi的50%的目标。scale_mul
控制有多少种不同的缩放尺度可以检测出来。 滑动窗口方法的工作原理是将默认的尺度1乘以scale_mul
同时结果大于min_scale
。scale_mul
的默认值是0.5,测试出每次变化可以减少50%的大小。但是,0.95只会减少5%的尺寸。x_overlap
控制与下一个滑动窗口的区域检测器重叠的百分比。 值为0意味着没有重叠,0.95意味着95%的重叠。y_overlap
控制与下一个滑动窗口的区域检测器重叠的百分比。 值为0意味着没有重叠,0.95意味着95%的重叠。
- ai.segment(img[, roi])¶
在
img
上执行yolov5图像分割模型, 返回一个灰度的image
对象列表,对应每一个分割分类的输出通道。模型必须使用
load
将.rknn
模型加载,默认加载到MicroPython堆的内存中。roi
代表感兴趣区域的元组(x,y,w,h).如果没有指定,它等于整个图像。只有roi
中像素才会参与运算
- ai.detect(img[, roi[, thresholds[, invert]]])¶
对
img
对象执行 yolov5 的图像分割模型。.rknn
必须通过load
提前加载, 并返回一个对应每个分割的image.blob
对象列表。例如,如果你有一个需要分割为两个分割类的对象。这个方法将返回一个含有两个与之阈值匹配的对象列表。模型必须使用
load
将.rknn
模型加载,默认加载到MicroPython堆的内存中。roi
代表感兴趣区域的元组(x,y,w,h).如果没有指定,它等于整个图像。只有roi
中像素才会参与运算thresholds
必须是一个[(lo, hi), (lo, hi), ..., (lo, hi)]
的列表,来定义需要追踪的颜色范围。你可一次传一个32 个阈值元组。 每个元组需要包含2个值一个最小一个最大灰度值。只有落在其阈值范围的像素才会被处理。为了易用,这个函数将自动交换最小和最大值。如果元组太短,则剩余的阈值将假定为可用的最小最大值。如果没有阈值指定,则假定为(128,255) 来作为检测 活跃像素分割范围invert
反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。
- ai.regression(array)¶
在img上执行yolov5图像分割模型, 返回一个灰度的 image 对象列表,对应每一个分割分类的输出通道。
模型必须使用
load
将.rknn
模型加载,默认加载到MicroPython堆的内存中。
- ai.load(path[, load_to_fb=False])¶
path
要加载的.rknn
模型的路径,默认加载到MicroPython堆的内存中。如果path是一个文件路径,代表其是用户自定义的模型。如果使用下面的模型标识,如 FACE_DETECTION 则表示使用内置的模型。注意!MicroPython堆在znzpi AI相机上的尺寸。
传递下面的标识可以从你的znzpi AI相机的内部FLASH加载内置的人检测模型。 这个内置的模型不使用任何Micropython堆内存。因为所有的权重保存在flash,可以和RAM一样访问。
FACE_DETECTION = 1, 人脸检测
FACE_LANDMARK_68 = 2, 暂不支持
FACE_RECOGNIZE = 3, 暂不支持
FACE_ANALYZE = 4, 暂不支持
OBJECT_DETECTION = 5, 目标检测
POSE_BODY = 6, 暂不支持
POSE_FINGER_21 = 7, 暂不支持
FACE_LANDMARK_5 = 8, 暂不支持
HEAD_DETECTION = 9, 暂不支持
CARPLATE_DETECTION = 10,暂不支持
CARPLATE_ALIGN = 11, 暂不支持
CARPLATE_RECOG = 12, 暂不支持
OBJECT_TRACK = 13, 暂不支持
POSE_FINGER_3 = 14, 暂不支持
FACE_LIVENESS = 15, 暂不支持
FACE_COMPARE 暂不支持
load_to_fb
如果传递为True,将会使用预留部分的znzpi AI相机帧缓冲区,来存储yolov5模型。 对于不能存储在Micropython堆栈大模型会得到最有效率执行性能,因为不用每次运行都从磁盘导入。 也就是说,帧缓冲所用到的空间将不能再用于其他算法。返回一个可以操作图像的
ai_model
对象。
ai_classification类 – ai分类 检测结果¶
ai_classification对象由 ai.classify()
或 ai_model.classify()
返回。
构造函数¶
- class ai.ai_classification¶
请调用
ai.classify()
或ai_model.classify()
来创建这个对象。方法¶
- rect()¶
返回ai_classification的边界框的矩形元组(x, y, w, h), 用于
image
方法,比如Image.draw_rectangle()
。
- x()¶
返回ai_classification的边界框x坐标(int)。
您也可以通过索引
[0]
取得这个值。
- y()¶
返回ai_classification的边界框y坐标(int)。
您也可以通过索引 [1] 取得这个值。
- w()¶
返回ai_classification的边界框w坐标(int)。
您也可以通过索引
[2]
取得这个值。
- h()¶
返回ai_classification的边界框h坐标(int)。
您也可以通过索引
[3]
取得这个值。
- classification_output()¶
返回分类标签得分的列表。这个列表的尺寸由你的模型的输出的通道尺寸决定。 例如, 一个理解1000个分类的mobilenet输出包含1000个分数的列表。 在python中使用
zip
可以组合分类的得分和分类的标签。您也可以通过索引``[4]`` 取得这个值。
ai_model类 – Yolov5 模型¶
如果您的模型大小足够小,并且您有足够的堆或帧缓冲区空间, 您可能希望直接将模型加载到内存中,以避免每次执行都从磁盘加载。
构造函数¶
- class ai.ai_model¶
请调用
ai.load()
来创建Yolov5模型对象。 Yolov5模型对象允许您从RAM执行一个模型,而不是从磁盘重复加载它。方法¶
- len()¶
反面模型的字节尺寸。
- ram()¶
返回模型需要的RMA的字节数。
- input_height()¶
返回模型的输入高度。你可用其作为输入图像的高度。
- input_width()¶
反面模型的输入宽度,你可用其作为输入图像的宽度
- input_channels()¶
返回模型的输入颜色通道数。
- input_datatype()¶
返回模型的输入书类型(一个 “uint8” “”int8”, or “float”字符串)
- input_scale()¶
返回模型的输入的缩放
- input_zero_point()¶
返回模型的输出零点。
- output_height()¶
返回模型的输出高度,你可用其作为输出图像的高度。
- output_width()¶
返回模型的输出宽度,你可用其作为输出图像的宽度
- output_channels()¶
返回模型输出的颜色通道数量
- output_datatype()¶
返回模型的输出数据类型(一个 “uint8” “”int8”, or “float”字符串)
- output_scale()¶
返回模型的输出缩放
- output_zero_point()¶
返回模型的输出零点。
- classify(img[, roi[, min_scale=1.0[, scale_mul=0.5[, x_overlap=0[, y_overlap=0]]]]])¶
在
img
上运行AI图像分类模型,并返回一个ai_classification
对象列表。 这个方法对图像使用可控滑动方式,执行多次模型(默认算法在整个图像帧上只执行网络一次)。roi
代表感兴趣区域的元组(x,y,w,h).如果没有指定,它等于整个图像。只有roi
中像素才会参与运算min_scale
控制网络的缩放尺度。在默认值网络不缩放。 当值为0.5时,会允许检测大小为图像roi的50%的目标。scale_mul
控制有多少种不同的缩放尺度可以检测出来。 滑动窗口方法的工作原理是将默认的尺度1乘以scale_mul
同时结果大于min_scale
。scale_mul
的默认值是0.5,测试出每次变化可以减少50%的大小。但是,0.95只会减少5%的尺寸。x_overlap
控制与下一个滑动窗口的区域检测器重叠的百分比。 值为0意味着没有重叠,0.95意味着95%的重叠。y_overlap
控制与下一个滑动窗口的区域检测器重叠的百分比。 值为0意味着没有重叠,0.95意味着95%的重叠。
- segment(img[, roi])¶
在
img
上执行yolov5图像分割模型, 返回一个灰度的image
对象列表,对应每一个分割分类的输出通道。roi
代表感兴趣区域的元组(x,y,w,h).如果没有指定,它等于整个图像。只有roi
中像素才会参与运算
- detect(img[, roi[, thresholds[, invert]]])¶
对
img
对象执行 yolov5 的图像分割模型。并返回一个对应每个分割的image.blob
对象列表。例如,如果你有一个需要分割为两个分割类的对象。这个方法将返回一个含有两个与之阈值匹配的对象列表。roi
代表感兴趣区域的元组(x,y,w,h).如果没有指定,它等于整个图像。只有roi
中像素才会参与运算thresholds
必须是一个[(lo, hi), (lo, hi), ..., (lo, hi)]
的列表,来定义需要追踪的颜色范围。你可一次传一个32 个阈值元组。 每个元组需要包含2个值一个最小一个最大灰度值。只有落在其阈值范围的像素才会被处理。为了易用,这个函数将自动交换最小和最大值。如果元组太短,则剩余的阈值将假定为可用的最小最大值。如果没有阈值指定,则假定为(128,255) 来作为检测 活跃像素分割范围invert
反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。
- regression(array)¶
在img上执行yolov5图像分割模型, 返回一个灰度的 image 对象列表,对应每一个分割分类的输出通道。