import React, { useState, useCallback } from 'react'; import { User, Upload, CheckCircle, XCircle, Loader2, Image as ImageIcon, AlertCircle, Info } from 'lucide-react'; 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(''); const { addNotification, success, error } = useNotifications(); // 选择图片文件 const handleSelectImage = useCallback(async () => { try { const selected = await open({ multiple: false, filters: [ { name: 'Images', extensions: ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp'] } ] }); if (selected) { const imagePath = Array.isArray(selected) ? selected[0] : selected; setSelectedImage(imagePath); // 创建预览URL const previewUrl = `file://${imagePath}`; setImagePreview(previewUrl); setResult(null); setErrorMessage(''); } } catch (err) { console.error('选择图片失败:', err); error('选择图片失败'); } }, [addNotification]); // 提交主体识别任务 const handleSubmitDetection = useCallback(async () => { if (!selectedImage) { addNotification({ type: 'warning', title: '请先选择图片' }); return; } setIsProcessing(true); setErrorMessage(''); setResult(null); setUploadProgress(0); try { // 1. 先上传图片到云端 setUploadProgress(10); const uploadResult = await fileUploadService.uploadFileToCloud( selectedImage, undefined, (progress) => { setUploadProgress(10 + progress * 0.6); // 上传占 60% 进度 } ); 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.Result.code === 10000) { success('主体识别任务提交成功'); } else { setErrorMessage(`识别失败: ${response.Result.message}`); error(`识别失败: ${response.Result.message}`); } } catch (err) { const errMsg = err instanceof Error ? err.message : '未知错误'; setErrorMessage(errMsg); error(`主体识别失败: ${errMsg}`); } finally { setIsProcessing(false); } }, [selectedImage, success, error]); // 清除结果 const handleClear = useCallback(() => { setSelectedImage(''); setImagePreview(''); setResult(null); setErrorMessage(''); }, []); return (
{/* 标题 */}

OmniHuman 主体识别

识别图片中是否包含人、类人、拟人等主体

{/* 功能说明 */}

功能说明:

  • 支持识别图片中的人物、类人、拟人等主体
  • 返回识别结果和处理后的图片
  • 支持多种图片格式:PNG、JPG、JPEG、GIF、BMP、WebP
{/* 图片选择区域 */}

选择图片

{selectedImage && ( )}
{/* 图片预览 */} {imagePreview && (
图片预览
预览图片
)}
{/* 操作按钮 */}
{/* 结果显示 */}

识别结果

{errorMessage && (
识别失败

{errorMessage}

)} {result && (
识别成功

任务ID: {result.Result.data?.task_id}

请求ID: {result.Result.request_id}

处理时间: {result.Result.time_elapsed}

{result.Result.data?.image_urls && result.Result.data.image_urls.length > 0 && (

处理后的图片

{result.Result.data.image_urls.map((url, index) => ( ))}
)} {result.Result.data?.resp_data && (

算法返回数据

{result.Result.data.resp_data}
)}
)} {!result && !errorMessage && !isProcessing && (

请选择图片并开始识别

)}
); }; export default OmniHumanDetectionTool;