|
from fastapi import FastAPI, UploadFile, File |
|
from fastapi.middleware.cors import CORSMiddleware |
|
from pydantic import BaseModel |
|
from final import predict_news, get_gemini_analysis |
|
import os |
|
from tempfile import NamedTemporaryFile |
|
from knowledge_graph_generator import KnowledgeGraphBuilder |
|
import networkx as nx |
|
import plotly.graph_objects as go |
|
|
|
app = FastAPI() |
|
|
|
|
|
app.add_middleware( |
|
CORSMiddleware, |
|
allow_origins=["http://localhost:5173"], |
|
allow_credentials=True, |
|
allow_methods=["*"], |
|
allow_headers=["*"], |
|
) |
|
|
|
|
|
class NewsInput(BaseModel): |
|
text: str |
|
|
|
@app.post("/analyze") |
|
async def analyze_news(news: NewsInput): |
|
prediction = predict_news(news.text) |
|
gemini_analysis = get_gemini_analysis(news.text) |
|
|
|
return { |
|
"prediction": prediction, |
|
"detailed_analysis": gemini_analysis |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.post("/detect-deepfake") |
|
async def detect_deepfake(file: UploadFile = File(...)): |
|
try: |
|
|
|
with NamedTemporaryFile(delete=False, suffix=os.path.splitext(file.filename)[1]) as temp_file: |
|
contents = await file.read() |
|
temp_file.write(contents) |
|
temp_file_path = temp_file.name |
|
|
|
|
|
from deepfake2.testing2 import predict_image, predict_video |
|
|
|
|
|
if file.filename.lower().endswith('.mp4'): |
|
result = predict_video(temp_file_path) |
|
file_type = "video" |
|
else: |
|
result = predict_image(temp_file_path) |
|
file_type = "image" |
|
|
|
|
|
os.remove(temp_file_path) |
|
|
|
return { |
|
"result": result, |
|
"file_type": file_type |
|
} |
|
|
|
except Exception as e: |
|
return {"error": str(e)}, 500 |
|
|
|
@app.post("/generate-knowledge-graph") |
|
async def generate_knowledge_graph(news: NewsInput): |
|
kg_builder = KnowledgeGraphBuilder() |
|
is_fake = predict_news(news.text) == "FAKE" |
|
kg_builder.update_knowledge_graph(news.text, not is_fake) |
|
|
|
pos = nx.spring_layout(kg_builder.knowledge_graph) |
|
|
|
|
|
edge_trace = go.Scatter( |
|
x=[], y=[], |
|
line=dict( |
|
width=2, |
|
color='rgba(255,0,0,0.7)' if is_fake else 'rgba(0,255,0,0.7)' |
|
), |
|
hoverinfo='none', |
|
mode='lines' |
|
) |
|
|
|
node_trace = go.Scatter( |
|
x=[], y=[], |
|
mode='markers+text', |
|
hoverinfo='text', |
|
textposition='top center', |
|
marker=dict( |
|
size=15, |
|
color='white', |
|
line=dict(width=2, color='black') |
|
), |
|
text=[] |
|
) |
|
|
|
|
|
for edge in kg_builder.knowledge_graph.edges(): |
|
x0, y0 = pos[edge[0]] |
|
x1, y1 = pos[edge[1]] |
|
edge_trace['x'] += (x0, x1, None) |
|
edge_trace['y'] += (y0, y1, None) |
|
|
|
|
|
for node in kg_builder.knowledge_graph.nodes(): |
|
x, y = pos[node] |
|
node_trace['x'] += (x,) |
|
node_trace['y'] += (y,) |
|
node_trace['text'] += (node,) |
|
|
|
fig = go.Figure(data=[edge_trace, node_trace], |
|
layout=go.Layout( |
|
showlegend=False, |
|
hovermode='closest', |
|
margin=dict(b=0,l=0,r=0,t=0), |
|
xaxis=dict(showgrid=False, zeroline=False, showticklabels=False), |
|
yaxis=dict(showgrid=False, zeroline=False, showticklabels=False), |
|
plot_bgcolor='rgba(0,0,0,0)', |
|
paper_bgcolor='rgba(0,0,0,0)' |
|
)) |
|
|
|
return fig.to_html() |
|
|