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ı")
|