视频模板代码框架

This commit is contained in:
spllzh
2025-10-09 16:15:39 +08:00
parent 6dff49fcc1
commit b047a3be90
38 changed files with 971 additions and 116 deletions

View File

@@ -20,14 +20,15 @@ import java.util.Map;
import java.util.UUID;
/**
* 人脸检测日志服务实现
* 图像检测日志服务实现
*/
@Slf4j
@Service
public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, FaceDetectLog> implements IFaceDetectLogService {
private static final String API_URL = "https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/face-detect";
private static final String API_URL_AA = "https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/aa-detect";
@Value("${dashscope.api.key:}")
private String apiKey;
@@ -44,27 +45,27 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
try {
return save(faceDetectLog);
} catch (Exception e) {
log.error("保存人脸检测日志失败: {}", e.getMessage(), e);
log.error("保存图像检测日志失败: {}", e.getMessage(), e);
return false;
}
}
/**
* 执行人脸检测并保存日志
* 执行图像检测并保存日志
*/
public FaceDetectLog detectFaceAndSave(String imageUrl) {
return detectFaceAndSave(imageUrl, null, null, null);
}
/**
* 执行人脸检测并保存日志(带扩展信息)
* 执行图像检测并保存日志(带扩展信息)
*/
public FaceDetectLog detectFaceAndSave(String imageUrl, String ownerName, String ownerPhone, String avatarName) {
return detectFaceAndSave(imageUrl, ownerName, ownerPhone, avatarName, null);
}
/**
* 执行人脸检测并保存日志(带扩展信息和模型名)
* 执行图像检测并保存日志(带扩展信息和模型名)
*/
public FaceDetectLog detectFaceAndSave(String imageUrl, String ownerName, String ownerPhone, String avatarName, String model) {
if (apiKey == null || apiKey.trim().isEmpty()) {
@@ -109,20 +110,29 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(apiKey);
log.info("发送人脸检测请求requestBody : {}, 请求参数headers: {}", requestBody , headers);
log.info("发送图像检测请求requestBody : {}, 请求参数headers: {}", requestBody , headers);
// 创建请求实体 parameters.ratio 希望检测确认的画幅,可选 "1:1"或"3:4"。默认值为"1:1"。
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
ResponseEntity<String> response = null;
if ( modelName.equals("animate-anyone-detect-gen2")){
response = restTemplate.exchange(
API_URL_AA,
HttpMethod.POST,
requestEntity,
String.class
);
}else {
response = restTemplate.exchange(
API_URL,
HttpMethod.POST,
requestEntity,
String.class
);
}
// 发送请求
log.info("发送人脸检测请求请求ID: {}, 图片URL: {}", requestId, imageUrl);
ResponseEntity<String> response = restTemplate.exchange(
API_URL,
HttpMethod.POST,
requestEntity,
String.class
);
log.info("发送图像检测请求请求ID: {}, 图片URL: {}", requestId, imageUrl);
// 计算处理时间
long endTime = System.currentTimeMillis();
long processingTime = endTime - startTime;
@@ -134,7 +144,7 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
faceDetectLog.setResponseData(response.getBody());
// 处理响应
log.info("人脸检测响应,状态码: {}, 处理时间: {}ms", response.getStatusCode(), processingTime);
log.info("图像检测响应,response: {}, 处理时间: {}ms", response.toString(), processingTime);
// 解析JSON响应
if (response.getStatusCode() == HttpStatus.OK) {
@@ -146,25 +156,34 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
isSuccess = jsonResponse.get("output").get("pass").asBoolean();
faceDetectLog.setSuccess(isSuccess);
log.info("人脸检测结果 - pass: {}", isSuccess);
log.info("图像检测结果 - 头像 pass: {}", isSuccess);
}
if (jsonResponse.has("output") && jsonResponse.get("output").has("check_pass")) {
isSuccess = jsonResponse.get("output").get("check_pass").asBoolean();
faceDetectLog.setSuccess(isSuccess);
log.info("图像检测结果 (animate-anyone-detect-gen2 舞动人像 )- check_pass: {}", isSuccess);
}
// else {
// // 如果没有pass字段则根据HTTP状态码判断
// isSuccess = response.getStatusCode().is2xxSuccessful();
// faceDetectLog.setSuccess(isSuccess);
// }
// 检查是否有检测到人脸
// 检查是否有检测到图像
int faceCount = 0;
if (jsonResponse.has("output")) {
JsonNode output = jsonResponse.get("output");
// 根据pass字段判断是否检测到人脸
// 根据pass字段判断是否检测到图像
if (output.has("pass")) {
boolean pass = output.get("pass").asBoolean();
faceDetectLog.setFaceCount(1);
log.info("人脸检测结果 - pass: {}, 检测到人脸数量: {}", pass, faceDetectLog.getFaceCount());
log.info("图像检测结果 - pass: {}, 检测到图像数量: {}", pass, faceDetectLog.getFaceCount());
// 记录message信息
if (output.has("message")) {
@@ -173,13 +192,13 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
}
}
// 解析人脸区域坐标如果API返回中包含
// 解析图像区域坐标如果API返回中包含
if (output.has("face_bbox")) {
JsonNode faceBbox = output.get("face_bbox");
if (faceBbox.isArray()) {
String faceBboxStr = faceBbox.toString();
faceDetectLog.setFaceBbox(faceBboxStr);
log.info("人脸区域坐标: {}", faceBboxStr);
log.info("图像区域坐标: {}", faceBboxStr);
}
}
@@ -221,9 +240,9 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
// 保存到数据库
boolean saved = saveFaceDetectLog(faceDetectLog);
if (saved) {
log.info("人脸检测日志已保存请求ID: {}", requestId);
log.info("图像检测日志已保存请求ID: {}", requestId);
} else {
log.error("保存人脸检测日志失败请求ID: {}", requestId);
log.error("保存图像检测日志失败请求ID: {}", requestId);
}
return faceDetectLog;
@@ -233,7 +252,7 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
} catch (HttpServerErrorException e) {
return handleError(faceDetectLog, e, "服务器错误 (5xx): " + e.getStatusCode(), startTime);
} catch (Exception e) {
return handleError(faceDetectLog, e, "人脸检测请求失败: " + e.getMessage(), startTime);
return handleError(faceDetectLog, e, "图像检测请求失败: " + e.getMessage(), startTime);
}
}
@@ -257,7 +276,7 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
faceDetectLog.setResponseData(((HttpServerErrorException) e).getResponseBodyAsString());
}
log.error("人脸检测失败: {}", errorMessage);
log.error("图像检测失败: {}", errorMessage);
log.error("错误详情: {}", e.getMessage());
// 保存错误日志到数据库
@@ -305,7 +324,7 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
}
/**
* 分页查询人脸检测日志
* 分页查询图像检测日志
*/
@Override
public com.baomidou.mybatisplus.extension.plugins.pagination.Page<FaceDetectLog> getPageList(
@@ -394,7 +413,7 @@ public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, F
.average()
.orElse(0.0);
// 查询总人脸数量
// 查询总图像数量
int totalFaceCount = logs.stream()
.filter(log -> log.getFaceCount() != null)
.mapToInt(FaceDetectLog::getFaceCount)