這是在ETI的第3個工作——給一個政府衛生署的公衆殮房做一個給屍體面部拍照的軟件,用於家屬辨認。
需求:對屍體的面部拍照,並保存在指定的位置。
分析:設計一個直觀簡捷的操作頁面,分爲:攝像頭顯示畫面,攝像頭角度控制,拍照按鈕三個方面。
由於選擇使用的攝像頭爲AXISP5510型號,自帶可訪問的服務器,提供編程操作的藉口,所以可直接使用API抓取攝像的圖像和對攝像頭進行控制。於是,採用簡單Java的Applet+Html 的結構。Applet;運行於本機的JAVA環境JRE中,用於拍照時讀取拍照的數據,存入指定的位置。Html:顯示軟件的操作界面。
過程:1·搭建Tomcat環境,創建一個webapps的應用,對web.xml配置,放入.html文件和jar包,及applet的java編譯的class文件。
2 爲了使html中的Applet具有寫文件的權限和與攝像頭的IP相連接等權限,雖然從安全的角度上講,軟件帶有一定的安全漏洞,但考慮到該軟件是用於局域網內部,可以接受。
3 完成後在office進行簡單的測試,提出了一個需求變動,就是圖像文件存儲位置的變動,html沒法提供提供能,於是使用APPlet+JSP結構。測試時,出現問題主要有兩個:1 存儲照片時,寫入的總是一個緩存中得圖像,不是實時拍照的圖像;2 在瀏覽器中傳入的中文,在頁面顯示爲亂碼。
4 解決問題1:在本機的java環境中,取消keep temporay files on my computer .
解決問題2:設置Tomcat的server.xml將8080端口的ERL的編碼設置爲“ERIEncoding=“UTF-8””;在瀏覽器傳入name的參數時,我們傳入的是中文的UTF-8的編碼。
此時,軟件測試完成,將在實地進行安裝測試。實際軟件運行的環境相對於office有些不同:JRE1.5+JBoss應用服務器。之後按照客戶的要求,修改了某些軟件的顯示頁面,並增加了照片在存儲時提示存儲過程的模塊。
但是在用戶試用階段,又一個問題出現了,在實際應用的時候用的時候,照片存儲在網絡存儲設備上,所以用軟件存儲照片比直接用攝像頭自帶的程序存儲時間對比:
Network drive P for Capture Software: 5s
Network drive P for own drive : 15-17s
Local drive C for old Capture Software: 1s
Local drive C for new drive: 11-13s
用戶不能接受這樣的時間差,於是需要對軟件進行該進。
仔細檢查,問題的原因在於若是用服務器的localhost:8080訪問,會出現上訴問題,若是直接用127.0.0.1/<服務器IP>的話,存儲時間與自帶程序運行時間相差不大。反覆思量,再請教於同事,發現這是一個Java自帶的Bug引起的問題,若將JDK升級到30版本,問題不存在了。我們在用Applet存儲照片的時候,Applet與服務器連接的時候,由於使用的是域名,java在連接了服務器ip地址後,不知道去哪裏找到camera這個確定的地址,於是就很慢。於是,在本機的hosts中,增加camera的ip。 “ ”
OK,完成!
經過接下來的兩週試用,軟件運行良好。