夏季学期学校要求做个有关VR的远程图像传输的项目。刚好这几个星期学了点Android,能借这个项目测试一下我的能力。
一、设计功能
在Android APP上,按下“拍摄”按钮,一键完成“摄像头拍照+照片无线传输给手机+转化为VR照片”。
以下是效果图:
二、设计原理
在本项目中编写了两个程序,一个为Android APP,一个服务器端程序。电脑开启wifi热点,配置Tomcat+Struts框架搭建的本地服务器环境并开启本地服务器程序。手机连接热点,使两者处于同一个局域网中。外置USB摄像头连接PC,将拍摄数据传送给PC。服务器程序每时每刻抓取拍摄数据并自动转化成图片JPG格式保存在PC设立的本地服务器上。手机上的APP发送下载请求,本地服务器接收到下载请求后响应请求,将图片无线传输给手机。图片在Android APP上自动以VR模式展示。
三、项目设备
1.奥速X200 USB摄像头(这个摄像头是和老师借的。。就只是个普通QQ聊天用的摄像头,成像不太好,建议使用好一点的全景摄像头)
2.PC
3.Android 7.0以上版本的手机
四、开发平台
1.Android Studio,开发Android端
2.MyEclipse,开发服务器端
五、框架
Android端:
Google VR SDK
Google VR SDK是谷歌前几年推出的开发套件,其功能强大,可实现展示VR照片、播放VR视频、VR游戏等,支持DayDreamVR和其他通用型VR设备。其开发要求:
1.Android Studio 2.3.3版本及以上
2.Android SDK 7.1.1(API 25)版本及以上
最低要求手机版本为Android4.4,但想体验完整功能需Android 7.0版本以上。
Google VR SDK官网https://developers.google.com/vr/develop/android/get-startedOkHttp
OkHttp是一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献。本项目采用OkHttp框架实现Android端与服务器端的通信。
OkHttp Github网址:http://square.github.io/okhttp/
服务器端:
Apache Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。本项目使用Apache Tomcat v7.0版本。
Apache Tomcat框架官网:http://tomcat.apache.org/Struts
Struts2是一个Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。本项目使用Struts 2.3.34版本
Struts官网:https://struts.apache.org/JavaCV
JavaCV 是一款开源的视觉处理库,基于GPLv2协议,对各种常用计算机视觉库封装后的一组jar包,封装了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口。
JavaCV通过其中的utility类方便的在包括Android在内的Java平台上调用这些接口。
六、代码思路
①Android端:
Android Studio中创建项目,在gradle中下载okHttp3框架和Google VR SDK:
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.google.vr:sdk-panowidget:1.170.0'
1.设计界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation=