uupload / app.py
Rupesx007's picture
Rename upload.py to app.py
8219992 verified
raw
history blame
3.27 kB
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()