Пример #1
0
 def test_step(batch_images, batch_labels, labels_list):
     pred = crnn_model(batch_images, training=False)
     loss_value = loss_object(y_true=batch_labels, y_pred=pred)
     acc = test_accuracy(decoded_text=predict_text(pred),
                         true_label=labels_list)
     loss_metric.update_state(values=loss_value)
     test_accuracy_metric.update_state(values=acc)
Пример #2
0
 def valid_step(batch_images, batch_labels):
     pred = crnn_model(batch_images, training=False)
     loss_value = loss(y_true=batch_labels, y_pred=pred)
     valid_acc = accuracy(decoded_text=predict_text(
         pred, blank_index=blank_index),
                          true_label=batch_labels)
     valid_loss_metric.update_state(values=loss_value)
     valid_accuracy.update_state(values=valid_acc)
Пример #3
0
 def train_step(batch_images, batch_labels):
     with tf.GradientTape() as tape:
         pred = crnn_model(batch_images, training=True)
         loss_value = loss(y_true=batch_labels, y_pred=pred)
     gradients = tape.gradient(target=loss_value,
                               sources=crnn_model.trainable_variables)
     optimizer.apply_gradients(
         grads_and_vars=zip(gradients, crnn_model.trainable_variables))
     train_loss_metric.update_state(values=loss_value)
     train_acc = accuracy(decoded_text=predict_text(pred, blank_index),
                          true_label=batch_labels)
     train_accuracy.update_state(values=train_acc)
Пример #4
0

def get_final_output_string(output, blank_index):
    decoded_text = tf.cast(x=output, dtype=tf.int32)
    decoded_text = decoded_text.numpy()
    decoded_text = index_to_char(inputs=decoded_text, idx2char_dict=Config.get_idx2char(), blank_index=blank_index)
    return decoded_text[0]


if __name__ == '__main__':
    # GPU settings
    gpus = tf.config.list_physical_devices("GPU")
    if gpus:
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)

    num_classes, blank_index = get_num_classes_and_blank_index()

    # read image
    image_raw = tf.io.read_file(Config.test_picture_path)
    image_tensor = tf.io.decode_image(contents=image_raw, channels=Config.IAMGE_CHANNELS, dtype=tf.dtypes.float32)
    image_tensor = tf.image.resize(image_tensor, [Config.IMAGE_HEIGHT, Config.IMAGE_WIDTH])
    image_tensor = tf.expand_dims(input=image_tensor, axis=0)

    # load model
    crnn_model = CRNN(num_classes)
    crnn_model.load_weights(filepath=Config.save_model_dir+"saved_model")

    pred = crnn_model(image_tensor, training=False)
    predicted_string = get_final_output_string(predict_text(pred, blank_index), blank_index)
    print(predicted_string)
    output_tensor = tf.squeeze(output, axis=0)
    idx2char = get_idx2char_map()
    output_string_list = []
    for i in range(output_tensor.shape[0]):
        output_string_list.append(idx2char[output_tensor[i].numpy()])
    output_string = "".join(output_string_list)
    return output_string


if __name__ == '__main__':
    # GPU settings
    gpus = tf.config.list_physical_devices("GPU")
    if gpus:
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)

    # read image
    image_raw = tf.io.read_file(test_picture_path)
    image_tensor = tf.io.decode_image(contents=image_raw,
                                      channels=IAMGE_CHANNELS,
                                      dtype=tf.dtypes.float32)
    image_tensor = tf.image.resize(image_tensor, [IMAGE_HEIGHT, IMAGE_WIDTH])
    image_tensor = tf.expand_dims(input=image_tensor, axis=0)

    # load model
    crnn_model = CRNN()
    crnn_model.load_weights(filepath=save_model_dir + "saved_model")

    pred = crnn_model(image_tensor, training=False)
    predicted_string = get_final_output_string(predict_text(pred))
    print(predicted_string)