实验报告: lookie-lookie 项目测试与分析

目录

一、实验目的

二、实验环境

三、实验步骤

1. 下载与准备项目

1.1 从 GitHub 获取项目

1.2 查看项目文件结构

2. 运行项目

2.1 启动项目

2.2 浏览器设置

3. 项目体验

3.1 功能测试

3.2 运行截图

4. 文件结构分析

4.1 总体结构

4.2 主要文件和目录说明

5. 数据传输分析

5.1 前端与摄像头的交互

5.2 TensorFlow.js 模型的加载与推理

5.3 数据安全与隐私

四、实验结果

1. 运行效果

2. 性能分析

3. 用户体验

五、实验总结


一、实验目的

        本次实验的主要目的在于运行和分析一个基于 TensorFlow.js 的静态网页项目——lookie-lookie。该项目能够在浏览器中通过摄像头实时追踪用户的眼球运动,且无需任何后端支持。通过本次实验,我们将深入了解前端如何结合机器学习技术实现实时的用户交互功能,并分析项目的文件结构和数据传输机制。

二、实验环境

  • 操作系统: Windows 11
  • 浏览器: Microsoft Edge
  • 项目依赖: 无需安装额外依赖,纯静态网页项目,基于 TensorFlow.js

三、实验步骤

1. 下载与准备项目

1.1 从 GitHub 获取项目

  • 访问 lookie-lookie 的 GitHub 项目页面。cpury/lookie-lookie: Learning to track eye movement in the browser (github.com)
  • 点击绿色的 Code 按钮,选择 Download ZIP 将项目下载到本地。
  • 将下载的 ZIP 文件解压到指定的工作目录。

1.2 查看项目文件结构

打开解压后的项目文件夹,查看其内部结构,主要包含以下文件和文件夹:

  • index.html
  • style.css
  • normalize.css
  • js/ 文件夹
  • blogcode/ 文件夹
  • hint.mp3
  • README.md
  • LICENSE
  • package-lock.json
  • .gitignore

2. 运行项目

2.1 启动项目

  • 在文件浏览器中,双击 index.html 文件,默认使用 Microsoft Edge 浏览器打开。

2.2 浏览器设置

  • 首次打开页面时,浏览器会请求访问摄像头的权限。
  • 点击 允许,授权网页访问本地摄像头。

3. 项目体验

3.1 功能测试

  • 在摄像头启用后,页面开始实时捕捉并追踪用户的眼球运动。
  • 移动眼睛,观察页面上对应的反馈和显示效果。
  • 测试在不同光照条件和距离下的追踪效果和准确性。

3.2 运行截图

  • 截图1: 项目初始界面
  • 截图2: 眼球追踪进行中
  • 截图3: 不同光照条件下的追踪效果

4. 文件结构分析

4.1 总体结构

lookie-lookie-master/
├── assets/
│   ├── images/        # 存储图片资源
│   └── sounds/        # 存储音频资源
├── js/
│   ├── vendor/        # 存储第三方库或依赖文件
│   │   └── clmtrackr.js
│   ├── dataset.js     # 自定义数据集相关逻辑
│   ├── facetracker.js # 人脸跟踪相关代码
│   ├── globals.js     # 全局变量或配置
│   ├── heat.js        # 热图生成或显示相关逻辑
│   ├── main.js        # 主逻辑文件,启动和管理整个应用
│   ├── mouse.js       # 鼠标交互相关代码
│   ├── training.js    # 训练模型或数据的逻辑
│   └── ui.js          # 用户界面相关逻辑
├── blogcode/
│   ├── clmtrackr.js   # 相关测试代码或示例
│   ├── index.html     # 示例页面
│   └── main.js        # 示例项目主逻辑文件
├── index.html         # 项目主页面
├── style.css          # 项目主样式文件
├── normalize.css      # 样式标准化文件
├── hint.mp3           # 提示音效文件
├── README.md          # 项目说明文档
├── LICENSE            # 许可证文件
├── package-lock.json  # 记录项目依赖的版本信息
└── .gitignore         # Git 忽略文件配置

