File size: 3,273 Bytes
8ac8894
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from database import db  # Import Firestore client
from firebase_admin import firestore
from PyPDF2 import PdfReader
import easyocr
from PIL import Image
from io import BytesIO
import random
import string

def generate_readable_id(length=5):
    """Generate a random alphanumeric ID."""
    characters = string.ascii_letters + string.digits  # A-Z, a-z, 0-9
    return ''.join(random.choice(characters) for _ in range(length))

def extract_text_from_pdf(file):
    """Extract text from a PDF file."""
    reader = PdfReader(file)
    text = ""
    for page in reader.pages:
        text += page.extract_text() or ""
    return text

def extract_text_from_image(image):
    """Extract text from an image using EasyOCR."""
    reader = easyocr.Reader(['en'], gpu=False)
    results = reader.readtext(image)
    return " ".join([result[1] for result in results])

def save_text_to_firebase(text):
    """Save text to Firebase Firestore."""
    try:
        # Generate a readable ID for the text
        text_id = generate_readable_id()
        
        # Save the text to Firestore
        db.collection("texts").document(text_id).set({
            "content": text,
            "created_at": firestore.SERVER_TIMESTAMP
        })
        return text_id
    except Exception as e:
        st.error(f"Error saving text to Firebase: {e}")
        return None

def main():
    st.title("Text Upload App")

    # Select input method
    option = st.radio("Choose input method", ("Upload Document", "Take Picture"))

    if option == "Upload Document":
        uploaded_file = st.file_uploader("Upload PDF or Image", type=["pdf", "png", "jpg", "jpeg"])
        
        if uploaded_file:
            if uploaded_file.type == "application/pdf":
                # Extract text from PDF
                text = extract_text_from_pdf(uploaded_file)
            else:
                # Extract text from image
                image = Image.open(uploaded_file)
                text = extract_text_from_image(image)
            
            if text.strip():
                # Save text to Firebase
                text_id = save_text_to_firebase(text)
                if text_id:
                    st.success(f"Text extracted! Your Document ID: **{text_id}**")
                    # st.image(f"https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={text_id}")
            else:
                st.warning("No text could be extracted")

    elif option == "Take Picture":
        picture = st.camera_input("Take a picture")
        
        if picture:
            # Extract text from image
            image = Image.open(BytesIO(picture.getvalue()))
            text = extract_text_from_image(image)
            
            if text.strip():
                # Save text to Firebase
                text_id = save_text_to_firebase(text)
                if text_id:
                    st.success(f"Text extracted! Your Document ID: **{text_id}**")
                    # st.image(f"https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={text_id}")
            else:
                st.warning("No text could be extracted")

if __name__ == "__main__":
    main()