feat: 检测算法开关设置 + AI大模型分析开关设置

This commit is contained in:
2026-04-16 21:41:25 +08:00
parent 7e7a967eb4
commit b3d5c80abf
5 changed files with 185 additions and 72 deletions

View File

@@ -505,6 +505,17 @@ function loadSettingsForm() {
document.getElementById('setting-auto-analyze').checked = config.auto_analyze !== false;
document.getElementById('setting-display-limit').value = config.display_limit || 20;
document.getElementById('setting-refresh-interval').value = config.refresh_interval || 5;
// Detection algorithm settings
document.getElementById('setting-use-haar').checked = config.use_haar_cascade !== false;
document.getElementById('setting-use-mediapipe').checked = config.use_mediapipe_face !== false;
document.getElementById('setting-use-face-rec').checked = config.use_face_recognition !== false;
// Vision API settings
document.getElementById('setting-use-vision-api').checked = config.use_vision_api === true;
document.getElementById('setting-vision-trigger').value = config.vision_api_trigger || 'person_change';
// API config
document.getElementById('setting-api-url').value = config.vision_api_url || '';
document.getElementById('setting-api-key').value = config.vision_api_key || '';
document.getElementById('setting-model').value = config.vision_model || '';
@@ -520,6 +531,17 @@ function saveSettings() {
auto_analyze: document.getElementById('setting-auto-analyze').checked,
display_limit: parseInt(document.getElementById('setting-display-limit').value),
refresh_interval: parseInt(document.getElementById('setting-refresh-interval').value),
// Detection algorithms
use_haar_cascade: document.getElementById('setting-use-haar').checked,
use_mediapipe_face: document.getElementById('setting-use-mediapipe').checked,
use_face_recognition: document.getElementById('setting-use-face-rec').checked,
// Vision API
use_vision_api: document.getElementById('setting-use-vision-api').checked,
vision_api_trigger: document.getElementById('setting-vision-trigger').value,
// API config
vision_api_url: document.getElementById('setting-api-url').value,
vision_api_key: document.getElementById('setting-api-key').value,
vision_model: document.getElementById('setting-model').value
@@ -533,14 +555,13 @@ function saveSettings() {
.then(function(res) { return res.json(); })
.then(function(data) {
if (data.success) {
alert('Settings saved!');
showToast('Settings saved!', 1500);
closeSettingsModal();
// Reload config to apply new refresh interval
loadConfig();
refreshAll();
}
})
.catch(function(e) { alert('Error: ' + e.message); });
.catch(function(e) { showToast('Error: ' + e.message, 3000); });
}
function browseImagesDir() {

View File

@@ -137,6 +137,43 @@
</div>
</div>
<div class="settings-section">
<h4>检测算法设置</h4>
<div class="setting-item">
<label>Haar Cascade 人体检测:</label>
<input type="checkbox" id="setting-use-haar" checked>
<span class="setting-desc">传统人体检测(备用)</span>
</div>
<div class="setting-item">
<label>MediaPipe 人脸检测:</label>
<input type="checkbox" id="setting-use-mediapipe" checked>
<span class="setting-desc">高精度人脸检测</span>
</div>
<div class="setting-item">
<label>Face Recognition:</label>
<input type="checkbox" id="setting-use-face-rec" checked>
<span class="setting-desc">人脸识别(识别同一人)</span>
</div>
</div>
<div class="settings-section">
<h4>AI大模型分析</h4>
<div class="setting-item">
<label>启用大模型分析:</label>
<input type="checkbox" id="setting-use-vision-api">
<span class="setting-desc">调用 Vision API 详细分析</span>
</div>
<div class="setting-item">
<label>触发条件:</label>
<select id="setting-vision-trigger">
<option value="person_change">人员变化时</option>
<option value="motion">运动检测时</option>
<option value="brightness">亮度变化时</option>
<option value="always">总是分析</option>
</select>
</div>
</div>
<div class="settings-section">
<h4>API 设置</h4>
<div class="setting-item">

View File

@@ -649,6 +649,16 @@ button {
gap: 10px;
}
.person-actions {
display: flex;
gap: 10px;
}
.setting-desc {
color: #888;
font-size: 12px;
}
@media (max-width: 768px) {
.control-panel {
flex-direction: column;