Py.Cafe

Weston0793/

streamlit-image-uploader

Kép Feltöltése és Címkézése

DocsPricing
  • app.py
  • images
  • images.db
  • requirements.txt
app.py
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
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.")