| from PIL import Image |
| import io |
| from io import BytesIO |
| from .detectors.fft import run_fft |
| from .detectors.metadata import run_metadata |
| from .detectors.ela import run_ela |
| from .preprocess import preprocess_image |
| from fastapi import HTTPException,status,Depends |
| from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials |
| from config import Config |
| security=HTTPBearer() |
|
|
| async def process_image_ela(image_bytes: bytes, quality: int=90): |
| image = Image.open(io.BytesIO(image_bytes)) |
|
|
| if image.mode != "RGB": |
| image = image.convert("RGB") |
|
|
| compressed_image = preprocess_image(image, quality) |
| ela_result = run_ela(compressed_image, quality) |
|
|
| return { |
| "is_edited": ela_result, |
| "ela_score": ela_result |
| } |
|
|
| async def process_fft_image(image_bytes: bytes,threshold:float=0.95) -> dict: |
| image = Image.open(BytesIO(image_bytes)).convert("RGB") |
| result = run_fft(image,threshold) |
| return {"edited": bool(result)} |
|
|
|
|
| async def process_meta_image(image_bytes: bytes) -> dict: |
| try: |
| result = run_metadata(image_bytes) |
| return {"source": result} |
| except Exception as e: |
| |
| return {"error": str(e)} |
|
|
|
|
| async def verify_token(credentials: HTTPAuthorizationCredentials = Depends(security)): |
| token = credentials.credentials |
| expected_token = Config.SECRET_TOKEN |
| if token != expected_token: |
| raise HTTPException( |
| status_code=status.HTTP_403_FORBIDDEN, |
| detail="Invalid or expired token" |
| ) |
| return token |
|
|