Spaces:
Sleeping
Sleeping
Upload 69 files
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +34 -0
- Dockerfile +29 -0
- app/__pycache__/config.cpython-312.pyc +0 -0
- app/__pycache__/main.cpython-312.pyc +0 -0
- app/__pycache__/utils.cpython-312.pyc +0 -0
- app/config.py +16 -0
- app/main.py +80 -0
- app/static/uploads/08e0a0df-54bf-4f6f-9aef-5656cfdc9d51.jpg +3 -0
- app/static/uploads/32360e28-c94c-4a9e-aad2-d3dcf0feed7a.jpg +3 -0
- app/static/uploads/37bce10e-8365-498f-a7c7-c0aaad59b555.jpg +3 -0
- app/static/uploads/392eb1ff-b670-4b52-b290-1416ec9db1ac.jpeg +0 -0
- app/static/uploads/39caed1f-845a-4e09-9c62-5d557e3c9eed.jpg +3 -0
- app/static/uploads/52cc2c38-4e5b-404b-a2c1-d03cc0dd2c15.jpeg +0 -0
- app/static/uploads/5468d3cd-0dff-4d17-8f56-0333dbb66a1a.jpg +3 -0
- app/static/uploads/5ba05f19-88f1-4780-a465-7cfaa5f68a05.jpg +3 -0
- app/static/uploads/6023b93c-01de-48e9-9925-60b4b38b6f3d.jpeg +0 -0
- app/static/uploads/649c0e73-e162-4189-b46b-6c92d168f7e4.jpg +3 -0
- app/static/uploads/64a2a0b3-b345-49a4-9947-b1e3e6b49168.jpeg +0 -0
- app/static/uploads/6c32edbf-65da-4d88-8f33-4146d2b17951.jpg +3 -0
- app/static/uploads/72085636-9c2c-46d3-8dc8-d9e1a09465ee.jpeg +0 -0
- app/static/uploads/7407f1e8-7f39-4a2b-91be-d5e7d6447bc4.jpg +3 -0
- app/static/uploads/747394f9-717d-4523-ac6b-911c6a4fff60.jpg +3 -0
- app/static/uploads/75ff8c1a-c4c9-4f3e-a125-6e9a59494faa.jpg +3 -0
- app/static/uploads/8a2f12d7-795a-479e-914c-c9ffb31f75b6.jpg +3 -0
- app/static/uploads/95be9105-ccbd-4580-9f8f-5ccd32700d1a.jpg +3 -0
- app/static/uploads/b1507ef3-0d2c-429a-a906-8b84acbfe59a.jpeg +0 -0
- app/static/uploads/b3eb6e20-1637-4ae8-87ad-55f09ceb3f80.jpg +3 -0
- app/static/uploads/babb35fa-dc86-4853-ad2e-5020cfb777a0.jpeg +0 -0
- app/static/uploads/c919d326-ca13-4105-a37d-cf61354f990a.jpg +3 -0
- app/static/uploads/d1955d96-b974-44b0-a109-cb061564c33a.jpg +3 -0
- app/static/uploads/d5c76281-801c-4b66-8456-aa2d5f9297f7.jpeg +0 -0
- app/static/uploads/e94a2d38-4a59-4f7e-b769-ba2e792c959d.jpg +3 -0
- app/static/uploads/f12c012c-415e-40d4-9382-03da0fbbf947.jpeg +0 -0
- app/static/uploads/f6e0d7d7-9f38-4d6b-a95a-88be5ad485dd.jpeg +0 -0
- app/static/uploads/f8384f65-5d94-40ea-966f-fd8791b510a5.jpeg +0 -0
- app/static/uploads/f996b653-16c6-4bd3-9e85-24db2179b522.jpeg +0 -0
- app/static/uploads/processed_08e0a0df-54bf-4f6f-9aef-5656cfdc9d51.jpg +3 -0
- app/static/uploads/processed_32360e28-c94c-4a9e-aad2-d3dcf0feed7a.jpg +3 -0
- app/static/uploads/processed_37bce10e-8365-498f-a7c7-c0aaad59b555.jpg +3 -0
- app/static/uploads/processed_392eb1ff-b670-4b52-b290-1416ec9db1ac.jpeg +0 -0
- app/static/uploads/processed_39caed1f-845a-4e09-9c62-5d557e3c9eed.jpg +3 -0
- app/static/uploads/processed_52cc2c38-4e5b-404b-a2c1-d03cc0dd2c15.jpeg +0 -0
- app/static/uploads/processed_5468d3cd-0dff-4d17-8f56-0333dbb66a1a.jpg +3 -0
- app/static/uploads/processed_5ba05f19-88f1-4780-a465-7cfaa5f68a05.jpg +3 -0
- app/static/uploads/processed_6023b93c-01de-48e9-9925-60b4b38b6f3d.jpeg +0 -0
- app/static/uploads/processed_649c0e73-e162-4189-b46b-6c92d168f7e4.jpg +3 -0
- app/static/uploads/processed_64a2a0b3-b345-49a4-9947-b1e3e6b49168.jpeg +0 -0
- app/static/uploads/processed_6c32edbf-65da-4d88-8f33-4146d2b17951.jpg +3 -0
- app/static/uploads/processed_72085636-9c2c-46d3-8dc8-d9e1a09465ee.jpeg +0 -0
- app/static/uploads/processed_7407f1e8-7f39-4a2b-91be-d5e7d6447bc4.jpg +3 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,37 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
app/static/uploads/08e0a0df-54bf-4f6f-9aef-5656cfdc9d51.jpg filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
app/static/uploads/32360e28-c94c-4a9e-aad2-d3dcf0feed7a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
app/static/uploads/37bce10e-8365-498f-a7c7-c0aaad59b555.jpg filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
app/static/uploads/39caed1f-845a-4e09-9c62-5d557e3c9eed.jpg filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
app/static/uploads/5468d3cd-0dff-4d17-8f56-0333dbb66a1a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
app/static/uploads/5ba05f19-88f1-4780-a465-7cfaa5f68a05.jpg filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
app/static/uploads/649c0e73-e162-4189-b46b-6c92d168f7e4.jpg filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
app/static/uploads/6c32edbf-65da-4d88-8f33-4146d2b17951.jpg filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
app/static/uploads/7407f1e8-7f39-4a2b-91be-d5e7d6447bc4.jpg filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
app/static/uploads/747394f9-717d-4523-ac6b-911c6a4fff60.jpg filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
app/static/uploads/75ff8c1a-c4c9-4f3e-a125-6e9a59494faa.jpg filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
app/static/uploads/8a2f12d7-795a-479e-914c-c9ffb31f75b6.jpg filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
app/static/uploads/95be9105-ccbd-4580-9f8f-5ccd32700d1a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
app/static/uploads/b3eb6e20-1637-4ae8-87ad-55f09ceb3f80.jpg filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
app/static/uploads/c919d326-ca13-4105-a37d-cf61354f990a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
app/static/uploads/d1955d96-b974-44b0-a109-cb061564c33a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
app/static/uploads/e94a2d38-4a59-4f7e-b769-ba2e792c959d.jpg filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
app/static/uploads/processed_08e0a0df-54bf-4f6f-9aef-5656cfdc9d51.jpg filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
app/static/uploads/processed_32360e28-c94c-4a9e-aad2-d3dcf0feed7a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
app/static/uploads/processed_37bce10e-8365-498f-a7c7-c0aaad59b555.jpg filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
app/static/uploads/processed_39caed1f-845a-4e09-9c62-5d557e3c9eed.jpg filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
app/static/uploads/processed_5468d3cd-0dff-4d17-8f56-0333dbb66a1a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
app/static/uploads/processed_5ba05f19-88f1-4780-a465-7cfaa5f68a05.jpg filter=lfs diff=lfs merge=lfs -text
|
| 59 |
+
app/static/uploads/processed_649c0e73-e162-4189-b46b-6c92d168f7e4.jpg filter=lfs diff=lfs merge=lfs -text
|
| 60 |
+
app/static/uploads/processed_6c32edbf-65da-4d88-8f33-4146d2b17951.jpg filter=lfs diff=lfs merge=lfs -text
|
| 61 |
+
app/static/uploads/processed_7407f1e8-7f39-4a2b-91be-d5e7d6447bc4.jpg filter=lfs diff=lfs merge=lfs -text
|
| 62 |
+
app/static/uploads/processed_747394f9-717d-4523-ac6b-911c6a4fff60.jpg filter=lfs diff=lfs merge=lfs -text
|
| 63 |
+
app/static/uploads/processed_75ff8c1a-c4c9-4f3e-a125-6e9a59494faa.jpg filter=lfs diff=lfs merge=lfs -text
|
| 64 |
+
app/static/uploads/processed_8a2f12d7-795a-479e-914c-c9ffb31f75b6.jpg filter=lfs diff=lfs merge=lfs -text
|
| 65 |
+
app/static/uploads/processed_95be9105-ccbd-4580-9f8f-5ccd32700d1a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 66 |
+
app/static/uploads/processed_b3eb6e20-1637-4ae8-87ad-55f09ceb3f80.jpg filter=lfs diff=lfs merge=lfs -text
|
| 67 |
+
app/static/uploads/processed_c919d326-ca13-4105-a37d-cf61354f990a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 68 |
+
app/static/uploads/processed_d1955d96-b974-44b0-a109-cb061564c33a.jpg filter=lfs diff=lfs merge=lfs -text
|
| 69 |
+
app/static/uploads/processed_e94a2d38-4a59-4f7e-b769-ba2e792c959d.jpg filter=lfs diff=lfs merge=lfs -text
|
Dockerfile
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 1. Use an official lightweight Python image
|
| 2 |
+
FROM python:3.10-slim
|
| 3 |
+
|
| 4 |
+
# 2. Set the working directory inside the container
|
| 5 |
+
WORKDIR /code
|
| 6 |
+
|
| 7 |
+
# 3. Install system dependencies for OpenCV
|
| 8 |
+
# (Required for cv2 to work on Linux containers)
|
| 9 |
+
RUN apt-get update && apt-get install -y \
|
| 10 |
+
libgl1-mesa-glx \
|
| 11 |
+
libglib2.0-0 \
|
| 12 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 13 |
+
|
| 14 |
+
# 4. Copy requirements and install them
|
| 15 |
+
# We rename requirements_deploy.txt to requirements.txt inside the container
|
| 16 |
+
COPY ./requirements_deploy.txt /code/requirements.txt
|
| 17 |
+
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
| 18 |
+
|
| 19 |
+
# 5. Copy your application code
|
| 20 |
+
COPY ./app /code/app
|
| 21 |
+
COPY ./models /code/models
|
| 22 |
+
|
| 23 |
+
# 6. Create a directory for uploads (and set permissions)
|
| 24 |
+
# This is CRITICAL for Hugging Face Spaces to allow file saving
|
| 25 |
+
RUN mkdir -p /code/app/static/uploads && chmod 777 /code/app/static/uploads
|
| 26 |
+
|
| 27 |
+
# 7. Command to run the application
|
| 28 |
+
# Hugging Face expects the app to run on port 7860 by default
|
| 29 |
+
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]
|
app/__pycache__/config.cpython-312.pyc
ADDED
|
Binary file (865 Bytes). View file
|
|
|
app/__pycache__/main.cpython-312.pyc
ADDED
|
Binary file (4.19 kB). View file
|
|
|
app/__pycache__/utils.cpython-312.pyc
ADDED
|
Binary file (6.56 kB). View file
|
|
|
app/config.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
from dotenv import load_dotenv
|
| 4 |
+
|
| 5 |
+
load_dotenv()
|
| 6 |
+
|
| 7 |
+
BASE_DIR = Path(__file__).resolve().parent.parent
|
| 8 |
+
MODEL_PATH = BASE_DIR / "models" / "cardd_yolo11s_640_final.pt"
|
| 9 |
+
UPLOAD_DIR = BASE_DIR / "app" / "static" / "uploads"
|
| 10 |
+
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
|
| 11 |
+
|
| 12 |
+
# Ensure upload directory exists
|
| 13 |
+
UPLOAD_DIR.mkdir(parents=True, exist_ok=True)
|
| 14 |
+
|
| 15 |
+
if not GROQ_API_KEY:
|
| 16 |
+
print("Warning: GROQ_API_KEY not found in environment variables. Groq features will fail.")
|
app/main.py
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import FastAPI, Request, UploadFile, File, Form, HTTPException
|
| 2 |
+
from fastapi.responses import HTMLResponse, JSONResponse
|
| 3 |
+
from fastapi.staticfiles import StaticFiles
|
| 4 |
+
from fastapi.templating import Jinja2Templates
|
| 5 |
+
from pathlib import Path
|
| 6 |
+
import shutil
|
| 7 |
+
import uuid
|
| 8 |
+
import logging
|
| 9 |
+
import time
|
| 10 |
+
from datetime import datetime
|
| 11 |
+
from .config import UPLOAD_DIR
|
| 12 |
+
from .utils import run_inference, generate_insurance_report
|
| 13 |
+
|
| 14 |
+
# Configure logging
|
| 15 |
+
logging.basicConfig(level=logging.INFO)
|
| 16 |
+
logger = logging.getLogger(__name__)
|
| 17 |
+
|
| 18 |
+
app = FastAPI(title="Car Damage Detection System")
|
| 19 |
+
|
| 20 |
+
# Mount static files
|
| 21 |
+
app.mount("/static", StaticFiles(directory="app/static"), name="static")
|
| 22 |
+
|
| 23 |
+
templates = Jinja2Templates(directory="app/templates")
|
| 24 |
+
|
| 25 |
+
@app.get("/", response_class=HTMLResponse)
|
| 26 |
+
async def read_root(request: Request):
|
| 27 |
+
return templates.TemplateResponse("index.html", {"request": request})
|
| 28 |
+
|
| 29 |
+
@app.post("/analyze")
|
| 30 |
+
async def analyze_image(
|
| 31 |
+
file: UploadFile = File(...),
|
| 32 |
+
make: str = Form(...),
|
| 33 |
+
model: str = Form(...),
|
| 34 |
+
year: str = Form(...)
|
| 35 |
+
):
|
| 36 |
+
try:
|
| 37 |
+
# Validate file type
|
| 38 |
+
if not file.content_type.startswith("image/"):
|
| 39 |
+
raise HTTPException(status_code=400, detail="File must be an image")
|
| 40 |
+
|
| 41 |
+
# Save uploaded file
|
| 42 |
+
file_extension = Path(file.filename).suffix
|
| 43 |
+
unique_filename = f"{uuid.uuid4()}{file_extension}"
|
| 44 |
+
input_path = UPLOAD_DIR / unique_filename
|
| 45 |
+
output_filename = f"processed_{unique_filename}"
|
| 46 |
+
output_path = UPLOAD_DIR / output_filename
|
| 47 |
+
|
| 48 |
+
logger.info(f"Saving uploaded file to {input_path}")
|
| 49 |
+
with open(input_path, "wb") as buffer:
|
| 50 |
+
shutil.copyfileobj(file.file, buffer)
|
| 51 |
+
|
| 52 |
+
# Run Inference
|
| 53 |
+
logger.info("Running inference...")
|
| 54 |
+
inference_result = run_inference(str(input_path), str(output_path))
|
| 55 |
+
|
| 56 |
+
# Generate Report
|
| 57 |
+
logger.info("Generating report...")
|
| 58 |
+
report = generate_insurance_report(inference_result, make, model, year)
|
| 59 |
+
|
| 60 |
+
# Generate Report ID
|
| 61 |
+
report_id = f"DA-{datetime.now().strftime('%Y%m%d')}-{uuid.uuid4().hex[:4].upper()}"
|
| 62 |
+
|
| 63 |
+
return JSONResponse({
|
| 64 |
+
"status": "success",
|
| 65 |
+
"original_image": f"/static/uploads/{unique_filename}",
|
| 66 |
+
"processed_image": f"/static/uploads/{output_filename}",
|
| 67 |
+
"inference_data": inference_result,
|
| 68 |
+
"report": report,
|
| 69 |
+
"report_meta": {
|
| 70 |
+
"id": report_id,
|
| 71 |
+
"timestamp": datetime.now().strftime("%B %d, %Y, %I:%M %p")
|
| 72 |
+
}
|
| 73 |
+
})
|
| 74 |
+
|
| 75 |
+
except Exception as e:
|
| 76 |
+
logger.error(f"Error processing request: {e}")
|
| 77 |
+
return JSONResponse(
|
| 78 |
+
status_code=500,
|
| 79 |
+
content={"status": "error", "message": str(e)}
|
| 80 |
+
)
|
app/static/uploads/08e0a0df-54bf-4f6f-9aef-5656cfdc9d51.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/32360e28-c94c-4a9e-aad2-d3dcf0feed7a.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/37bce10e-8365-498f-a7c7-c0aaad59b555.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/392eb1ff-b670-4b52-b290-1416ec9db1ac.jpeg
ADDED
|
app/static/uploads/39caed1f-845a-4e09-9c62-5d557e3c9eed.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/52cc2c38-4e5b-404b-a2c1-d03cc0dd2c15.jpeg
ADDED
|
app/static/uploads/5468d3cd-0dff-4d17-8f56-0333dbb66a1a.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/5ba05f19-88f1-4780-a465-7cfaa5f68a05.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/6023b93c-01de-48e9-9925-60b4b38b6f3d.jpeg
ADDED
|
app/static/uploads/649c0e73-e162-4189-b46b-6c92d168f7e4.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/64a2a0b3-b345-49a4-9947-b1e3e6b49168.jpeg
ADDED
|
app/static/uploads/6c32edbf-65da-4d88-8f33-4146d2b17951.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/72085636-9c2c-46d3-8dc8-d9e1a09465ee.jpeg
ADDED
|
app/static/uploads/7407f1e8-7f39-4a2b-91be-d5e7d6447bc4.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/747394f9-717d-4523-ac6b-911c6a4fff60.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/75ff8c1a-c4c9-4f3e-a125-6e9a59494faa.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/8a2f12d7-795a-479e-914c-c9ffb31f75b6.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/95be9105-ccbd-4580-9f8f-5ccd32700d1a.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/b1507ef3-0d2c-429a-a906-8b84acbfe59a.jpeg
ADDED
|
app/static/uploads/b3eb6e20-1637-4ae8-87ad-55f09ceb3f80.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/babb35fa-dc86-4853-ad2e-5020cfb777a0.jpeg
ADDED
|
app/static/uploads/c919d326-ca13-4105-a37d-cf61354f990a.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/d1955d96-b974-44b0-a109-cb061564c33a.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/d5c76281-801c-4b66-8456-aa2d5f9297f7.jpeg
ADDED
|
app/static/uploads/e94a2d38-4a59-4f7e-b769-ba2e792c959d.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/f12c012c-415e-40d4-9382-03da0fbbf947.jpeg
ADDED
|
app/static/uploads/f6e0d7d7-9f38-4d6b-a95a-88be5ad485dd.jpeg
ADDED
|
app/static/uploads/f8384f65-5d94-40ea-966f-fd8791b510a5.jpeg
ADDED
|
app/static/uploads/f996b653-16c6-4bd3-9e85-24db2179b522.jpeg
ADDED
|
app/static/uploads/processed_08e0a0df-54bf-4f6f-9aef-5656cfdc9d51.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/processed_32360e28-c94c-4a9e-aad2-d3dcf0feed7a.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/processed_37bce10e-8365-498f-a7c7-c0aaad59b555.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/processed_392eb1ff-b670-4b52-b290-1416ec9db1ac.jpeg
ADDED
|
app/static/uploads/processed_39caed1f-845a-4e09-9c62-5d557e3c9eed.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/processed_52cc2c38-4e5b-404b-a2c1-d03cc0dd2c15.jpeg
ADDED
|
app/static/uploads/processed_5468d3cd-0dff-4d17-8f56-0333dbb66a1a.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/processed_5ba05f19-88f1-4780-a465-7cfaa5f68a05.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/processed_6023b93c-01de-48e9-9925-60b4b38b6f3d.jpeg
ADDED
|
app/static/uploads/processed_649c0e73-e162-4189-b46b-6c92d168f7e4.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/processed_64a2a0b3-b345-49a4-9947-b1e3e6b49168.jpeg
ADDED
|
app/static/uploads/processed_6c32edbf-65da-4d88-8f33-4146d2b17951.jpg
ADDED
|
Git LFS Details
|
app/static/uploads/processed_72085636-9c2c-46d3-8dc8-d9e1a09465ee.jpeg
ADDED
|
app/static/uploads/processed_7407f1e8-7f39-4a2b-91be-d5e7d6447bc4.jpg
ADDED
|
Git LFS Details
|