| | import os |
| |
|
| | import cv2 |
| | import numpy as np |
| | import tensorflow.compat.v1 as tf |
| | from numpy.linalg import norm |
| | from local_utils import detect_lp |
| | from os.path import splitext |
| | from tensorflow.python.keras.backend import set_session |
| | from tensorflow.keras.models import model_from_json |
| | from tensorflow.compat.v1 import ConfigProto |
| |
|
| |
|
| | class DetectLicensePlate: |
| | def __init__(self): |
| | tf.compat.v1.disable_eager_execution() |
| | |
| | |
| | gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.433) |
| | self.sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) |
| | |
| | self.graph = tf.get_default_graph() |
| | set_session(self.sess) |
| |
|
| | self.wpod_net_path ="wpod-net.json" |
| | self.wpod_net = self.load_model(self.wpod_net_path) |
| |
|
| | def load_model(self, path): |
| | try: |
| | path = splitext(path)[0] |
| | with open('%s.json' % path, 'r') as json_file: |
| | model_json = json_file.read() |
| | model = model_from_json(model_json, custom_objects={}) |
| | model.load_weights('%s.h5' % path) |
| | print("Loading model successfully...") |
| | self.graph = tf.get_default_graph() |
| | return model |
| | except Exception as e: |
| | print(e) |
| |
|
| | def preprocess_image(self, image_path, resize=False): |
| | img = image_path |
| | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) |
| | img = img / 255 |
| | if resize: |
| | img = cv2.resize(img, (224, 224)) |
| | return img |
| |
|
| | def get_plate(self, image_path, Dmax=608, Dmin=608): |
| | vehicle = self.preprocess_image(image_path) |
| | ratio = float(max(vehicle.shape[:2])) / min(vehicle.shape[:2]) |
| | side = int(ratio * Dmin) |
| | bound_dim = min(side, Dmax) |
| | _, plates, _, cor = detect_lp(self.graph,self.sess,self.wpod_net, vehicle, bound_dim, lp_threshold=0.5) |
| | return vehicle, plates, cor |
| |
|
| |
|
| |
|
| |
|
| |
|
| | def alpr(frame,license_plate): |
| |
|
| | plate_image = frame.copy() |
| |
|
| | try: |
| | vehicle, plates, cor = license_plate.get_plate(frame) |
| | return plates[0] |
| |
|
| | except Exception as e: |
| | print(str(e)) |
| |
|
| |
|
| |
|