import pyautogui
import pytesseract
from PIL import Image
import cv2
import re
import keyboard
import time
# Путь к Tesseract OCR
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
# (русский)
tesseract_config = '--psm 6 -l rus'
# Путь для сохранения скриншотов
screenshot_path = "screenshot.png"
# Слова, их сокращения и соответствующие изображения
words_and_images = {
("Салат1", "Салат1"): r"C:\Users\123\PycharmProjects\burger dorabotka\words\salat1.png",
("Салат2", "Салат2"): r"C:\Users\123\PycharmProjects\burger dorabotka\words\salat2.png",
}
def recognize_text(region):
# Захват области экрана и сохранение в изображение
region_image = pyautogui.screenshot(region=region)
region_image.save(screenshot_path)
# Распознавание текста в указанной области
text = pytesseract.image_to_string(region_image, config=tesseract_config)
return text.strip()
def clean_word(match):
cleaned_word_match = re.match(r'\D+', match.group(1))
return cleaned_word_match.group().strip() if cleaned_word_match else ''
def find_and_click_words(words_and_images, initial_search_region, new_search_region):
found_words = []
# Захват изображения и распознавание текста в initial_search_region
screenshot = pyautogui.screenshot(region=initial_search_region)
screenshot.save(screenshot_path)
# Поиск слов и их номеров
matches = re.finditer(r'\d*\.\s*([\w\s]+)', recognize_text(initial_search_region))
for match in matches:
found_words.append({
'Слово': clean_word(match),
})
# Выводим на экран найденные слова на initial_search_region
print(f"\nНайденные слова на initial_search_region: {found_words}")
# Производим поиск и клик в new_search_region
for word in found_words:
# Проверяем, есть ли слово в списке слов и сокращений
for full_word, abbreviation in words_and_images.keys():
if word['Слово'] == full_word or word['Слово'] == abbreviation:
image_path = words_and_images[(full_word, abbreviation)]
while True:
# Поиск изображения в new_search_region
template = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
new_screenshot = pyautogui.screenshot(region=new_search_region)
new_screenshot.save(screenshot_path)
new_image = cv2.imread(screenshot_path, cv2.IMREAD_GRAYSCALE)
result = cv2.matchTemplate(new_image, template, cv2.TM_CCOEFF_NORMED)
_, max_val, _, max_loc = cv2.minMaxLoc(result)
if max_val > 0.9: # Задайте порог по необходимости
# Коррекция координат для клика в new_search_region
click_x = new_search_region[0] + max_loc[0] + template.shape[1] // 2
click_y = new_search_region[1] + max_loc[1] + template.shape[0] // 2
# Добавляем паузу перед кликом в new_search_region
time.sleep(1)
pyautogui.click(click_x, click_y)
print(f"Слово {word['Слово']} найдено и выполнен клик в new_search_region.")
break # Exit the loop once the image is found
else:
print(f"Изображение для слова {word['Слово']} не найдено. Повторный поиск.")
# Начальные координаты для поиска текста (левая верхняя x, левая верхняя y, ширина, высота)
initial_search_region = (1322, 388, 169, 281)
# Новые координаты для поиска текста (левая верхняя x, левая верхняя y, ширина, высота)
new_search_region = (270, 322, 400, 477)
print("Для запуска программы нажмите клавишу F5.")
while True:
# Ожидание клавиши F5 для запуска программы
if keyboard.is_pressed('F5'):
print("Программа запущена. Для завершения нажмите клавишу F4.")
program_running = True
while program_running:
find_and_click_words(words_and_images, initial_search_region, new_search_region)
pyautogui.click(1109, 877) # Выполнение клика по координатам (1109, 877)
# Ожидание клавиши F4 для завершения программы
if keyboard.is_pressed('F4'):
print("Программа завершена.")
program_running = False
time.sleep(2) # Добавлена задержка в 1 секунду перед повтором
Объясню суть программы,для начала она на initial_search_region распознает написанный текст отфильтровывает его по числовому порядку
https://imgur.com/HesygqY т.е Хлеб,Масло,Салат,Салат,Хлеб.Производит поиск картинки исходя из названия: Хлеб-поиск изображения хлеба,Масло- изображения масла и тд.В чем заключается мой вопрос?Как отфильтровать текст в initial_search_region чтобы удалились числа с точкой, т.е 1. 2. 3. но при этом чтобы разновидность Салатов например Салат 1,Cалат 2, оставались нетронуты и являлись целым словом? Получиться должно Хлеб,Масло,Салат 1,Салат 2,Хлеб.