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

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1