点亮一颗萨瑞cpu教程-第2节 人脸检测
大家好,我是小杰学长
如果你是大学生 遇到电子技术 学习 成长 入行难题
佳喔威信,给你提供一定资源和战略方法上的帮助
相信我的职业经历的专业性,一定能帮到你
我的gitee仓库分享 海量嵌入式资源入行求职技巧-->
目录
- 1. 概述
- 2. 下载visionboard的sdk
- 3. r7的openmv固件编译
- 4. r7的openmv固件烧录
- 5. openmv_helloworld例程
- 6. openmv_api开发
- 7. haar特征
- 8. 手把手写代码
- 9. 结语
- 10. 资源下载地址
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-thread
、libraries
两个文件夹
之后打开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开发
写代码的时候查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帧
后面又没了,神奇
搞不懂 为啥
下周见