Nano Hash - криптовалюты, майнинг, программирование

Возможно ли чтение текста с этого типа изображения? Если да, то как бы я подошел к этому?

Я думаю, что большинство инструментов OCR используются для чтения документов. Я пытаюсь сделать программу, которая читает экран после результата игры. Мне было интересно, возможно ли использовать какой-то обходной путь (я новичок в инструментах OCR).

пример изображения.

Простая программа, которую я пытался использовать из Интернета:

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r'C:\\Users\\labib\\AppData\\Local\\Tesseract-OCR\\tesseract.exe'

img = cv2.imread('test2.png')

text = pytesseract.image_to_string(img)
print(text)

Затем я попробовал разные пороговые значения и попробовал оттенки серого, но это не сильно изменило результат.

Затем я подумал о том, чтобы сделать функцию, которая сначала обрезает изображение в таблицу, а вместо этого считывает значения из ячеек столбцов? Я не знаю, облегчит ли это работу с OCR.

Что-то вроде этого. Затем я бы поместил данные с изображения в электронную таблицу (что, я думаю, я могу сделать)

Мой вопрос: как мне подойти к чтению изображения, которое не является документом и его трудно прочитать. (моей текущей проблемой является чтение текста на самом изображении).


Ответы:


1

Это похоже на этот вопрос Сохранение отступов с помощью Tesseract OCR 4.x

Вы можете попробовать этот код. Он может выводить большую часть того, что вы хотите. Чтобы действительно соответствовать вашим потребностям, вы должны отфильтровать ненужные значки, изображения и т. д.

import cv2
import pytesseract
from pytesseract import Output
import pandas as pd

img = cv2.imread("sxFRauD.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
gauss = cv2.GaussianBlur(thresh, (3, 3), 0)

custom_config = r'-l eng --oem 3 --psm 6 -c preserve_interword_spaces=1 -c tessedit_char_whitelist="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-:. "'
d = pytesseract.image_to_data(gauss, config=custom_config, output_type=Output.DICT)
df = pd.DataFrame(d)

# clean up blanks
df1 = df[(df.conf != '-1') & (df.text != ' ') & (df.text != '')]
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)

# sort blocks vertically
sorted_blocks = df1.groupby('block_num').first().sort_values('top').index.tolist()
for block in sorted_blocks:
    curr = df1[df1['block_num'] == block]
    sel = curr[curr.text.str.len() > 3]
    # sel = curr
    char_w = (sel.width / sel.text.str.len()).mean()
    prev_par, prev_line, prev_left = 0, 0, 0
    text = ''
    for ix, ln in curr.iterrows():
        # add new line when necessary
        if prev_par != ln['par_num']:
            text += '\n'
            prev_par = ln['par_num']
            prev_line = ln['line_num']
            prev_left = 0
        elif prev_line != ln['line_num']:
            text += '\n'
            prev_line = ln['line_num']
            prev_left = 0

        added = 0  # num of spaces that should be added
        if ln['left'] / char_w > prev_left + 1:
            added = int((ln['left']) / char_w) - prev_left
            text += ' ' * added
        text += ln['text'] + ' '
        prev_left += len(ln['text']) + added + 1
    text += '\n'
    print(text)

cv2.waitKey(0)
cv2.destroyAllWindows()
           POST-ACTION REPORT 
           CUSTOM GAME                                             0:04                                                            e 
           MATCH     SCOREBOARD 
                   DEFEAT                                                             Y        Oo      j8     kK     al 
                      MM      Zz  ezswims.ENMU                               a       2188       6      0      8      52 
                               a  Shiro.ENMU                                 8       2040       4      4      8      52 
                               SH RubbaDucky.ENMU                       t            1721       3      1      9      44 
                                  ICEDrgon29.ENMU                            a       1710       3      0      8      69 
                               3  Gongshow.ENMU                              a       1375       1      1      8      56 
                               2  Nemesis.ERAU                                       4930       9      3      2      41 
                               2   Phantom.ERAU                                      4895       9      3      4      50 
                      7        2  Reggie.ERAU                                        4630       6      o      2      80 
                                2  D4NG3RZON3.ERAU                                   4510       6      1      5      53 
19.04.2020

2

Перед вызовом image_to_string попробуйте:

 img=cv2.bitwise_not(img)
17.04.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..