использование алгоритма преобразования ширины штриха для обнаружения текста (python3 - Windows) - PullRequest
0 голосов
/ 27 апреля 2019

, когда я пытаюсь запустить этот код, чтобы использовать алгоритм преобразования ширины штриха в Ссылка Dropbox , появляется эта ошибка: D: /swt_up.py, строка 305, в _find_letters

fulllayer = np.zeros ((shape_w, shape_h), dtype = np.uint16)

Ошибка памяти

def _find_letters(swt, shapes, shape_h, shape_w):
    # STEP: Discard shapes that are probably not letters
    swts = []
    heights = []
    widths = []
    topleft_pts = []
    images = []

    for label,layer in shapes.items():
        #print(label)
        #print((layer[0],layer[1]))
        (nz_y, nz_x) = (layer[0],layer[1])
        east, west, south, north = max(nz_x), min(nz_x), max(nz_y), min(nz_y)
        width, height = east - west, south - north

        if width < 4 or height < 4:
            continue

        if width / height > 10 or height / width > 10:
            continue

        diameter = math.sqrt(width * width + height * height)
        median_swt = np.median(swt[(nz_y, nz_x)])
        #if diameter / median_swt > 10:
        #        continue

        #if width / shape_w > 0.4 or height / shape_h > 0.4:
        #         continue

        #if diagnostics:
        #     print (" written to image.")
        #     print(layer )
        #    cv2.imwrite('layer'+ str(label) +'.jpg', layer*255)

        # we use log_base_2 so we can do linear distance comparison later using k-d tree
        # ie, if log2(x) - log2(y) > 1, we know that x > 2*y
        # Assumption: we've eliminated anything with median_swt == 1
        swts.append([math.log(median_swt, 2)])
        heights.append([math.log(height, 2)])
        topleft_pts.append(np.asarray([north, west]))
        widths.append(width)

        fulllayer = np.zeros((shape_w, shape_h), dtype=np.uint16)
        for i in range(len(layer[0])):
            fulllayer[layer[0][i], layer[1][i]] = 1
        images.append(fulllayer)


    return swts, heights, widths, topleft_pts, images

Как я могу решить эту проблему? Я не могу найти какую-либо ошибку, может быть, это ошибка ОС Windows, но я не знаю, как ее исправить.

Спасибо всем

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

сколько оперативной памяти имеет ваш компьютер ??В прошлом я пробовал тот же код, и после небольшого безумия я понял, что мой компьютер с Windows 10 с 4 ГБ ОЗУ не может достичь конца.

Я понял следующую проблему, когда код «фильтрует» штрихи вбуква начинает создавать для каждой истинной буквы изображение с таким же размером исходного изображения, в котором все пиксели этого слоя равны одному, а другой - нулю.Итак, в конце, если на изображении 100 букв, вы создаете 100 копий изображения по одной на каждую букву.Это место для ПК.

Я решил эту проблему, немного изменив код.Для слоя я сохраняю список координат, которые принадлежат этому слою, и когда я использую его, я создаю «карту» и, прежде чем перейти к следующему, я уничтожаю его.Это код, который я реализовал, исходя из того же кода, который вы показали GitHub / GoldMyr1994 / IDTEXT

Теперь я начинаю понимать, что прежде чем посмотреть мой код, вы можете попробовать другое.Я вижу эту строку

 fulllayer = np.zeros((shape_w, shape_h), dtype=np.uint16)

Но я думаю, что вам нужна только логическая карта, поэтому вы можете попытаться установить тип np.bool и надеяться, что памяти, которую вы сохраняете, достаточно, чтобы достичь концакод.

0 голосов
/ 28 апреля 2019

Ошибка памяти

Как я могу решить эту проблему?

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

...