openmv--人脸识别
这里仅讨论识别人脸,先不讨论识别不同的人脸
本例程的目的是利用haar算子实现人脸识别。
这个例子展示了OpenMV Cam的内置人脸检测功能。
人脸检测通过在图像上使用Haar Cascade特征检测器来工作。 haar级联是
一系列简单的区域对比检查。 对于内置的前表面探测器,有25个阶段的检查,
每个阶段有数百个检查一块。 Haar Cascades运行速度很快,因为只有在
以前的阶段过去后才会评估后期阶段。 此外,您的OpenMV使用称为
整体图像的数据结构来在恒定时间内快速执行每个区域对比度检查
(特征检测仅为灰度的原因是因为整体图像的空间需求)。
find_features(cascade, threshold=0.5, scale=1.5, roi: Tuple[int, int, int, int] | None = None)→ List[Tuple[int, int, int, int]]
此方法在图像中搜索所有与传入的Haar级联匹配的区域,并返回一个围绕这些特征的边界框矩形元组列表 (x, y, w, h)。如果未找到特征,则返回一个空列表。
cascade 是一个Haar级联对象。有关详细信息,请参阅 image.HaarCascade()。
threshold 是一个阈值(0.0-1.0),较小的值会增加检测率,但会提高误检率。相反,较高的值会降低检测率,但会降低误检率。
scale 是一个浮点数,必须大于1.0。较高的比例因子会运行得更快,但图像匹配效果会大打折扣。一个好的值介于1.35和1.5之间。
roi 是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作 roi 内的像素。
人脸识别例程
这个例子展示了OpenMV Cam的内置人脸检测功能。
人脸检测通过在图像上使用Haar Cascade特征检测器来工作。 haar级联是
一系列简单的区域对比检查。 对于内置的前表面探测器,有25个阶段的检查,
每个阶段有数百个检查一块。 Haar Cascades运行速度很快,因为只有在
以前的阶段过去后才会评估后期阶段。 此外,您的OpenMV使用称为
整体图像的数据结构来在恒定时间内快速执行每个区域对比度检查
(特征检测仅为灰度的原因是因为整体图像的空间需求)。
import sensor, time, image
重置感光元件
sensor.reset()
感光元件设置
sensor.set_contrast(3)
sensor.set_gainceiling(16)
HQVGA and GRAYSCALE are the best for face tracking.
HQVGA和灰度对于人脸识别效果最好
sensor.set_framesize(sensor.HQVGA)
sensor.set_pixformat(sensor.GRAYSCALE)
注意人脸识别只能用灰度图哦
加载Haar算子
默认情况下,这将使用所有阶段,更低的satges更快,但不太准确。
face_cascade = image.HaarCascade("frontalface", stages=25)
image.HaarCascade(path, stages=Auto)加载一个haar模型。haar模型是二进制文件,
这个模型如果是自定义的,则引号内为模型文件的路径;也可以使用内置的haar模型,
比如“frontalface” 人脸模型或者“eye”人眼模型。
stages值未传入时使用默认的stages。stages值设置的小一些可以加速匹配,但会降低准确率。
print(face_cascade)
FPS clock
clock = time.clock()
while (True):
clock.tick()
拍摄一张照片
img = sensor.snapshot()
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.find_features(face_cascade, threshold=0.75, scale=1.35)
image.find_features(cascade, threshold=0.5, scale=1.5),thresholds越大,
匹配速度越快,错误率也会上升。scale可以缩放被匹配特征的大小。
在找到的目标上画框,标记出来
for r in objects:
img.draw_rectangle(r)
打印FPS。
注:实际FPS更高,流FB使它更慢。
print(clock.fps())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App