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

相关文章

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.手

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/