import streamlit as st
import sqlite3
from sqlite3 import Error
import os
from PIL import Image
import shutil
# Ellenőrizzük, hogy az 'images' mappa létezik-e, ha nem, hozzuk létre
if not os.path.exists("images"):
os.makedirs("images")
# SQLite adatbázis létrehozása
def create_connection(db_file):
try:
conn = sqlite3.connect(db_file)
return conn
except Error as e:
st.error(f"Error creating connection: {e}")
return None
def create_table(conn):
try:
sql_create_images_table = """CREATE TABLE IF NOT EXISTS images (
id integer PRIMARY KEY,
filename text NOT NULL,
labels text
);"""
cur = conn.cursor()
cur.execute(sql_create_images_table)
conn.commit()
except Error as e:
st.error(f"Error creating table: {e}")
def check_database(conn):
try:
cur = conn.cursor()
cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='images';")
table_exists = cur.fetchone()
return table_exists is not None
except Error as e:
st.error(f"Error checking database: {e}")
return False
def initialize_database():
if os.path.exists(database):
conn = create_connection(database)
if conn:
if not check_database(conn):
conn.close()
st.info("Existing database seems to be corrupted. Renaming the old database and creating a new one.")
shutil.move(database, f"{database}.backup")
conn = create_connection(database)
if conn:
create_table(conn)
conn.close()
else:
conn.close()
else:
st.error("Error! Cannot create the database connection.")
else:
conn = create_connection(database)
if conn:
create_table(conn)
conn.close()
database = "images.db"
initialize_database()
# Kép mentése
def save_image(file, labels):
filename = file.name
file_path = os.path.join("images", filename)
try:
with open(file_path, "wb") as f:
f.write(file.getbuffer())
conn = create_connection(database)
if conn:
try:
sql = '''INSERT INTO images(filename, labels)
VALUES(?,?)'''
cur = conn.cursor()
cur.execute(sql, (filename, labels))
conn.commit()
except Error as e:
st.error(f"Error saving image data to database: {e}")
finally:
conn.close()
except PermissionError as e:
st.error(f"Permission error: {e}")
except Exception as e:
st.error(f"Unexpected error: {e}")
# Streamlit alkalmazás
st.title("Kép feltöltése és címkézése")
uploaded_file = st.file_uploader("Válassz egy képet", type=["jpg", "jpeg", "png"])
labels = st.text_input("Add meg a címkéket")
if st.button("Feltöltés"):
if uploaded_file and labels:
try:
save_image(uploaded_file, labels)
st.success("Kép sikeresen feltöltve!")
except Exception as e:
st.error(f"Hiba a kép mentésekor: {e}")
else:
st.error("Tölts fel egy képet és add meg a címkéket.")
# Feltöltött képek megjelenítése
st.header("Feltöltött képek")
conn = create_connection(database)
if conn:
if check_database(conn):
cur = conn.cursor()
cur.execute("SELECT filename, labels FROM images")
rows = cur.fetchall()
for row in rows:
st.image(os.path.join("images", row[0]), caption=row[1])
conn.close()
else:
st.error("A 'images' tábla nem létezik az adatbázisban.")
else:
st.error("Cannot connect to the database.")