用了三个月语音笔记助手,说实话,踩的坑比记的笔记还多
哈哈,三个月前我突发奇想,要做个语音笔记助手。本来以为是个小项目,结果搞到现在,确实踩了不少坑。今天就来跟大家分享一下真实的体验。
项目背景
说实话,我记性不太好。开会的时候经常忘记领导说了什么重点,读书的时候转眼就忘了关键内容。以前都用手机录音,但整理起来简直是噩梦,一个小时的内容要花三个小时整理。
于是就萌生了做个语音笔记助手的想法,希望能把语音自动转成文字,还能智能提取重点、生成摘要。
技术栈选择
选型的时候,我其实挺纠结的:
# 核心依赖选择
requirements = {
"语音识别": ["whisper", "vosk", "speech_recognition"],
"文本处理": ["transformers", "spacy", "jieba"],
"数据库": ["sqlite3", "pymongo"],
"前端": ["streamlit", "gradio"]
}
一开始我选了 Whisper,毕竟 OpenAI 的模型,准确率应该不错吧?结果发现:
优点:
- 准确率确实高,尤其是带专业术语的内容
- 支持多语言切换
- 输出带时间戳
缺点:
- 体积太大了!动辄几个G的模型
- 速度慢,一分钟音频要1-2分钟处理
- 依赖 PyTorch,环境配置贼麻烦
后来换成了 Vosk,开源的,轻量级,但准确率又差点意思。最后还是用 Whisper,毕竟准确率优先嘛。
主要功能实现
1. 语音转文字
import whisper
import os
class VoiceTranscriber:
def __init__(self, model_size="base"):
self.model = whisper.load_model(model_size)
self.supported_formats = [".mp3", ".wav", ".m4a", ".flac"]
def transcribe_file(self, audio_path):
"""转换单个音频文件"""
if not os.path.exists(audio_path):
raise FileNotFoundError(f"音频文件不存在: {audio_path}")
if not any(audio_path.lower().endswith(ext) for ext in self.supported_formats):
raise ValueError(f"不支持的音频格式: {audio_path}")
result = self.model.transcribe(audio_path, word_timestamps=True)
return result
说实话,这个功能虽然简单,但坑不少。音频格式兼容、文件大小限制、批量处理时的内存管理,每一个都让人头疼。
2. 智能内容提取
转完文字只是第一步,怎么提取重点才是关键。
2. 智能内容提取
转完文字只是第一步,怎么提取重点才是关键。
from transformers import pipeline
class ContentExtractor:
def __init__(self):
self.summarizer = pipeline("summarization")
self.classifier = pipeline("zero-shot-classification")
def extract_key_points(self, text, categories=None):
"""提取关键信息"""
if categories is None:
categories = ["会议记录", "学习笔记", "个人想法", "任务事项"]
result = self.classifier(text, categories)
key_points = []
# 提取涉及关键类别的句子
sentences = text.split('。')
for category in result['labels'][:2]: # 取最相关的两个类别
if result['scores'][result['labels'].index(category)] > 0.7:
for sentence in sentences:
if len(sentence.strip()) > 10:
key_points.append({
'category': category,
'content': sentence.strip(),
'confidence': result['scores'][result['labels'].index(category)]
})
return key_points
这个功能真的很有用,但有时候模型的理解也让人哭笑不得。比如我把“这个需求挺复杂的”归类到了“个人想法”,其实应该是“任务事项”才对。
3. 数据存储与管理
import sqlite3
from datetime import datetime
class NotesManager:
def __init__(self, db_path="notes.db"):
self.conn = sqlite3.connect(db_path)
self.init_database()
def init_database(self):
"""初始化数据库表"""
cursor = self.conn.cursor()
# 主笔记表
cursor.execute('''
CREATE TABLE IF NOT EXISTS notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
content TEXT,
summary TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
audio_path TEXT,
tags TEXT
)
''')
self.conn.commit()
def save_note(self, title, content, summary, audio_path, tags=""):
"""保存笔记"""
cursor = self.conn.cursor()
cursor.execute('''
INSERT INTO notes (title, content, summary, audio_path, tags)
VALUES (?, ?, ?, ?, ?)
''', (title, content, summary, audio_path, tags))
self.conn.commit()
return cursor.lastrowid
实际使用体验
三个月下来,说实话,这个工具确实帮我节省了不少时间,但也有一些让我抓狂的地方。
好用的地方:
- 会议记录:以前开会要疯狂打字,现在只需要专心听,处理完就能得到完整的文字记录
- 学习笔记:看视频课程的时候,可以一边听一边记重点,效率提升不少
- 灵感记录:有了什么想法,直接说就行,不用担心忘记
让人头疼的问题:
- 方言识别:我老家是山东的,偶尔说几句方言,识别率就直线下降
- 多人说话:超过两个人同时说话,基本就乱套了
- 背景噪音:咖啡馆这种环境,基本没法用
- 专业术语:技术术语经常识别错误,还要手动纠正
优化之路
为了让这个工具更好用,我做了不少优化:
# 环境噪音过滤
import noisereduce as nr
def denoise_audio(audio_data, sample_rate):
"""降噪处理"""
reduced_noise = nr.reduce_noise(y=audio_data, sr=sample_rate)
return reduced_noise
# 多说话人分离
import pyannote.audio
from pyannote.core import Segment
def separate_speakers(audio_path):
"""分离多人音频"""
separator = pyannote.audio.Segmentation.from_pretrained("pyannote/speaker-diarization")
segmentation = Segment(audio_path)
return segmentation
说实话,环境降噪效果还行,但多人分离那块儿,pyannote 的模型在特定环境下确实不靠谱,经常搞错。
数据统计
用了三个月,我收集了不少数据:
| 指标 | 数值 |
|---|---|
| 总录音时长 | 约45小时 |
| 处理成功率 | 78% |
| 平均处理时间 | 2.3分钟/小时 |
| 准确率 | 82% |
说实话,这个准确率比我预期的高一些,主要是因为我养成了说话清晰的习惯。
未来计划
虽然现在这个版本已经能用,但还有不少改进空间:
- 实时识别:现在需要等音频录完才能处理,希望能实时识别
- 多语言支持:目前主要支持中文和英文,希望能支持更多语言
- 云端同步:现在数据都存在本地,希望能支持云端同步
- 移动端:虽然能用,但移动体验不够好
总结
说实话,做这个语音笔记助手的过程,比我想象的复杂得多。一开始以为就是简单调用几个API就行,结果发现坑一个接一个。
但是看到自己的笔记库慢慢充实起来,能随时搜索三个月前会议的内容,还是挺有成就感的。
如果你也经常需要记录语音内容,这个工具确实值得一试,但要做好心理准备,可能需要花不少时间优化和调试。
哈哈,反正我是不后悔的,毕竟现在开会终于不用疯狂打字了!
项目地址:https://github.com/reware-frame/voice-notes-assistant
欢迎一起改进,欢迎大家提交 Issue 和 PR!
更多推荐
所有评论(0)