上个礼拜又开始玩raspberrry,但摄像头还没没玩热乎,在装 OpenCV想玩移动侦测的时候发现SD的卡套不够紧固,总是没法重启,一怒之下买了新的SD。
但刚满心欢喜的装上新SD卡时,发现摄像头没办法用了。之后开始怀疑系统、怀疑软件设置,然后在网上各种找,终于找到了官网的这个帖子,无奈的承认是摄像头坏了,或许就是前几天频繁启动插拔电源的时候弄坏了。
然后就只能乖乖的去淘宝买了新的摄像头。
但是新买的摄像头没办法自动对焦,所以为了在线调试摄像头,找了下教程,为此还装了motion,但之后才发现motion只支持USB摄像头,折腾了一段时间,大致成功后,有了此文,以作记录。
实现方案
主要的教程是用树莓派搭建网络摄像头,在此基础上,有删减,也有增加的说明。
- 设备:树莓派B+、无线网卡、摄像头
- 系统安装和硬件驱动:略去不表
-
软件实现方案:
用树莓派加上相机模块,可以实现实时监控的功能,再将时时视频流导入到 Web 界面中,就变成简单的网络摄像头(Webcam)。Web 端用 Nodejs + WebSocket,既可以进行实时播放,同时又方便进功能的扩展。
软件安装
安装 Nodejs/ffmpeg
install nodejs
教程中:
wget http://node-arm.herokuapp.com/node_latest_armhf.deb
sudo dpkg -i node_latest_armhf.deb
但是我这样安装后并未成功,找了下stack Overflow,发现是版本问题,解决办法如下:
wget https://nodejs.org/download/release/v0.10.0/node-v0.10.0-linux-arm-pi.tar.gz
cd /usr/local
sudo tar xzvf ~/node-v0.10.0-linux-arm-pi.tar.gz --strip=1
查看node版本,安装成功
pi@raspberrypi~ $ node -v
v0.10.0
install ffmpeg
libx264 support
git clone git://git.videolan.org/x264
cd x264
./configure --host=arm-unknown-linux-gnueabi --enable-static --disable-opencl
make
sudo make install
ffmpeg
git clone git://git.ffmpeg.org/ffmpeg cd ffmpeg sudo
./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree
make
sudo make install
install ws
原教程没提到安装ws,如果你的树莓派没有的话,需要安装下。
npm install ws
软件配置
创建 Node server 监听
进入webcam目录下 ,创建 Node server 监听 http://127.0.0.1:8082
git clone https://github.com/phoboslab/jsmpeg.git webcam
cd webcam && node stream-server.js password
打开视频,并通过 ffmpeg 转换视频格式
raspivid -t 0 -w 320 -h 240 -o - | ffmpeg -i - -s 320x240 -f mpeg1video -b 800k -r 30 http://127.0.0.1:8082/password
本地监控
用浏览器打开stream-example.html,就可以在本地看到实时监控画面了。但我的树莓派没装火狐,所以测试看不到视频,但这不重要,本来就不打算在本地监控。
远程调试
远程调试需要修改文件stream-example.html
var client = new WebSocket( 'ws://RASPI_LOCAL_IP:8084/' );
在webcam目录下开启HTTP服务
python -m SimpleHTTPServer 8080
在远程的浏览器中打开,其中,RASPI_LOCAL_IP是树莓派的ip地址
http://RASPI_LOCAL_IP:8080
后续
初步的功能已经调试成功,摄像头的焦距现象也正常了。
但在调试的过程中发现延迟较大,应该可以做后续的优化。
附图: