File size: 1,543 Bytes
c25c614
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

from flask import request
import numpy as np
import traceback

from core.response_json import error_response, success_response, server_error_response
from middlewares.auth import token_optional
from services.analysis_service import run_deepfake_analysis, save_scan_history


@token_optional
def scan_image(current_user):
    if 'file' not in request.files:
        return error_response(message="No file uploaded", status_code=400)

    file = request.files['file']

    if file.filename == '':
        return error_response(message="No selected file", status_code=400)

    try:
        file_bytes = np.frombuffer(file.read(), np.uint8)

        analysis_result = run_deepfake_analysis(file_bytes)

        if current_user is not None:
            save_scan_history(
                user_id=current_user.get("user_id"),
                file_name=file.filename,
                result=analysis_result["result"],
                confidence_score=analysis_result["probability"],
                processing_time=analysis_result["processing_time"]
            )
            analysis_result["saved_to_history"] = True
        else:
            analysis_result["saved_to_history"] = False

        return success_response(
            message="Analysis complete",
            data=analysis_result
        )

    except ValueError as ve:
        return error_response(message=str(ve), status_code=400)
    except Exception as e:
        print("ERROR:", str(e))
        traceback.print_exc()
        return server_error_response(error_details=str(e))