GameSentenceMiner 2.17.2__tar.gz → 2.17.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/ocr/owocr_helper.py +30 -24
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/owocr/owocr/ocr.py +1 -1
- gamesentenceminer-2.17.4/GameSentenceMiner/web/templates/index.html +49 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner.egg-info/PKG-INFO +2 -2
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner.egg-info/requires.txt +1 -1
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/PKG-INFO +2 -2
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/pyproject.toml +2 -2
- gamesentenceminer-2.17.2/GameSentenceMiner/web/templates/index.html +0 -50
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/ai/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/ai/ai_prompting.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/anki.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/assets/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/assets/icon.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/assets/icon128.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/assets/icon256.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/assets/icon32.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/assets/icon512.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/assets/icon64.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/assets/pickaxe.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/config_gui.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/gametext.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/gsm.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/locales/en_us.json +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/locales/ja_jp.json +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/locales/zh_cn.json +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/obs.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/ocr/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/ocr/gsm_ocr_config.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/ocr/ocrconfig.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/ocr/owocr_area_selector.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/ocr/ss_picker.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/owocr/owocr/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/owocr/owocr/__main__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/owocr/owocr/config.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/owocr/owocr/lens_betterproto.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/owocr/owocr/run.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/tools/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/tools/audio_offset_selector.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/tools/furigana_filter_preview.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/tools/ss_selector.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/tools/window_transparency.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/communication/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/communication/send.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/communication/websocket.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/configuration.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/db.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/downloader/Untitled_json.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/downloader/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/downloader/download_tools.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/downloader/oneocr_dl.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/electron_config.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/ffmpeg.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/get_overlay_coords.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/gsm_utils.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/model.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/notification.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/text_log.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/win10toast/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/util/win10toast/__main__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/vad.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/database_api.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/events.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/gsm_websocket.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/service.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/__init__.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/apple-touch-icon.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/css/kanji-grid.css +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/css/search.css +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/css/shared.css +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/css/stats.css +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/favicon-96x96.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/favicon.ico +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/favicon.svg +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/js/anki_stats.js +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/js/database.js +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/js/kanji-grid.js +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/js/search.js +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/js/shared.js +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/js/stats.js +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/site.webmanifest +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/style.css +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/web-app-manifest-192x192.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/static/web-app-manifest-512x512.png +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/stats.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/templates/anki_stats.html +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/templates/components/navigation.html +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/templates/components/theme-styles.html +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/templates/database.html +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/templates/search.html +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/templates/stats.html +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/templates/utility.html +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/web/texthooking_page.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner/wip/__init___.py +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner.egg-info/SOURCES.txt +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner.egg-info/dependency_links.txt +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner.egg-info/entry_points.txt +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/GameSentenceMiner.egg-info/top_level.txt +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/LICENSE +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/README.md +0 -0
- {gamesentenceminer-2.17.2 → gamesentenceminer-2.17.4}/setup.cfg +0 -0
|
@@ -199,25 +199,30 @@ rectangles = None
|
|
|
199
199
|
last_ocr2_result = []
|
|
200
200
|
last_sent_result = ""
|
|
201
201
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
202
|
+
class OCRProcessor():
|
|
203
|
+
def __init__(self):
|
|
204
|
+
self.filtering = TextFiltering(lang=get_ocr_language())
|
|
205
|
+
pass
|
|
206
|
+
|
|
207
|
+
def do_second_ocr(self, ocr1_text, time, img, filtering, pre_crop_image=None, ignore_furigana_filter=False, ignore_previous_result=False):
|
|
208
|
+
global twopassocr, ocr2, last_ocr2_result, last_sent_result
|
|
209
|
+
try:
|
|
210
|
+
orig_text, text = run.process_and_write_results(img, None, last_ocr2_result if not ignore_previous_result else None, self.filtering, None,
|
|
211
|
+
engine=get_ocr_ocr2(), furigana_filter_sensitivity=furigana_filter_sensitivity if not ignore_furigana_filter else 0)
|
|
212
|
+
|
|
213
|
+
if compare_ocr_results(last_sent_result, text, threshold=80):
|
|
214
|
+
if text:
|
|
215
|
+
logger.info("Seems like Text we already sent, not doing anything.")
|
|
216
|
+
return
|
|
217
|
+
save_result_image(img, pre_crop_image=pre_crop_image)
|
|
218
|
+
last_ocr2_result = orig_text
|
|
219
|
+
last_sent_result = text
|
|
220
|
+
asyncio.run(send_result(text, time))
|
|
221
|
+
except json.JSONDecodeError:
|
|
222
|
+
print("Invalid JSON received.")
|
|
223
|
+
except Exception as e:
|
|
224
|
+
logger.exception(e)
|
|
225
|
+
print(f"Error processing message: {e}")
|
|
221
226
|
|
|
222
227
|
|
|
223
228
|
def save_result_image(img, pre_crop_image=None):
|
|
@@ -249,6 +254,7 @@ previous_img = None
|
|
|
249
254
|
previous_orig_text = "" # Store original text result
|
|
250
255
|
TEXT_APPEARENCE_DELAY = get_ocr_scan_rate() * 1000 + 500 # Adjust as needed
|
|
251
256
|
force_stable = False
|
|
257
|
+
second_ocr_processor = OCRProcessor()
|
|
252
258
|
|
|
253
259
|
class ConfigChangeCheckThread(threading.Thread):
|
|
254
260
|
def __init__(self):
|
|
@@ -461,7 +467,7 @@ def get_ocr2_image(crop_coords, og_image: Image.Image, ocr2_engine=None):
|
|
|
461
467
|
|
|
462
468
|
# If no crop or optimization, just apply config and return
|
|
463
469
|
if not crop_coords or not get_ocr_optimize_second_scan():
|
|
464
|
-
img = run.apply_ocr_config_to_image(img, ocr_config_local, is_secondary=
|
|
470
|
+
img = run.apply_ocr_config_to_image(img, ocr_config_local, is_secondary=False)
|
|
465
471
|
return img
|
|
466
472
|
|
|
467
473
|
# Calculate scaling ratios
|
|
@@ -495,7 +501,7 @@ def process_task_queue():
|
|
|
495
501
|
if task is None: # Exit signal
|
|
496
502
|
break
|
|
497
503
|
ocr1_text, stable_time, previous_img_local, filtering, pre_crop_image = task
|
|
498
|
-
do_second_ocr(ocr1_text, stable_time, previous_img_local, filtering, pre_crop_image)
|
|
504
|
+
second_ocr_processor.do_second_ocr(ocr1_text, stable_time, previous_img_local, filtering, pre_crop_image)
|
|
499
505
|
except Exception as e:
|
|
500
506
|
logger.exception(f"Error processing task: {e}")
|
|
501
507
|
finally:
|
|
@@ -550,21 +556,21 @@ def add_ss_hotkey(ss_hotkey="ctrl+shift+g"):
|
|
|
550
556
|
ocr_config.scale_to_custom_size(img.width, img.height)
|
|
551
557
|
for rectangle in [rectangle for rectangle in ocr_config.rectangles if rectangle.is_secondary]:
|
|
552
558
|
new_img = run.apply_ocr_config_to_image(img, ocr_config, is_secondary=True, rectangles=[rectangle])
|
|
553
|
-
do_second_ocr("", datetime.now(), new_img, TextFiltering(lang=get_ocr_language()), ignore_furigana_filter=True, ignore_previous_result=True)
|
|
559
|
+
second_ocr_processor.do_second_ocr("", datetime.now(), new_img, TextFiltering(lang=get_ocr_language()), ignore_furigana_filter=True, ignore_previous_result=True)
|
|
554
560
|
|
|
555
561
|
filtering = TextFiltering(lang=get_ocr_language())
|
|
556
562
|
cropper = ScreenCropper()
|
|
557
563
|
def capture():
|
|
558
564
|
print("Taking screenshot...")
|
|
559
565
|
img = cropper.run()
|
|
560
|
-
do_second_ocr("", datetime.now(), img, filtering, ignore_furigana_filter=True, ignore_previous_result=True)
|
|
566
|
+
second_ocr_processor.do_second_ocr("", datetime.now(), img, filtering, ignore_furigana_filter=True, ignore_previous_result=True)
|
|
561
567
|
def capture_main_monitor():
|
|
562
568
|
print("Taking screenshot of main monitor...")
|
|
563
569
|
with mss.mss() as sct:
|
|
564
570
|
main_monitor = sct.monitors[1] if len(sct.monitors) > 1 else sct.monitors[0]
|
|
565
571
|
img = sct.grab(main_monitor)
|
|
566
572
|
img_bytes = mss.tools.to_png(img.rgb, img.size)
|
|
567
|
-
do_second_ocr("", datetime.now(), img_bytes, filtering, ignore_furigana_filter=True, ignore_previous_result=True)
|
|
573
|
+
second_ocr_processor.do_second_ocr("", datetime.now(), img_bytes, filtering, ignore_furigana_filter=True, ignore_previous_result=True)
|
|
568
574
|
hotkey_reg = None
|
|
569
575
|
secondary_hotkey_reg = None
|
|
570
576
|
try:
|
|
@@ -375,7 +375,7 @@ class GoogleLens:
|
|
|
375
375
|
# logger.info(f"Vertical space: {vertical_space}, Average height: {avg_height}")
|
|
376
376
|
# logger.info(avg_height * 2)
|
|
377
377
|
if vertical_space > avg_height * 2:
|
|
378
|
-
res += 'BLANK_LINE'
|
|
378
|
+
res += 'BLANK_LINE\n'
|
|
379
379
|
for line in paragraph['lines']:
|
|
380
380
|
if furigana_filter_sensitivity:
|
|
381
381
|
line_width = line['geometry']['bounding_box']['width'] * img.width
|