radiant_ai / templates /vision.html
arshvir's picture
Initial commit with LFS models
d75fbc8
{% extends "base.html" %}
{% block title %}Radiant AI - Computer Vision{% endblock %}
{% block page_title %}Computer Vision Hub{% endblock %}
{% block content %}
<style>
.vision-layout { display: grid; grid-template-columns: 300px 1fr; gap: 25px; height: 100%; }
.tool-card { background: var(--glass-bg); border: 1px solid var(--glass-border); padding: 15px; border-radius: 16px; margin-bottom: 20px; }
.tool-title { font-weight: 600; margin-bottom: 8px; display: flex; align-items: center; gap: 10px; font-size: 0.95rem; }
.tool-icon { font-size: 1.4rem; color: var(--primary-cyan); }
.tool-desc { font-size: 0.8rem; color: var(--text-gray); margin-bottom: 15px; }
.color-picker-row { display: flex; align-items: center; gap: 10px; background: rgba(0,0,0,0.2); padding: 8px; border-radius: 8px; margin-bottom: 10px; }
input[type="color"] { -webkit-appearance: none; border: none; width: 32px; height: 32px; cursor: pointer; background: none; }
.canvas-area { position: relative; background: radial-gradient(circle at center, #1a1a24 0%, #0d0d12 100%); border-radius: 20px; border: 1px solid var(--glass-border); display: flex; align-items: center; justify-content: center; overflow: hidden; }
#visionPreview { max-width: 95%; max-height: 95%; object-fit: contain; display: none; }
.results-overlay { position: absolute; top: 20px; left: 20px; background: rgba(0,0,0,0.8); padding: 15px; border-radius: 12px; color: white; display: none; max-width: 250px; }
.processing-badge { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0,0,0,0.9); color: var(--primary-cyan); padding: 15px 30px; border-radius: 50px; border: 1px solid var(--primary-cyan); display: none; align-items: center; gap: 10px; z-index: 10; }
.action-bar { position: absolute; bottom: 20px; right: 20px; display: flex; gap: 10px; background: rgba(0,0,0,0.6); padding: 10px; border-radius: 12px; }
/* Checkbox Style */
.chain-control { display: flex; align-items: center; gap: 10px; background: rgba(189, 0, 255, 0.1); padding: 10px; border-radius: 8px; border: 1px solid rgba(189, 0, 255, 0.3); margin-bottom: 15px; }
.chain-control input { width: 18px; height: 18px; accent-color: #bd00ff; cursor: pointer; }
.chain-control label { font-size: 0.9rem; color: #bd00ff; cursor: pointer; font-weight: 500; }
</style>
<div class="vision-layout">
<aside class="controls-panel">
<div class="tool-card">
<input type="file" id="visionFileInput" accept="image/*" hidden>
<button class="btn btn-secondary" style="width: 100%;" onclick="document.getElementById('visionFileInput').click()">
<i class="ph ph-upload-simple"></i> Upload Source
</button>
</div>
<div class="chain-control">
<input type="checkbox" id="visionChainingCheckbox">
<label for="visionChainingCheckbox">Apply on Previous Result</label>
</div>
<div class="tool-card">
<div class="tool-title"><i class="ph-duotone ph-scan tool-icon"></i> Detection</div>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px;">
<button class="btn btn-secondary" onclick="runVisionTask('yolo')">Objects</button>
<button class="btn btn-secondary" onclick="runVisionTask('pose')">Pose (Body)</button>
</div>
</div>
<div class="tool-card">
<div class="tool-title"><i class="ph-duotone ph-sliders-horizontal tool-icon" style="color: #bd00ff;"></i> Utilities</div>
<button class="btn btn-secondary" onclick="runVisionTask('remove_bg')" style="width: 100%; margin-bottom: 10px;">Remove BG</button>
<div class="color-picker-row">
<input type="color" id="bgColorPicker" value="#ffffff">
<button class="btn btn-secondary" onclick="runVisionTask('replace_bg')" style="flex:1; padding: 5px;">Replace BG</button>
</div>
<button class="btn btn-secondary" onclick="runVisionTask('doc_scanner')" style="width: 100%;">Doc Scanner</button>
</div>
<div class="tool-card">
<div class="tool-title"><i class="ph-duotone ph-eye-slash tool-icon"></i> Privacy</div>
<div style="display: flex; gap: 10px; align-items: center; margin-bottom: 10px;">
<input type="range" id="blurSlider" min="5" max="100" value="30" style="flex:1;">
</div>
<button class="btn btn-secondary" onclick="runVisionTask('face_blur')" style="width: 100%;">Blur Faces</button>
<button class="btn btn-secondary" onclick="runVisionTask('canny_edge')" style="width: 100%; margin-top: 10px;">Edge Detect</button>
</div>
</aside>
<main class="canvas-area">
<div id="visionLoading" class="processing-badge"><i class="ph ph-spinner ph-spin"></i> AI Processing...</div>
<div id="visionPlaceholder" class="upload-placeholder">
<i class="ph ph-eye" style="font-size: 3rem; opacity: 0.5; margin-bottom: 10px;"></i>
<h3>Computer Vision</h3>
<p>Select a tool to analyze the image</p>
</div>
<img id="visionPreview" src="" alt="AI Result">
<div id="visionOverlay" class="results-overlay">
<strong style="color: var(--primary-cyan); display: block; margin-bottom: 5px;">Detections:</strong>
<ul id="detectionList" style="list-style: none; padding-left: 0;"></ul>
</div>
<div class="action-bar" id="visionActionBar" style="display: none;">
<a id="visionDownload" href="#" download="radiant_vision.png" class="btn btn-primary"><i class="ph ph-download-simple"></i> Download</a>
</div>
</main>
</div>
{% endblock %}