Skip to content

Commit 6d86c6c

Browse files
authored
Merge pull request #57 from gurgalex/ocr_lang_check
Speak if english lang pack not installed
2 parents 4e59ca8 + a5bcebd commit 6d86c6c

File tree

4 files changed

+43
-10
lines changed

4 files changed

+43
-10
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# v0.9.28
2+
## feat
3+
- Speak if the required English language pack is not installed on the system
14
# v0.9.27
25
# fix
36
- Attempt yet another fix for sporadic startup crashes

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.9.27
1+
0.9.28

subot/main.py

+11-6
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,18 @@ def set_dpi_aware():
2424
import queue
2525
from logging.handlers import QueueHandler, QueueListener
2626
from multiprocessing import Queue
27-
from pathlib import Path
2827
from threading import Thread
2928
from typing import Optional, Union
3029

31-
from subot import models
30+
from subot import models, ocr
3231
from subot.hang_monitor import HangMonitorWorker, HangMonitorChan, HangAnnotation, HangMonitorAlert, Shutdown
3332

3433
import cv2
3534
import numpy as np
3635
import mss
3736
from subot.settings import Session, GameControl
3837
import subot.settings as settings
39-
from subot.ocr import recognize_cv2_image, detect_green_text, detect_dialog_text
38+
from subot.ocr import detect_green_text, detect_dialog_text, recognize_cv2_image, english_installed
4039
import win32gui
4140
import pygame
4241
import pygame.freetype
@@ -51,7 +50,7 @@ def set_dpi_aware():
5150
from subot.audio import AudioSystem, AudioLocation, SoundType
5251
from subot.datatypes import Rect
5352
from subot.menu import MenuItem, Menu
54-
from subot.messageTypes import NewFrame, MessageImpl, MessageType, CheckWhatRealmIn, WindowDim, ConfigMsg, ScanForItems, \
53+
from subot.messageTypes import NewFrame, MessageImpl, MessageType, WindowDim, ScanForItems, \
5554
Resume, Pause
5655
from subot.pathfinder.map import TileType, Map, Color, Movement
5756

@@ -61,12 +60,12 @@ def set_dpi_aware():
6160

6261
from dataclasses import dataclass
6362

64-
from subot.models import Sprite, SpriteFrame, Quest, FloorSprite, Realm, RealmLookup, NPCSprite, OverlaySprite, HashFrameWithFloor, \
63+
from subot.models import Sprite, SpriteFrame, Quest, FloorSprite, Realm, RealmLookup, NPCSprite, HashFrameWithFloor, \
6564
QuestType, ResourceNodeSprite, \
6665
SpriteTypeLookup, SpriteType, ChestSprite
6766

6867

69-
from subot.utils import Point, read_version, PlayerDirection
68+
from subot.utils import Point, read_version
7069
import traceback
7170

7271
# sentry annotation for pyinstaller
@@ -1048,6 +1047,7 @@ def run(self):
10481047
self.activity_notify = self.hang_monitor.register_component(threading.current_thread(), 3.0)
10491048

10501049
TARGET_MS = 1 / settings.FPS
1050+
10511051
try:
10521052
should_stop = False
10531053
with mss.mss() as sct:
@@ -1434,6 +1434,11 @@ def run(self):
14341434
def init_bot() -> Bot:
14351435
config = settings.load_config()
14361436
audio_system = AudioSystem(config)
1437+
if not english_installed():
1438+
audio_system.speak_blocking(ocr.ENGLISH_NOT_INSTALLED_EXCEPTION.args[0])
1439+
root.error(ocr.ENGLISH_NOT_INSTALLED_EXCEPTION.args[0])
1440+
audio_system.speak_blocking("Shutting down")
1441+
sys.exit(1)
14371442

14381443
is_minimized = True
14391444
while is_minimized:

subot/ocr.py

+28-3
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,35 @@ def blocking_wait(awaitable):
107107
return asyncio.run(ensure_coroutine(awaitable))
108108

109109

110-
def recognize_cv2_image(img, lang="en-US"):
110+
class LanguageNotInstalledException(Exception):
111+
pass
112+
113+
114+
class OCR:
115+
def __init__(self):
116+
lang = Language("en-US")
117+
if not OcrEngine.is_language_supported(lang):
118+
raise LanguageNotInstalledException("English United States language pack not installed")
119+
self.ocr_engine = OcrEngine.try_create_from_language(lang)
120+
121+
122+
ENGLISH_NOT_INSTALLED_EXCEPTION = LanguageNotInstalledException("English United States language pack not installed")
123+
124+
125+
def language_is_installed(lang: str) -> bool:
111126
lang = Language(lang)
112-
assert (OcrEngine.is_language_supported(lang))
113-
eng = OcrEngine.try_create_from_language(lang)
127+
return OcrEngine.is_language_supported(lang)
128+
129+
130+
def english_installed() -> bool:
131+
return language_is_installed("en-US")
132+
133+
134+
def recognize_cv2_image(img):
135+
language = Language("en-US")
136+
if not english_installed:
137+
raise ENGLISH_NOT_INSTALLED_EXCEPTION
138+
eng = OcrEngine.try_create_from_language(language)
114139
swbmp = swbmp_from_cv2_image(img)
115140
return dump_ocrresult(blocking_wait(eng.recognize_async(swbmp)))
116141

0 commit comments

Comments
 (0)