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

相关文章

在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/

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio