Raspberry Piのカメラモジュールの映像をSocketIOで配信
ラズパイのカメラ買ったので動かした. Flaskも初めて使ったけど簡単で面白かった.
インストール・設定
sudo pip install Flask
sudo pip install flask-socketIO
raspi-config
#画面にしたがってカメラモジュールを有効化する
プログラム
picam2socketio.py
import threading
import picamera
from flask import Flask, render_template, request, Response
from flask.ext.socketio import SocketIO, emit
app = Flask(__name__)
socketio = SocketIO(app)
def camera_thread() :
with picamera.PiCamera() as camera :
camera.resolution = (480, 270)
camera.framerate = 5
time.sleep(2)
camera.stream = io.BytesIO()
for foo in camera.capture_continuous(camera.stream, "jpeg", use_video_port=True):
camera.stream.seek(0)
socketio.emit('jpeg', base64.b64encode(camera.stream.read()))
camera.stream.seek(0)
camera.stream.truncate()
@app.route('/')
def index() :
return render_template("index.html")
if __name__ == "__main__" :
t=threading.Thread(target=camera_thread)
t.setDaemon(True)
t.start()
socketio.run(app, host="0.0.0.0")
templates/index.html
<!DOCTYPE HTML>
<!--
index.html
Author: Hiromasa Ihara (miettal)
URL: http://miettal.com
License: MIT License
Created: 2014-05-15
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>picam2iosocket</title>
</head>
<body>
<img id="cam">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="http:////cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>
<script>
$(function(){
var socket = io.connect('http://'+document.domain+':'+location.port);
socket.on('jpeg', function(message){
var src = "data:image/jpeg;base64," + message;
$("#cam").attr('src', src);
});
});
</script>
</body>
</html>
おわり