【K210】人脸识别 KPU-kpu.run_yolo2()函数说明

这篇具有很好参考价值的文章主要介绍了【K210】人脸识别 KPU-kpu.run_yolo2()函数说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

零、摄像头采集图像

img = sensor.snapshot()

这里 img 就可以直接作为输入, 这里需要 注意snapshot() 函数采集到图片后,会将图片数据放到两个地方
(1) RGB565 内存块, 图像以 RGB565 的形式存放在一块内存中,方便图像处理的函数使用,注意在内存中的排序是 [像素1 RGB, 像素2 RGB...]
(2) RGB888 内存块, 图像以 R8G8B8 的形式存放在另一块内存中,注意在内存中的排序是 [所有像素 R, 所有像素 G, 所有像素 B], 我们也称之为 AI 内存
直接从摄像头采集的图像会自动填充 RGB888 区域,但是我们使用图像处理函数比如 image.resize() 时,只会修改 RGB565,没有修改 RGB888,因为同时修改两处内存需要耗费大量时间,而 KPU 的输入又是 RGB888 内存块, 所以在需要进行 KPU 运算时, 需要同步(刷新)一下 RGB888 内存块, 使用 img.pix_to_ai() 来进行同步,否则先前的修改将不会在 KPU 上生效。
参考:https://wiki.sipeed.com/soft/maixpy/zh/course/ai/basic/maixpy_hardware_ai_basic.html

一、图像缓冲区介绍#

MaixPy 为图像设计了两个缓冲区,

  • 一个是RGB565缓冲区,顾名思义, 是以RGB565的格式存放这图片的信息的一块内存。注意在内存中的排序是[像素1 RGB, 像素2 RGB...]
  • 另一个是RGB888缓冲区,顾名思义, 是以RGB88的格式存放这图片的信息的一块内存。注意在内存中的排序是[所有像素 R, 所有像素 G, 所有像素 B], 我们也称之为AI内存

这里使用两个内存块主要的原因是底层代码所有图片操作以及LCD显示均是基于RGB565, 但是KPU又需要RGB888的输入。

                   +---------------+
                   |               |
          +--------+ camera(sensor)+-------+
          |        |               |       |
          |        +---------------+       |
          |                                |
+---------v------+                +--------v---------+
|                | img.pix_to_ai()|                  |
|      RGB565    +--------------->+      RGB888      |
|                |                |                  |
+--------+-------+                +------+-----------+
         ^                               |
         |                               |
         |                               v
+--------+----------+             +------+-----------+
|                   |             |                  |
|     image ops     |             |   KPU            |
|                   |             |                  |
+-------------------+             +------------------+

只有摄像头采集图片时,硬件会自动放一份数据到RGB888内存区域, 其它的都不会自动填充RGB888内存块, 软件操作只会对RGB565内存进行操作,不会自动更新RGB888,(因为更新需要消耗时间) 这很值得注意,
这意味着,每次我们用更改了RGB565内存块,比如执行了img = img.resize((224, 224)),如果希望KPU使用更改过后的图片, 需要执行img.pix_to_ai()来将RGB565的图像手动更新到RGB888的区域,然后才可以调用kpu相关的函数进行模型推理!

同样反方向更新也提供 API: img.ai_to_pix(), 这会将RGB888区域的数据更新到RGB565区域

二、KPU函数说明

yolo2网络模型传入初始化参数, 只有使用yolo2时使用

KPU.init_yolo2(kpu_net, threshold, nms_value, anchor_num, anchor)
import KPU as kpu
task = kpu.load(0x300000)
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
参数#
  • kpu_net: kpu 网络对象, 即加载的模型对象, KPU.load()的返回值
  • threshold: 概率阈值, 只有是这个物体的概率大于这个值才会输出结果, 取值范围:[0, 1]
  • nms_value: box_iou 门限, 为了防止同一个物体被框出多个框,当在同一个物体上框出了两个框,这两个框的交叉区域占两个框总占用面积的比例 如果小于这个值时, 就取其中概率最大的一个框
  • anchor_num: anchor 的锚点数, 这里固定为 len(anchors)//2
  • anchor: 锚点参数与模型参数一致,同一个模型这个参数是固定的,和模型绑定的(训练模型时即确定了), 不能改成其它值。
