Openstreetcam fisheye removal

I record a lot of my cycling routes using a GoPro Hero 5 black mounted to my bike.
After recording I upload the images (1 images/sec) to openstreetcam.
But the face and car sign detection cannot cope with the fisheye in the GoPro images so I had to remove them before upload.

This is the script I use:

#!/bin/bash

MOGRIFY=`which mogrify`
if [ $? -eq 1 ]; then
  echo "you need to install imagemagick"
  exit 1
fi

if [ "$#" -ne 1 ]; then
  echo "Add folder to process as argument."
  exit 1
fi

source_folder=$1
path=`realpath $1`
dest_folder=`dirname $path`/z_fisheye/`basename $1`
source_count=`find $source_folder -name \*JPG | wc -l`
echo "number of files to process: ${source_count}"

if [ -f "${source_folder}/000_fisheye.done" ]; then
  echo "${source_folder} already processed!"
  exit
fi

mkdir -p $dest_folder
(
  cd $source_folder
  for photo in *.JPG; do
    if [ -f "${dest_folder}/${photo}" ]; then
      echo -n "."
    else
      $MOGRIFY -path ${dest_folder} -distort barrel "0 0 -0.2" ${photo}
      echo -n "."
    fi
  done | pv -pte -i0.1 -s${source_count} > /dev/null
)

# check if all images from source folder are in dest_folder
dest_count=`find $dest_folder -name \*JPG | wc -l`
if [[ $source_count == $dest_count ]]; then
  touch ${source_folder}/000_fisheye.done
fi
After all files in a folder are processed a file named 000_fisheye.done will be created in the source folder.
This helps finding the folders I can upload to openstreetcam.

Progressbars in Bash

In a bash script I needed a progressbar for a "for"-loop.

The best solution was to use pv.

photo_count=`find . -name \*JPG | wc -l`
for photo in *.JPG; do
    do_some_stuff $photo
    echo -n "."
done | pv -pte -i0.1 -s${photo_count} > /dev/null
The count is necessary to get a real progressbar and an ETA.
How does it work: pv is counting the characters (here '.') until size (-s) is reached.

The results looks like:

0:00:03 [==========>                              ] 30% ETA 0:00:10