Spaces:
Sleeping
Sleeping
File size: 5,370 Bytes
b4e7526 |
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 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
import sqlite3
from io import BytesIO
import base64
def create_connection(db_file):
""" Create a database connection to the SQLite database """
conn = None
try:
conn = sqlite3.connect(db_file)
return conn
except sqlite3.Error as e:
print(e)
return conn
def create_table(conn):
""" Create the results tables if they do not exist """
create_glaucoma_table_sql = """ CREATE TABLE IF NOT EXISTS results (
id integer PRIMARY KEY,
image blob,
cup_area real,
disk_area real,
rim_area real,
rim_to_disc_line_ratio real,
ddls_stage integer
); """
create_cataract_table_sql = """ CREATE TABLE IF NOT EXISTS cataract_results (
id integer PRIMARY KEY,
image blob,
red_quantity real,
green_quantity real,
blue_quantity real,
stage text
); """
try:
cursor = conn.cursor()
cursor.execute(create_glaucoma_table_sql)
cursor.execute(create_cataract_table_sql)
except sqlite3.Error as e:
print(e)
def save_prediction_to_db(image, cup_area, disk_area, rim_area, rim_to_disc_line_ratio, ddls_stage):
database = "glaucoma_results.db"
conn = create_connection(database)
if conn:
create_table(conn)
sql = ''' INSERT INTO results(image, cup_area, disk_area, rim_area, rim_to_disc_line_ratio, ddls_stage)
VALUES(?,?,?,?,?,?) '''
cur = conn.cursor()
# Convert the image to bytes
buffered = BytesIO()
image.save(buffered, format="PNG")
img_bytes = buffered.getvalue()
cur.execute(sql, (img_bytes, cup_area, disk_area, rim_area, rim_to_disc_line_ratio, ddls_stage))
conn.commit()
conn.close()
def fetch_all_data(conn, table_name):
""" Fetch all data from the given table """
cursor = conn.cursor()
cursor.execute(f"SELECT * FROM {table_name}")
rows = cursor.fetchall()
return rows
def get_db_data(db_path_glaucoma, db_path_cataract):
conn_glaucoma = create_connection(db_path_glaucoma)
conn_cataract = create_connection(db_path_cataract)
if conn_glaucoma and conn_cataract:
create_table(conn_glaucoma)
create_table(conn_cataract)
glaucoma_data = fetch_all_data(conn_glaucoma, "results")
cataract_data = fetch_all_data(conn_cataract, "cataract_results")
conn_glaucoma.close()
conn_cataract.close()
return glaucoma_data, cataract_data
else:
return [], []
def get_context_db_data(db_path_context):
conn = create_connection(db_path_context)
if conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM context_info")
context_data = cursor.fetchall()
conn.close()
return context_data
else:
return []
def format_db_data(glaucoma_data, cataract_data, context_data):
""" Format the database data for display """
formatted_data = ""
if not glaucoma_data and not cataract_data and not context_data:
return "No data available in the database."
if glaucoma_data:
headers = ["ID", "Image", "Cup Area", "Disk Area", "Rim Area", "Rim to Disc Line Ratio", "DDLS Stage"]
formatted_data += "<h2>Glaucoma Data</h2><table border='1'><tr>" + "".join([f"<th>{header}</th>" for header in headers]) + "</tr>"
for row in glaucoma_data:
image_html = "No image"
if row[1] is not None:
image = base64.b64encode(row[1]).decode('utf-8')
image_html = f"<img src='data:image/png;base64,{image}' width='100'/>"
formatted_data += "<tr>" + "".join([f"<td>{image_html if i == 1 else row[i]}</td>" for i in range(len(row))]) + "</tr>"
formatted_data += "</table>"
if cataract_data:
headers = ["ID", "Image", "Red Quantity", "Green Quantity", "Blue Quantity", "Stage"]
formatted_data += "<h2>Cataract Data</h2><table border='1'><tr>" + "".join([f"<th>{header}</th>" for header in headers]) + "</tr>"
for row in cataract_data:
image_html = "No image"
if row[1] is not None:
image = base64.b64encode(row[1]).decode('utf-8')
image_html = f"<img src='data:image/png;base64,{image}' width='100'/>"
formatted_data += "<tr>" + "".join([f"<td>{image_html if i == 1 else row[i]}</td>" for i in range(len(row))]) + "</tr>"
formatted_data += "</table>"
if context_data:
headers = ["ID", "Text Content"]
formatted_data += "<h2>Context Data</h2><table border='1'><tr>" + "".join([f"<th>{header}</th>" for header in headers]) + "</tr>"
for row in context_data:
formatted_data += "<tr>" + "".join([f"<td>{row[i]}</td>" for i in range(len(row))]) + "</tr>"
formatted_data += "</table>"
return formatted_data |