Bu yazıda size bir Raspberry Pi ve bir Raspberry Pi Kamera ile nasıl video akışı yapabileceğinizi anlatacağız. Aynı ağa bağlı herhangi bir cihazdan erişebileceğiniz bir web sayfasına canlı video akışı yapacağız. Örneğin bir ev güvenlik kamerasına uygulamak için kullanabileceğiniz bir uygulama.
Raspberry Pi Kamera Modülünü Etkinleştirme
Öncelikle Raspberry pi Kamera Modülünü etkinleştirelim. Bunun için; Desktop ortamında, Preferences menüsü altında Raspberry Pi Configuration penceresine gidiyoruz , Interfaces sekmesini açın ve aşağıdaki şekilde görüldüğü gibi Camera’yı etkinleştirin .
Veya Terminal penceresinden de bu ayarları yapabilirsiniz.
Raspberry Pi IP Adresini Bulma
Video akışı web sunucunuza erişmek için Raspberry Pi IP adresinizi bilmeniz gerekir. Bunun için komut satırına
pi@raspberry:~ $ ifconfig
Raspberry Pi IP adresiniz de dahil olmak üzere size bir sürü bilgi verilecektir. Benim kullandığım IP adresi 192.168.1.35 .
Kod Kısmı
Ardından Thonny Python uygulamasını açıyoruz ve aşağıdaki kodları yazıyoruz
# Web streaming example
# Source code from the official PiCamera package
# http://picamera.readthedocs.io/en/latest/recipes2.html#web-streaming
import io
import picamera
import logging
import socketserver
from threading import Condition
from http import server
PAGE="""\
<html>
<head>
<title>Raspberry Pi - Murat TAS's Home</title>
</head>
<body>
<center><h1>Raspberry Pi - Murat TAS's Home</h1></center>
<center><img src="stream.mjpg" width="640" height="480"></center>
</body>
</html>
"""
class StreamingOutput(object):
def __init__(self):
self.frame = None
self.buffer = io.BytesIO()
self.condition = Condition()
def write(self, buf):
if buf.startswith(b'\xff\xd8'):
# New frame, copy the existing buffer's content and notify all
# clients it's available
self.buffer.truncate()
with self.condition:
self.frame = self.buffer.getvalue()
self.condition.notify_all()
self.buffer.seek(0)
return self.buffer.write(buf)
class StreamingHandler(server.BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.send_response(301)
self.send_header('Location', '/index.html')
self.end_headers()
elif self.path == '/index.html':
content = PAGE.encode('utf-8')
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.send_header('Content-Length', len(content))
self.end_headers()
self.wfile.write(content)
elif self.path == '/stream.mjpg':
self.send_response(200)
self.send_header('Age', 0)
self.send_header('Cache-Control', 'no-cache, private')
self.send_header('Pragma', 'no-cache')
self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
self.end_headers()
try:
while True:
with output.condition:
output.condition.wait()
frame = output.frame
self.wfile.write(b'--FRAME\r\n')
self.send_header('Content-Type', 'image/jpeg')
self.send_header('Content-Length', len(frame))
self.end_headers()
self.wfile.write(frame)
self.wfile.write(b'\r\n')
except Exception as e:
logging.warning(
'Removed streaming client %s: %s',
self.client_address, str(e))
else:
self.send_error(404)
self.end_headers()
class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
allow_reuse_address = True
daemon_threads = True
with picamera.PiCamera(resolution='640x480', framerate=24) as camera:
output = StreamingOutput()
#Uncomment the next line to change your Pi's Camera rotation (in degrees)
#camera.rotation = 90
camera.start_recording(output, format='mjpeg')
try:
address = ('', 8000)
server = StreamingServer(address, StreamingHandler)
server.serve_forever()
finally:
camera.stop_recording()
Kaydedip Çalıştırıyoruz.
Komut dosyası çalıştığında, video akışı web sunucunuza şu adresten erişebilirsiniz : http:// <IP_adresin> :8000. Benim için: http://192.168.1.35:8000 , kendi Raspberry Pi IP adresinizle değiştirin .
Video akışına, tarayıcısı olan ve Pi’nizle aynı ağa bağlı herhangi bir cihaz üzerinden erişebilirsiniz.
Not: Herhangi bir ağ üzerinden raspberry camera görüntüsüne erişmek için en kolay yol, youtube twich gibi websitelerin altyapılarını kullanmaktan geçiyor. onun dışında sağlam bir hosting web sayfanız varsa yine bunu gerçekleştirebilirsiniz.