4.2 主要文件和目录说明

  • assets/ 文件夹:用于存储所有的图片和音频等静态资源,按照类别进行进一步划分。

  • js/ 文件夹

    • vendor/:用于存放所有第三方库或依赖文件,如 clmtrackr.js
    • 其他文件则是项目的核心逻辑代码,按照功能模块分布在不同的文件中,如主逻辑、数据集处理、人脸跟踪、UI 处理等。
  • blogcode/ 文件夹:存放博客文章或项目示例相关的代码,如果这些文件不是项目运行的必要部分,可以将它们独立存放。

  • index.html:项目的主页面,通常放在根目录。

  • style.cssnormalize.css:CSS 文件可以放在根目录,或者根据项目复杂度将其放入 assets/styles/ 之类的文件夹中。

  • README.md:项目说明文件,包含项目的描述、使用方法、依赖说明等。

  • LICENSE:项目的许可证文件。

  • package-lock.json.gitignore:用于管理项目依赖和版本控制的文件。

5. 数据传输分析

5.1 前端与摄像头的交互

  • 媒体流获取: 通过调用浏览器的 getUserMedia API,获取用户设备的摄像头视频流。

  • // set up video

      if (navigator.mediaDevices) {

        navigator.mediaDevices

          .getUserMedia({

            video: true,

          })

          .then(facetracker.gumSuccess)

          .catch(facetracker.gumFail);

      } else if (navigator.getUserMedia) {

        navigator.getUserMedia(

          {

            video: true,

          },

          facetracker.gumSuccess,

          facetracker.gumFail,

        );

      } else {

        ui.showInfo(

          'Your browser does not seem to support getUserMedia. 😭 This will probably only work in Chrome or Firefox.',

          true,

        );

      }

  • 视频帧捕获: 将实时的视频帧传递给 TensorFlow.js 模型进行处理,实现实时的眼球追踪。

5.2 TensorFlow.js 模型的加载与推理

  • 模型加载: 在浏览器中使用 TensorFlow.js 加载预训练的眼球追踪模型。模型文件通常以 JSON 格式存储,并伴随有二进制权重文件。

  • 数据预处理: 将从摄像头获取的图像数据进行预处理,如缩放、灰度化、归一化等,以适配模型的输入要求。

  • 实时推理: 处理每一帧视频数据,模型输出眼球的位置坐标,然后在页面上渲染相应的视觉反馈。

5.3 数据安全与隐私

  • 本地处理: 所有的视频数据和模型推理均在本地浏览器中完成,没有数据上传到服务器,保障了用户的隐私和数据安全。

  • 权限控制: 浏览器在首次访问摄像头时会请求用户授权,用户可随时撤销该权限。

四、实验结果

1. 运行效果

  • 项目成功在 Microsoft Edge 浏览器中运行,实现了对用户眼球运动的实时追踪。
  • 界面简洁直观,交互顺畅,响应速度快。

2. 性能分析

  • 响应性: 在硬件性能良好的设备上,眼球追踪的延迟极低,几乎实现了实时响应。
  • 准确性: 在良好的光照条件下,追踪结果准确稳定;在弱光或过曝情况下,准确性会有所下降。
  • 资源占用: 项目对 CPU 和内存的占用较为合理,长时间运行不会导致浏览器卡顿。
  • 兼容性: 除了 Microsoft Edge,项目在其他主流浏览器(如 Chrome、Firefox)中也能正常运行。

3. 用户体验

  • 易用性: 项目操作简单,用户只需授权摄像头权限即可开始体验。
  • 趣味性: 实时的眼球追踪带来了新颖的交互方式,具有一定的娱乐和实用价值。
  • 拓展性: 项目可进一步扩展,结合其他交互元素实现更丰富的功能,如页面滚动、元素选取等。