返回值#

success: bool类型, 是否成功

#sensor.set_framesize(sensor.QQVGA)    # 设置图像分辨率 (160*120)
sensor.set_framesize(sensor.QVGA)    # 设置图像分辨率 (320*240)
img = sensor.snapshot()            # 摄像头采集到的一帧图片
objects = kpu.run_yolo2(task, img) #运行yolo2, 返回一个kpu_yolo2_find 列表
#返回值说明: 是以下的形式 类型为Python中的list xy表示 矩形框左上角的元素位置,wh表示矩形的宽度和高度
#{"x":158, "y":65, "w":83, "h":111, "value":0.829885, "classid":0, "index":0, "objnum":1}
#{"x":158, "y":66, "w":83, "h":111, "value":0.829885, "classid":0, "index":0, "objnum":1}

#注意:如果是以下情况: 运行会报错:
#解释:因为摄像头采集到的图像格式是RGR565格式,在内存中的排序是[像素1 RGB, 像素2 RGB...]  
#而KPU需要 RGB888格式,在内存中的排序是[所有像素 R, 所有像素 G, 所有像素 B], 我们也称之为AI内存

#第一种情况: img 的格式不对     报错: check img format err
img = sensor.snapshot()            #默认分辨率为 320*240
img = img.resize(224, 224)         # 修改分辨率为  224*224
objects = kpu.run_yolo2(task, img) #运行yolo2, 返回一个kpu_yolo2_find 列表

#第二种情况: img 的分辨率不对   报错: check img format err
img = sensor.snapshot()            #默认分辨率为 320*240
img1 = img.copy(roi=(0, 0, 300, 240))  #复制一份图像内存,大小为 300*240
objects = kpu.run_yolo2(task, img1) #运行yolo2, 返回一个kpu_yolo2_find 列表

##第二种情况: 若设置sensor.set_framesize(sensor.QQVGA)    # 设置图像分辨率 (160*120) 再执行以下函数,也会报错格式不对
sensor.set_framesize(sensor.QQVGA)   #认分辨率为 160*120 
img = sensor.snapshot()           
objects = kpu.run_yolo2(task, img1) 


objects.rect()
#返回值:返回一个矩形元组(x, y, w, h),用于如 矩形的边界框的 image.draw_rectangle 等其他的 image 方法。
#(143, 46, 83, 111)
#(132, 48, 82, 111)
#(121, 49, 82, 111)


img = sensor.snapshot() 
print(img) 
#{"w":320, "h":240, "type"="rgb565", "size":153600}
#{"w":320, "h":240, "type"="rgb565", "size":153600}

img = sensor.snapshot() 
img = img.copy([roi[, copy_to_fb=False]]#创建一个图像对象的副本。
#Roi 是一个用以复制的矩形的感兴趣区域(x, y, w, h)。如果未指定,ROI即复制整个图像的图像矩形。但这不适用于JPEG图像。
#请记住图像副本储存在MicroPython 堆中而不是帧缓冲区。同样,您需要将图像副本大小控制在8KB以下(OpenMV)或16KB以下(OpenMV Cam M7) 如果您想使用一个复制操作来使用所有的堆空间,这个函数会出现异常。过大的图像极易触发异常。
#如果 copy_to_fb 为True,则该方法将帧缓冲替换为图像。 帧缓冲区具有比堆大得多的空间,并且可以容纳大图像。

参考:
基本图像变换 和 常用操作

MaixPy(3)人脸检测与人脸识别文章来源地址https://www.toymoban.com/news/detail-450865.html

到了这里,关于【K210】人脸识别 KPU-kpu.run_yolo2()函数说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K210——声源定位、声音识别

    来了,K210的声源定位。 2022电赛] 声源定位跟踪系统(E题)k210 麦克风阵列效果实测! sipeed官方做的,效果还不错。 sipeed家的声源定位模块,K210常用的都可以用 将麦克风阵列模块与 pyAI-K210 使用 FPC 10P 排线进行连接,接口在开发板背部(排线金手指下接)。 麦克风阵列扩

    2024年02月16日
    浏览(69)
  • 2023 电赛 E 题 K210 方案--K210实现矩形识别

    reset():重置并初始化单目摄像头 set_pixformat():设置摄像头输出格式,可选的帧格式有 GRAYSCALE ,  RGB565 ,  YUV422,需要根据自己的摄像头进行修改 set_framesize(): 设置摄像头输出帧大小,最大支持VGA格式,推荐设置为QVGA格式 skip_frames():跳过指定帧数或者跳过指定时间内的图像

    2024年02月14日
    浏览(37)
  • k210部署自行训练的口罩识别模型

    因为培训需要,开坑K210,前后忙活了3天终于把自行训练的口罩模型部署成功了,实测还行,分享一下经(ni)验(keng): 本人学过一段时间python,见过别人玩开源硬件(没动过手),接触过一点人工智能项目的理论知识(观课议课),先自己体验一下半个项目的过程。 1.资

    2023年04月09日
    浏览(44)
  • K210学习笔记(七):画图与颜色识别

    在之前我们学会了关于K210的摄像头与lcd的一些应用,那么今天我们了解一些关于K210的一些画图的方法和利用K210进行颜色识别。 首先我们明确,什么是画图,为什么要画图。画图指在图片上画出圆,方框,箭头,十字交叉或者字符。我们为什么要画图,其实一个基础的应用就

    2024年02月15日
    浏览(39)
  • K210摄像头矩形图坐标识别

    我接触的第一个硬件项目是设计一个简陋的智能视觉小车,我在项目里的任务是识别一张纸上六个目标点坐标然后发送给小车。 图一  场地样式 就是将上图六个点的坐标识别然后传输给小车。 识别效果大概是这样:  图二 识别效果 因为是第一次做这样的项目,第一次使用

    2024年02月16日
    浏览(44)
  • K210学习笔记(八):颜色识别计数与二维码识别

    宿醉断更enmmm(喝多太难受了)。前面我们介绍了使用K210进行颜色识别,在实际工程中,我们可能不止需要单纯的识别出来颜色,可能还需要计数(比如前段时间看到的有串串店利用摄像头拍照识别签子数的),当然,识别签子数肯定不是简单的颜色识别计数能解决的,为了

    2024年02月13日
    浏览(39)
  • K210识别应用:基于yolov2模型的数字识别控制舵机

              注:此文章转载于本人的微信公众号:Young L童鞋                                                                           关注我,走进嵌入式江湖  电赛期间,在实验室学长的引领下入手了一块K210,在很多比赛中,K210的作用是用来做视觉部分,当然也可以用到

    2024年02月15日
    浏览(35)
  • 【01Studio MaixPy AI K210】13.颜色识别

    目录 导包: image库 LAB模型 例程: 测试图片  

    2024年02月14日
    浏览(40)
  • K210 Mx-yolov3模型训练和物体识别

    一、简介        (1)硬件准备:               K210开发板:拥有1TOPS算力,可以运行神经网络模型,同时其提供在线模型训练平台(maixhub),支持物体分类和物体识别。        (2)软件环境               Mx-yolov3:(用于在本地训练模型)             

    2024年02月15日
    浏览(41)
  • STM32如何通过K210进行物体识别(1.开发环境搭建)

    本来参加智能物流机器人比赛是要用OpenMV的,但无奈于诸多因素只有K210可以使用,这也算是不幸中的万幸吧。这篇文章也作为我这一段时间的学习K210进行物体识别的复习与总结(因为种种原因,比赛也面临无法完成,大哭;人工智能小白一枚,欢迎各路大神指正,求轻喷)

    2023年04月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包