If you followed my earlier tip, notice how I always passed in Image.png as an image file into tesseract to get a text value? This is totally fine if you can source static Image files and make sure they are available at a particular location.
However, what if you’re using a live camera that saves a stream of Images? I used mjpg-streamer to live stream images on a web browser and also save them on a Raspberry Pi.
Following is the bash command that captures images from a USB WebCam and streams it over:
./mjpg_streamer -i "./input_uvc.so -r 640x480 -f 1" -o "./output_http.so -w /usr/local/www" -o "./output_file.so -f /home/pi/Camera_Output -c /usr/bin/mjpg-streamer-overwrite.sh"
The above command does the following 3 things:
- Stream Images over the Web/Browser
- Save Images to a local folder on the Raspberry Pi
- Invoke a custom Script
Here’s how the local folder containing the saved streamed image files looks like:
Now here’s the challenge: Firstly, tesseract can only take in a defined fileName as an argument and since we’re invoking tesseract from Python, we can’t simply use a script to get the latest file name and pass it as a parameter.
So here’s what I did to solve this: Get the latest file and rename it to Image.png in that same folder. So at any instance, the latest captured image file is always Image.png. Now, simply pass this as an argument into tesseract and all’s done 🙂
I used the following code snippet to get latest file pointed as Image.png:
# move the temporary file to a given filename cd /home/pi/syed cp -f -T `find -type f -name '2015*' -printf "%C@\t%P\n" |sort -r -k1,1 |head -1 |cut -f 2-` /home/pi/syed/Image.png
I saved this snippet into mjpg-streamer-overwrite.sh which is being invoked on every Image capture as shown earlier.
P.S: A more detailed script that shows debug messages:
#!/bin/bash # comment out the following line to disable messages #VERBOSE=1 if [ $VERBOSE ]; then echo -e "Rename script started at:\t$(date)"; echo -e "Parameter \$1 is:\t\t$1" echo -e "current directory is:\t\t$(pwd)" echo -e "move command is:\t\tmv -T -f \"$1\" 'Image.jpg'" fi # move the temporary file to a given filename cd /home/pi/syed cp -f -T `find -type f -name '2015*' -printf "%C@\t%P\n" |sort -r -k1,1 |head -1 |cut -f 2-` /home/pi/syed/Image.png RES=$? if [ $VERBOSE ]; then echo -e "move command returned:\t\t$RES" fi