Skip to main content

Poor man's DVR - a linux bash script to capture images from the camera and upload them to a remote server

I wanted to create a very easy "DVR" script for my raspberry PI machine that will take a shot from the camera and upload the photos to a remote server so I can see what is happening in my living room.

I created this simple bash Linux command line script to activate the camera, save the photo, add a timestamp and upload it to a remote server.

It is running every minute - capturing 5 photos from the webcam every 9 seconds and uploads them to the server using scp.

Here is the shell script for a poor man's DVR:

#!/bin/bash

# repeat 5 times
for i in {1..5}; do
    # the file name with a datetime stamp
    filename=webcam_$(date +%Y%m%d-%H%M%S).jpg
 
    # capture the image from the camera
    ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 -vframes 1 -frames:v 1 /mnt/ramdisk/$filename

    # wait
    sleep 9
done

# create a latest.jpg image
cp /mnt/ramdisk/$filename /mnt/ramdisk/latest.jpg

# add the time stamp
convert /mnt/ramdisk/latest.jpg -gravity SouthEast -pointsize 22 -fill white -annotate +30+30 $filename /mnt/ramdisk/latest.jpg

# upload the images
scp /mnt/ramdisk/*.jpg  remote@remote.server://directory
 
# delete the images
rm /mnt/ramdisk/*.jpg

Comments

Popular posts from this blog

Using phpword to merge two Mircrosoft Office Word .docx documents

How to combine or embed and insert another .docx file (Microsoft office docx word document) into another one using PHPWord Joining two .docx document using php ( phpword library ) $mainTemplateProcessor = new \PhpOffice\PhpWord\TemplateProcessor("file1"); //$mainTemplateProcessor ->setValue('var_name', $value); $innerTemplateProcessor = new \PhpOffice\PhpWord\TemplateProcessor("file2"); //$innerTemplateProcessor->setValue('var2_name', $value2); // extract internal xml from template that will be merged inside main template $innerXml = $innerTemplateProcessor->gettempDocumentMainPart(); $innerXml = preg_replace('/^[\s\S]*<w:body>(.*)<\/w:body>.*/', '$1', $innerXml); // remove tag containing header, footer, images $innerXml = preg_replace('/<w:sectPr>.*<\/w:sectPr>/', '', $innerXml); // inject internal xml inside main template $mainXml = $mainTemplateProcessor->gettempDocumentMainPart(

Bypassing the error by "go get" "tls: failed to verify certificate: x509: certificate signed by unknown authority"

When I was trying to download dependencies for my go project in an old Ubuntu machine I was getting this error all the time: "go: gopkg.in/alexcesaro/quotedprintable.v3@v3.0.0-20150716171945-2caba252f4dc: Get "https://proxy.golang.org/gopkg.in/alexcesaro/quotedprintable.v3/@v/v3.0.0-20150716171945-2caba252f4dc.mod": tls: failed to verify certificate: x509: certificate signed by unknown authority" Which the main part of it was go get failing to authenticate: " tls: failed to verify certificate: x509: certificate signed by unknown authority " I tried many things but couldn't make it work until I found the way: export GOINSECURE="proxy.golang.go" This will tell go get to ignore certification validity. Then export GOPROXY=direct This will tell go get to by pass proxy Then git config --global http.sslverify false And only after those I could run again: go get And it worked