Comments 8
Спасибо, за статью, думаю вам будет интересно ещё поработать с Game State Server, у меня тоже есть идея распознавать сообщение о смерти Рошана и интегрировать с overlay, можем попробовать вместе - почитайте мою статью
Да, мне доводилось работать с GSI — хорошая штука. Кстати, для Overlay можно использовать Overwolf, там из коробки поддерживается эта фича
попробуйте сначала сделать upscale с помощью waifu2x ( waifu2x-ncnn-vulkan.exe -n 0 -s 2 -x -i input.png -o output.png) , обрезать и уже потом EasyOCR... можно попробовать отфильтровать по HSL перед OCR... Ещё можно подсчитать количество "белых" пикселей в столбцах обрезанного изображения и отфильтровать всё что меньше threshold'а...
З.Ы. Я так EVE автоматизировал.
З.Ы.Ы. Перед отправкой в OCR, поиграйтесь с последовательностью "предобработки" изображения.. я использую Aforge.net IPLab
Для тессеракта лучше инвертировать картинку, так как черный текст он лучше распознает. Плюс добавить паддинги. Результат должен улучшиться. Хотя такие размытые картинки не приходилось распознавать ?
Я пробовал решить похожую задачу, перебирал доступные инструменты вроде Tesseract и не нашёл ничего точнее и удобнее для себя, как поиск максимумов свёртки изображения с шаблонами цифр и чисел (довольно старый приём). Конечно, для этого понадобилось собрать библиотеку шаблонов.
Из минусов: решение чувствительно к разрешению скриншота, неустойчиво к повороту, для каждого шрифта понадобится новая коллекция шаблонов и так далее, и тому подобное.
Шаг 1. Вырезаем боксы с помощью Craft_text_detector:
часы в частности:
скармливаем tesseract:
import cv2
import pytesseract
import numpy as np
from PIL import ImageGrab
import time
from pytesseract import Output
from time import sleepconfig = r'--oem 3 --psm 6'
#pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files\Tesseract-OCR\tesseract.exe'
img = cv2.imread('crop_2.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)hImg, wImg,_ = img.shape
conf = r'--oem 3 --psm 6 outputbase digits'
boxes = pytesseract.image_to_boxes(img,config=conf)
for b in boxes.splitlines():
#print(b)
b = b.split(' ')
print(b[0])
x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])
cv2.rectangle(img, (x,hImg- y), (w,hImg- h), (50, 50, 255), 2)
cv2.putText(img,b[0],(x,hImg- y+25),cv2.FONT_HERSHEY_SIMPLEX,1,(50,50,255),2)
cv2.imshow("Result",img)
cv2.waitKey(1)*извиняюсь за отступы.
Итоги:
Ваш ход - попробуйте номер от автобуса с бегущей строкой распознать:
Часть 3. Распознаем время на видеозаписях матчей Dota 2 с помощью трансформеров