住房与城乡建设部建设环境工程技术中心网站微网站界面尺寸
2026/4/17 13:10:26 网站建设 项目流程
住房与城乡建设部建设环境工程技术中心网站,微网站界面尺寸,嘉兴模板建站软件,选座位系统wordpress语音识别计费系统集成#xff1a;Paraformer按次统计部署逻辑实现 1. 场景需求与技术背景 在构建语音识别服务的商业化系统时#xff0c;一个常见的核心需求是按调用次数精准计费。无论是面向企业客户还是开发者平台#xff0c;都需要对每一次语音转写请求进行记录和统计Paraformer按次统计部署逻辑实现1. 场景需求与技术背景在构建语音识别服务的商业化系统时一个常见的核心需求是按调用次数精准计费。无论是面向企业客户还是开发者平台都需要对每一次语音转写请求进行记录和统计确保计费透明、可追溯。本文将围绕Paraformer-large 语音识别离线版带 Gradio 可视化界面镜像讲解如何在其基础上扩展出一套完整的“按次统计”功能实现从用户上传音频到识别完成的全过程调用计数并为后续接入计费系统打下基础。这套方案特别适用于AI 能力服务平台内部语音处理工具后台多租户 ASR 接入网关按量付费的语音转写 SaaS 系统我们不依赖外部数据库或复杂架构先实现轻量级本地日志计数机制保证可落地、易维护。2. 原始服务结构分析当前镜像提供的app.py已经集成了 FunASR 的 Paraformer-large 模型并通过 Gradio 提供了简洁的 Web 界面。其核心流程如下用户上传音频文件或录音后端调用model.generate()执行识别返回带标点的文字结果但原始代码中没有任何调用记录机制无法知道总共被使用了多少次每次识别的是什么文件是否成功耗时多久这显然不能满足生产级计费系统的需要。3. 计数逻辑设计原则为了实现稳定可靠的按次统计我们需要遵循以下设计原则原子性每次有效识别请求必须且仅能增加一次计数持久化计数不能只存在内存中重启后不能丢失可审计保留每条记录的时间、文件名、结果状态等信息低侵入尽量不影响原有识别性能和用户体验易扩展未来可对接数据库、API 回调、权限控制等基于这些要求我们选择采用本地 JSON 日志 内存缓存的方式实现初步统计系统。4. 实现按次统计的核心修改4.1 新增日志与计数模块我们在原app.py基础上新增两个关键函数log_request()和get_stats()用于记录每次请求并读取统计数据。# app_with_counter.py import gradio as gr from funasr import AutoModel import os import json import time from datetime import datetime # 模型加载部分保持不变 model_id iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch model AutoModel( modelmodel_id, model_revisionv2.0.4, devicecuda:0 ) # 定义日志路径 LOG_FILE /root/workspace/asr_requests.jsonl COUNTER_FILE /root/workspace/counter.json def load_counter(): 读取当前总调用次数 if os.path.exists(COUNTER_FILE): try: with open(COUNTER_FILE, r) as f: data json.load(f) return data.get(count, 0) except: return 0 else: # 初始化计数器 save_counter(0) return 0 def save_counter(count): 保存调用次数 with open(COUNTER_FILE, w) as f: json.dump({count: count}, f) def log_request(filename, status, text_length0, duration0.0): 记录单次请求详情 entry { timestamp: datetime.now().isoformat(), filename: os.path.basename(filename) if filename else unknown, status: status, # success / failed text_length: text_length, duration: round(duration, 2), client_ip: 127.0.0.1 # 后续可通过 request 获取真实 IP } with open(LOG_FILE, a, encodingutf-8) as f: f.write(json.dumps(entry, ensure_asciiFalse) \n) # 初始化计数器 call_count load_counter()4.2 修改识别函数以嵌入计数逻辑接下来在asr_process函数中加入计数和日志记录def asr_process(audio_path): global call_count start_time time.time() if audio_path is None: return 请先上传音频文件 try: # 执行识别 res model.generate( inputaudio_path, batch_size_s300, ) # 计算耗时 duration time.time() - start_time if len(res) 0 and text in res[0]: result_text res[0][text] # 成功识别记录日志并累加计数 log_request(audio_path, success, len(result_text), duration) call_count 1 save_counter(call_count) return result_text else: log_request(audio_path, failed, 0, duration) return 识别失败请检查音频格式 except Exception as e: duration time.time() - start_time log_request(audio_path, error, 0, duration) return f识别过程中发生错误{str(e)}4.3 在界面上展示调用统计最后我们在 Gradio 界面中添加一个“系统统计”区域实时显示当前调用总量with gr.Blocks(titleParaformer 语音转文字控制台) as demo: gr.Markdown(# Paraformer 离线语音识别转写) gr.Markdown(支持长音频上传自动添加标点符号和端点检测。) # 统计信息展示区 with gr.Row(): gr.Markdown(f### 当前已处理请求{call_count} 次) with gr.Row(): with gr.Column(): audio_input gr.Audio(typefilepath, label上传音频或直接录音) submit_btn gr.Button(开始转写, variantprimary) with gr.Column(): text_output gr.Textbox(label识别结果, lines15) submit_btn.click(fnasr_process, inputsaudio_input, outputstext_output) # 添加刷新按钮查看最新统计 refresh_btn gr.Button(刷新统计) def refresh_stats(): current load_counter() return gr.Markdown.update(valuef### 当前已处理请求{current} 次) refresh_btn.click(refresh_stats, outputsNone)5. 启动命令与服务配置更新后的服务启动命令如下source /opt/miniconda3/bin/activate torch25 cd /root/workspace python app_with_counter.py注意请确保/root/workspace/目录有写权限否则日志和计数文件无法生成。你也可以将其设置为开机自启在镜像配置中填写该命令即可。6. 数据验证与日志格式说明运行一段时间后你会在/root/workspace/下看到两个新文件counter.json存储当前总调用次数{count: 23}asr_requests.jsonl每行一条请求记录JSON Lines 格式{timestamp: 2025-04-05T10:23:12.345678, filename: meeting.mp3, status: success, text_length: 1245, duration: 8.76, client_ip: 127.0.0.1} {timestamp: 2025-04-05T10:25:01.234567, filename: noise.wav, status: failed, text_length: 0, duration: 2.11, client_ip: 127.0.0.1}这种格式便于后期用脚本批量分析例如统计每日调用量、成功率、平均响应时间等。7. 进阶优化建议虽然当前方案已能满足基本计费需求但在实际生产环境中还可进一步增强7.1 支持多用户区分可通过前端表单增加“用户名”输入框或将 JWT Token 解码后提取用户身份写入日志字段。7.2 对接数据库将日志写入 SQLite 或 PostgreSQL便于做复杂查询和报表展示。7.3 增加 API 接口返回调用次数暴露一个/stats接口供外部系统拉取调用数据import flask app flask.Flask(__name__) app.route(/stats) def stats(): return {total_calls: load_counter()}7.4 文件大小与时长限制防刷可在asr_process中加入音频时长判断超过阈值拒绝处理避免资源滥用。7.5 异步任务队列高并发场景使用 Celery Redis 实现异步处理防止大文件阻塞主线程同时更方便做任务排队和计费控制。8. 安全与稳定性注意事项日志轮转长期运行需定期归档旧日志防止磁盘占满异常捕获全面所有可能出错的地方都应 try-except 包裹避免因日志写入失败导致服务崩溃权限控制若开放公网访问务必增加登录认证机制备份机制定期备份counter.json和日志文件防止意外丢失获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询