Файл 'numArEx.txt' загружается навсегда - PullRequest
0 голосов
/ 20 мая 2018

Я тестировал код, который вижу в Интернете, но у меня возникли некоторые проблемы.Я хотел бы получить ответ о том, почему мой архив не открывается правильно, он продолжает загружаться и загружаться, и я не могу посмотреть, что произошло с этим.Правильно будет иметь много чисел от 0 до 255 (цвет RGB).Я думаю, что проблема в функции 'np.seterr (over =' ignore ')', но если исключить это, то у меня есть другая проблема, поэтому я не знаю.Код делает: идентифицирует изображения из базы данных.Заранее спасибо.

КОД:

from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
import time
from collections import Counter

np.seterr(over='ignore')

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

    for eachNum in numbersWeHave:
        for eachVer in versionsWeHave:
        #print str(eachNum)+'.'+str(eachVer)
        imgFilePath = 'images/'+str(eachNum)+'.'+str(eachVer)+'.jpg'
        ei=Image.open(open(imgFilePath,'rb'))
        eiar=np.array(ei)
        eiar1=str(eiar.tolist())

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

def threshold(imageArray):
    balanceAr = []
    newAr = imageArray
    for eachRow in imageArray:
        for eachPix in eachRow:
            avgNum = reduce(lambda x, y: x + y, eachPix[:3]) / eachPix[:3])
            balanceAr.append(avgNum)
    balance = reduce(lambda x, y: x + y, balanceAr) / len(balanceAr)
    for eachRow in newAr:
        for eachPix in eachRow:
            if reduce(lambda x, y: x + y, eachPix[:3]) / eachPix[:3]) > balance:
                eachPix[0] = 255
                eachPix[1] = 255
                eachPix[2] = 255
            else:
                eachPix[0] = 0
                eachPix[1] = 0
                eachPix[2] = 0
    return newAr

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

    i=Image.open(open(filePath,'rb'))
    iar=np.array(i)
    iar1=iar.tolist()

    inQuestion=str(iar1)

    for eachExample in loadExamps:
        try:
            splitEx=eachExample.split('::')
            currentNum=splitEx[0]
            currentAr=splitEx[1]
            eachPixEx = currentAr.split(']')
            eachPixInQ=inQuestion.split(']')
            x=0
            while x<len(eachPixEx):
                if eachPixEx[x]==eachPixInQ[x]:
                    matchedAr.append(int(currentNum))
                x+=1
        except Exception as e:
            print(str(e))

    print matchedAr
    x=Counter(matchedAr)
    print (x)
    print (x[0])

whatNumIsThis('images/teste.jpg')

1 Ответ

0 голосов
/ 21 мая 2018

Я предполагаю, что вы основали свой код на проекте здесь

Трудно точно сказать, что сломалось, поскольку у меня нет доступа к файлам JPEG, которые выиспользуется (исходный проект использует файлы PNG).

Однако следующая версия вашего кода работает с файлами PNG, предоставленными в проекте GitHub, которые хранятся в той же структуре каталогов, которую вы видите там (на изображениях/ цифры).Я удалил функцию threshold(), так как она не вызывалась.

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

from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
import time
from collections import Counter

def createExamples():
    numberArrayExamples=open('numArEx.txt','w')  # replace, do not append
    numbersWeHave=range(1,3)
    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'
            ei=Image.open(open(imgFilePath,'rb'))
            eiar=np.array(ei)
            eiar1=str(eiar.tolist())

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

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

    i=Image.open(open(filePath,'rb'))
    iar=np.array(i)
    iar1=iar.tolist()

    inQuestion=str(iar1)

    for eachExample in loadExamps:
        if len(eachExample) > 3:
            splitEx=eachExample.split('::')
            currentNum=splitEx[0]
            currentAr=splitEx[1]
            eachPixEx = currentAr.split(']')
            eachPixInQ=inQuestion.split(']')
            x = 0
            while x<len(eachPixEx):
                if eachPixEx[x]==eachPixInQ[x]:
                    matchedAr.append(int(currentNum))
                x+=1

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

createExamples()
whatNumIsThis('images/test.png')
whatNumIsThis('images/test1.png')
...