tesseract ocr
This commit is contained in:
+63
-21
@@ -2,15 +2,16 @@
|
|||||||
# Push-button installer of macOS on VirtualBox
|
# Push-button installer of macOS on VirtualBox
|
||||||
# (c) myspaghetti, licensed under GPL2.0 or higher
|
# (c) myspaghetti, licensed under GPL2.0 or higher
|
||||||
# url: https://github.com/myspaghetti/macos-virtualbox
|
# url: https://github.com/myspaghetti/macos-virtualbox
|
||||||
# version 0.96.7
|
# version 0.97.0
|
||||||
|
|
||||||
# Dependencies: bash coreutils gzip unzip wget xxd dmg2img
|
# Dependencies: bash coreutils gzip unzip wget xxd dmg2img
|
||||||
|
# Optional features: tesseract-ocr tesseract-ocr-eng
|
||||||
# Supported versions:
|
# Supported versions:
|
||||||
# VirtualBox >= 6.1.6
|
# VirtualBox >= 6.1.6 dmg2img >= 1.6.5
|
||||||
# GNU bash >= 4.3, GNU coreutils >= 8.22,
|
# GNU bash >= 4.3 GNU coreutils >= 8.22
|
||||||
# GNU gzip >= 1.5, GNU wget >= 1.14,
|
# GNU gzip >= 1.5 GNU wget >= 1.14
|
||||||
# Info-ZIP unzip >= 6.0, xxd >= 1.11,
|
# Info-ZIP unzip >= 6.0 xxd >= 1.11,
|
||||||
# dmg2img >= 1.6.5
|
# tesseract-ocr >= 4
|
||||||
|
|
||||||
function set_variables() {
|
function set_variables() {
|
||||||
# Customize the installation by setting these variables:
|
# Customize the installation by setting these variables:
|
||||||
@@ -153,6 +154,9 @@ if [[ -n "$(gcsplit --help 2>/dev/null)" ]]; then
|
|||||||
function tac() {
|
function tac() {
|
||||||
gtac "$@"
|
gtac "$@"
|
||||||
}
|
}
|
||||||
|
function seq() {
|
||||||
|
gseq "$@"
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,7 +198,7 @@ if [[ -z "$(echo -n "xxd" | xxd -e -p 2>/dev/null)" ||
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# wget supports --show-progress from version 1.16
|
# wget supports --show-progress from version 1.16
|
||||||
regex='1\.1[6-9]|1\.[2-9][0-9]' # for zsh compatibility
|
regex='1\.1[6-9]|1\.[2-9][0-9]' # for zsh regex compatibility
|
||||||
if [[ "$(wget --version 2>/dev/null | head -n 1)" =~ ${regex} ]]; then
|
if [[ "$(wget --version 2>/dev/null | head -n 1)" =~ ${regex} ]]; then
|
||||||
wgetargs="--quiet --continue --show-progress --timeout=60" # pretty
|
wgetargs="--quiet --continue --show-progress --timeout=60" # pretty
|
||||||
else
|
else
|
||||||
@@ -386,7 +390,7 @@ fi
|
|||||||
VBoxManage controlvm "${vm_name}" poweroff 2>/dev/null
|
VBoxManage controlvm "${vm_name}" poweroff 2>/dev/null
|
||||||
echo -e "\nChecking that VirtualBox uses hardware-supported virtualization."
|
echo -e "\nChecking that VirtualBox uses hardware-supported virtualization."
|
||||||
vbox_log="$(VBoxManage showvminfo "${vm_name}" --log 0)"
|
vbox_log="$(VBoxManage showvminfo "${vm_name}" --log 0)"
|
||||||
regex='.*Attempting fall back to NEM.*' # for zsh compatibility
|
regex='.*Attempting fall back to NEM.*' # for zsh regex compatibility
|
||||||
if [[ "${vbox_log}" =~ ${regex} ]]; then
|
if [[ "${vbox_log}" =~ ${regex} ]]; then
|
||||||
echo -e "\nVirtualbox is not using hardware-supported virtualization features."
|
echo -e "\nVirtualbox is not using hardware-supported virtualization features."
|
||||||
if [[ -n "$(cygcheck -V 2>/dev/null)" ||
|
if [[ -n "$(cygcheck -V 2>/dev/null)" ||
|
||||||
@@ -789,9 +793,7 @@ different CPU profiles in the section ${highlight_color}CPU profiles and CPUID s
|
|||||||
( VBoxManage startvm "${vm_name}" >/dev/null 2>&1 )
|
( VBoxManage startvm "${vm_name}" >/dev/null 2>&1 )
|
||||||
echo -e "\nUntil the script completes, please do not manually interact with\nthe virtual machine."
|
echo -e "\nUntil the script completes, please do not manually interact with\nthe virtual machine."
|
||||||
[[ -z "${kscd}" ]] && declare_scancode_dict
|
[[ -z "${kscd}" ]] && declare_scancode_dict
|
||||||
prompt_lang_utils
|
prompt_lang_utils_terminal
|
||||||
prompt_terminal_ready
|
|
||||||
print_dimly "Please wait"
|
|
||||||
kbstring='/Volumes/bootinst-sh/bootinst.sh'
|
kbstring='/Volumes/bootinst-sh/bootinst.sh'
|
||||||
send_keys
|
send_keys
|
||||||
send_enter
|
send_enter
|
||||||
@@ -927,8 +929,7 @@ if [[ -n $(
|
|||||||
echo "The VM will boot from the populated installer base system virtual disk."
|
echo "The VM will boot from the populated installer base system virtual disk."
|
||||||
( VBoxManage startvm "${vm_name}" >/dev/null 2>&1 )
|
( VBoxManage startvm "${vm_name}" >/dev/null 2>&1 )
|
||||||
[[ -z "${kscd}" ]] && declare_scancode_dict
|
[[ -z "${kscd}" ]] && declare_scancode_dict
|
||||||
prompt_lang_utils
|
prompt_lang_utils_terminal
|
||||||
prompt_terminal_ready
|
|
||||||
add_another_terminal
|
add_another_terminal
|
||||||
echo -e "\nThe second open Terminal in the virtual machine copies EFI and NVRAM files"
|
echo -e "\nThe second open Terminal in the virtual machine copies EFI and NVRAM files"
|
||||||
echo -e "to the target EFI system partition when the installer finishes preparing."
|
echo -e "to the target EFI system partition when the installer finishes preparing."
|
||||||
@@ -1015,6 +1016,7 @@ The script downloads macOS High Sierra, Mojave, and Catalina from Apple servers
|
|||||||
and installs them on VirtualBox 5.2, 6.0, and 6.1. The script doesn't install
|
and installs them on VirtualBox 5.2, 6.0, and 6.1. The script doesn't install
|
||||||
any closed-source additions or bootloaders. A default install requires the user
|
any closed-source additions or bootloaders. A default install requires the user
|
||||||
press enter when prompted, less than ten times, to complete the installation.
|
press enter when prompted, less than ten times, to complete the installation.
|
||||||
|
Systems with the package ${low_contrast_color}tesseract-ocr${low_contrast_color} may automate the installation completely.
|
||||||
|
|
||||||
${highlight_color}USAGE${default_color}
|
${highlight_color}USAGE${default_color}
|
||||||
${low_contrast_color}${0} [STAGE]... ${default_color}
|
${low_contrast_color}${0} [STAGE]... ${default_color}
|
||||||
@@ -1481,23 +1483,63 @@ function send_enter() {
|
|||||||
send_special
|
send_special
|
||||||
}
|
}
|
||||||
|
|
||||||
function prompt_lang_utils() {
|
function prompt_lang_utils_terminal() {
|
||||||
# called after the virtual machine boots up
|
tesseract_ocr="$(tesseract --version 2>/dev/null)"
|
||||||
|
tesseract_lang="$(tesseract.exe --list-langs 2>/dev/null)"
|
||||||
|
regex_ver='[Tt]esseract 4' # for zsh regex compatibility
|
||||||
|
if [[ "${tesseract_ocr}" =~ ${regex_ver} && "${tesseract_lang}" =~ eng ]]; then
|
||||||
|
echo -e "\n${low_contrast_color}Attempting automated recognition of virtual machine graphical user interface.${default_color}"
|
||||||
|
animated_please_wait 30
|
||||||
|
for i in $(seq 1 60); do # try automatic ocr for about 5 minutes
|
||||||
|
VBoxManage controlvm "${vm_name}" screenshotpng "${vm_name}_screenshot.png" 2>&1 1>/dev/null
|
||||||
|
ocr="$(tesseract "${vm_name}_screenshot.png" - -l eng 2>/dev/null)"
|
||||||
|
if [[ "${ocr}" =~ English ]]; then
|
||||||
|
sleep 10
|
||||||
|
send_enter
|
||||||
|
fi
|
||||||
|
if [[ "${ocr}" =~ Utilities ]]; then
|
||||||
|
sleep 10
|
||||||
|
kbspecial='CTRLprs F2 CTRLrls u ENTER t ENTER' # start Terminal
|
||||||
|
send_special
|
||||||
|
fi
|
||||||
|
if [[ "${ocr}" =~ Terminal\ Shell ]]; then
|
||||||
|
sleep 2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
echo -ne '\r \r'
|
||||||
|
animated_please_wait 10
|
||||||
|
done
|
||||||
|
echo -e "\nFailed automated recognition of virtual machine graphical user interface.\nPlease press enter as directed."
|
||||||
|
fi
|
||||||
echo -ne "\n${highlight_color}Press enter when the Language window is ready.${default_color}"
|
echo -ne "\n${highlight_color}Press enter when the Language window is ready.${default_color}"
|
||||||
clear_input_buffer_then_read
|
clear_input_buffer_then_read
|
||||||
send_enter
|
send_enter
|
||||||
echo -ne "\n${highlight_color}Press enter when the macOS Utilities window is ready.${default_color}"
|
echo -ne "\n${highlight_color}Press enter when the macOS Utilities window is ready.${default_color}"
|
||||||
clear_input_buffer_then_read
|
clear_input_buffer_then_read
|
||||||
kbspecial='CTRLprs F2 CTRLrls u ENTER t ENTER'
|
kbspecial='CTRLprs F2 CTRLrls u ENTER t ENTER' # start Terminal
|
||||||
send_special
|
send_special
|
||||||
}
|
|
||||||
|
|
||||||
function prompt_terminal_ready() {
|
|
||||||
# called after the Utilities window is ready
|
|
||||||
echo -ne "\n${highlight_color}Press enter when the Terminal command prompt is ready.${default_color}"
|
echo -ne "\n${highlight_color}Press enter when the Terminal command prompt is ready.${default_color}"
|
||||||
clear_input_buffer_then_read
|
clear_input_buffer_then_read
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function animated_please_wait() {
|
||||||
|
# "Please wait" prompt with animated dots.
|
||||||
|
# Requires one positional parameter, an integer
|
||||||
|
# The parameter specifies how many half-seconds to wait
|
||||||
|
echo -ne "${low_contrast_color}Please wait${default_color}"
|
||||||
|
specified_halfseconds="${1}"
|
||||||
|
[[ "${specified_halfseconds}" =~ [^0-9]
|
||||||
|
|| -z "${specified_halfseconds}" ]] && specified_halfseconds=2
|
||||||
|
for halfsecond in $(seq 1 ${specified_halfseconds}); do
|
||||||
|
echo -ne "${low_contrast_color}.${default_color}"
|
||||||
|
sleep 0.5
|
||||||
|
if [[ $(( halfsecond % 5 )) -eq 0 ]]; then
|
||||||
|
echo -ne "\r \r${low_contrast_color}Please wait${default_color}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function add_another_terminal() {
|
function add_another_terminal() {
|
||||||
# at least one terminal has to be open before calling this function
|
# at least one terminal has to be open before calling this function
|
||||||
kbspecial='CMDprs n CMDrls'
|
kbspecial='CMDprs n CMDrls'
|
||||||
|
|||||||
Reference in New Issue
Block a user