Announcement

Collapse
No announcement yet.

Adding time lapse / video creating to Rasberry Pi2

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Adding time lapse / video creating to Rasberry Pi2

    16th of October, 2015

    Adding time lapse / videos using one Python script and one bash script.

    1 - Install Python on your RPI2 if it is not already installed
    2 - sudo apt-get install python-imaging
    3 - Python script

    talicam.py

    Code:
    #!/usr/bin/python
    
    # Number of seconds between frames:
    LAPSE_TIME = 30
    
    # Name of truetype font file to use for timestamps (should be a monospace font!)
    FONT_FILENAME = "UbuntuMono-B.ttf"
    
    # Format of timestamp on each frame
    TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S"
    
    # Command to batch convert mjpeg to mp4 files:
    #  for f in *.mjpeg; do echo $f ; avconv -r 30000/1001 -i "$f" "${f%mjpeg}mp4" 2>/dev/null ; done
    
    import urllib
    import sys, time, datetime
    import StringIO
    import Image, ImageDraw, ImageFont
    
    class Camera:
        def __init__(self, name, url, filename):
            self.name = name
            self.url = url
            self.filename = filename
            
        def CaptureImage(self):
            camera = urllib.urlopen(self.url)
            image_buffer = StringIO.StringIO()
            image_buffer.write(camera.read())
            image_buffer.seek(0)
            image = Image.open(image_buffer)
            camera.close()
            return image
            
        def TimestampImage(self, image):
            draw_buffer = ImageDraw.Draw(image)
            font = ImageFont.truetype(FONT_FILENAME, 16)
            timestamp = datetime.datetime.now()
            stamptext = "{0} - {1}".format(timestamp.strftime(TIMESTAMP_FORMAT), self.name)
            draw_buffer.text((5, 5), stamptext, font=font)
    
        def SaveImage(self, image):
            with open(self.filename, "a+b") as video_file:
                image.save(video_file, "JPEG")
                video_file.flush()
    
        def Update(self):
            image = self.CaptureImage()
            self.TimestampImage(image)
            self.SaveImage(image)
            print("Captured image from {0} camera to {1}".format(self.name, self.filename))
    
    
    if __name__ == "__main__":
        cameras = []
        cameras.append(Camera("porch", "http://username:password@10.17.42.172/SnapshotJPEG?Resolution=640x480&Quality=Clarity", "cam1.mjpeg"))
        cameras.append(Camera("driveway", "http://username:password@10.17.42.174/SnapshotJPEG?Resolution=640x480&Quality=Clarity", "cam2.mjpeg"))
        cameras.append(Camera("backyard", "http://username:password@10.17.42.173/SnapshotJPEG?Resolution=640x480&Quality=Clarity", "cam3.mjpeg"))
        cameras.append(Camera("sideyard", "http://10.17.42.176/image/jpeg.cgi", "cam4.mjpeg"))
        cameras.append(Camera("stairway", "http://10.17.42.175/image/jpeg.cgi", "cam5.mjpeg"))
        
        print("Capturing images from {0} cameras every {1} seconds...".format(len(cameras), LAPSE_TIME))
        
        try:
            while (True):
                for camera in cameras:
                    camera.Update()
                    
                time.sleep(LAPSE_TIME)
                
        except KeyboardInterrupt:
            print("\nExit requested, terminating normally")
            sys.exit(0)
    4 - Bash script to convert / compress video files.

    mjpeg2mp4

    Code:
    #!/bin/bash
    
    echo "Removing old files..."
    rm -fv *.mp4
    
    echo "Converting files to mp4..."
    for f in *.mjpeg ; do
        t=${f%mjpeg}mp4
        echo "  Converting $f to $t"
        avconv -r 30000/1001 -i "$f" -q 5 "$t" 2>/dev/null
    done
    
    echo "Done!"
    5 - copy a font of choice to same said directory.

    18th of October, 2015

    Moved the script over to the RPi2 running CumulusMX and autostarting it via a Cron job. Works well.

    19th of October, 2015

    Testing the script on the Homeseer 3 Zee-2 device. You can just link to the time lapse video in Homeseer 3 and create an event for conversion.

    The conversion program hits the RPi2 CPU stuff:

    Cron:
    Command python /video/talicam.py
    CPU 0.4 %

    Manual running of bash script:
    Command avconv -r 30000/1001 -i cam1.mjpeg -q 5 cam1.mp4
    CPU 356 %

    Might move it to the HS3 Pro big box.
    Attached Files
    Last edited by Pete; February 15th, 2016, 09:06 PM.
    - Pete

    Auto mator
    Homeseer 3 Pro - 3.0.0.534 (Linux) - Ubuntu 18.04/W7e 64 bit Intel CPU - Mono 5.20
    Homeseer Zee2 (Lite) - 3.0.0.534 (Linux) - Ubuntu 18.04/W7e BeeLink 4Gb BT3 Pro - Mono 5.20

    X10, UPB, Zigbee, ZWave and Wifi MQTT automation.
Working...
X