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() |