Allow OCRing the same image if we are sure it has been pasted multiple times
This commit is contained in:
33
owocr/run.py
33
owocr/run.py
@@ -332,6 +332,7 @@ def run(read_from='clipboard',
|
|||||||
from PIL import ImageGrab
|
from PIL import ImageGrab
|
||||||
mac_clipboard_polling = False
|
mac_clipboard_polling = False
|
||||||
windows_clipboard_polling = False
|
windows_clipboard_polling = False
|
||||||
|
generic_clipboard_polling = False
|
||||||
img = None
|
img = None
|
||||||
|
|
||||||
logger.opt(ansi=True).info(f"Reading from clipboard using <{engine_color}>{engine_instances[engine_index].readable_name}</{engine_color}>{' (paused)' if paused else ''}")
|
logger.opt(ansi=True).info(f"Reading from clipboard using <{engine_color}>{engine_instances[engine_index].readable_name}</{engine_color}>{' (paused)' if paused else ''}")
|
||||||
@@ -347,6 +348,8 @@ def run(read_from='clipboard',
|
|||||||
windows_clipboard_thread = WindowsClipboardThread()
|
windows_clipboard_thread = WindowsClipboardThread()
|
||||||
windows_clipboard_thread.start()
|
windows_clipboard_thread.start()
|
||||||
windows_clipboard_polling = True
|
windows_clipboard_polling = True
|
||||||
|
else:
|
||||||
|
generic_clipboard_polling = True
|
||||||
else:
|
else:
|
||||||
allowed_extensions = ('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.webp')
|
allowed_extensions = ('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.webp')
|
||||||
read_from = Path(read_from)
|
read_from = Path(read_from)
|
||||||
@@ -374,7 +377,7 @@ def run(read_from='clipboard',
|
|||||||
logger.info('Terminated!')
|
logger.info('Terminated!')
|
||||||
break
|
break
|
||||||
|
|
||||||
new_engine_index = engine_index
|
old_engine_index = engine_index
|
||||||
|
|
||||||
if user_input.lower() == 'p':
|
if user_input.lower() == 'p':
|
||||||
if paused:
|
if paused:
|
||||||
@@ -385,14 +388,13 @@ def run(read_from='clipboard',
|
|||||||
paused = not paused
|
paused = not paused
|
||||||
elif user_input.lower() == 's':
|
elif user_input.lower() == 's':
|
||||||
if engine_index == len(engine_keys) - 1:
|
if engine_index == len(engine_keys) - 1:
|
||||||
new_engine_index = 0
|
engine_index = 0
|
||||||
else:
|
else:
|
||||||
new_engine_index = engine_index + 1
|
engine_index += 1
|
||||||
elif user_input.lower() in engine_keys:
|
elif user_input.lower() in engine_keys:
|
||||||
new_engine_index = engine_keys.index(user_input.lower())
|
engine_index = engine_keys.index(user_input.lower())
|
||||||
|
|
||||||
if engine_index != new_engine_index:
|
if engine_index != old_engine_index:
|
||||||
engine_index = new_engine_index
|
|
||||||
logger.opt(ansi=True).info(f'Switched to <{engine_color}>{engine_instances[engine_index].readable_name}</{engine_color}>!')
|
logger.opt(ansi=True).info(f'Switched to <{engine_color}>{engine_instances[engine_index].readable_name}</{engine_color}>!')
|
||||||
|
|
||||||
user_input = ''
|
user_input = ''
|
||||||
@@ -408,20 +410,20 @@ def run(read_from='clipboard',
|
|||||||
img = Image.open(io.BytesIO(item))
|
img = Image.open(io.BytesIO(item))
|
||||||
process_and_write_results(engine_instances[engine_index], engine_color, img, write_to, notifications)
|
process_and_write_results(engine_instances[engine_index], engine_color, img, write_to, notifications)
|
||||||
elif read_from == 'clipboard':
|
elif read_from == 'clipboard':
|
||||||
changed = False
|
|
||||||
if windows_clipboard_polling:
|
if windows_clipboard_polling:
|
||||||
changed = clipboard_event.wait(delay_secs)
|
clipboard_changed = clipboard_event.wait(delay_secs)
|
||||||
if changed:
|
if clipboard_changed:
|
||||||
clipboard_event.clear()
|
clipboard_event.clear()
|
||||||
elif mac_clipboard_polling:
|
elif mac_clipboard_polling:
|
||||||
if not (paused or tmp_paused):
|
if not (paused or tmp_paused):
|
||||||
old_count = count
|
old_count = count
|
||||||
count = pasteboard.changeCount()
|
count = pasteboard.changeCount()
|
||||||
changed = not just_unpaused and count != old_count and any(x in pasteboard.types() for x in [NSPasteboardTypePNG, NSPasteboardTypeTIFF])
|
clipboard_changed = not just_unpaused and count != old_count and any(x in pasteboard.types() for x in [NSPasteboardTypePNG, NSPasteboardTypeTIFF])
|
||||||
else:
|
else:
|
||||||
changed = not (paused or tmp_paused)
|
clipboard_changed = not (paused or tmp_paused)
|
||||||
|
|
||||||
if changed:
|
|
||||||
|
if clipboard_changed:
|
||||||
old_img = img
|
old_img = img
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -436,14 +438,13 @@ def run(read_from='clipboard',
|
|||||||
else:
|
else:
|
||||||
logger.warning('Error while reading from clipboard ({})'.format(error))
|
logger.warning('Error while reading from clipboard ({})'.format(error))
|
||||||
else:
|
else:
|
||||||
if not just_unpaused and (ignore_flag or pyperclip.paste() != '*ocr_ignore*') and isinstance(img, Image.Image) and not are_images_identical(img, old_img):
|
if not just_unpaused and (ignore_flag or pyperclip.paste() != '*ocr_ignore*') and isinstance(img, Image.Image) and ((not generic_clipboard_polling) or (not are_images_identical(img, old_img))):
|
||||||
process_and_write_results(engine_instances[engine_index], engine_color, img, write_to, notifications)
|
process_and_write_results(engine_instances[engine_index], engine_color, img, write_to, notifications)
|
||||||
|
|
||||||
|
just_unpaused = False
|
||||||
|
|
||||||
if not windows_clipboard_polling:
|
if not windows_clipboard_polling:
|
||||||
time.sleep(delay_secs)
|
time.sleep(delay_secs)
|
||||||
|
|
||||||
if just_unpaused:
|
|
||||||
just_unpaused = False
|
|
||||||
else:
|
else:
|
||||||
for path in read_from.iterdir():
|
for path in read_from.iterdir():
|
||||||
if str(path).lower().endswith(allowed_extensions):
|
if str(path).lower().endswith(allowed_extensions):
|
||||||
|
|||||||
Reference in New Issue
Block a user