From 4ce50b15d7edfe3f0deb65f8ecfb7b600afb5fcf Mon Sep 17 00:00:00 2001 From: imeepos Date: Tue, 5 Aug 2025 18:25:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20OmniHuman=20?= =?UTF-8?q?=E4=B8=BB=E4=BD=93=E8=AF=86=E5=88=AB=E5=9B=BE=E7=89=87=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题修复: - 修复本地文件路径无法被火山云 API 识别的问题 - 添加图片先上传到云端再调用识别 API 的完整流程 - 集成 fileUploadService 实现图片云端上传 - 添加上传进度显示,提升用户体验 技术改进: - 使用 fileUploadService.uploadFileToCloud() 上传图片 - 获取云端 URL 后调用火山云识别 API - 添加详细的进度反馈 (上传 60% + 识别 40%) - 完善错误处理,区分上传失败和识别失败 现在用户可以正常使用 OmniHuman 主体识别功能了! --- .../pages/tools/OmniHumanDetectionTool.tsx | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/apps/desktop/src/pages/tools/OmniHumanDetectionTool.tsx b/apps/desktop/src/pages/tools/OmniHumanDetectionTool.tsx index 78a3ec3..e6be351 100644 --- a/apps/desktop/src/pages/tools/OmniHumanDetectionTool.tsx +++ b/apps/desktop/src/pages/tools/OmniHumanDetectionTool.tsx @@ -12,12 +12,14 @@ import { import { open } from '@tauri-apps/plugin-dialog'; import { useNotifications } from '../../components/NotificationSystem'; import videoGenerationService from '../../services/videoGenerationService'; +import fileUploadService from '../../services/fileUploadService'; import { RealmanAvatarPictureCreateRoleOmniResponse } from '../../types/videoGeneration'; const OmniHumanDetectionTool: React.FC = () => { const [selectedImage, setSelectedImage] = useState(''); const [imagePreview, setImagePreview] = useState(''); const [isProcessing, setIsProcessing] = useState(false); + const [uploadProgress, setUploadProgress] = useState(0); const [result, setResult] = useState(null); const [errorMessage, setErrorMessage] = useState(''); @@ -63,16 +65,31 @@ const OmniHumanDetectionTool: React.FC = () => { setIsProcessing(true); setErrorMessage(''); setResult(null); + setUploadProgress(0); try { - // 这里需要先上传图片到云端获取URL - // 为了演示,我们假设图片已经上传到云端 - const imageUrl = selectedImage; // 实际应用中需要上传到云端 + // 1. 先上传图片到云端 + setUploadProgress(10); + const uploadResult = await fileUploadService.uploadFileToCloud( + selectedImage, + undefined, + (progress) => { + setUploadProgress(10 + progress * 0.6); // 上传占 60% 进度 + } + ); - const response = await videoGenerationService.realmanAvatarPictureCreateRoleOmniSubmitTask(imageUrl); - + if (uploadResult.status !== 'success' || !uploadResult.url) { + throw new Error(uploadResult.error || '图片上传失败'); + } + + setUploadProgress(70); + + // 2. 使用云端 URL 调用识别 API + const response = await videoGenerationService.realmanAvatarPictureCreateRoleOmniSubmitTask(uploadResult.url); + + setUploadProgress(100); setResult(response); - + if (response.code === 10000) { success('主体识别任务提交成功'); } else { @@ -178,7 +195,7 @@ const OmniHumanDetectionTool: React.FC = () => { ) : ( )} - {isProcessing ? '识别中...' : '开始识别'} + {isProcessing ? `处理中... ${uploadProgress}%` : '开始识别'}