From 1d820885276fedcfe30aa1dae4419aba2d14623c Mon Sep 17 00:00:00 2001 From: Dirk Surmann <4048472+surmann@users.noreply.github.com> Date: Thu, 9 Dec 2021 16:49:40 +0100 Subject: [PATCH 1/4] add brightness switch --- scan | 6 ++++++ scan_perpage | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/scan b/scan index 3d6fd2c..33355c7 100755 --- a/scan +++ b/scan @@ -31,6 +31,7 @@ DESKEW=0 DRIVER_OPTION= VERBOSE=0 SKIP_EMPTY_PAGES=0 +BRIGHTNESS=0 SOURCE="" TMP_DIR=$(mktemp -d -p "" scan.XXXXXXXXXX) @@ -94,6 +95,8 @@ while [[ $# > 0 ]]; do -xo|--driver-options) shift; DRIVER_OPTION=$1;; + --brightness) BRIGHTNESS=1 ;; + *) if [[ $USEARRAY == 1 ]]; then OUTPUTARR+=("$1"); else echo >&2 "Unknown argument: $1"; exit 1; fi ;; esac @@ -145,6 +148,8 @@ if [[ $HELP == 1 ]]; then echo " which language to use for OCR" echo " --skip-empty-pages" echo " remove empty pages from resulting PDF document (e.g. one sided doc in duplex mode)" + echo " --brightness" + echo " Increase brightness and contrast in post-processing" echo "" echo "OUTPUT" echo " -o, --output " @@ -267,6 +272,7 @@ export PGWIDTHIN export PGHEIGHTIN export PS2PDF_OPTS export SKIP_EMPTY_PAGES +export BRIGHTNESS if [[ $VERBOSE == 1 ]]; then LOCKFILE=$(mktemp) diff --git a/scan_perpage b/scan_perpage index eb0dc80..fe27733 100755 --- a/scan_perpage +++ b/scan_perpage @@ -14,6 +14,7 @@ usage() echo " PGWIDTHIN" echo " PGHEIGHTIN" echo " SKIP_EMPTY_PAGES" + echo " BRIGHTNESS" echo " PS2PDF_OPTS (optional)" echo " VERBOSE (optional)" echo " LOCKFILE (required if VERBOSE=1)" @@ -50,7 +51,7 @@ if [[ $# < 1 ]]; then exit 1 fi -if [[ "$UNPAPER" == "" || "$SEARCHABLE" == "" || "$RESOLUTION" == "" || "$RESOLUTION" == "" || "$SKIP_EMPTY_PAGES" == "" ]]; then +if [[ "$UNPAPER" == "" || "$SEARCHABLE" == "" || "$RESOLUTION" == "" || "$RESOLUTION" == "" || "$SKIP_EMPTY_PAGES" == "" || "$BRIGHTNESS" == "" ]]; then usage exit 1 fi @@ -67,9 +68,13 @@ fi process_page() { 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, brightness=$BRIGHTNESS..." log "-------------------------------------------------------------------------------" + if [[ $BRIGHTNESS == 1 ]]; then + convert "$IMAGE_PATH" -brightness-contrast 20x10 "$IMAGE_PATH" + fi + 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 log "$IMAGE_PATH has $PERCENTAGE_WHITE % white" From bed68a0e7b212a5cadb54b7a051f663b53a2408d Mon Sep 17 00:00:00 2001 From: Dirk Surmann <4048472+surmann@users.noreply.github.com> Date: Thu, 9 Dec 2021 16:48:55 +0100 Subject: [PATCH 2/4] add white threshold to skip pages --- scan | 10 ++++++++-- scan_perpage | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/scan b/scan index 33355c7..cc619b3 100755 --- a/scan +++ b/scan @@ -31,6 +31,7 @@ DESKEW=0 DRIVER_OPTION= VERBOSE=0 SKIP_EMPTY_PAGES=0 +WHITE_THRESHOLD= BRIGHTNESS=0 SOURCE="" @@ -85,7 +86,7 @@ while [[ $# > 0 ]]; do --language) shift; LANGUAGE=$1 ;; - --skip-empty-pages) SKIP_EMPTY_PAGES=1 ;; + --skip-empty-pages) SKIP_EMPTY_PAGES=1; WHITE_THRESHOLD=$1 ;; -o|--output) shift; USEOUTPUT=1; OUTPUT="$1" ;; @@ -146,8 +147,9 @@ if [[ $HELP == 1 ]]; then echo " Run OCR to make the PDF searchable (requires tesseract)" echo " --language " 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 " the threshold to identify an empty page is a percentage value between 0 and 100. The default is 99.8" echo " --brightness" echo " Increase brightness and contrast in post-processing" echo "" @@ -262,6 +264,9 @@ if [[ $SKIP_EMPTY_PAGES == 1 && ! -x "$(command -v bc)" ]]; then echo >&2 'Warning: `--skip-empty-pages` specified, but `bc` not available. Disabling empty page detection.' SKIP_EMPTY_PAGES=0 fi +if [[ $SKIP_EMPTY_PAGES == 1 && $WHITE_THRESHOLD == "" ]]; then + WHITE_THRESHOLD=99.8 +fi export VERBOSE export UNPAPER @@ -272,6 +277,7 @@ export PGWIDTHIN export PGHEIGHTIN export PS2PDF_OPTS export SKIP_EMPTY_PAGES +export WHITE_THRESHOLD export BRIGHTNESS if [[ $VERBOSE == 1 ]]; then diff --git a/scan_perpage b/scan_perpage index fe27733..3eada08 100755 --- a/scan_perpage +++ b/scan_perpage @@ -83,7 +83,7 @@ process_page() { fi 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" else if [[ $UNPAPER == 1 ]]; then From 476e730135cd91b7bd10eac1acd9a122abbbd90d Mon Sep 17 00:00:00 2001 From: Dirk Surmann <4048472+surmann@users.noreply.github.com> Date: Thu, 9 Dec 2021 18:03:06 +0100 Subject: [PATCH 3/4] update white threshold --- scan | 14 +++++++------- scan_perpage | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scan b/scan index cc619b3..6a4e644 100755 --- a/scan +++ b/scan @@ -31,7 +31,7 @@ DESKEW=0 DRIVER_OPTION= VERBOSE=0 SKIP_EMPTY_PAGES=0 -WHITE_THRESHOLD= +WHITE_THRESHOLD=99.8 BRIGHTNESS=0 SOURCE="" @@ -86,7 +86,9 @@ while [[ $# > 0 ]]; do --language) shift; LANGUAGE=$1 ;; - --skip-empty-pages) SKIP_EMPTY_PAGES=1; WHITE_THRESHOLD=$1 ;; + --skip-empty-pages) SKIP_EMPTY_PAGES=1 ;; + + --white-threshold) shift; WHITE_THRESHOLD=$1 ;; -o|--output) shift; USEOUTPUT=1; OUTPUT="$1" ;; @@ -147,9 +149,10 @@ if [[ $HELP == 1 ]]; then echo " Run OCR to make the PDF searchable (requires tesseract)" echo " --language " 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 " the threshold to identify an empty page is a percentage value between 0 and 100. The default is 99.8" + 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" echo " Increase brightness and contrast in post-processing" echo "" @@ -264,9 +267,6 @@ if [[ $SKIP_EMPTY_PAGES == 1 && ! -x "$(command -v bc)" ]]; then echo >&2 'Warning: `--skip-empty-pages` specified, but `bc` not available. Disabling empty page detection.' SKIP_EMPTY_PAGES=0 fi -if [[ $SKIP_EMPTY_PAGES == 1 && $WHITE_THRESHOLD == "" ]]; then - WHITE_THRESHOLD=99.8 -fi export VERBOSE export UNPAPER diff --git a/scan_perpage b/scan_perpage index 3eada08..5fa4a72 100755 --- a/scan_perpage +++ b/scan_perpage @@ -68,7 +68,7 @@ fi process_page() { log "" log "-------------------------------------------------------------------------------" - log "Post-processing scanned page ${IMAGE_PATH}, deskew=$UNPAPER, searchable=$SEARCHABLE, skip-empty-pages=$SKIP_EMPTY_PAGES, brightness=$BRIGHTNESS..." + log "Post-processing scanned page ${IMAGE_PATH}, deskew=$UNPAPER, searchable=$SEARCHABLE, skip-empty-pages=$SKIP_EMPTY_PAGES, white-threshold=$WHITE_THRESHOLD, brightness=$BRIGHTNESS..." log "-------------------------------------------------------------------------------" if [[ $BRIGHTNESS == 1 ]]; then From 13c40dcfce42f71dbfc32c3078af2d24463215f6 Mon Sep 17 00:00:00 2001 From: Dirk Surmann <4048472+surmann@users.noreply.github.com> Date: Sat, 1 Jan 2022 13:23:44 +0100 Subject: [PATCH 4/4] update brightness and contrast control --- scan | 11 ++++++----- scan_perpage | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/scan b/scan index 6a4e644..b539283 100755 --- a/scan +++ b/scan @@ -32,7 +32,7 @@ DRIVER_OPTION= VERBOSE=0 SKIP_EMPTY_PAGES=0 WHITE_THRESHOLD=99.8 -BRIGHTNESS=0 +BRIGHTNESS_CONTRAST= SOURCE="" TMP_DIR=$(mktemp -d -p "" scan.XXXXXXXXXX) @@ -98,7 +98,7 @@ while [[ $# > 0 ]]; do -xo|--driver-options) shift; DRIVER_OPTION=$1;; - --brightness) BRIGHTNESS=1 ;; + --brightness-contrast-sw) shift; BRIGHTNESS_CONTRAST=$1 ;; *) if [[ $USEARRAY == 1 ]]; then OUTPUTARR+=("$1"); else echo >&2 "Unknown argument: $1"; exit 1; fi ;; @@ -153,8 +153,9 @@ if [[ $HELP == 1 ]]; then 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" - echo " Increase brightness and contrast in post-processing" + 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 "OUTPUT" echo " -o, --output " @@ -278,7 +279,7 @@ export PGHEIGHTIN export PS2PDF_OPTS export SKIP_EMPTY_PAGES export WHITE_THRESHOLD -export BRIGHTNESS +export BRIGHTNESS_CONTRAST if [[ $VERBOSE == 1 ]]; then LOCKFILE=$(mktemp) diff --git a/scan_perpage b/scan_perpage index 5fa4a72..d3a2a74 100755 --- a/scan_perpage +++ b/scan_perpage @@ -14,7 +14,7 @@ usage() echo " PGWIDTHIN" echo " PGHEIGHTIN" echo " SKIP_EMPTY_PAGES" - echo " BRIGHTNESS" + echo " BRIGHTNESS_CONTRAST" echo " PS2PDF_OPTS (optional)" echo " VERBOSE (optional)" echo " LOCKFILE (required if VERBOSE=1)" @@ -51,7 +51,7 @@ if [[ $# < 1 ]]; then exit 1 fi -if [[ "$UNPAPER" == "" || "$SEARCHABLE" == "" || "$RESOLUTION" == "" || "$RESOLUTION" == "" || "$SKIP_EMPTY_PAGES" == "" || "$BRIGHTNESS" == "" ]]; then +if [[ "$UNPAPER" == "" || "$SEARCHABLE" == "" || "$RESOLUTION" == "" || "$RESOLUTION" == "" || "$SKIP_EMPTY_PAGES" == "" ]]; then usage exit 1 fi @@ -68,11 +68,12 @@ fi process_page() { log "" log "-------------------------------------------------------------------------------" - log "Post-processing scanned page ${IMAGE_PATH}, deskew=$UNPAPER, searchable=$SEARCHABLE, skip-empty-pages=$SKIP_EMPTY_PAGES, white-threshold=$WHITE_THRESHOLD, brightness=$BRIGHTNESS..." + 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 "-------------------------------------------------------------------------------" - if [[ $BRIGHTNESS == 1 ]]; then - convert "$IMAGE_PATH" -brightness-contrast 20x10 "$IMAGE_PATH" + 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