基于OpenMV的人脸识别,支持人脸注册、人脸检测、人脸识别

2024-03-03 01:32

本文主要是介绍基于OpenMV的人脸识别,支持人脸注册、人脸检测、人脸识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://github.com/1061700625/OpenMV_Face_Recognition

'''
>> author: SXF
>> email: songxf1024@163.com
>> description:用LBP特征进行人脸识别,可进行人脸注册、人脸检测与人脸识别Pin7高电平一次,触发人脸注册;默认低电平UART1(Pin1)输出调试信息UART3(Pin4)输出识别结果,当识别成功后,返回“Find It”(可自定义修改),可连接IoT平台注:需配备SD卡,最大3支持2G,将main.py等文件放至SD卡根目录后上电
'''import sensor, time, image
import os, time
import pyb
from pyb import Pinred   = pyb.LED(1)
green = pyb.LED(2)
blue  = pyb.LED(3)
infrared = pyb.LED(4)
usart1 = pyb.UART(1, 115200)
usart3 = pyb.UART(3, 115200)
REGISTER_MODE = 0sensor.reset()
sensor.set_contrast(1)
sensor.set_gainceiling(16)
sensor.set_framesize(sensor.HQVGA)
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.skip_frames(10)Path_Backup = {'path':'', 'id':0}
rootpath = "/orl_faces"
DIST_THRESHOLD = 15000  # 差异度阈值def debug(strings):print(strings)usart1.write(str(strings)+"\r\n")def find(face_cascade, img):objects = img.find_features(face_cascade, threshold=0.75, scale_factor=1.25)  # 人脸检测if objects:green.on()time.sleep(500)green.off()width_old = 0height_old = 0index = 0for r in objects:  # 寻找最大的faceif r[2] > width_old and r[3] > height_old:width_old = r[2]height_old = r[3]index += 1index -= 1#print("index:", index)img.draw_rectangle(objects[index])d0 = img.find_lbp((0, 0, img.width(), img.height()))res = match(d0)if res != 0:debug(res)return 1def match(d0):  # 人脸识别dir_lists = os.listdir(rootpath)  # 路径下文件夹dir_num = len(dir_lists)          # 文件夹数量debug("*" * 60)debug("Total %d Folders -> %s"%(dir_num, str(dir_lists)))for i in range(0, dir_num):item_lists = os.listdir(rootpath+'/'+dir_lists[i])  # 路径下文件item_num = len(item_lists)                          # 文件数量debug("The %d Folder[%s], Total %d Files -> %s" %(i+1, dir_lists[i], item_num, str(item_lists)))Path_Backup['path'] = rootpath+'/'+dir_lists[i]  # 马上记录当前路径Path_Backup['id'] = item_num                     # 马上记录当前文件数量for j in range(0, item_num):  # 文件依次对比debug(">> Current File: " + item_lists[j])try:img = image.Image("/orl_faces/%s/%s" % (dir_lists[i], item_lists[j]), copy_to_fb=True)except Exception as e:debug(e)breakd1 = img.find_lbp((0, 0, img.width(), img.height()))  # 提取特征值dist = image.match_descriptor(d0, d1)                 # 计算差异度debug(">> Difference Degree: " + str(dist))if dist < DIST_THRESHOLD:debug(">> ** Find It! **")green.on()time.sleep(1000)green.off()return item_lists[j]debug(">> ** No Match! **")return 0def register(face_cascade, img):global REGISTER_MODEif find(face_cascade, img) == 1:debug(">> Existing without registration!")REGISTER_MODE = 0return 0dir_lists = os.listdir(rootpath)  # 路径下文件夹dir_num = len(dir_lists)          # 文件夹数量new_dir = ("%s/%d") % (rootpath, int(dir_num)+1)os.mkdir(new_dir)                 # 创建文件夹cnt = 5  # 拍摄5次图片while cnt:img = sensor.snapshot()objects = img.find_features(face_cascade, threshold=0.75, scale_factor=1.25)  # 人脸检测if objects:width_old = 0height_old = 0index = 0for r in objects:  # 寻找最大的faceif r[2] > width_old and r[3] > height_old:width_old = r[2]height_old = r[3]index += 1index -= 1#print("index:", index)item_lists = os.listdir(new_dir)  # 新路径下文件item_num = len(item_lists)        # 文件数量img.save("%s/%d.pgm" % (new_dir, item_num))  # 写入文件debug(">> [%d]Regist OK!" % cnt)img.draw_rectangle(objects[index])green.on()time.sleep(50)green.off()cnt -= 1if cnt==0:green.on()time.sleep(1000)green.off()REGISTER_MODE = 0def main():global REGISTER_MODEtry:os.mkdir(rootpath)except:passpin7 = Pin('P7', Pin.IN, Pin.PULL_DOWN)  # 1为注册模式,即拍照存入face_cascade = image.HaarCascade("frontalface", stages=25)#try:#face_cascade = image.HaarCascade("/haarcascade_frontalcatface.cascade", stages=25)  # "frontalface"#except:#face_cascade = image.HaarCascade("frontalface", stages=25)print(face_cascade)clock = time.clock()img = Nonewhile (True):clock.tick()img = sensor.snapshot()if pin7.value() == 1:REGISTER_MODE = 1if REGISTER_MODE == 1:debug("REGISTER_MODE\r\n")register(face_cascade, img)else:res = find(face_cascade, img)if res==1:usart3.write("Find It\r\n")# 程序开始
#debug(os.listdir())
main()

 

过摄像头可进行人脸检测,但由于SD卡内无文件,无法匹配人脸

按下F1按键,进入人脸注册模式,连续拍5张照存入SD卡(拍摄时绿灯快闪50ms,拍摄完绿灯闪1000ms)

再识别,可完成人脸识别(红灯闪1000ms)。摄像头向IoT平台发送消息,以示匹配成功

Oceanconnect后台收到数据

Oceanconnect后台可下发指令至IoT平台

这篇关于基于OpenMV的人脸识别,支持人脸注册、人脸检测、人脸识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768037

相关文章

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景