一、改变旧手机的命运
就在前几天我终于。。。换新手机啦,哈哈~
看着用了两年的旧手机其实也是可以正常使用的,就这样丢抽屉吃灰了吗?
不不不,生命不息,折腾不止。。。
可以用它来做类似监控摄像头的东西啊!
对,那就先来做一个自动拍照并上传至 web 服务器的功能吧,这样我就可以通过浏览器远程来查看它拍摄的照片,也有点远程监控的意思对不,还记得我有一个远在美帝的服务器了吗,正好耍耍 ^_^
先来看看最后完成的效果吧。
复制下面的链接到浏览器打开即可查看现在服务器上保存的图片。
http://23.95.214.128:8080/index.html
(我测试在微信中没办法直接打开,想查看的还是复制到浏览器打开。)
特别的因为服务器在美帝的原因,访问速度比较慢。
我拍照的姿势大概是这样的,它每过 5 分钟即会拍摄一张图片上传到服务器。
为了证明它是会更新的,我还特意摆上了我的温湿度计,上面有时间会更新。
但我可能也就是今天玩玩,后面就把它撤了,或者换成别的姿势,不知道你们想看什么,哈哈~
(接下来的内容全是我现学现用,写的不到位也还请谅解)
二、搭建简易 web 服务器
我对这个 web 服务器的需求很简单,我需要它:
能提供一个简易的网页,上面显示一张图片
能接收上传图片
也就是支持 http 的 GET 和 POST 请求就行了啊
那就用 python 来做吧。人生苦短,我要用 python。
这里我用了 python 的 BaseHTTPServer 模块。
关于它的介绍请参看下面这篇文章吧,我写的肯定没他好 ^_^
http://cizixs.com/2016/05/20/python-httpserver
更官方的介绍请看这里:
https://docs.python.org/2/library/basehttpserver.html
那来看下我写的吧,
在 do_GET 函数中我们响应浏览器的请求,self.path 中表明了浏览器想要的是那个文件,在回复给浏览器的时候我们要填充一个 content-type 的内容,特殊的我这里只处理了 html 和 favicon.ico,然后其他的所有请求我都认为它是在要图片。。。简单粗暴吧,然后具体的数据通过函数 CreateContent 来构建,我们后面再看。
在 do_POST 函数中我们响应一个 POST 请求,即上传数据,这里我们只接收一样东西,为了拒绝其他上传的东西,我利用 user-agent 设置了一个暗号,为 haha 的才是我上传的图片,实际它不是这样的用的哈。。。收到图片后就保存起来并替换掉用于网页显示的 test.jpg,总体过程就是。
那我们再来看下 CreateContent 的内容,如下:
应该很容易理解吧,就是要什么读什么给它。特殊的,针对 index.html 我为了要显示一个访问计数和时间,在读出来后加工了一下。
到这里我需要的两点需求就达成了,一点小开心
三、来拍个照吧
Android app 好久没写了,我写 app 的时候 android 最新版本还是 4.4,现在都 8.1+ 了。不过没关系,先找个示例吧,如下,我找到一个控制摄像头拍摄一张图片的例子
https://github.com/googlesamples/android-Camera2Basic
那我就在它上面加上自动拍摄然后上传的功能就好了啊。
代码我们就不看了,我直接上 github 路径吧,如下:
https://github.com/Lingminzou/remote-take-photo
我主要做了下面几件事:
增加了一个倒计时,计时到了后调用拍照接口进行拍照
由于拍摄的原始图片较大,所以上传前做了压缩
然后就是 http 的 POST 上传压缩过后的图片
由于2、3两件事比较耗时所以开了线程来做它们
四、最后总结一下
折腾了一个周末总算也是达成目标了,可是只得到一小点开心,因为我做的还不是特别好
有空的话我要把它折腾成实时的视频监控,不过那得等我换个服务器才行。。。
最后再说一个关于服务器上遇到的问题吧,我是用 ssh 连接我的服务器的,把代码传上去后,
我自信的敲下了 让我的 web 服务器后台运行,
然后我断开 ssh 后发现访问不了了,再上去看发现它不在了。。。
后面了解到原来这种情况下需要使用 nohup 命令才管用,下面这样
好了,今天到这里吧,我要休息下了,周末愉快!