如何解决ValueError:'i'不在列表中:CRNN
我正在尝试编写一个crnn模型,该模型从图像中读取文本。
这是我用于训练的文件路径:
train_file_path = 'C:\\Users\\Saim\\Documents\\Indian Number Plate'
tiger_train = TextImageGenerator(train_file_path,img_w,img_h,batch_size,downsample_factor)
tiger_train.build_data()
这是图像生成器代码:
import cv2
import os,random
import numpy as np
from parameter import letters
# # Input data generator
def labels_to_text(labels): # letters의 index -> text (string)
return ''.join(list(map(lambda x: letters[int(x)],labels)))
def text_to_labels(text): # text를 letters 배열에서의 인덱스 값으로 변환
return list(map(lambda x: letters.index(x),text))
class TextImageGenerator:
def __init__(self,img_dirpath,downsample_factor,max_text_len=9):
self.img_h = img_h
self.img_w = img_w
self.batch_size = batch_size
self.max_text_len = max_text_len
self.downsample_factor = downsample_factor
self.img_dirpath = img_dirpath # image dir path
self.img_dir = os.listdir(self.img_dirpath) # images list
self.n = len(self.img_dir) # number of images
self.indexes = list(range(self.n))
self.cur_index = 0
self.imgs = np.zeros((self.n,self.img_h,self.img_w))
self.texts = []
## samples의 이미지 목록들을 opencv로 읽어 저장하기,texts에는 label 저장
def build_data(self):
print(self.n," Image Loading start...")
for i,img_file in enumerate(self.img_dir):
try :
img = cv2.imread(self.img_dirpath + img_file,cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img,(self.img_w,self.img_h))
img = img.astype(np.float32)
img = (img / 255.0) * 2.0 - 1.0
except Exception as e :
print(str(e))
self.imgs[i,:,:] = img
self.texts.append(img_file[0:-4])
print(len(self.texts) == self.n)
print(self.n," Image Loading finish...")
def next_sample(self): ## index max -> 0 으로 만들기
self.cur_index += 1
if self.cur_index >= self.n:
self.cur_index = 0
random.shuffle(self.indexes)
return self.imgs[self.indexes[self.cur_index]],self.texts[self.indexes[self.cur_index]]
def next_batch(self): ## batch size만큼 가져오기
while True:
X_data = np.ones([self.batch_size,self.img_w,1]) # (bs,128,64,1)
Y_data = np.ones([self.batch_size,self.max_text_len]) # (bs,9)
input_length = np.ones((self.batch_size,1)) * (self.img_w // self.downsample_factor - 2) # (bs,1)
label_length = np.zeros((self.batch_size,1)) # (bs,1)
for i in range(self.batch_size):
img,text = self.next_sample()
img = img.T
img = np.expand_dims(img,-1)
X_data[i] = img
Y_data[i] = text_to_labels(text)
label_length[i] = len(text)
# dict 형태로 복사
inputs = {
'the_input': X_data,# (bs,1)
'the_labels': Y_data,8)
'input_length': input_length,1) -> 모든 원소 value = 30
'label_length': label_length # (bs,1) -> 모든 원소 value = 8
}
outputs = {'ctc': np.zeros([self.batch_size])} # (bs,1) -> 모든 원소 0
yield (inputs,outputs)
我已经有大约10,500张训练图像,所以我真的不需要使用此生成器。说实话,我也不太清楚其目的。
这是我遇到的错误:返回列表(map(lambda x:letters.index(x),文本)) ValueError:“ i”不在列表中
如果可能的话,我想绕过整个图像生成器,直接使用上面已经提到的图像。
https://github.com/vishnoi-29/CRNN-Keras
这是我尝试重新创建的github链接。
花了整整一天的时间使它正常工作!请帮忙:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。