usmanabbasi/Ekyc_Using_Computer_Vision
1
1import streamlit as st2from PIL import Image3import numpy as np4import easyocr5import pandas as pd6import base647import re8from datetime import datetime, timedelta9 10def process_image(image):11 reader = easyocr.Reader(['en'], gpu=False)12 img_np = np.array(image)13 result = reader.readtext(img_np)14 15 extracted_data = {16 "Name": None,17 "Father Name": None,18 "Gender": None,19 "Country of Stay": "Pakistan",20 "Identity Number": None,21 "Date of Birth": None,22 "Date of Issue": None,23 "Date of Expiry": None24 }25 26 for i, detection in enumerate(result):27 text = detection[1].strip()28 if "name" in text.lower() and not "father" in text.lower():29 extracted_data["Name"] = result[i+1][1].strip() if i+1 < len(result) else None30 elif "father" in text.lower():31 extracted_data["Father Name"] = result[i+1][1].strip() if i+1 < len(result) else None32 elif text.lower() in ["m", "f"]:33 extracted_data["Gender"] = text.upper()34 elif re.match(r'\d{5}-\d{7}-\d', text):35 extracted_data["Identity Number"] = text36 elif re.match(r'\d{2}\.\d{2}\.\d{4}', text):37 if extracted_data["Date of Birth"] is None:38 extracted_data["Date of Birth"] = text39 elif extracted_data["Date of Issue"] is None:40 extracted_data["Date of Issue"] = text41 42 if extracted_data["Date of Issue"] and not extracted_data["Date of Expiry"]:43 try:44 date_of_issue = datetime.strptime(extracted_data["Date of Issue"], "%d.%m.%Y")45 date_of_expiry = date_of_issue.replace(year=date_of_issue.year + 10)46 extracted_data["Date of Expiry"] = date_of_expiry.strftime("%d.%m.%Y")47 except ValueError:48 pass49 50 return extracted_data51 52def display_table(extracted_data):53 fields = ["Name", "Father Name", "Gender", "Country of Stay", "Identity Number", "Date of Birth", "Date of Issue", "Date of Expiry"]54 values = [extracted_data[field] if extracted_data[field] else "" for field in fields]55 df = pd.DataFrame(list(zip(fields, values)), columns=['Field', 'Value'])56 st.dataframe(df)57 58def get_csv_download_link(df):59 csv = df.to_csv(index=False)60 b64 = base64.b64encode(csv.encode()).decode()61 href = f'<a href="data:file/csv;base64,{b64}" download="extracted_data.csv">Download CSV File</a>'62 return href63 64def data_extraction_page():65 st.title('ID Card Text Extraction')66 67 uploaded_file = st.file_uploader("Upload an image of your ID card to Extract Data", type=["jpg", "jpeg", "png"])68 69 if uploaded_file is not None:70 image = Image.open(uploaded_file)71 st.image(image, caption='Wait...! We Are Extracting Data For You', use_column_width=True)72 extracted_data = process_image(image)73 display_table(extracted_data)74 75 st.markdown(get_csv_download_link(pd.DataFrame(list(extracted_data.items()), columns=['Field', 'Value'])), unsafe_allow_html=True)76 