openMV_瞳孔识别轨迹记录_学习笔记

2023-10-30 10:00

本文主要是介绍openMV_瞳孔识别轨迹记录_学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、什么是openMV?
  • 二、使用步骤
    • 1.安装好openMV IDE
    • 2.连接openMV与IDE
  • 三、基本思路
    • 1、流程图
    • 2、基本思路
  • 四、代码示例
  • 五、视频演示


前言

openMVCam M7实现人眼的识别以及轨迹记录 此篇仅为菜鸡个人笔记 若存在错误希望各位大佬指正


一、什么是openMV?

OpenMV是一个开源,低成本,功能强大的机器视觉模块。
图片来自网络
本文全程使用openMVCamM7为基础配合openMV的IDE进行学习
openMVCamM7 使用ARM CortexM7处理器,216 MHz ,512KB RAM,2 MB flash. 所有的 I/O 引脚输出 3.3V 并且 5V 耐受。

二、使用步骤

1.安装好openMV IDE

在这里插入图片描述
在这里插入图片描述

下载地址:https://openmv.io/pages/download.

这个安装很简单不做记录(注意选择和自己电脑相符的下载地址)

2.连接openMV与IDE

用数据线连接openMV和电脑
在设备管理器(右键 开始 )里可以看见端口

然后在IDE 里点击连接

三、基本思路

1、流程图

Created with Raphaël 2.2.0 开始 设置阈值 摄像头捕捉瞳孔 成功识别 标记出瞳孔中心并框选瞳孔 采集当前图像,并进行储存 获取瞳孔位置信息 在空白图片中标记位置 连接各个标记点 判断阈值 存储空白图片 结束 yes no yes no

2、基本思路

利用openmv对瞳孔的识别

四、代码示例

openMV可使用MicroPython进行程序编写,以下为MicroPython代码注释

	import sensor,time,image,lcd,pyb 
import导入所需要使用的第三方库
sensor感光元件(摄像头)
time记录时间
image处理图像
lcdlcd屏幕(openMV可通过长脚引母连接lcd屏幕)
pybI/O引脚

#以上功能仅为当前项目中所使用到的功能,这些库能做的远远不止这些

sensor.reset()  #相机传感器初始化
sensor.set_contrast(3)#设置相机图像对比度
sensor.set_gainceiling(16)#设置相机图像增益上限
sensor.set_framesize(sensor.VGA)#设置相机模块的帧大小
sensor.set_windowing((220, 190, 200, 100))#将相机的分辨率设置为当前分辨率的子分辨率
sensor.set_pixformat(sensor.GRAYSCALE)#设置相机模块的像素模式
lcd.init()#LCD屏幕初始化
p6=pyb.Pin("P6",pyb.Pin.OUT_PP)#设置引脚6为输出
p6.high()#p6输出高电频
eyes_cascade = image.HaarCascade("eye", stages=24)#利用HaarCascade加载haar-eye模块
n = 20 #设置照片张数
x1 = 0
while (n):clock.tick() #img0 = sensor.snapshot() #将当前图像保存为img0eyes = img0.find_features(eyes_cascade, threshold=0.5, scale=1.5) #加载lcd.display(sensor.snapshot())#设置lcd屏
 for e in eyes:   iris = img0.find_eye(e)#img0.draw_rectangle(e)img0.draw_cross(iris[0], iris[1])img0.draw_circle(iris[0], iris[1], 20, color=(255,0,0),fill = False)img0.save("singtown/s%s.pgm" %  n )img = image.Image("data.pgm")img.draw_circle(iris[0], iris[1], 1, color=(255,0,0),fill = True)
 if (n % 2) == 0:if x1 != 0:x0=x1y0=y0x0=iris[0]y0=iris[1]img.draw_line(x0, y0, x1, y1, color=(255,0,0) ,thickness=1)else:x0=iris[0]y0=iris[1]else:x1=iris[0]y1=iris[1]img.draw_line(x0, y0, x1, y1, color=(255,0,0) ,thickness=1)
if n==20:img.draw_circle(iris[0], iris[1], 1, color=(0,0,255),fill = True)if  n==0:img.draw_circle(iris[0], iris[1], 1, color=(0,255,0),fill = True)break
img.save("data.pgm")#保存当前笔迹n=n-1
  print(clock.fps())输出fps
p6.low()#关闭灯光

以下为源码

# Tris_Detation - By: Ash、Scum - 周二 8月 4 2020import sensor,time,image,lcd,pyb sensor.reset()
sensor.set_contrast(3)
sensor.set_gainceiling(16)
sensor.set_framesize(sensor.VGA)
sensor.set_windowing((220, 190, 200, 100))
sensor.set_pixformat(sensor.GRAYSCALE)
lcd.init()p6=pyb.Pin("P6",pyb.Pin.OUT_PP)p6.high()eyes_cascade = image.HaarCascade("eye", stages=24)print(eyes_cascade)clock = time.clock()n = 20
x1 = 0
while (n):clock.tick()img0 = sensor.snapshot()eyes = img0.find_features(eyes_cascade, threshold=0.5, scale=1.5)lcd.display(sensor.snapshot())for e in eyes:iris = img0.find_eye(e)#img0.draw_rectangle(e)img0.draw_cross(iris[0], iris[1])img0.draw_circle(iris[0], iris[1], 20, color=(255,0,0),fill = False)img0.save("singtown/s%s.pgm" %  n )img = image.Image("data.pgm")img.draw_circle(iris[0], iris[1], 1, color=(255,0,0),fill = True)if (n % 2) == 0:if x1 != 0:x0=x1y0=y0x0=iris[0]y0=iris[1]img.draw_line(x0, y0, x1, y1, color=(255,0,0) ,thickness=1)else:x0=iris[0]y0=iris[1]else:x1=iris[0]y1=iris[1]img.draw_line(x0, y0, x1, y1, color=(255,0,0) ,thickness=1)if n==20:img.draw_circle(iris[0], iris[1], 1, color=(0,0,255),fill = True)if  n==0:img.draw_circle(iris[0], iris[1], 1, color=(0,255,0),fill = True)breakimg.save("data.pgm")n=n-1print(clock.fps())p6.low()

代码可以实现自动识别人眼并自动标识瞳孔中心以及瞳孔
在这里插入图片描述
并将保存图片保存在sd卡中为pgm文件(用ps打开)
在这里插入图片描述

与此同时记录每一次瞳孔位置将其轨迹在空白图片中(空白图片需手动更新)
在这里插入图片描述

五、视频演示

链接: https://www.bilibili.com/video/BV1YV411y7rD/.
https://www.bilibili.com/video/BV1YV411y7rD/

自制眼动轨迹仪演示

这篇关于openMV_瞳孔识别轨迹记录_学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

如何正确识别一台POE交换机的好坏? 选购可靠的POE交换机注意事项

《如何正确识别一台POE交换机的好坏?选购可靠的POE交换机注意事项》POE技术已经历多年发展,广泛应用于安防监控和无线覆盖等领域,需求量大,但质量参差不齐,市场上POE交换机的品牌繁多,如何正确识... 目录生产标识1. 必须包含的信息2. 劣质设备的常见问题供电标准1. 正规的 POE 标准2. 劣质设

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手