|
import numpy as np |
|
import cv2 |
|
import imutils |
|
import pytesseract |
|
import pandas as pd |
|
import time |
|
import os |
|
|
|
from PIL import Image |
|
import streamlit as st |
|
|
|
|
|
|
|
if not os.path.exists("data"): |
|
os.makedirs("data") |
|
|
|
|
|
|
|
bytes_data = None |
|
|
|
img_file_buffer = st.camera_input("Take a picture") |
|
if img_file_buffer is not None: |
|
test_image = Image.open(img_file_buffer) |
|
st.image(test_image, use_column_width=True) |
|
image = np.asarray(test_image) |
|
|
|
image = imutils.resize(image, width=500) |
|
|
|
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
|
gray = cv2.bilateralFilter(gray, 11, 17, 17) |
|
edged = cv2.Canny(gray, 170, 200) |
|
|
|
cnts, new = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) |
|
image1 = image.copy() |
|
cv2.drawContours(image1, cnts, -1, (0, 255, 0), 3) |
|
|
|
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:30] |
|
screenCnt = None |
|
image2 = image.copy() |
|
cv2.drawContours(image2, cnts, -1, (0, 0, 255), 3) |
|
|
|
for c in cnts: |
|
perimeter = cv2.arcLength(c, True) |
|
approx = cv2.approxPolyDP(c, 0.018 * perimeter, True) |
|
if len(approx) == 4: |
|
screenCnt = approx |
|
x, y, w, h = cv2.boundingRect(c) |
|
new_img = image[y:y + h, x:x + w] |
|
break |
|
|
|
image_with_contours = image.copy() |
|
cv2.drawContours(image_with_contours, [screenCnt], -1, (0, 255, 0), 3) |
|
|
|
|
|
st.image(image_with_contours, caption="Image with detected license plate") |
|
|
|
|
|
|
|
|
|
|
|
|
|
text = pytesseract.image_to_string(new_img, lang="eng") |
|
|
|
|
|
raw_data = {'date': [time.asctime(time.localtime(time.time()))], 'v_number': [text]} |
|
df = pd.DataFrame(raw_data, columns=['date', 'v_number']) |
|
|
|
|
|
file_path = os.path.join("data", "data.csv") |
|
if os.path.exists(file_path): |
|
df.to_csv(file_path, mode='a', header=False, index=False) |
|
else: |
|
df.to_csv(file_path, index=False) |
|
|
|
|
|
st.write("CSV File Path:", file_path) |
|
st.write("CSV File Exists:", os.path.exists(file_path)) |
|
|
|
|
|
st.write("Recognized Text:",text) |
|
|
|
if bytes_data is None: |
|
st.stop() |