Gömülü Sistemler Raspberry Pi Yazılım

Raspberry Pi – PiCam İle Canlı Video Akışı

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.

Similar Posts

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir