天天看點

畢業設計 基于移動裝置的眼球追蹤系統(源碼+論文)0 項目說明1 研究目的2 研究方法3 系統實作3.1 實作視訊播放4 研究結論5 論文目錄6 項目源碼7 最後

文章目錄

  • 0 項目說明
  • 1 研究目的
  • 2 研究方法
  • 3 系統實作
  • 3.1 實作視訊播放
  • 4 研究結論
  • 5 論文目錄
  • 6 項目源碼
  • 7 最後

0 項目說明

基于移動裝置的眼球追蹤技術及其應用

提示:适合用于課程設計或畢業設計,工作量達标,源碼開放

1 研究目的

在本文中,我們主要驗證在移動裝置上進行實時眼球追蹤的可行性,并提出使用眼球追蹤進行移動裝置控制。

2 研究方法

我們首先對眼球追蹤技術進行測試,驗證了現行眼球追蹤算法在移動裝置上進行眼球運動方向追蹤的準确性。随後基于視訊播放場景,在原有的控制技術基礎上,實作了基于眼球運動方向的視訊播放控制。相較于之前的研究,我們不僅驗證了眼球追蹤技術在移動裝置上應用的準确性,同時提出了其适用的場景和相應的解決方案。

3 系統實作

首先我們設計實作一款簡易視訊播放器,随後引入眼球追蹤技術,對視訊播放操作進行重新設計,添加相應功能進而實作基于眼球運動方向的控制方式。

畢業設計 基于移動裝置的眼球追蹤系統(源碼+論文)0 項目說明1 研究目的2 研究方法3 系統實作3.1 實作視訊播放4 研究結論5 論文目錄6 項目源碼7 最後

3.1 實作視訊播放

為友善視訊播放子產品添加眼球控制方式,我們将眼球追蹤頁面與視訊播放頁面結合,左側為視訊播放器,右側為前置攝像頭擷取人臉圖像預覽,在視訊播放的同時,進行眼球追蹤。

畢業設計 基于移動裝置的眼球追蹤系統(源碼+論文)0 項目說明1 研究目的2 研究方法3 系統實作3.1 實作視訊播放4 研究結論5 論文目錄6 項目源碼7 最後

4 研究結論

針對使用者觀看視訊過程中有時不便手動控制這一現象,我們率先将眼球追蹤技術與視訊播放控制結合起來,改善了使用者使用體驗。而經過實驗驗證,基于眼球運動方向進行操作控制的平均準确率達到 70.5%,這一新穎的控制方式被證明是可靠的。

畢業設計 基于移動裝置的眼球追蹤系統(源碼+論文)0 項目說明1 研究目的2 研究方法3 系統實作3.1 實作視訊播放4 研究結論5 論文目錄6 項目源碼7 最後

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 最後

繼續閱讀