五、实验总结

        通过本次实验,我们成功运行并分析了基于 TensorFlow.js 的静态网页项目 lookie-lookie,深入了解了前端如何结合机器学习技术实现实时的用户交互功能。

收获与体会:

  • 技术融合: 体验了如何在浏览器环境中利用 TensorFlow.js 实现复杂的计算任务,无需借助后端服务器,体现了前端技术的强大和灵活性。
  • 数据安全: 了解到在本地浏览器中处理敏感数据(如摄像头视频流)的重要性和实现方式,增强了对用户隐私保护的认知。
  • 项目结构: 通过对文件结构的分析,理解了一个完整的前端项目应如何组织代码和资源,以实现高可维护性和可扩展性。
  • 性能优化: 认识到在实时应用中,如何通过优化数据处理和模型推理流程,提升应用的响应速度和用户体验。

改进与建议:

  • 模型优化: 可尝试优化或更换更高效的模型,以提升在低性能设备上的运行效果。
  • 多浏览器兼容性测试: 进一步测试并优化项目在更多浏览器和操作系统上的兼容性。
  • 功能扩展: 增加更多的交互功能,如根据眼球运动控制页面元素,实现无触控操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于人体关节夹角的人体动作识别算法(代码+数据集)

为此本文提出了一个基于人体关节夹角的人体动作识别算法,主要做了以下工作: (1)提出了一个可解释性强,耗费算力较少且鲁棒性较高的基于人体关节夹角的人体动作序列的特征抽取方法。 (2)本文所使…

PCL 移动立方体三维重建——RBF算法【2024最新版】

目录 一、算法原理1、算法概述2、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接,首发于:2024年9月1日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法概述 该算法实现的是Reconstruction a…

Java并发线程 共享模型之管程 5

