Merge pull request #38 from surmann/master

Adjust brightness and optimise white page recognition
This commit is contained in:
Raman Gupta 2022-01-07 09:30:43 -05:00 committed by GitHub
commit e40b766d2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 2 deletions

13
scan
View File

@ -31,6 +31,8 @@ DESKEW=0
DRIVER_OPTION= DRIVER_OPTION=
VERBOSE=0 VERBOSE=0
SKIP_EMPTY_PAGES=0 SKIP_EMPTY_PAGES=0
WHITE_THRESHOLD=99.8
BRIGHTNESS_CONTRAST=
SOURCE="" SOURCE=""
TMP_DIR=$(mktemp -d -p "" scan.XXXXXXXXXX) TMP_DIR=$(mktemp -d -p "" scan.XXXXXXXXXX)
@ -86,6 +88,8 @@ while [[ $# > 0 ]]; do
--skip-empty-pages) SKIP_EMPTY_PAGES=1 ;; --skip-empty-pages) SKIP_EMPTY_PAGES=1 ;;
--white-threshold) shift; WHITE_THRESHOLD=$1 ;;
-o|--output) shift; USEOUTPUT=1; OUTPUT="$1" ;; -o|--output) shift; USEOUTPUT=1; OUTPUT="$1" ;;
-l|--outputlist) shift; USEARRAY=1; OUTPUTARR=(); OUTPUTARR+=("$1") ;; -l|--outputlist) shift; USEARRAY=1; OUTPUTARR=(); OUTPUTARR+=("$1") ;;
@ -94,6 +98,8 @@ while [[ $# > 0 ]]; do
-xo|--driver-options) shift; DRIVER_OPTION=$1;; -xo|--driver-options) shift; DRIVER_OPTION=$1;;
--brightness-contrast-sw) shift; BRIGHTNESS_CONTRAST=$1 ;;
*) if [[ $USEARRAY == 1 ]]; then OUTPUTARR+=("$1"); else echo >&2 "Unknown argument: $1"; exit 1; fi ;; *) if [[ $USEARRAY == 1 ]]; then OUTPUTARR+=("$1"); else echo >&2 "Unknown argument: $1"; exit 1; fi ;;
esac esac
@ -145,6 +151,11 @@ if [[ $HELP == 1 ]]; then
echo " which language to use for OCR" echo " which language to use for OCR"
echo " --skip-empty-pages" echo " --skip-empty-pages"
echo " remove empty pages from resulting PDF document (e.g. one sided doc in duplex mode)" echo " remove empty pages from resulting PDF document (e.g. one sided doc in duplex mode)"
echo " --white-threshold"
echo " threshold to identify an empty page is a percentage value between 0 and 100. The default is 99.8"
echo " --brightness-contrast-sw"
echo " Alter brightness and contrast via post-processing - prefer specifying brightness and/or"
echo " contrast via --driver-options if supported by your hardware."
echo "" echo ""
echo "OUTPUT" echo "OUTPUT"
echo " -o, --output <outputfile>" echo " -o, --output <outputfile>"
@ -267,6 +278,8 @@ export PGWIDTHIN
export PGHEIGHTIN export PGHEIGHTIN
export PS2PDF_OPTS export PS2PDF_OPTS
export SKIP_EMPTY_PAGES export SKIP_EMPTY_PAGES
export WHITE_THRESHOLD
export BRIGHTNESS_CONTRAST
if [[ $VERBOSE == 1 ]]; then if [[ $VERBOSE == 1 ]]; then
LOCKFILE=$(mktemp) LOCKFILE=$(mktemp)

View File

@ -14,6 +14,7 @@ usage()
echo " PGWIDTHIN" echo " PGWIDTHIN"
echo " PGHEIGHTIN" echo " PGHEIGHTIN"
echo " SKIP_EMPTY_PAGES" echo " SKIP_EMPTY_PAGES"
echo " BRIGHTNESS_CONTRAST"
echo " PS2PDF_OPTS (optional)" echo " PS2PDF_OPTS (optional)"
echo " VERBOSE (optional)" echo " VERBOSE (optional)"
echo " LOCKFILE (required if VERBOSE=1)" echo " LOCKFILE (required if VERBOSE=1)"
@ -67,9 +68,14 @@ fi
process_page() { process_page() {
log "" log ""
log "-------------------------------------------------------------------------------" log "-------------------------------------------------------------------------------"
log "Post-processing scanned page ${IMAGE_PATH}, deskew=$UNPAPER, searchable=$SEARCHABLE, skip-empty-pages=$SKIP_EMPTY_PAGES..." log "Post-processing scanned page ${IMAGE_PATH}, deskew=$UNPAPER, searchable=$SEARCHABLE, skip-empty-pages=$SKIP_EMPTY_PAGES, white-threshold=$WHITE_THRESHOLD, brightness-contrast-sw=$BRIGHTNESS_CONTRAST..."
log "-------------------------------------------------------------------------------" log "-------------------------------------------------------------------------------"
if [[ "$BRIGHTNESS_CONTRAST" != "" ]]; then
log "Adjust brightness and contrast in ImageMagick by $BRIGHTNESS_CONTRAST"
convert "$IMAGE_PATH" -brightness-contrast $BRIGHTNESS_CONTRAST "$IMAGE_PATH"
fi
if [[ $SKIP_EMPTY_PAGES == 1 ]]; then if [[ $SKIP_EMPTY_PAGES == 1 ]]; then
PERCENTAGE_WHITE=$(convert "$IMAGE_PATH" -fuzz 0% -negate -threshold 0 -negate -format "%[fx:100*mean]" info:) || PERCENTAGE_WHITE=0 PERCENTAGE_WHITE=$(convert "$IMAGE_PATH" -fuzz 0% -negate -threshold 0 -negate -format "%[fx:100*mean]" info:) || PERCENTAGE_WHITE=0
log "$IMAGE_PATH has $PERCENTAGE_WHITE % white" log "$IMAGE_PATH has $PERCENTAGE_WHITE % white"
@ -78,7 +84,7 @@ process_page() {
fi fi
PP_PREFIX= PP_PREFIX=
if [[ $SKIP_EMPTY_PAGES == 1 && $(echo "$PERCENTAGE_WHITE > 99.8" | bc -l) == 1 ]]; then if [[ $SKIP_EMPTY_PAGES == 1 && $(echo "$PERCENTAGE_WHITE > $WHITE_THRESHOLD" | bc -l) == 1 ]]; then
log "Skipping empty page $IMAGE_FILE with white percentage $PERCENTAGE_WHITE" log "Skipping empty page $IMAGE_FILE with white percentage $PERCENTAGE_WHITE"
else else
if [[ $UNPAPER == 1 ]]; then if [[ $UNPAPER == 1 ]]; then