def __init__(self): self.m = pymongo.MongoClient(c.getConfig("mongo", "mongouri")) self.demo = self.m.get_database("test").get_collection("demo") self.data = {}
def build_network(image_height=128, image_width=32): hidden_unit = int(mod_config.getConfig("train", "hidden_unit")) inputs = Input(shape=(image_height, image_width, 1), name='the_input') x = Conv2D(64, (3, 3), strides=1, padding="same", kernel_initializer='he_normal', name="C0")(inputs) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D(pool_size=(2, 2), strides=2, name="P0")(x) x = Conv2D(128, (3, 3), strides=1, padding="same", kernel_initializer='he_normal', name="C1")(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D(pool_size=(2, 2), strides=2, name="P1")(x) x = Conv2D(256, (3, 3), strides=1, padding="same", kernel_initializer='he_normal', name="C2")(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = Conv2D(256, (3, 3), strides=1, padding="same", kernel_initializer='he_normal', name="C3")(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D(pool_size=(2, 1), name="P2")(x) x = Conv2D(512, (3, 3), strides=1, padding="same", kernel_initializer='he_normal', name="C4")(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = Conv2D(512, (3, 3), strides=1, padding="same", kernel_initializer='he_normal', name="C5")(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D(pool_size=(2, 1), name="P3")(x) x = Conv2D(512, (2, 2), strides=1, padding="same", kernel_initializer='he_normal', name="C6")(x) # padding="valid") x = BatchNormalization()(x) x = Activation('relu')(x) x = Permute((2, 1, 3))(x) x = TimeDistributed(Flatten())(x) # x = Bidirectional(GRU(hidden_unit, return_sequences=True, kernel_initializer='he_normal'), merge_mode='sum')(x) # x = BatchNormalization()(x) # # x = Bidirectional(GRU(hidden_unit, return_sequences=True, kernel_initializer='he_normal'), merge_mode='concat')(x) # x = BatchNormalization()(x) # RNN layer gru_1a = GRU(hidden_unit, return_sequences=True, kernel_initializer='he_normal', name='gru_1a')(x) gru_1b = GRU(hidden_unit, return_sequences=True, kernel_initializer='he_normal', name='gru_1b', go_backwards=True)(x) gru_1merged = add([gru_1a, gru_1b]) x = BatchNormalization()(gru_1merged) gru_2a = GRU(256, return_sequences=True, kernel_initializer='he_normal', name='gru_2a')(x) gru_2b = GRU(256, return_sequences=True, kernel_initializer='he_normal', name='gru_2b', go_backwards=True)(x) gru_2a = add([gru_2a, x]) gru_2b = add([gru_2b, x]) gru2_merged = concatenate([gru_2a, gru_2b]) x = BatchNormalization()(gru2_merged) x = Dense(CHAR_SET_LEN + 1, kernel_initializer='he_normal')(x) y_pred = Activation('softmax', name='softmax')(x) labels = Input(name='the_labels', shape=[MAX_CAPTCHA], dtype='float32') input_length = Input(name='input_length', shape=[1], dtype='int64') label_length = Input(name='label_length', shape=[1], dtype='int64') loss_out = Lambda(ctc_lambda_func, output_shape=(1, ), name='ctc')([y_pred, labels, input_length, label_length]) model = Model(inputs=[inputs, labels, input_length, label_length], outputs=loss_out) model.summary() return model
if equalize == 1: img = cv2.equalizeHist(img) data = img[np.newaxis, :, :, np.newaxis] label = list( map(int, file.replace(" ", "").split('.')[0].split('_')[0])) # cv2.imshow("img", img) # cv2.waitKey() yield np.array(data), np.array(label), origin, file_path if __name__ == '__main__': img_height = int(mod_config.getConfig("train", "img_height")) equalize = int(mod_config.getConfig("train", "equalize")) model = ocr.build_network(image_height=img_height, image_width=None) weight_file = mod_config.getConfig("train", "weight_file") path = "../text-detection-ctpn/data/data/" # path = "./data/true_image/" # path = "./data/test/" if os.path.exists(weight_file): model.load_weights(weight_file) basemodel = Model(inputs=model.get_layer('the_input').output, outputs=model.get_layer('softmax').output) count = 0 pos = 0
shape = y_pred[:, :, :].shape ctc_decode = K.ctc_decode(y_pred[:, :, :], input_length=np.ones(shape[0]) * shape[1])[0][0] out = K.get_value(ctc_decode)[:, :MAX_CAPTCHA] accur = np.sum(abs(out - Y_test), axis=1) accur_score = len(accur[accur == 0]) * 1.0 / len(accur) print("accur_score:", accur_score) # print(decode_model_output(y_pred) - Y_test) if __name__ == '__main__': new_data = int(mod_config.getConfig("train", "new_data")) data_set = int(mod_config.getConfig("train", "data_set")) testing = int(mod_config.getConfig("train", "testing")) equalize = int(mod_config.getConfig("train", "equalize")) if new_data: gen_data.run(data_set, equalize) X_train = np.load("ctc/X_train.npy") Y_train = np.load("ctc/Y_train.npy") test_size = int(X_train.shape[0] * 0.1) X_test = X_train[0:test_size, :, :, :] Y_test = Y_train[0:test_size, :]
import numpy as np import cv2 import string sys.path.append(os.getcwd()) from ctc.generator import gen_id_card from telephone import hand_write from config import mod_config # characters = string.digits + string.ascii_uppercase characters = string.digits # print(characters) height = int(mod_config.getConfig("train", "img_height")) width = int(mod_config.getConfig("train", "img_width")) n_class = len(characters) def gen(batch_size=32, n_len=11): genObj = gen_id_card(height=height, width=width) x = np.zeros((batch_size, height, width, 1), dtype=np.uint8) y = np.zeros((batch_size, n_len), dtype=np.uint8) for i in range(batch_size): image_data, label, vec = genObj.gen_image(text_size=18) image_data = cv2.adaptiveThreshold(image_data, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 9, -10) x[i] = image_data[:, :, np.newaxis] y[i] = [int(_) for _ in label] return x, y