Camera Video4Linux21

Video4Linux2 und Serial in Linux

Camera v4l22

Video 4 Linux

  • Webcam via USB
  • uvc Treiber
  • Zugriff via devfs
  • /dev/video0
Camera v4l23

Encoding

  • MJPG
  • YUYV
    • YUYV 4:2:2
  • BGR
  • v4l2-ctl
Camera v4l24

Access

Camera Beispiel Python5
import flask
from v4l2py import Device

app = flask.Flask('basic-web-cam')


PREFIX = b"--frame\r\nContent-Type: image/jpeg\r\n\r\n"
SUFFIX = b"\r\n"

def gen_frames():
    with Device.from_id(0) as cam:
        cam.video_capture.set_format(640, 480, 'MJPG')
        for frame in cam:
            yield b"".join((PREFIX, frame, SUFFIX))
Camera Beispiel Python6
@app.route("/")
def index():
    return '<html><img src="/stream" /></html>'

@app.route("/stream")
def stream():
    return flask.Response(
        gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == "__main__":
    app.run(host="0.0.0.0")
Camera v4l2 > Network7

Frames Senden

  • Kurze latenz
  • Keine alten Frames
  • Kein "Desync"
  • ... am besten in Webapp einbaubar
Camera v4l2 > Network8

IP

  • Fragmentiert
  • Datagramm / Verbindungslos
  • Plaintext
Camera v4l2 > Network9

UDP

  • Verbindungslos
  • Checksum
  • Plaintext
  • Keine Garantien
Camera v4l2 > Network10

NAT

Camera serial11

Serielle Schnittstelle

  • /dev/ttyX
  • Cannonical!
  • Mit
    • C/C++ termios
    • Python pyserial
    • Java stty + read / write
    • ... analog mit anderen Sprachen / Frameworks
Camera serial12

PySerial

>>> with serial.Serial('/dev/ttyS1', 19200, timeout=1) as ser:
...     x = ser.read()          # read one byte
...     s = ser.read(10)        # read up to ten bytes (timeout)
...     line = ser.readline()   # read a '\n' terminated line
Reset