Spaces:
Running
Running
File size: 1,892 Bytes
18f4899 c37ed28 18f4899 c37ed28 cfbe21c 18f4899 cfbe21c c37ed28 18f4899 c37ed28 18f4899 c37ed28 | 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 | from __future__ import annotations
import logging
import shutil
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
from app.config import settings
from app.routes.verify_image import router as verify_image_router
from app.services.image_detector import image_detector
logging.basicConfig(
level=getattr(logging, settings.log_level.upper(), logging.INFO),
format="%(asctime)s %(levelname)s %(name)s - %(message)s",
)
app = FastAPI(
title="BitCheck Image Verification API",
description="Risk-based image authenticity and provenance verification backend.",
version="0.1.0",
)
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(verify_image_router)
app.mount("/outputs", StaticFiles(directory=str(settings.outputs_dir)), name="outputs")
@app.on_event("startup")
def startup() -> None:
image_detector.load()
@app.get("/")
def root() -> dict[str, str]:
return {"service": "BitCheck Image Verification API", "status": "running"}
@app.get("/test-client", include_in_schema=False)
def test_client() -> FileResponse:
return FileResponse("test-client.html")
@app.get("/health")
def health() -> dict[str, object]:
try:
import pytesseract
pytesseract.get_tesseract_version()
ocr_available = True
except Exception:
ocr_available = False
return {
"status": "ok",
"service": "BitCheck Image Verification API",
"classifier_loaded": image_detector.is_loaded,
"ocr_available": ocr_available,
"c2pa_available": shutil.which("c2patool") is not None,
"device": str(image_detector.device),
}
|