第九周團隊博客

本週內,我們團隊主要完成了以下工作:
1、跨域問題的解決
2、前端頁面部分的編寫
3、模型與前端的整合與調整
4、模型平滑處理

1、跨域問題的解決

由於項目採用了前後端分離的方式,靜態資源放置在了8081端口,而數據請求則開放在8082端口。

獲取數據時的跨域問題已經解決了,然而在利用cookie獲取已登錄用戶的個人信息時出現了問題,因爲登錄時得到的JSESSIONID和發送post請求時的JSESSIONID不一致,這裏猜測是出現了跨域問題導致cookies無法正確的提交給後臺。

查閱了大量的資料配合試驗之後,最終得到了一個實用的解決方案:

1.後端配置

這段代碼寫在了檢查登錄的過濾器裏面

response.setHeader("Access-Control-Allow-Origin", "http://localhost:8081");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
// 允許跨域請求中攜帶cookie
response.setHeader("Access-Control-Allow-Credentials", "true");

此外登錄成功的時候,將sessionId返回給前臺,因爲前臺獲取這個sessionId實在是太困難了。。。

if(envelope.getCode() == 0){    //如果驗證成功
	session.setAttribute("user",envelope.getObj()); //設置session
	envelope.setObj(session.getId());   //返回sessionid
}

2.登錄時利用cookies存儲sessionId

$.post('http://localhost:8082/user/login',data,function(str,status,xhr){
	//alert(str)
	res = eval('('+str+')');
	if(res.code != 0){
		alert(res.message);
    }else{
        // 設置一個鍵爲loginCoo的cookies,保存jsession的值
		setCookie('loginCoo',res.object);
        window.location.href = 'http://localhost:8081/blog.html';
	}
});

3.提交時構建一個允許cookies的請求

首先手動設置jsessionid然後利用這個jsessionid來提交數據。

document.cookie = 'JSESSIONID='+getCookie('loginCoo');
$.ajax({
	url : 'http://localhost:8082/comment/comArt',
	data : data,
    dataType: 'json',
	type : 'POST',
    xhrFields: {
		withCredentials: true
	},
	crossDomain: true,
	success: function(res) {
  		// 如果提交成功
		if(res.code == 0){
        	;
        }else{
			alert(res.message);
		}
	}
})

這樣就實現了提交數據時攜帶cookies。

2、前端頁面

這次主要是把一些用戶邏輯的前端頁面寫好,然後定義好後臺的一些接口,方便後臺的編寫.

其實工作的話,整體是工程多一些,難度不是很大.

一、登陸、註冊

這部分工作實在是比較簡單…

主要就是花點時間寫好看一點,注重一下驗證邏輯

效果如下:
在這裏插入圖片描述

三、模型與前端的整合與調整

目前遇到的問題主要有以下兩點:
模型垂直方向預測不夠準確,出現漂移
模型在使用過程中會有較爲嚴重的抖動現象
本週主要解決的是第一個問題
解決思路主要分爲以下兩種:

將模型一分爲二,採用專門的模型預測水平方向和專門的模型預測垂直方向
在豎直方向上對視線位置進行分層離散處理
對於第一種方法,在修改模型結構並訓練後在實際測試中效果並沒有明顯的改善,因此將重點放到了第二種方法上。

對於分層離散處理,簡單來說就是在視線追蹤不靈敏的垂直區域上劃定幾個固定的高度,當檢測的垂直高度在某個區間內時 ,變將垂直高度統一的一個固定的高度。在初步測試中,該方法對與改善垂直方向上的追蹤效果有較大的改善。目前在垂直方向一共劃分了三個區域,上中下三區域中,上負責向上滑動翻頁,中間區域負責瀏覽點擊操作,下區域 負責滑動下翻頁。

四、平滑處理目前遇到的問題主要有以下兩點:

算法設計1
起初打算使用滑動窗口的思想,設定一個大小爲10的滑動窗口。由於模型每0.1s預測一次視線位置,因此滑動窗口保存1s前的所有預測點。
假設窗口內的預測點爲10個向量[x0,x1,x2,x3,x4,x5,x6,x7,x8,x9],計算出相鄰點之間的差值向量,差值向量有9個[x1-x0,x2-x1,x3-x2,x4-x3,x5-x4,x6-x5,x7-x6,x8-x7,x9-x8]。計算這9個向量的平均值,作爲當前移動的方向。
把該移動方向乘以一個固定的係數α,再加上前一個時刻的視線位置,就得到了當前的視線位置。
後來發現這個平滑方式沒有考慮到前一個時刻點的位置,因此不可採納。

算法設計2
記錄前一個時刻點的位置(x0,y0),模型預測的當前時刻的位置(x,y),則視點的位置則變爲(x0,y0)+α*[(x,y)-(x0,y0)]。(0<α<1)
後經測試,這種方法只會使點的移動幅度降低,仍然會存在明顯的抖動,影響體驗,不可採納。

算法設計3
記錄前一個時刻點的位置(x0,y0),模型預測的當前時刻的位置(x,y),設定一個變量α,0<α<1,屏幕長爲w,則當||(x,y)-(x0,y0)||<α*w時,視點不變,經測試α取0.2左右時效果較好,能有效地降低抖動,改善用戶操作性,予以採納。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章