2026/4/6 8:03:59
网站建设
项目流程
Gradio界面定制化SenseVoice-Small ONNX模型WebUI主题与功能扩展1. 引言从能用到好用你用过语音识别工具吗是不是经常觉得界面太简陋功能太单一上传音频、点击识别、查看结果整个过程就像在操作一台老式打字机虽然能用但总觉得少了点什么。今天我们要聊的就是如何把一个功能强大的语音识别模型从一个“能用”的工具变成一个“好用”的应用。SenseVoice-Small ONNX模型本身已经很强大了——支持50多种语言识别速度快还能分析情感和声音事件。但它的默认Web界面说实话有点太“工程师思维”了。想象一下如果你是一个内容创作者需要批量处理采访录音或者是一个客服经理想要实时分析通话录音中的客户情绪。这时候一个简单的上传-识别界面肯定不够用。你需要更直观的界面、更丰富的功能、更个性化的体验。这就是我们今天要解决的问题如何深度定制Gradio界面让SenseVoice-Small模型不仅识别准确而且用起来顺手、看起来舒服。我会带你一步步改造这个WebUI从主题美化到功能扩展让你拥有一个属于自己的专业级语音识别平台。2. 理解SenseVoice-Small模型的核心能力在开始定制界面之前我们先要搞清楚这个模型到底能做什么。只有理解了它的能力边界我们才知道如何在界面上更好地展示这些功能。2.1 模型的核心优势SenseVoice-Small ONNX模型有几个特别值得关注的亮点多语言识别能力它支持超过50种语言这意味着你可以用它处理英文采访、中文会议、日语动漫、韩语综艺……基本上覆盖了主流的使用场景。而且官方说识别效果比Whisper模型还要好这个我们后面可以实际测试一下。富文本输出这不是简单的文字转写。模型能识别说话人的情感——是高兴、生气还是悲伤还能检测音频中的事件——有没有掌声、笑声、咳嗽声这些信息对于内容分析、客服质检来说价值巨大。极速推理10秒的音频识别只需要70毫秒。这是什么概念眨一下眼睛的时间它已经完成了识别。对于实时应用或者批量处理大量音频的场景这个速度优势太明显了。完整的部署生态模型提供了Python、C、Java、C#等多种语言的客户端支持这意味着你可以很容易地把它集成到现有的系统中。我们今天要定制的Gradio界面只是它众多应用方式中的一种。2.2 默认界面的局限性现在打开默认的WebUI你会发现界面相当简洁一个上传音频的按钮几个示例音频一个“开始识别”的按钮结果显示区域功能都有了但体验上还有很大提升空间。比如界面风格比较单调批量处理不方便识别结果的展示方式比较原始缺少一些实用的小功能接下来我们就针对这些问题一个个来解决。3. Gradio界面主题深度定制Gradio的强大之处在于它不仅仅是一个快速搭建界面的工具还提供了丰富的主题定制能力。我们可以从视觉上彻底改造这个语音识别应用。3.1 安装和配置主题首先我们需要安装一些主题扩展。在终端中运行pip install gradio-themesGradio官方提供了一些内置主题但如果你想更个性化可以使用社区主题。这里我推荐几个适合语音识别应用的主题专业深色主题适合长时间工作的场景减少视觉疲劳import gradio as gr theme gr.themes.Soft( primary_hueblue, secondary_huegray, neutral_hueslate, fontgr.themes.GoogleFont(Inter) )明亮简洁主题适合演示或分享给他人使用theme gr.themes.Base( primary_hueindigo, secondary_hueamber, fontgr.themes.GoogleFont(Roboto) )自定义主题如果你有品牌色或者特定风格要求可以完全自定义custom_theme gr.themes.Default().set( body_background_fill#f8f9fa, button_primary_background_fill#3b82f6, button_primary_background_fill_hover#2563eb, border_color_primary#e5e7eb, color_accentblue )3.2 布局优化与组件美化好的布局能让用户一眼就知道该怎么用。我们来重新设计一下界面布局import gradio as gr # 创建自定义CSS custom_css /* 整体容器样式 */ .gradio-container { max-width: 1200px !important; margin: 0 auto !important; padding: 20px !important; } /* 标题区域美化 */ .header { text-align: center; margin-bottom: 30px; padding: 20px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 12px; color: white; } /* 卡片式设计 */ .card { background: white; border-radius: 12px; padding: 24px; margin-bottom: 20px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); border: 1px solid #e5e7eb; } /* 按钮美化 */ button { border-radius: 8px !important; font-weight: 500 !important; transition: all 0.2s ease !important; } button:hover { transform: translateY(-2px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15) !important; } /* 进度条美化 */ .progress-bar { height: 8px !important; border-radius: 4px !important; } /* 结果区域美化 */ .result-box { background: #f8fafc; border-radius: 8px; padding: 16px; border-left: 4px solid #3b82f6; margin-top: 16px; } # 在Gradio界面中应用CSS with gr.Blocks(themetheme, csscustom_css) as demo: # 标题区域 gr.HTML( div classheader h1 stylemargin: 0; font-size: 2.5rem;️ SenseVoice语音识别平台/h1 p stylemargin: 10px 0 0 0; opacity: 0.9;支持50语言 | 情感分析 | 声音事件检测/p /div ) # 主要内容区域 - 使用两栏布局 with gr.Row(): with gr.Column(scale1): # 左侧输入区域卡片 with gr.Group(elem_classescard): gr.Markdown(### 音频输入) audio_input gr.Audio(label上传或录制音频, typefilepath) with gr.Row(): gr.Button( 开始录音, variantsecondary) gr.Button( 选择文件, variantsecondary) gr.Markdown(**或者使用示例音频**) example_audio gr.Examples( examples[ [/path/to/example1.wav, 中文对话示例], [/path/to/example2.wav, 英文演讲示例], [/path/to/example3.wav, 多语言混合示例] ], inputsaudio_input, label快速开始 ) with gr.Column(scale2): # 右侧设置和结果区域 with gr.Group(elem_classescard): gr.Markdown(### ⚙️ 识别设置) with gr.Row(): language gr.Dropdown( choices[自动检测, 中文, 英语, 日语, 韩语, 粤语], value自动检测, label识别语言 ) output_format gr.Dropdown( choices[纯文本, 带时间戳, SRT字幕, JSON格式], value纯文本, label输出格式 ) with gr.Row(): enable_emotion gr.Checkbox(label启用情感分析, valueTrue) enable_events gr.Checkbox(label启用事件检测, valueTrue) recognize_btn gr.Button( 开始识别, variantprimary, sizelg) # 结果展示区域 with gr.Group(elem_classescard): gr.Markdown(### 识别结果) # 进度条 progress gr.ProgressBar(label处理进度, visibleFalse) # 多标签结果展示 with gr.Tabs(): with gr.TabItem( 转写文本): text_output gr.Textbox( label识别结果, lines8, placeholder识别结果将显示在这里..., elem_classesresult-box ) with gr.TabItem( 情感分析): emotion_output gr.JSON(label情感分析结果) with gr.TabItem( 声音事件): events_output gr.JSON(label检测到的事件) with gr.TabItem( 统计信息): stats_output gr.JSON(label音频统计)这个布局设计有几个关键改进卡片式设计每个功能模块都用卡片包裹视觉上更清晰两栏布局左侧输入右侧设置和结果符合用户操作习惯标签页展示把不同类型的识别结果分开展示避免信息混杂进度反馈添加进度条让用户知道处理状态响应式设计使用CSS确保在不同屏幕尺寸下都能正常显示3.3 交互反馈优化好的界面不仅要好看还要好用。我们添加一些交互反馈# 添加处理状态反馈 def update_progress(progress_value, progress_obj): progress_obj.visible True return gr.update(valueprogress_value) # 识别完成后的回调 def on_recognition_complete(): return gr.update(visibleFalse) # 绑定事件 recognize_btn.click( fnlambda: gr.update(visibleTrue), outputsprogress ).then( fnprocess_audio, # 你的识别函数 inputs[audio_input, language, enable_emotion, enable_events], outputs[text_output, emotion_output, events_output, stats_output] ).then( fnlambda: gr.update(visibleFalse), outputsprogress )4. 功能扩展与实用工具集成现在界面好看了接下来我们给它增加一些真正实用的功能。4.1 批量处理功能对于需要处理大量音频文件的用户来说一个一个上传太麻烦了。我们来添加批量处理功能import os from pathlib import Path import json from datetime import datetime def batch_process_audio(files, language_setting, output_format): 批量处理音频文件 results [] total_files len(files) for idx, file_path in enumerate(files): # 更新进度 progress (idx 1) / total_files # 处理单个文件 try: # 这里调用你的识别函数 result process_single_audio( file_path, languagelanguage_setting, output_formatoutput_format ) # 保存结果 filename Path(file_path).stem result_data { filename: filename, timestamp: datetime.now().isoformat(), result: result } results.append(result_data) except Exception as e: results.append({ filename: Path(file_path).name, error: str(e), status: failed }) # 生成汇总报告 report { total_files: total_files, successful: len([r for r in results if error not in r]), failed: len([r for r in results if error in r]), results: results, export_time: datetime.now().isoformat() } return report # 在界面中添加批量处理组件 with gr.Group(elem_classescard): gr.Markdown(### 批量处理) batch_files gr.File( label选择多个音频文件, file_countmultiple, file_types[.wav, .mp3, .m4a, .flac] ) batch_language gr.Dropdown( choices[自动检测, 中文, 英语, 日语, 韩语, 粤语], value自动检测, label批量处理语言设置 ) batch_format gr.Dropdown( choices[JSON, TXT, SRT, CSV], valueJSON, label输出格式 ) with gr.Row(): batch_process_btn gr.Button( 开始批量处理, variantprimary) batch_download gr.File(label下载结果, visibleFalse) batch_progress gr.ProgressBar(label批量处理进度) batch_summary gr.JSON(label处理摘要, visibleFalse) # 绑定批量处理事件 def process_batch(files, language, format_type): if not files: return gr.update(value{}, visibleTrue), gr.update(visibleTrue) # 处理文件 report batch_process_audio(files, language, format_type) # 生成可下载的文件 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) output_filename fbatch_results_{timestamp}.{format_type.lower()} # 根据格式保存结果 if format_type JSON: import json with open(output_filename, w, encodingutf-8) as f: json.dump(report, f, ensure_asciiFalse, indent2) elif format_type TXT: with open(output_filename, w, encodingutf-8) as f: for result in report[results]: if result in result: f.write(f {result[filename]} \n) f.write(result[result][text] \n\n) return gr.update(valueoutput_filename, visibleTrue), gr.update(valuereport, visibleTrue) batch_process_btn.click( fnprocess_batch, inputs[batch_files, batch_language, batch_format], outputs[batch_download, batch_summary] )4.2 实时录音与处理对于需要实时转写的场景我们添加录音功能import sounddevice as sd import soundfile as sf import numpy as np import threading import queue class AudioRecorder: def __init__(self, sample_rate16000): self.sample_rate sample_rate self.is_recording False self.audio_queue queue.Queue() self.recording_thread None def start_recording(self): 开始录音 self.is_recording True self.audio_data [] def callback(indata, frames, time, status): if status: print(f录音状态: {status}) if self.is_recording: self.audio_queue.put(indata.copy()) self.recording_thread threading.Thread( targetself._record_worker, args(callback,) ) self.recording_thread.start() def _record_worker(self, callback): 录音工作线程 with sd.InputStream( samplerateself.sample_rate, channels1, callbackcallback, blocksize1024 ): while self.is_recording: sd.sleep(100) def stop_recording(self): 停止录音并返回音频数据 self.is_recording False if self.recording_thread: self.recording_thread.join() # 收集所有音频数据 all_audio [] while not self.audio_queue.empty(): all_audio.append(self.audio_queue.get()) if all_audio: audio_array np.concatenate(all_audio) return audio_array return None def save_recording(self, audio_data, filenamerecording.wav): 保存录音到文件 sf.write(filename, audio_data, self.sample_rate) return filename # 在界面中添加实时录音组件 recorder AudioRecorder() with gr.Group(elem_classescard): gr.Markdown(### 实时录音转写) with gr.Row(): record_btn gr.Button(● 开始录音, variantsecondary, sizesm) stop_btn gr.Button(■ 停止录音, variantsecondary, sizesm, interactiveFalse) save_btn gr.Button( 保存录音, variantsecondary, sizesm, interactiveFalse) recording_status gr.Textbox( label录音状态, value准备录音..., interactiveFalse ) recording_timer gr.HTML( div styletext-align: center; font-size: 24px; font-weight: bold; color: #3b82f6; 00:00:00 /div ) # 实时转写结果显示 live_transcript gr.Textbox( label实时转写, lines4, placeholder转写结果将实时显示在这里..., interactiveFalse ) # 录音控制函数 import time def start_recording(): 开始录音 recorder.start_recording() return ( gr.update(interactiveFalse), # 开始按钮禁用 gr.update(interactiveTrue), # 停止按钮启用 gr.update(value录音中..., style{color: red}), gr.update(interactiveFalse) # 保存按钮禁用 ) def stop_recording(): 停止录音 audio_data recorder.stop_recording() if audio_data is not None: # 立即进行识别 result process_audio_data(audio_data) return ( gr.update(interactiveTrue), gr.update(interactiveFalse), gr.update(value录音完成正在识别...), gr.update(interactiveTrue), result[text] ) return ( gr.update(interactiveTrue), gr.update(interactiveFalse), gr.update(value录音已停止), gr.update(interactiveFalse), ) # 绑定事件 record_btn.click( fnstart_recording, outputs[record_btn, stop_btn, recording_status, save_btn] ) stop_btn.click( fnstop_recording, outputs[record_btn, stop_btn, recording_status, save_btn, live_transcript] )4.3 高级功能语音情感仪表盘利用SenseVoice的情感识别能力我们可以创建一个可视化的情感分析仪表盘import plotly.graph_objects as go import plotly.express as px def create_emotion_dashboard(emotion_data): 创建情感分析仪表盘 if not emotion_data: return None # 解析情感数据 emotions emotion_data.get(emotions, []) if not emotions: return None # 创建情感分布饼图 labels [e[type] for e in emotions] values [e[score] for e in emotions] fig_pie go.Figure(data[go.Pie( labelslabels, valuesvalues, hole.3, marker_colorspx.colors.qualitative.Set3 )]) fig_pie.update_layout( title情感分布, height300 ) # 创建情感趋势图如果有时间序列数据 if timeline in emotion_data: timeline emotion_data[timeline] fig_line go.Figure() for emotion_type in set([e[type] for e in timeline]): emotion_values [ e[score] for e in timeline if e[type] emotion_type ] timestamps [ e[timestamp] for e in timeline if e[type] emotion_type ] fig_line.add_trace(go.Scatter( xtimestamps, yemotion_values, modelinesmarkers, nameemotion_type )) fig_line.update_layout( title情感变化趋势, xaxis_title时间, yaxis_title情感强度, height300 ) return [fig_pie, fig_line] return [fig_pie] # 在界面中添加情感仪表盘 with gr.Accordion( 情感分析仪表盘, openFalse): emotion_charts gr.Plot(label情感可视化) # 更新图表函数 def update_emotion_charts(emotion_result): charts create_emotion_dashboard(emotion_result) return charts if charts else gr.update()4.4 导出与分享功能识别结果需要能够方便地导出和分享def export_results(text_result, emotion_result, events_result, format_type): 导出识别结果 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) if format_type TXT: content f语音识别结果 生成时间: {datetime.now().strftime(%Y-%m-%d %H:%M:%S)} 转写文本: {text_result} 情感分析: {json.dumps(emotion_result, ensure_asciiFalse, indent2) if emotion_result else 未启用情感分析} 声音事件: {json.dumps(events_result, ensure_asciiFalse, indent2) if events_result else 未启用事件检测} filename ftranscript_{timestamp}.txt elif format_type SRT: # 假设text_result是带时间戳的格式 content convert_to_srt(text_result) filename fsubtitle_{timestamp}.srt elif format_type JSON: data { metadata: { export_time: datetime.now().isoformat(), model: SenseVoice-Small-ONNX, version: 1.0 }, transcription: text_result, emotion_analysis: emotion_result, audio_events: events_result } content json.dumps(data, ensure_asciiFalse, indent2) filename fresults_{timestamp}.json elif format_type CSV: # 创建CSV格式 import csv import io output io.StringIO() writer csv.writer(output) writer.writerow([类型, 内容, 时间戳]) writer.writerow([转写文本, text_result, ]) if emotion_result: for emotion in emotion_result.get(emotions, []): writer.writerow([ 情感分析, f{emotion[type]}: {emotion[score]}, emotion.get(timestamp, ) ]) if events_result: for event in events_result.get(events, []): writer.writerow([ 声音事件, f{event[type]} ({event[confidence]}), event.get(start_time, ) ]) content output.getvalue() filename fresults_{timestamp}.csv # 保存文件 with open(filename, w, encodingutf-8) as f: f.write(content) return filename # 在界面中添加导出功能 with gr.Group(elem_classescard): gr.Markdown(### 导出与分享) with gr.Row(): export_format gr.Dropdown( choices[TXT, SRT, JSON, CSV], valueTXT, label导出格式 ) export_btn gr.Button( 导出结果, variantsecondary) share_btn gr.Button( 生成分享链接, variantsecondary) export_file gr.File(label下载文件, visibleFalse) share_link gr.Textbox(label分享链接, visibleFalse) # 绑定导出事件 export_btn.click( fnexport_results, inputs[text_output, emotion_output, events_output, export_format], outputsexport_file )5. 性能优化与部署建议定制了这么漂亮的界面加了这么多功能最后我们还要确保它运行流畅、稳定可靠。5.1 界面性能优化懒加载与缓存策略from functools import lru_cache import hashlib lru_cache(maxsize100) def cached_recognition(audio_path, language, enable_emotion, enable_events): 带缓存的识别函数避免重复处理相同音频 # 生成缓存键 cache_key hashlib.md5( f{audio_path}_{language}_{enable_emotion}_{enable_events}.encode() ).hexdigest() # 检查缓存 if cache_key in recognition_cache: return recognition_cache[cache_key] # 实际处理 result process_audio(audio_path, language, enable_emotion, enable_events) # 更新缓存 recognition_cache[cache_key] result return result # 初始化缓存 recognition_cache {}异步处理与进度反馈import asyncio from concurrent.futures import ThreadPoolExecutor executor ThreadPoolExecutor(max_workers4) async def async_process_audio(audio_path, language, enable_emotion, enable_events): 异步处理音频避免阻塞界面 loop asyncio.get_event_loop() # 在线程池中运行识别任务 result await loop.run_in_executor( executor, process_audio, audio_path, language, enable_emotion, enable_events ) return result # 在Gradio中使用异步处理 recognize_btn.click( fnlambda: gr.update(visibleTrue, value0), outputsprogress ).then( fnasync_process_audio, inputs[audio_input, language, enable_emotion, enable_events], outputs[text_output, emotion_output, events_output, stats_output] ).then( fnlambda: gr.update(visibleFalse), outputsprogress )5.2 部署配置优化Gradio服务器配置# 在启动Gradio时添加优化参数 demo.queue( concurrency_count4, # 并发处理数 max_size20, # 队列最大长度 api_openFalse # 关闭API文档生产环境 ).launch( server_name0.0.0.0, server_port7860, shareFalse, # 生产环境关闭分享链接 authNone, # 如果需要认证可以设置 auth_message请输入访问密码, ssl_verifyTrue, debugFalse, # 生产环境关闭调试模式 show_errorTrue, quietFalse, show_apiFalse, max_threads40, # 最大线程数 enable_queueTrue )Nginx反向代理配置如果需要公网访问server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:7860; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 超时设置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } # 静态文件缓存 location /static { alias /path/to/static/files; expires 1y; add_header Cache-Control public, immutable; } }5.3 监控与日志添加基本的监控和日志功能import logging from datetime import datetime # 配置日志 logging.basicConfig( levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(asr_webui.log), logging.StreamHandler() ] ) logger logging.getLogger(__name__) # 添加使用统计 class UsageStats: def __init__(self): self.stats { total_requests: 0, successful: 0, failed: 0, languages: {}, avg_processing_time: 0, start_time: datetime.now() } def log_request(self, language, successTrue, processing_time0): 记录请求统计 self.stats[total_requests] 1 if success: self.stats[successful] 1 else: self.stats[failed] 1 # 更新语言统计 if language in self.stats[languages]: self.stats[languages][language] 1 else: self.stats[languages][language] 1 # 更新平均处理时间 current_avg self.stats[avg_processing_time] total_processed self.stats[successful] self.stats[failed] self.stats[avg_processing_time] ( current_avg * (total_processed - 1) processing_time ) / total_processed logger.info(fRequest processed: language{language}, success{success}, time{processing_time:.2f}s) def get_stats(self): 获取统计信息 uptime datetime.now() - self.stats[start_time] self.stats[uptime] str(uptime) return self.stats # 初始化统计 stats_tracker UsageStats() # 在识别函数中添加统计 def process_audio_with_stats(audio_path, language, enable_emotion, enable_events): start_time time.time() try: result process_audio(audio_path, language, enable_emotion, enable_events) processing_time time.time() - start_time # 记录成功请求 stats_tracker.log_request( languagelanguage, successTrue, processing_timeprocessing_time ) return result except Exception as e: processing_time time.time() - start_time # 记录失败请求 stats_tracker.log_request( languagelanguage, successFalse, processing_timeprocessing_time ) logger.error(fAudio processing failed: {str(e)}) raise e # 添加统计查看功能 with gr.Accordion( 系统统计, openFalse): stats_display gr.JSON(label使用统计, valuestats_tracker.get_stats()) refresh_stats_btn gr.Button( 刷新统计) refresh_stats_btn.click( fnstats_tracker.get_stats, outputsstats_display )6. 总结打造属于你的专业语音识别平台通过这一系列的定制和扩展我们已经把一个基础的SenseVoice-Small ONNX模型Web界面变成了一个功能丰富、界面美观、体验优秀的语音识别平台。让我们回顾一下都做了哪些改进6.1 界面美化方面主题定制提供了多种主题选择从专业深色到明亮简洁布局优化采用卡片式设计和两栏布局信息层次更清晰交互反馈添加了进度条、状态提示等实时反馈响应式设计确保在不同设备上都能良好显示6.2 功能扩展方面批量处理支持同时处理多个音频文件大大提高工作效率实时录音内置录音功能支持实时转写和分析情感仪表盘可视化展示情感分析结果更直观易懂多种导出格式支持TXT、SRT、JSON、CSV等多种格式导出分享功能方便团队协作和结果共享6.3 性能优化方面缓存机制避免重复处理相同内容异步处理保持界面响应流畅并发控制合理利用系统资源监控统计了解系统使用情况便于优化6.4 实际应用建议根据不同的使用场景你可以选择性地启用或调整这些功能个人学习研究可以重点关注实时录音和情感分析功能用于语言学习或心理学研究。内容创作批量处理和多种导出格式特别有用可以快速处理采访录音、生成字幕。客服质检情感分析和声音事件检测是关键可以帮助分析客户情绪和通话质量。多语言项目利用模型的多语言能力处理国际化内容。6.5 进一步优化方向如果你还想继续完善这个平台可以考虑用户系统添加登录和用户管理保存个人设置和历史记录API接口提供RESTful API方便其他系统集成插件系统支持第三方插件扩展更多功能移动端适配优化移动端体验支持手机浏览器访问离线模式添加PWA支持实现部分功能的离线使用最重要的是这个定制过程展示了Gradio的强大灵活性。你完全可以根据自己的需求继续添加或修改功能。SenseVoice-Small模型提供了强大的语音识别能力而Gradio让我们能够以最合适的方式展示和使用这些能力。现在你不仅拥有了一个强大的语音识别工具更拥有了一个可以根据需求不断进化的平台。从今天开始让你的语音识别体验从“能用”变成“好用”从“工具”变成“助手”。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。