File size: 4,157 Bytes
fe8b674
 
c3f244d
fe8b674
 
 
 
 
8d9605d
89630a1
 
8d9605d
89630a1
 
 
 
 
 
 
fe8b674
89630a1
 
 
 
fe8b674
89630a1
 
 
 
fe8b674
89630a1
f20827d
e8538e1
89630a1
43fd69e
89630a1
 
4ed5cde
89630a1
 
 
9b5d89a
 
 
 
 
 
 
 
 
 
 
f43f84c
9b5d89a
f43f84c
9b5d89a
f43f84c
9b5d89a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5a8537e
9b5d89a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89630a1
9b5d89a
 
 
 
fe8b674
89630a1
 
 
 
e8987d4
89630a1
fe8b674
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import cv2
from time import time
from alpr import *
import torch
import cv2
import numpy as np
import tensorflow.compat.v1 as tf
import os
import streamlit as st
from PIL import Image
import streamlit as st

def load_image(image_file):
	img = Image.open(image_file)
	return img
	
	
st.subheader("Image")
image_file = st.file_uploader("Upload Images", type=["png","jpg","jpeg"])

#if image_file is not None:
    # To See details
    #file_details = {"filename":image_file.name, "filetype":image_file.type,"filesize":image_file.size}
    #st.write(file_details)

    # To View Uploaded Image
    #st.image(load_image(image_file),width=250)
    
submit = st.button('Generate')

if submit:
    image = load_image(image_file)
    model = torch.hub.load('ultralytics/yolov5', 'custom', path='yoloocrv2_1.pt')
    model.cpu()
    model.conf = 0.5
    license = DetectLicensePlate()
    counter  = dict()
    frame = np.array(image)[...,::-1]
    try:
        plate_img = alpr(frame,license)
        results = model(plate_img*255)
        control = max(results.pandas().xyxy[0].sort_values('ymin').iloc[:,1].values)
        if control > 50:
            name = results.pandas().xyxy[0].sort_values('ymin') #.iloc[:, -1] #ymin alwas bigger than 50 with bottom characters
            ind = [ix for ix,i in enumerate(name.iloc[:,1]) if i>50][0]
            upper_f_2 = name.iloc[:ind].sort_values("xmin").iloc[:,-1][:2]
            upper_sort = name.iloc[:ind].sort_values("xmin").iloc[:,-1][2:] #add name column
            bottom_sort = name.iloc[ind:].sort_values("xmin").iloc[:,-1]
            upper_name =  "".join([i for i in upper_sort])
            upper_f_name = "".join([i for i in upper_f_2])
            bottom_name = "".join([i for i in bottom_sort])
            if "1" in upper_name:
                upper_name= upper_name.replace("1","I")
            if "6" in upper_name:
                upper_name= upper_name.replace("6","G")
            if "0" in upper_name:
                upper_name= upper_name.replace("0","O")
        
            name =  upper_f_name + upper_name + bottom_name
            if name not in counter and name != '':
                counter[name] = 1
            if name in counter and name != '':    
                counter[name] += 1
            plate_name = list((sorted(counter.items(), key=lambda item: item[1])))[-1][0]
            st.write(plate_name)
        
        else:
        
            #Post-processing pre-requisite
            decoder = results.pandas().xyxy[0].sort_values('xmin').iloc[:,0].values
            compare = list(decoder[2:])
            maks = None
            for i in range(len(compare)):
                if i == len(compare) - 1:
                    break
                if maks == None:
                    maks = abs(compare[i] - compare[i + 1])
                    w_index = (maks, i + 1)
                if abs(compare[i] - compare[i + 1]) > maks:
                    maks = abs(compare[i] - compare[i + 1])
                    w_index = (maks, i + 1)
              
            name = results.pandas().xyxy[0].sort_values('xmin').iloc[:, -1]
            name = "".join([i for i in name])
            if name not in counter and name != '':
                counter[name] = 1
            if name in counter and name !='':
                counter[name] +=1
            plate_name = list((sorted(counter.items(),key = lambda item:item[1])))[-1][0]
            #Post-processing happens after here
            mid_chars = str(plate_name[2:int(w_index[1] + 2)])  # assign this as old mid chars
    
            if "6" in mid_chars:
                mid_chars = mid_chars.replace("6", "G")  # assign this as new
            if "1" in mid_chars:
                mid_chars = mid_chars.replace("1", "I")
            if "0" in mid_chars:
                mid_chars = mid_chars.replace("0", "O")
    
            new_plate_name = plate_name.replace(plate_name[2:int(w_index[1] + 2)], mid_chars)
        
            #cv2.imshow("Plate", plate_img)
            st.write(new_plate_name)
    
    
    except Exception as e:
        
        counter.clear()
        st.write("Plaka Bulunamadı")