Download presentation
Presentation is loading. Please wait.
1
IoT(사물인터넷) 보안 2016년 2학기 4. 라즈베리파이 카메라
2
4. 라즈베리파이 카메라
3
파이 카메라 카메라 연결하기 흰색 커버를 들어올린 후 케이블을 밀어넣고 다시 커버를 닫음
고화질 FULL HD(1080p) 500만 화소 라즈베리파이 전용 카메라 흰색 커버를 들어올린 후 케이블을 밀어넣고 다시 커버를 닫음
4
파이 카메라 최신 버전 업그레이드 라즈베리 파이 설정에서 카메라 사용을 enable로 변경 사진 찍기 동영상 찍기
$ sudo apt-get update $ sudo apt-get upgrade 라즈베리 파이 설정에서 카메라 사용을 enable로 변경 $ sudo raspi-config $ 리부팅 사진 찍기 $ raspistill -o image.jpg $ raspistill --help 동영상 찍기 $ raspivid -o video.h264 $ raspivid --help
5
웹스트리밍 참고 사이트 폴더 생성 프로젝트 초기화 및 패키지 설치 소스 작성
폴더 생성 $ mkdir liveStreaming $ cd liveStreaming 프로젝트 초기화 및 패키지 설치 $ npm init $ npm install express socket.io --save 소스 작성 $ nano index.js $ nano index.html
6
소스 작성 Index.js Index.html
var express = require('express'); var app = express(); var http = require('http').Server(app); var fs = require('fs'); var io = require('socket.io')(http); var path = require('path'); var spawn = require('child_process').spawn; var proc; app.use('/', express.static(path.join(__dirname, 'stream'))); res.sendFile(__dirname + '/index.html'); app.get('/', function(req, res) { }); var sockets = {}; io.on('connection', function(socket) { sockets[socket.id] = socket; console.log("Total clients connected : ", Object.keys(sockets).length); socket.on('disconnect', function() { delete sockets[socket.id]; // no more sockets, kill the stream if (Object.keys(sockets).length == 0) { app.set('watchingFile', false); if (proc) proc.kill(); fs.unwatchFile('./stream/image_stream.jpg'); } }); socket.on('start-stream', function() { startStreaming(io); http.listen(3000, function() { console.log('listening on *:3000'); function stopStreaming() { if (Object.keys(sockets).length == 0) { app.set('watchingFile', false); fs.unwatchFile('./stream/image_stream.jpg'); if (proc) proc.kill(); } } function startStreaming(io) { if (app.get('watchingFile')) { io.sockets.emit('liveStream', 'image_stream.jpg?_t=' + (Math.random() * )); return; var args = ["-w", "640", "-h", "480", "-o", "./stream/image_stream.jpg", "-t", " ", "-tl", "100"]; proc = spawn('raspistill', args); console.log('Watching for changes...'); app.set('watchingFile', true); fs.watchFile('./stream/image_stream.jpg', function(current, previous) { }) <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Stream My Lab </title> <!-- Bootstrap CSS --> <link href=" rel="stylesheet"> <style type="text/css"> #stream { height: 99%; margin: 0px auto; display: block; margin-top: 20px; } </style> <!-- jQuery --> <script src=" <!-- Bootstrap JavaScript --> <script src=" <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); socket.on('liveStream', function(url) { $('#stream').attr('src', url); $('.start').hide(); }); function startStream() { socket.emit('start-stream'); </script> </head> <body class="container"> <h1 class="text-center">My Lab <small>Powered by PI</small> </h1> <hr> <button type="button" id="" class="btn btn-info start" onclick="startStream()">Start Camera</button> <div class="row"> <img src="" id="stream"> </div> </body> </html> Index.js Index.html <script src="/socket.io/socket.io.js"></script>의 주소를 으로 변경
7
웹스트리밍 하부 폴더 생성 실행 브라우저로 접속 $ mkdir stream (이미지가 저장되는 폴더)
$ sudo node index.js 브라우저로 접속 로컬 접속 원격 접속
8
비디오 서버 raspberry-pi-mjpeg-server 소스 복사 설치 서버 실행 서버 접속
소스 복사 $ git clone mjpeg-server 설치 $ cd raspberry-pi-mjpeg-server $ npm install 서버 실행 $ sudo node raspberry-pi-mjpeg-server.js -w l 1024 서버 접속 Localhost:8080
9
사진 찍기 서비스 참고 사이트 소스 다운로드 설치
io/ 소스 다운로드 $ git clone streaming.git 설치 $ cd rpi-socket-streaming $ npm install
Similar presentations