点亮一颗萨瑞cpu教程-第2节 人脸检测

63 阅读5分钟

点亮一颗萨瑞cpu教程-第2节 人脸检测

大家好,我是小杰学长
如果你是大学生 遇到电子技术 学习 成长 入行难题
佳喔威信,给你提供一定资源和战略方法上的帮助
相信我的职业经历的专业性,一定能帮到你
我的gitee仓库分享 海量嵌入式资源入行求职技巧-->

目录

1. 概述

上一节介绍了瑞萨的环境搭建和用keil点亮了一个led
不知道大家有没有把openMV IDE也搭建起来呢

本文主要介绍用openMV IDE实现visionboard的HelloWorld 既然是vision board 即视觉板子
那这个halloworld必然是和眼睛相关
那这一节我们就来实现visionboard的第一个人脸检测项目把

2. 下载visionboard的SDk

下载vision board源码仓库
vision board Gitee 仓库-->
vision board Github 仓库-->
在这里插入图片描述

3. R7的openmv固件编译

打开visionboard的openMV固件源码工程
在你下载好的仓库的如下位置:
sdk-bsp-ra8d1-vision-board\projects\vision_board_openmv

用ENV工具打开openMV固件源码工程的menuconfig配置情况
啥也不用改 不过我看了一些文章说可以把TFLite裁剪掉 这样编译速度快一点
在这里插入图片描述

保存后退出来,双击 mklinks.bat 文件,
执行脚本后会生成 rt-threadlibraries 两个文件夹
在这里插入图片描述

之后打开keil工程编译就行
切记是全编译哈
不过应该会有很多警告
如果你发现有特别多error
那就是上一步没做

4. R7的openmv固件烧录

下一步烧录编译好的openMV固件程序
接的是USB-DBG口
这时候你的电脑设备管理器
的端口会有一个USB串行设备
和我的电脑文件夹里有一个DAPLink新磁盘
在这里插入图片描述

点击keil的烧录按键
在这里插入图片描述

烧录过程也挺慢的
结束后把USB-OTG接口接到电脑
设备管理器会有一个OpenMV Cam USB COM Port
在这里插入图片描述

还记的上次安装的openMV IDE吗
打开他
看左下角
会检测到你连接了OpenMV设备
在这里插入图片描述

5. OpenMV_HelloWorld例程

点击链接 点击下面箭头运行你的第一个openMV hello world程序
他会把摄像头数据传回IDE
然后你就可以看到摄像头的拍摄内容了
在这里插入图片描述

展示一下小杰学长的绝世容颜吧
记住这个yeah!!!
在这里插入图片描述

到此visionboard+openMV的基础环境搭建算得上是基本完毕

但是本帅是不可能就这么水完本章节教程的
所以下面讲带大家做一个基础的人脸检测
我先找找相关资料博客
肯定有自带的库 不需要自己做什么移植了
let's go!!!

6. OpenMV_API开发

首先找到OpenMV的官方API文档-->

写代码的时候查API怎么用包括参数的相关调整
在这里插入图片描述

7. Haar特征

第二步看看openMV的官方例程
在这里插入图片描述

haar是什么 我也忘了 哈哈哈哈
之前写机器学习基础的时候有讲过
好像是只能正脸
无数前辈总结出来的人脸的线性特征向量
眉眼横着的 鼻子竖着的 以及嘴的
三者之间的相对关系

大概是这些
那么从这些haar的特点也能看出来他的缺点
所以为了防止大家对机器视觉产生兴趣

哈哈哈哈哈  
因为确实难就业   
但是好玩   

没必要深究这些算法
别忘了你是冲着学嵌入式来的
把头扎进去算法
路就变长了

大家先用起来
后面我会陆续把我之前写的机器学习的博客一一释放出来
在这里插入图片描述

8. 手把手写代码

还有helloworld,blinky,pin_control等相关例程
到时候都会遇到
代码比较枯燥,就不一一打开给大家看了
因为haar的人脸检测代码最后显示出来是灰度图
不舒服 我给代码改成彩色显示
包括LED也用起来
到时候根据不同状态显示led灯
废话不多说,贴代码:

import sensor
import time
import image
import machine

print("app start")

led_run = machine.LED("LED_GREEN")
led_shot = machine.LED("LED_RED")
led_find = machine.LED("LED_BLUE")

led_shot.on()
led_find.on()
led_run.on()

def LED_RUN():
    led_shot.off()
    led_find.off()
    led_run.on()

def LED_FIND():
    led_find.on()
    led_shot.off()
    led_run.off()

def LED_SHOT():
    led_find.off()
    led_shot.on()
    led_run.off()

#buttom_1 = machine.Pin()

sensor.reset()  # Reset and initialize the sensor.
# Sensor settings
sensor.set_contrast(3)
sensor.set_gainceiling(16)

# HQVGA and GRAYSCALE are the best for face tracking.
sensor.set_framesize(sensor.HQVGA)
sensor.set_pixformat(sensor.RGB565)  # Set pixel format to RGB565 (or GRAYSCALE)
sensor.skip_frames(time=2000)  # Wait for settings take effect.

# Load Haar Cascade
# By default this will use all stages, lower satges is faster but less accurate.
face_cascade = image.HaarCascade("frontalface", stages=25)
print(face_cascade)

print('loop start')
LED_RUN()
loop_flag = True
clock = time.clock()  # Create a clock object to track the FPS.
while loop_flag is True :
    clock.tick()  # Update the FPS clock.
    img = sensor.snapshot()  # Take a picture and return the image.
    img_gray = img.copy().to_grayscale()

    # Find objects.
    # Note: Lower scale factor scales-down the image more and detects smaller objects.
    # Higher threshold results in a higher detection rate, with more false positives.
    objects = img_gray.find_features(face_cascade, threshold=0.75, scale_factor=1.25)

    if objects:
        LED_FIND()
        # Draw objects
        for r in objects:
            img.draw_rectangle( r, color=(0,255,0))
    else:
        LED_SHOT()

#    print(clock.fps())  # Note: OpenMV Cam runs about half as fast when connected
    # to the IDE. The FPS should increase once disconnected.

附上显示结果
依然是我的帅照
尽量在顺光的地方拍脸
在这里插入图片描述

9. 结语

我有搜到相关博客说tflite也自带人脸检测和跟踪
我下周空了对比一下两个人脸检测的帧率
哪个好用,用哪个
不过visionboard确实有点奇怪
上面这个被我改完的例程
我下午把他放着在那跑
IDE上显示到将近40帧
后面又没了,神奇
搞不懂 为啥
下周见

太叼了!!!