计算机毕设项目 - 基于移动设备的眼球追踪技术及其应用(源码+论文)


0 项目说明

基于移动设备的眼球追踪技术及其应用

提示:适合用于课程设计或毕业设计,工作量达标,源码开放


1 研究目的

在本文中,我们主要验证在移动设备上进行实时眼球追踪的可行性,并提出使用眼球追踪进行移动设备控制。

2 研究方法

我们首先对眼球追踪技术进行测试,验证了现行眼球追踪算法在移动设备上进行眼球运动方向追踪的准确性。随后基于视频播放场景,在原有的控制技术基础上,实现了基于眼球运动方向的视频播放控制。相较于之前的研究,我们不仅验证了眼球追踪技术在移动设备上应用的准确性,同时提出了其适用的场景和相应的解决方案。

3 系统实现

首先我们设计实现一款简易视频播放器,随后引入眼球追踪技术,对视频播放操作进行重新设计,添加相应功能从而实现基于眼球运动方向的控制方式。
在这里插入图片描述

3.1 实现视频播放

为方便视频播放模块添加眼球控制方式,我们将眼球追踪页面与视频播放页面结合,左侧为视频播放器,右侧为前置摄像头获取人脸图像预览,在视频播放的同时,进行眼球追踪。
在这里插入图片描述

4 研究结论

针对用户观看视频过程中有时不便手动控制这一现象,我们率先将眼球追踪技术与视频播放控制结合起来,改善了用户使用体验。而经过实验验证,基于眼球运动方向进行操作控制的平均准确率达到 70.5%,这一新颖的控制方式被证明是可靠的。
在这里插入图片描述

5 论文目录

第一章 绪论
  1.1 研究背景
  1.2 本文工作
  1.3 论文结构
第二章 相关工作
  2.1 眼睛行为分析
    2.1.1 视线估计
    2.1.2 眼球运动
  2.2 基于眼睛交互
    2.2.1 隐式交互
    2.2.2 显式交互
  2.3 移动设备控制
第三章 瞳孔检测与眼球追踪
  3.1 面临挑战
  3.2 环境影响
    3.2.1 距离
    3.2.2 照明条件
  3.3 眼睛检测
    3.3.1 Harr特征选择
    3.3.2 计算积分图像
    3.3.3 Adaboost 训练
    3.3.4 级联分类器
  3.4 瞳孔中心定位
    3.4.1 梯度方法
    3.4.2 运行结果
  3.5 眼球运动方向追踪
第四章 系统实现与性能评估
  4.1 系统实现
    4.1.1 视频播放器
    4.1.2 基于眼球控制实现视频播放
  4.2 性能评估
    4.2.1 实验设置
    4.2.2 眼球追踪模块
    4.2.3 视频控制模块
第五章 总结与展望
参考文献
致 谢

6 项目源码

package org.opencv.android;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.util.Log;

/**
 * Basic implementation of LoaderCallbackInterface.
 */
public abstract class BaseLoaderCallback implements LoaderCallbackInterface {

    public BaseLoaderCallback(Context AppContext) {
        mAppContext = AppContext;
    }

    public void onManagerConnected(int status)
    {
        switch (status)
        {
            /** OpenCV initialization was successful. **/
            case LoaderCallbackInterface.SUCCESS:
            {
                /** Application must override this method to handle successful library initialization. **/
            } break;
            /** OpenCV loader can not start Google Play Market. **/
            case LoaderCallbackInterface.MARKET_ERROR:
            {
                Log.e(TAG, "Package installation failed!");
                AlertDialog MarketErrorMessage = new AlertDialog.Builder(mAppContext).create();
                MarketErrorMessage.setTitle("OpenCV Manager");
                MarketErrorMessage.setMessage("Package installation failed!");
                MarketErrorMessage.setCancelable(false); // This blocks the 'BACK' button
                MarketErrorMessage.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                });
                MarketErrorMessage.show();
            } break;
            /** Package installation has been canceled. **/
            case LoaderCallbackInterface.INSTALL_CANCELED:
            {
                Log.d(TAG, "OpenCV library installation was canceled by user");
                finish();
            } break;
            /** Application is incompatible with this version of OpenCV Manager. Possibly, a service update is required. **/
            case LoaderCallbackInterface.INCOMPATIBLE_MANAGER_VERSION:
            {
                Log.d(TAG, "OpenCV Manager Service is uncompatible with this app!");
                AlertDialog IncomatibilityMessage = new AlertDialog.Builder(mAppContext).create();
                IncomatibilityMessage.setTitle("OpenCV Manager");
                IncomatibilityMessage.setMessage("OpenCV Manager service is incompatible with this app. Try to update it via Google Play.");
                IncomatibilityMessage.setCancelable(false); // This blocks the 'BACK' button
                IncomatibilityMessage.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                });
                IncomatibilityMessage.show();
            } break;
            /** Other status, i.e. INIT_FAILED. **/
            default:
            {
                Log.e(TAG, "OpenCV loading failed!");
                AlertDialog InitFailedDialog = new AlertDialog.Builder(mAppContext).create();
                InitFailedDialog.setTitle("OpenCV error");
                InitFailedDialog.setMessage("OpenCV was not initialised correctly. Application will be shut down");
                InitFailedDialog.setCancelable(false); // This blocks the 'BACK' button
                InitFailedDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new OnClickListener() {

                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                });

                InitFailedDialog.show();
            } break;
        }
    }

    public void onPackageInstall(final int operation, final InstallCallbackInterface callback)
    {
        switch (operation)
        {
            case InstallCallbackInterface.NEW_INSTALLATION:
            {
                AlertDialog InstallMessage = new AlertDialog.Builder(mAppContext).create();
                InstallMessage.setTitle("Package not found");
                InstallMessage.setMessage(callback.getPackageName() + " package was not found! Try to install it?");
                InstallMessage.setCancelable(false); // This blocks the 'BACK' button
                InstallMessage.setButton(AlertDialog.BUTTON_POSITIVE, "Yes", new OnClickListener()
                {
                    public void onClick(DialogInterface dialog, int which)
                    {
                        callback.install();
                    }
                });

                InstallMessage.setButton(AlertDialog.BUTTON_NEGATIVE, "No", new OnClickListener() {

                    public void onClick(DialogInterface dialog, int which)
                    {
                        callback.cancel();
                    }
                });

                InstallMessage.show();
            } break;
            case InstallCallbackInterface.INSTALLATION_PROGRESS:
            {
                AlertDialog WaitMessage = new AlertDialog.Builder(mAppContext).create();
                WaitMessage.setTitle("OpenCV is not ready");
                WaitMessage.setMessage("Installation is in progress. Wait or exit?");
                WaitMessage.setCancelable(false); // This blocks the 'BACK' button
                WaitMessage.setButton(AlertDialog.BUTTON_POSITIVE, "Wait", new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        callback.wait_install();
                    }
                });
                WaitMessage.setButton(AlertDialog.BUTTON_NEGATIVE, "Exit", new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        callback.cancel();
                    }
                });

                WaitMessage.show();
            } break;
        }
    }

    void finish()
    {
        ((Activity) mAppContext).finish();
    }

    protected Context mAppContext;
    private final static String TAG = "OCV/BaseLoaderCallback";
}

7 最后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值