feat: 增加打印信息

This commit is contained in:
砂糖
2025-10-08 10:00:36 +08:00
parent aa32f9e9ac
commit 524c8343e6
5 changed files with 40 additions and 41 deletions

View File

@@ -129,9 +129,17 @@ async def detect_file(
model_name: str,
file: UploadFile = File(...)
):
# 1. 打印 model_name直接打印字符串即可
print(f"接收到的 model_name: {model_name}")
# 2. 打印 file 的基本信息(文件名、内容类型等)
print(f"文件名: {file.filename}")
print(f"文件内容类型: {file.content_type}") # 例如 image/jpeg、text/plain 等
"""Detect objects in an uploaded image file"""
global model_manager
if not model_manager:
raise HTTPException(status_code=500, detail="Model manager not initialized")

View File

@@ -20,7 +20,6 @@
<svg-icon icon-class="code" />
</div>
<screenfull id="screenfull" class="right-menu-item hover-effect" />
<el-tooltip content="主题模式" effect="dark" placement="bottom">

View File

@@ -12,6 +12,11 @@
<el-option v-for="dict in task_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="模型" prop="modelName">
<el-select v-model="queryParams.modelName" placeholder="请选择模型" clearable>
<el-option v-for="dict in py_model_manager" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -40,7 +45,12 @@
<el-table v-loading="loading" :data="inspectionList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="任务ID" align="center" prop="taskId" />
<!-- <el-table-column label="任务ID" align="center" prop="taskId" /> -->
<el-table-column label="模型" align="center" prop="modelName">
<template #default="scope">
<dict-tag :options="py_model_manager" :value="scope.row.modelName" />
</template>
</el-table-column>
<el-table-column label="任务名称" align="center" prop="taskName" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="Cron表达式" align="center" prop="cronExpression" />
@@ -90,6 +100,11 @@
<el-form-item label="任务名称" prop="taskName">
<el-input v-model="form.taskName" placeholder="请输入任务名称" />
</el-form-item>
<el-form-item label="模型" prop="modelName">
<el-select v-model="form.modelName" placeholder="请选择模型" style="width: 100%">
<el-option v-for="dict in py_model_manager" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="设备" prop="deviceId">
<el-select v-model="form.deviceId" placeholder="请选择设备" style="width: 100%">
<el-option v-for="device in deviceList" :key="device.deviceId" :label="device.ip"
@@ -146,7 +161,7 @@ import Crontab from '@/components/Crontab'
import router from '@/router'
const { proxy } = getCurrentInstance();
const { sys_normal_disable, task_status } = proxy.useDict('sys_normal_disable', 'task_status');
const { sys_normal_disable, task_status, py_model_manager } = proxy.useDict('sys_normal_disable', 'task_status', 'py_model_manager');
const inspectionList = ref([]);
const deviceList = ref([]);

View File

@@ -1,10 +1,10 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
<el-form-item label="字典标签" prop="dictLabel">
<el-form-item label="模型简称" prop="dictLabel">
<el-input
v-model="queryParams.dictLabel"
placeholder="请输入字典标签"
placeholder="请输入模型简称"
clearable
style="width: 200px"
@keyup.enter="handleQuery"
@@ -70,15 +70,13 @@
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="字典编码" align="center" prop="dictCode" />
<el-table-column label="字典标签" align="center" prop="dictLabel">
<el-table-column label="模型简称" align="center" prop="dictLabel">
<template #default="scope">
<span v-if="(scope.row.listClass == '' || scope.row.listClass == 'default') && (scope.row.cssClass == '' || scope.row.cssClass == null)">{{ scope.row.dictLabel }}</span>
<el-tag v-else :type="scope.row.listClass == 'primary' ? '' : scope.row.listClass" :class="scope.row.cssClass">{{ scope.row.dictLabel }}</el-tag>
</template>
</el-table-column>
<el-table-column label="字典键值" align="center" prop="dictValue" />
<el-table-column label="字典排序" align="center" prop="dictSort" />
<el-table-column label="模型名称" align="center" prop="dictValue" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
@@ -109,27 +107,11 @@
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="dataRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="数据标签" prop="dictLabel">
<el-form-item label="模型简称" prop="dictLabel">
<el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
</el-form-item>
<el-form-item label="数据键值" prop="dictValue">
<el-input v-model="form.dictValue" placeholder="请输入数据键值" />
</el-form-item>
<el-form-item label="样式属性" prop="cssClass">
<el-input v-model="form.cssClass" placeholder="请输入样式属性" />
</el-form-item>
<el-form-item label="显示排序" prop="dictSort">
<el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="回显样式" prop="listClass">
<el-select v-model="form.listClass">
<el-option
v-for="item in listClassOptions"
:key="item.value"
:label="item.label + '(' + item.value + ')'"
:value="item.value"
></el-option>
</el-select>
<el-form-item label="模型名称" prop="dictValue">
<el-input v-model="form.dictValue" placeholder="请输入模型名称" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">

View File

@@ -71,28 +71,23 @@ public class HttpYoloDetector implements YoloDetector {
byte[] jpgBytes = new byte[(int)(buffer.capacity())];
buffer.get(jpgBytes);
buffer.deallocate();
// 准备HTTP请求参数
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
// 仅发送文件model_name 放到查询参数
// 1. 添加文件参数(正确)
body.add("file", new CustomByteArrayResource(jpgBytes, "image.jpg"));
// 2. 添加 model_name 作为表单参数(关键修改)
body.add("model_name", modelName); // 直接添加到表单数据中
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
// 将 model_name 作为查询参数
String urlWithQuery;
try {
String encoded = java.net.URLEncoder.encode(modelName, java.nio.charset.StandardCharsets.UTF_8.toString());
urlWithQuery = apiUrl + (apiUrl.contains("?") ? "&" : "?") + "model_name=" + encoded;
} catch (Exception ex) {
urlWithQuery = apiUrl + (apiUrl.contains("?") ? "&" : "?") + "model_name=" + modelName;
}
// 不需要拼接查询参数直接使用原始API URL
String url = apiUrl;
// 发送请求到Python服务
ResponseEntity<String> response = restTemplate.postForEntity(urlWithQuery, requestEntity, String.class);
// 发送请求
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
String responseBody = response.getBody();
if (!response.getStatusCode().is2xxSuccessful()) {
log.error("HTTP检测失败: status={}, body={}", response.getStatusCodeValue(), responseBody);