Пример #1
0
 def __init__(self):
     self.m = pymongo.MongoClient(c.getConfig("mongo", "mongouri"))
     self.demo = self.m.get_database("test").get_collection("demo")
     self.data = {}
Пример #2
0
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
Пример #3
0
        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
Пример #4
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, :]
Пример #5
0
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