Почему он показывает одинаковое значение для каждого изображения? - PullRequest
1 голос
/ 25 октября 2019

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

Я пробовал это с разными цифрами, а также проверял код много раз в каждой функции.

#VKA
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import time
from functools import reduce
from collections import Counter


def createExamples():
    numberArrayExamples = open('numArEx.txt','a')
    numbersWeHave = range(0,10)
    versionsWeHave = range(1,10)

    for eachNum in numbersWeHave:
        for eachver in versionsWeHave:
            #print(str(eachNum)+'.'+str(eachver))
            imgFilePath = 'images/numbers/'+str(eachNum)+'.'+str(eachver)+'.png'
            #print(imgFilePath)
            ei = Image.open(imgFilePath)
            eiar = np.array(ei)
            # print(eiar)
            eiar1 = str(eiar.tolist())
            # print(eiar1)

            lineToWrite = str(eachNum)+'::'+eiar1+'\n'
            #print(lineToWrite)
            numberArrayExamples.write(lineToWrite)

def threshold(imgarray):
    balanceAR = []
    newAR = imgarray

    for eachrow in imgarray:
        for eachpix in eachrow:
            avgNum = reduce(lambda x, y : x + y,
                                eachpix[:3])/len(eachpix[:3])
            balanceAR.append(avgNum)
    #print(balanceAR)
    balance = reduce(lambda x, y : x + y, balanceAR)/len(balanceAR)
    #print(balance)
    for eachrow in newAR:
        for eachpix in eachrow:
            if reduce(lambda x, y :
                x + y, eachpix[:3])/len(eachpix[:3]) > balance:
                eachpix[0] = 255
                eachpix[1] = 255
                eachpix[2] = 255
                eachpix[3] = 255
            else:
                eachpix[0] = 0
                eachpix[1] = 0
                eachpix[2] = 0
                eachpix[3] = 255

    return newAR

def whatNumIsThis(filepath):
    matchedAr = []
    loadExamps = open("numArEx.txt",'r').read()
    loadExamps = loadExamps.split('\n')

    i = Image.open(filepath)
    iar = np.array(i)
    iarl = iar.tolist()
    threshold(iar)
    inQuestion = str(iarl)

    for eachExample in loadExamps:
        if len(eachExample) > 3:
            #print(len(eachExample))
            splitEx = eachExample.split('::')
            #print(splitEx)
            currentNum = splitEx[0]
            #print(currentNum)
            currentAr = splitEx[1]
            #print(currentAr)
            eachPixEx = currentAr.split('],')
            #print(eachPixEx)
            eachPixInQ = inQuestion.split('],')
            # print(eachPixInQ)

            x=0
            #print(eachPixEx)
            while x < len(eachPixEx):
                if eachPixEx[x] == eachPixInQ[x]:
                    matchedAr.append(int(currentNum))

                x += 1


    print(matchedAr)
    x = Counter(matchedAr)
    print(x)



    graphX = []
    graphY = []

    for eachThing in x:
     #   print(eachThing)
        graphX.append(eachThing)
      #  print(x[eachThing])
        graphY.append(x[eachThing])



    fig = plt.figure()
    ax1 = plt.subplot2grid((4,4),(0,0), rowspan=1, colspan=4)
    ax2 = plt.subplot2grid((4,4),(1,0), rowspan=3, colspan=4)

    ax1.imshow(iar)
    ax2.bar(graphX,graphY, align='center')
    plt.ylim(400)

    xloc = plt.MaxNLocator(12)
    #print(xloc)
    ax2.xaxis.set_major_locator(xloc)

    #plt.show()'''
#createExamples()
whatNumIsThis('images/test.png')

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

Для более подробного описания см. Следующую ссылку ...

https://pythonprogramming.net/image-recognition-python/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...