@@ -51,6 +51,9 @@ save_dir="${2:-$XDG_PICTURES_DIR/Screenshots}"
5151save_file=$( date +' %y%m%d_%Hh%Mm%Ss_screenshot.png' )
5252annotation_tool=${SCREENSHOT_ANNOTATION_TOOL}
5353annotation_args=(" -o" " ${save_dir} /${save_file} " " -f" " ${temp_screenshot} " )
54+ tesseract_default_language=(" eng" )
55+ tesseract_languages=(" ${SCREENSHOT_OCR_TESSERACT_LANGUAGES[@]:- ${tesseract_default_language[@]} } " )
56+ tesseract_languages+=(" osd" )
5457
5558if [[ -z " $annotation_tool " ]]; then
5659 pkg_installed " swappy" && annotation_tool=" swappy"
@@ -90,6 +93,54 @@ take_screenshot() {
9093 fi
9194}
9295
96+ ocr_screenshot () {
97+ local mode=$1
98+ shift
99+ local extra_args=(" $@ " )
100+
101+ # execute grimblast with given args
102+ if " $LIB_DIR /hyde/grimblast" " ${extra_args[@]} " copysave " $mode " " $temp_screenshot " ; then
103+ if pkg_installed imagemagick; then
104+ magick " ${temp_screenshot} " \
105+ -colorspace gray \
106+ -contrast-stretch 0 \
107+ -level 15%,85% \
108+ -resize 400% \
109+ -sharpen 0x1 \
110+ -auto-threshold triangle \
111+ -morphology close diamond:1 \
112+ -deskew 40% \
113+ " ${temp_screenshot} "
114+ else
115+ notify-send -a " HyDE Alert" " OCR: imagemagick is not installed, recognition accuracy is reduced" -e -i " dialog-warning"
116+ fi
117+ tesseract_package_prefix=" tesseract-data-"
118+ tesseract_packages=(" ${tesseract_languages[@]/#/ $tesseract_package_prefix } " )
119+ tesseract_packages+=(" tesseract" )
120+ for pkg in " ${tesseract_packages[@]} " ; do
121+ if ! pkg_installed " ${pkg} " ; then
122+ notify-send -a " HyDE Alert" " $( echo -e " OCR: required package is not installed\n ${pkg} " ) " -e -i " dialog-error"
123+ return 1
124+ fi
125+ done
126+ tesseract_languages_prepared=$( IFS=+; echo " ${tesseract_languages[*]} " )
127+ tesseract_output=$( tesseract \
128+ --psm 6 \
129+ --oem 3 \
130+ -l ${tesseract_languages_prepared} \
131+ " ${temp_screenshot} " \
132+ stdout
133+ 2> /dev/null
134+ )
135+ printf " %s" " $tesseract_output " | wl-copy
136+ notify-send -a " HyDE Alert" " $( echo -e " OCR: ${# tesseract_output} symbols recognized\n\nLanguages used ${tesseract_languages[@]/#/ ' \n ' } " ) " -i " ${temp_screenshot} " -e
137+ rm -f " ${temp_screenshot} "
138+ else
139+ notify-send -a " HyDE Alert" " OCR: screenshot error" -e -i " dialog-error"
140+ return 1
141+ fi
142+ }
143+
93144pre_cmd
94145
95146case $1 in
@@ -106,23 +157,14 @@ m) # print focused monitor
106157 take_screenshot " output"
107158 ;;
108159sc) # ? Use 'tesseract' to scan image then add to clipboard
109- check_package tesseract-data-eng tesseract
110- if ! GEOM=$( slurp) ; then
111- notify-send -a " HyDE Alert" " OCR preview: Invalid geometry" -e -i " dialog-error"
112- exit 1
113- fi
114- grim -g " ${GEOM} " " ${temp_screenshot} "
115- pkg_installed imagemagick && magick " ${temp_screenshot} " -sigmoidal-contrast 10,50% " ${temp_screenshot} "
116- tesseract " ${temp_screenshot} " - | wl-copy
117- notify-send -a " HyDE Alert" " OCR preview" -i " ${temp_screenshot} " -e
118- rm -f " ${temp_screenshot} "
160+ ocr_screenshot " area" " --freeze"
119161 ;;
120162* ) # invalid option
121163 USAGE
122164 ;;
123165esac
124166
125- [ -f " $temp_screenshot " ] && rm " $temp_screenshot "
167+ [ -f " ${ temp_screenshot} " ] && rm " ${ temp_screenshot} "
126168
127169if [ -f " ${save_dir} /${save_file} " ]; then
128170 notify-send -a " HyDE Alert" -i " ${save_dir} /${save_file} " " saved in ${save_dir} "
0 commit comments