Spaces:
Sleeping
Sleeping
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 | |
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) | |
# Display the image with contours | |
st.image(image_with_contours, caption="Image with detected license plate") | |
# Configuration for tesseract | |
tesseract_path = os.path.abspath("tessract/tesseract.exe") | |
pytesseract.pytesseract.tesseract_cmd = tesseract_path | |
# Run tesseract OCR on the cropped image | |
text = pytesseract.image_to_string(new_img, lang="eng") | |
# Data is stored in CSV file | |
raw_data = {'date': [time.asctime(time.localtime(time.time()))], 'v_number': [text]} | |
df = pd.DataFrame(raw_data, columns=['date', 'v_number']) | |
file_path = 'data.csv' | |
header = not os.path.exists(file_path) | |
df.to_csv('data.csv', mode='a', header=header, index=False) | |
# Print recognized text | |
st.write(text) | |
if bytes_data is None: | |
st.stop() |