import streamlit as st
import similarity_check as sc
import cv2
from PIL import Image
import numpy as np
import demo
import streamlit as st
import request_json.sbt_request_generator as sbt
import check_hkid_validity as chv
import av
from streamlit_webrtc import webrtc_streamer, VideoTransformerBase, RTCConfiguration, WebRtcMode
import search_engine as se
import get_bank_statement as bs
# def init():
# face_locations = []
# # face_encodings = []
# face_names = []
# process_this_frame = True
# score = []
# faces = 0
# def video_frame_callback(frame: av.VideoFrame) -> av.VideoFrame:
# image = frame.to_ndarray(format="bgr24")
def main():
# st.title("SBT Web Application")
# today's date = get_today_date
# global data
html_temp = """
SBT Web Application
"""
st.markdown(html_temp, unsafe_allow_html=True)
if 'hkid_image_validity' not in st.session_state:
st.session_state.hkid_image_validity = False
if 'data' not in st.session_state:
st.session_state['data'] = {}
st.header("I. Similarity Check")
image_file = st.file_uploader("Upload Image", type=['jpg', 'png', 'jpeg', 'pdf'], accept_multiple_files=True)
if len(image_file) == 1:
image1 = Image.open(image_file[0])
st.text("HKID card")
st.image(image1)
image1.save('image/hkid.jpg', 'JPEG')
if chv.check_hkid('image/hkid.jpg'):
st.text("Valid HKID card.")
st.session_state.hkid_image_validity = True
else:
st.text("Invalid HKID card. Please upload again!")
st.session_state.hkid_image_validity = False
elif len(image_file) == 2:
image1 = Image.open(image_file[0])
st.text("HKID card")
st.image(image1)
image2 = Image.open(image_file[1])
# image2 = image_file[1]
# image2.save('image/hkid.jpg', 'JPEG')
# file_name = image_file[1].name
st.text("Bank statement")
st.image(image2)
print(f"the id is: {st.session_state.hkid_image_validity}")
# if image_file2 is not None:
# image2 = Image.open(image_file)
# st.text("Bank statement")
# st.image(image2)
# path1 = 'IMG_4495.jpg'
# path2 = 'hangseng_page-0001.jpg'
# image1 = save_image(image1)
# image2 = save_image(image2)
data = {}
if st.button("Recognise"):
with st.spinner('Wait for it...'):
# global data
data = sc.get_data(image1, image2)
# se.get_data_link(data['chi_name_id'], data["name_on_id"], data["address"])
if 'data' in st.session_state:
data["nationality"] = 'N/A' # for hkid
st.session_state['data'] = data
st.session_state['verified'] = "True"
st.success('Done!')
score = int(st.session_state['data']['similarity_score'])
st.text(f'score: {score}')
if (score>85):
st.text(f'matched')
else:
st.text(f'unmatched')
data = st.session_state['data']
st.header("Ia. HKID Data Extraction")
st.text(f'English Name: {data["name_on_id"]}') # name is without space
st.text(f'Chinese Name: {data["chi_name_id"]}') # name is without space
st.text(f'HKID: {data["hkid"]} and validity: {data["validity"]}')
st.text(f'Date of issue: {data["issue_date"]}')
st.text(f'Date of birth: {data["dateofbirth"]}')
st.text(f'nationality: {data["nationality"]}')
st.header("Ib. Bank Statement Data Extraction")
st.text(f'Name: {data["nameStatement"]}')
st.text(f'Address: {data["address"]}')
st.text(f'Bank: {data["bank"]}')
st.text(f'Date: {data["statementDate"]}')
st.text(f'Asset: {data["totalAsset"]} hkd')
st.text(f'Liabilities: {data["totalLiability"]} hkd')
if 'data' in st.session_state:
tempout = st.session_state['data']
print(f'data: {tempout}')
# st.header("II. Facial Recognition")
# run = st.checkbox('Run')
# webrtc_streamer(key="example")
# 1. Web Rtc
# webrtc_streamer(key="jhv", video_frame_callback=video_frame_callback)
# # init the camera
# face_locations = []
# face_encodings = []
# face_names = []
# process_this_frame = True
# score = []
# faces = 0
# FRAME_WINDOW = st.image([])
# server_ip = "127.0.0.1"
# server_port = 6666
# camera = cv2.VideoCapture(0)
# s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1000000)
# if "face_rec" not in st.session_state:
# st.session_state.face_rec = []
# while run:
# rtc_configuration = RTCConfiguration({"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]})
# # Capture frame-by-frame
# # Grab a single frame of video
# ret, frame = camera.read()
# result = frame
# # Initialize the WebRTC streaming
# webrtc_ctx = webrtc_streamer(
# key="face_rec",
# mode=WebRtcMode.SENDRECV,
# rtc_configuration=rtc_configuration,
# # video_transformer_factory=WebcamTransformer,
# video_frame_callback=video_frame_callback,
# media_stream_constraints={"video": True, "audio": False},
# async_processing=True,
# )
# print(f'xd: look here {type(webrtc_ctx)}')
# st.session_state.face_rec = webrtc_ctx
# if webrtc_ctx.video_transformer:
# st.header("Webcam Preview")
# frame = webrtc_ctx.video_transformer.frame
# result, process_this_frame, face_locations, faces, face_names, score = demo.process_frame(frame, process_this_frame, face_locations, faces, face_names, score)
# st.video(result)
# frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# FRAME_WINDOW.image(result)
# if ret is not None:
# ret, buffer = cv2.imencode(".jpg", frame, [int(cv2.IMWRITE_JPEG_QUALITY),30])
# x_as_bytes = pickle.dumps(buffer)
# s.sendto((x_as_bytes),(server_ip, server_port))
# camera.release()
# if ret:
# # ret, buffer = cv2.imencode(".jpg", frame, [int(cv2.IMWRITE_JPEG_QUALITY)])
# # result, process_this_frame, face_locations, faces, face_names, score = demo.process_frame(frame, process_this_frame, face_locations, faces, face_names, score)
# # Display the resulting image
# FRAME_WINDOW.image(frame)
# else:
# print("there is no frame detected")
# continue
# print(score)
# if len(score) > 20:
# avg_score = sum(score) / len(score)
# st.write(avg_score)
# # st.write(f'{demo.convert_distance_to_percentage(avg_score, 0.45)}')
# # camera.release()
# run = not run
# st.session_state['data']['avg_score'] = str(avg_score)
## unrelated
st.header("III. Search Engine and Bank Statement")
user_input_id = st.text_input("Enter the user ID here", " ")
if st.button("Search data"):
with st.spinner('Searching data...'):
se.get_data_link(user_input_id)
st.success('Done!')
if st.button("Fetch bank statement"):
with st.spinner('getting statements...'):
bs.get_bs(user_input_id)
st.success('Done!')
if st.button("Confirm"):
st.experimental_set_query_params(
verified=True,
)
with st.spinner('Sending data...'):
print(st.session_state['data'])
sbt.split_data(st.session_state['data'])
st.success('Done!')
if __name__ == '__main__':
main()