网站首页/ 信息中心/ 档案百科/

零基础搭建数字档案馆语音识别档案系统实战

发布时间:2026年06月10日 08:25:16 浏览量:0

一、开发环境准备与依赖安装

在开始构建数字档案馆语音识别系统之前,必须先配置好运行环境。本系统基于Python开发,利用OpenAI的Whisper模型进行高精度语音转文字,使用Flask作为Web框架,SQLite作为轻量级数据库。请严格按照以下步骤操作,避免环境冲突。

1. 安装Python环境

确保系统已安装Python 3.9或更高版本。打开终端(Linux/Mac)或命令提示符(Windows),输入以下命令检查版本:

python --version

若未安装,请前往Python官网下载对应操作系统的安装包,安装时务必勾选"Add Python to PATH"

2. 安装FFmpeg

Whisper模型依赖FFmpeg处理音频流。如果系统中没有FFmpeg,语音转写功能将直接报错。

3. 创建项目目录与虚拟环境

在桌面或任意工作目录下创建项目文件夹,并建立Python虚拟环境以隔离依赖:

mkdir digital_archive_voice
cd digital_archive_voice
python -m venv venv

激活虚拟环境:

4. 安装Python依赖库

激活环境后,安装Flask框架和Whisper模型库。执行以下命令:

pip install flask openai-whisper

这一步会自动下载Flask及其依赖,以及Whisper运行所需的PyTorch等库,网络可能需要几分钟时间。

二、语音识别核心服务编写

零基础搭建数字档案馆语音识别档案系统实战

我们先编写一个独立的Python脚本来处理语音识别逻辑,确保核心功能可用。在项目根目录下创建文件 transcriber.py,并写入以下完整代码:

```python import whisper import os 加载Whisper模型,'base'模型兼顾速度与准确度,首次运行会自动下载约140MB的模型文件 如果需要更高精度,可改为 'small' 或 'medium',但显存和耗时会增加 model = whisper.load_model("base") def transcribe_audio(audio_path): """ 对指定路径的音频文件进行语音识别 :param audio_path: 音频文件绝对路径 :return: 识别出的文本字符串 """ if not os.path.exists(audio_path): raise FileNotFoundError(f"音频文件不存在: {audio_path}") print(f"正在处理文件: {audio_path} ...") 执行转写,language='zh' 指定主要识别中文,提升准确率 result = model.transcribe(audio_path, language='zh', fp16=False) text = result["text"].strip() return text if __name__ == "__main__": 测试代码:将此处路径替换为你本地的一个测试音频路径 test_file = "test_audio.wav" print(transcribe_audio(test_file)) pass ```

注意: 代码中设置了 fp16=False,这是为了兼容不支持FP16的CPU环境。如果你有NVIDIA显卡且配置了CUDA,可以去掉此参数以加速处理。

三、档案管理后端接口实现

接下来构建Flask后端,实现文件上传、调用识别服务、存储档案记录的功能。在项目根目录下创建 app.py

```python import os import sqlite3 from flask import Flask, request, jsonify, render_template, send_from_directory from transcriber import transcribe_audio app = Flask(__name__) 配置上传文件夹 UPLOAD_FOLDER = 'uploads' if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 允许的音频格式 ALLOWED_EXTENSIONS = {'wav', 'mp3', 'm4a', 'flac', 'ogg'} def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS def init_db(): """初始化SQLite数据库,创建档案表""" conn = sqlite3.connect('archives.db') cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS archives ( id INTEGER PRIMARY KEY AUTOINCREMENT, filename TEXT NOT NULL, audio_path TEXT NOT NULL, content TEXT, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') conn.commit() conn.close() @app.route('/') def index(): """返回前端页面""" return render_template('index.html') @app.route('/upload', methods=['POST']) def upload_file(): """处理音频文件上传并识别""" if 'file' not in request.files: return jsonify({"error": "没有文件部分"}), 400 file = request.files['file'] if file.filename == '': return jsonify({"error": "未选择文件"}), 400 if file and allowed_file(file.filename): 保存文件 filename = file.filename save_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(save_path) try: 调用识别服务 text_content = transcribe_audio(save_path) 存入数据库 conn = sqlite3.connect('archives.db') cursor = conn.cursor() cursor.execute("INSERT INTO archives (filename, audio_path, content) VALUES (?, ?, ?)", (filename, save_path, text_content)) conn.commit() archive_id = cursor.lastrowid conn.close() return jsonify({ "success": True, "id": archive_id, "filename": filename, "content": text_content }) except Exception as e: return jsonify({"error": str(e)}), 500 return jsonify({"error": "不支持的文件格式"}), 400 @app.route('/archives', methods=['GET']) def get_archives(): """获取所有档案列表""" conn = sqlite3.connect('archives.db') cursor = conn.cursor() cursor.execute("SELECT id, filename, content, create_time FROM archives ORDER BY create_time DESC") rows = cursor.fetchall() conn.close() data = [] for row in rows: data.append({ "id": row[0], "filename": row[1], "content": row[2], "create_time": row[3] }) return jsonify(data) if __name__ == '__main__': init_db() 启动服务,监听所有IP,端口5000 app.run(host='0.0.0.0', port=5000, debug=True) ```

四、前端交互页面开发

在项目根目录下创建一个名为 templates 的文件夹,并在其中新建 index.html。这个页面将提供文件上传表单和档案展示列表。

```html 数字档案馆语音识别系统
数字档案馆语音识别系统

上传语音档案



已识别档案列表

```

五、系统运行与全流程测试

代码编写完成后,即可启动系统进行实测。确保当前终端仍在虚拟环境中,且位于项目根目录下。

1. 启动Flask服务

在终端执行以下命令:

python app.py

终端显示 Running on http://0.0.0.0:5000 即表示启动成功。如果是本地测试,浏览器访问 http://localhost:5000

2. 执行测试用例

3. 验证数据持久化

关闭Flask服务(Ctrl+C),然后重新运行 python app.py。刷新浏览器页面,之前识别的档案记录依然存在,说明SQLite数据库存储功能正常。

六、生产环境部署建议

上述代码已完成核心闭环,但在实际生产环境中部署数字档案馆系统时,还需注意以下细节:

微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818