1. 生产者消费者 package cn.itcast.testcopy;import cn.itcast.n2copy.util.Sleeper; import lombok.extern.slf4j.Slf4j;import java.util.LinkedList;/*** ClassName: Test21* Package: cn.itcast.testcopy* Description: 生产者消费者** Author: 1043* Create: 2024/9/4 - …

软件测试之压力测试知识总结

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力&…

LNMP环境搭建(Linux+nginx+Mysql+PHP)超详细攻略

目录 一.LNMP简介 1.1LNMP架构的特点 二.详细安装步骤 2.1MySQL安装 2.1-1Yum安装 2.1-2 编译安装 2.1-3二进制安装 2.1-4 RPM安装 2.2Nginx安装 2.2-1编译安装nginx 2.2-2yum安装nginx 2.3验证Nginx安装 2.4PHP安装 2.4-1编译安装PHP 2.4-2yum安装PHP 2.5 Nginx 配…

PMP–一、二、三模、冲刺、必刷–分类–14.敏捷–技巧--累积流图

文章目录 技巧一模二模三模14.敏捷–敏捷团队的衡量结果–累积流图:1、 敏捷项目的项目经理担心团队在最近的迭代中失去了动力。项目经理应该使用哪两种工具来分析团队绩效?(选择两个) 冲刺必刷7.成本管理--挣值分析燃尽图仅能了解…

From Man vs Machine to Man + Machine

From Man vs. Machine to Man Machine: The Art and AI of Stock Analyses 论文阅读 文章目录 From Man vs. Machine to Man Machine: The Art and AI of Stock Analyses 论文阅读 AbstractConstruction and Performance of the AI AnalystMethodologyThe Performance of Ana…

一款用于分析java socket连接问题的工具

network-tools 介绍 network-tools基于sun jdk、Oracle jdk开发,拦截基于java socket请求,它包括 ​ http 客户端 ​ jdbc 客户端 ​ mq 客户端 ​ redis 客户端 目前提供如下功能: ​ 最近端点连接情况 ​ 最近与远程端点连接情况&am…

计算机网络 第1章 概述

文章目录 计算机网络概念计算机网络的组成计算机网络的功能三种数据交换技术电路交换(Circuit Switching)报文交换(message)分组交换 三种交换方式性能对比计算机网络的分类计算机网络的性能指标性能指标1:速率性能指标…

【优化】Nginx 配置页面请求不走缓存 浏览器页面禁用缓存

【优化】Nginx 配置页面请求不走缓存 禁用缓存 目录 【优化】Nginx 配置页面请求不走缓存 禁用缓存 对所有请求禁用缓存 对特定location禁用缓存 注意事项 全局禁用缓存 要配置Nginx使其不缓存内容,通常是指禁止浏览器缓存响应的内容,或者是在代理…

单片机-串口通信(二)

目录 一、串口概念 1.相关概念: 按数据传输方式分类: 按时钟分类 二、STM32F103ZET6中串口 USART特性: NRZ数据格式: 三、配置串口通信 查看硬件原理图 软件配置流程 USART相关的寄存器 新建my_usart1.c和my_usart1.h …

将Google Chrome或Microsoft Edge浏览器的地址栏隐藏的方法

将Google Chrome或Microsoft Edge浏览器的地址栏隐藏的方法 目标效果示范 我们以百度首页为例,普通模式启动的页面通常会显示地址栏,如下图所示: 而本文要实现的效果是隐去地址栏和书签栏(如果有的话),无…

JDBC |封装JDBCUtils|PreparedStatement|事务|批处理|数据库连接池| Blob类型数据的读写|Apache—DBUtils简介

一.概述 在Java中,数据库存取技术可分为如下几类: JDBC直接访问数据库JDO技术(Java Data Object)第三方O/R工具,如Hibernate, Mybatis 等 JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了J…

交流耦合同相放大电路设计

1 简介 该电路在单电源供电时,可放大交流信号,并可对输出信号进行电平抬升,以使其集中于电源电压信号的二分之一处。 2 设计目标 2.1 输入 2.2 输出 2.3 电源 2.4 截止频率下限() 2.5 截止频率上限(&…

elementUI根据列表id进行列合并@莫成尘

本文章提供了elementUI根据列表id进行列合并的demo&#xff0c;效果如图&#xff08;可直接复制代码粘贴&#xff09; <template><div id"app"><el-table border :data"tableList" style"width: 100%" :span-method"objectS…

物联网之硬件元器件基础知识介绍、集成电路、电阻器、电容器、电感器、二极管、三极管、晶体管、连接器、传感器、开关、电源

MENU 前言电子元件采购网址三极管持续更新中 前言 序言 硬件元器件是电子设备和系统的基本构成部分&#xff0c;它们在电子产品的设计、制造和功能实现中起着至关重要的作用。 电阻器(Resistor) 功能&#xff1a;电阻器用于限制电流流过电路的流动&#xff0c;并分配电压。它们…

【数据结构】-----哈希

目录 一、哈希表概念 二、哈希函数 三、哈希冲突 Ⅰ、定义 Ⅱ、解决 ①闭散列--开放定址法 线性探测 二次线性探测 ②开散列--链地址法&#xff08;哈希桶&#xff09; 问题&#xff1a;哈希表何时扩容&#xff1f; 一、哈希表概念 哈希表又称散列表&#xff0c;它是一…

python网络爬虫(四)——实战练习

0.为什么要学习网络爬虫 深度学习一般过程:   收集数据&#xff0c;尤其是有标签、高质量的数据是一件昂贵的工作。   爬虫的过程&#xff0c;就是模仿浏览器的行为&#xff0c;往目标站点发送请求&#xff0c;接收服务器的响应数据&#xff0c;提取需要的信息&#xff0c…

【408DS算法题】034进阶-22年真题_判断顺序存储二叉树是否是BST

Index 真题题目分析实现总结 真题题目 已知非空二叉树T的结点值均为正整数&#xff0c;采用顺序存储方式保存&#xff0c;数据结构定义如下: typedef struct { // MAX_STZE为已定义常量int SqBiTNode[MAX_SIZE]; // 保存二叉树结点值的数组int ElemNum; …