融合语音识别和OCR的智能记账助手
在传统记账基础上集成语音输入和票据拍照识别,用户可通过说话或扫一扫发票快速记账。利用Android语音API和OCR库(如Tesseract或百度OCR)实现,数据可分析消费趋势并生成简报。
版本
v1 · running
需求
43 条
文件
2015 个 · 20 MB
公开时间
2026/6/23 16:09:59
更新时间
2026/6/23 20:52:42
需求树
43 条用户认证与账户管理
提供用户的注册、登录、密码重置和账户信息管理功能,保障个人记账数据安全隔离。
用户注册
注册表单包含手机号(11位校验,提交时查重,已注册则提示"该手机号已注册,请直接登录"并跳转登录页)、登录密码(8-20位字母数字组合)、确认密码(与密码一致校验);提交后展示6位验证码(本地生成,生产环境可替换为短信SDK),60秒倒计时可重发,验证通过后创建账户并自动登录跳转主页。表单含loading态、字段实时校验错误提示、空状态引导文案。
用户登录
登录表单包含手机号和密码,支持"记住我"持久化登录态(7天token);登录失败时提示"手机号或密码错误"(不区分具体原因),连续5次失败锁定15分钟。含loading态与网络异常toast提示。
密码重置
在登录页提供"忘记密码"入口,输入已注册手机号后发送验证码,验证通过后进入新密码设置页(8-20位字母数字组合,与确认密码一致),重置成功后跳转登录页并toast提示。
账户信息管理
在"我的"页面显示用户头像(可选上传)、昵称(可编辑)、手机号(只读);提供修改密码入口(需输入旧密码验证);提供退出登录按钮(二次确认弹窗,清除本地token)。
语音记账
通过Android语音API将用户口述的消费信息转文字并解析为结构化记账条目。
语音输入触发
主页底部导航栏设置独立"语音记账"按钮,点击后弹出录音浮层(含波形动画、录音时长显示、取消/完成按钮);首次使用时申请麦克风权限,被拒时引导去系统设置开启。最长录音60秒,超时自动停止。
语音识别转文字
调用Android SpeechRecognizer API将录音转为文字,识别过程中显示"识别中…"loading态;识别成功返回文字结果展示在确认区;识别失败时提示"未识别到内容,请重新说一次"并提供重试按钮;支持离线识别降级提示。
语音内容解析为记账条目
对识别出的文字进行结构化解析:提取金额(支持"花了50块""消费一百二十元"等口语表达)、消费类别关键词映射(支出:如"吃饭""午餐"→餐饮,"打车"→交通,"房租"→住房;收入:如"工资""发薪"→工资,"奖金""年终"→奖金,"兼职"→兼职,"理财收益"→理财)、日期(默认当天,"昨天""上周五"等相对时间需转换)。解析失败时保留原始文字让用户手动修正。
语音记账确认与保存
解析结果展示在确认卡片中,包含金额(可编辑)、类别(图标网格选择器,与手动记账一致,支持支出/收入分组)、日期(可改)、备注(原始语音文字可编辑);用户确认后点击"保存"写入账目数据库并toast"记账成功";点击"取消"丢弃本次识别结果返回主页。
OCR票据识别记账
通过拍照或选取图片对发票/小票进行OCR文字识别,提取金额、商户、日期等关键字段自动填入记账表单。
拍照/选取票据图片
主页提供"扫票据"入口,点击后弹出底部ActionSheet选择"拍照"(调系统Camera)或"从相册选取";首次使用时申请相机权限和存储权限,被拒时引导去设置。拍照后展示预览图,含"重新拍摄"和"使用照片"按钮。
OCR文字识别
对选定票据图片调用Tesseract OCR(优先本地离线)或百度OCR API(在线)进行文字识别;识别过程显示进度条和"正在识别票据…"文案;识别成功返回原始文字内容;识别失败/超时(15秒)提示"识别失败,请确保照片清晰"并提供重试。
票据信息解析提取
从OCR原始文字中提取:总金额(匹配"合计""总计""实付"后数字)、商户名称(通常位于票据顶部)、日期(匹配"日期""时间"后内容)、明细列表(按行解析商品名+单价+数量)。对增值税发票额外提取发票代码、发票号码、税额。提取失败字段留空交由用户补充。
识别结果确认与保存
解析结果展示在确认卡片中:金额、类别(图标网格选择器,与手动记账一致,商户名自动推断为默认选中)、日期、备注(含商户名和原始摘要),所有字段可手动编辑;底部展示原始票据缩略图可点击放大查看。确认后保存到账目数据库,同时保存票据图片关联到该条账目。
票据图片预处理
在OCR识别前对票据图片做预处理:自动检测图片方向并旋转矫正(基于EXIF或边缘检测)、裁剪至票据区域(可选手动调整裁剪框)、增强对比度和锐化以提升文字清晰度。预处理在原图上叠加半透明裁剪框预览,用户确认后再进入OCR识别流程。
手动记账
提供传统手动填写记账表单的能力,作为语音和OCR的兜底方案。
手动记账表单
表单包含:金额(必填,小数点后最多2位,输入时实时格式化)、收支类型切换(支出/收入,默认支出)、类别下拉选择、日期选择器(默认当天)、备注文本(选填,最多200字)。所有字段含实时校验提示,保存按钮在必填字段为空时置灰不可点击。
分类选择器
分类以图标+名称网格展示,支持预设分类(餐饮、交通、购物、住房、娱乐、医疗、教育、其他),每个分类有对应emoji图标。支出和收入分别展示不同分类集合(收入:工资、奖金、兼职、理财、其他)。分类可点击选中高亮,支持搜索框快速查找。
日期选择与快速记账
日期选择器默认当天,点击弹出日历组件支持年月快速切换(左右箭头),可选范围近5年;提供"今天""昨天"快捷按钮。底部备注输入框支持换行。保存成功toast提示并返回主页,自动刷新账目列表。
账目管理
提供账目列表的查看、筛选、搜索、编辑和删除功能,以及收支分类的自定义管理。
账目列表展示
主页以时间倒序列表展示账目,每条显示:分类图标、分类名、备注摘要(截断)、金额(支出红色/收入绿色)、日期。按月分组并显示月度合计(支出总额/收入总额)。列表支持下拉刷新和上拉加载更多(每页20条),空状态显示插图和"还没有账目,去记一笔吧"引导。
账目筛选与搜索
顶部搜索栏支持按备注关键词模糊搜索;筛选面板(点击筛选图标展开)支持按分类(多选)、日期范围(起止日期选择器)、收支类型(全部/支出/收入)、金额区间(最小值/最大值)组合筛选。筛选条件以标签形式展示在列表上方,点击×可逐个清除;有筛选条件时列表仅显示匹配结果。
账目编辑
点击列表中的账目进入编辑页,表单字段与新增一致(金额、收支类型、分类、日期、备注),预填现有数据;如有关联票据图片则展示缩略图可替换。保存时更新数据库并返回列表自动刷新,toast"修改成功"。
账目删除
列表项左滑露出红色删除按钮,点击弹出确认弹窗"确定删除这笔记录?删除后不可恢复",确认后删除数据库记录及关联票据图片,列表移除该项并toast"已删除";提供3秒内"撤销"按钮可恢复记录及关联票据图片(从应用私有目录临时缓存中恢复,3秒后物理清除)。
收支分类管理
在设置页提供"分类管理"入口,列出所有预设分类(支出和收入分组展示),支持:新增自定义分类(输入名称+选emoji图标)、编辑现有分类名称和图标、删除自定义分类(预设分类不可删除,删除后该分类下账目归入"其他")。
消费分析与简报
基于记账数据生成消费趋势图表、分类占比统计和消费简报,帮助用户了解消费习惯。
月度消费趋势图表
"分析"Tab展示近6个月收支趋势折线图(X轴月份,Y轴金额,支出红色折线+收入绿色折线),支持点击数据点显示当月具体数值tooltip。图表下方显示月度环比变化百分比(↑/↓箭头+百分比)。无数据月份显示空状态"暂无数据"。
分类消费占比
以饼图/环形图展示当月各分类支出占比(每类显示百分比+金额),图例可点击切换某分类显示/隐藏;环形图中心显示当月总支出金额。支持切换查看"本月""上月""本季""本年"。
消费简报生成
每月1日自动生成上月消费简报卡片,内容包括:总支出/总收入、最大支出类别及金额、环比变化、日均消费、消费建议。消费建议触发规则:餐饮占比>50%提示"餐饮支出占比较高,建议关注";连续3月总支出环比增长>20%提示"支出持续增长,建议控制";某分类单月环比增长>100%提示该分类异常增长;无异常时显示"本月消费结构健康"。简报以卡片形式展示在分析页顶部,支持分享为图片。用户也可手动选择月份生成历史简报。
数据管理
提供数据的本地持久存储、备份导出功能,保障数据安全与可迁移性。
数据本地持久存储
使用Room数据库本地存储所有账目记录(金额、分类、日期、备注、票据图片路径、创建时间)和用户设置(自定义分类、偏好设置)。数据库版本迁移策略:新增字段时做兼容迁移不丢数据。
数据导出
设置页提供"导出数据"功能,支持导出为CSV文件(含金额、收支类型、分类、日期、备注字段),可选导出时间范围(全部/近1月/近3月/近1年/自定义)。导出后调系统分享Sheet发送到微信/邮件/文件管理器等。
技术约束与架构
定义项目核心技术选型与架构约束,包括Android平台、本地数据库、语音识别SDK和OCR方案。
Android原生开发(Kotlin/Java)
采用Android原生开发,最低支持Android 7.0(API 24),目标SDK 34。使用Kotlin为主要开发语言,Gradle构建。UI层采用Material Design 3组件库,导航使用Jetpack Navigation。
本地数据库方案
使用Room持久化库(基于SQLite),定义账目实体(金额、分类、日期、备注、票据图片路径、收支类型、创建时间)和用户设置实体。数据库版本通过Migration策略升级,不丢数据。
语音识别方案
使用Android SpeechRecognizer API(系统内置),在线识别为主;离线识别作为降级方案(需预下载离线语音包)。语音解析使用正则+关键词匹配策略提取金额、分类和日期,不需额外NLP模型。
OCR方案
优先使用Tesseract OCR(tess-two Android移植版)进行本地离线识别;首次使用时引导下载中文简体语言包(chi_sim,约50MB),下载失败或未下载时自动降级为百度OCR API在线识别(需用户在设置页配置API Key)。票据解析使用正则匹配提取金额、商户、日期等关键字段。票据图片本地存储至应用内部目录。
性能:语音识别响应时间
语音识别从录音结束到返回文字结果的P95响应时间 ≤ 3秒(在线模式),超时判定为识别失败并提示用户重试。离线模式P95 ≤ 5秒。
性能:OCR识别响应时间
OCR识别从图片提交到返回文字结果的P95响应时间 ≤ 5秒(本地Tesseract),在线百度OCR ≤ 3秒。超时15秒判定为失败,提示用户检查图片质量后重试。
安全:本地数据隐私保护
用户账目数据仅存储在本地Room数据库,不上传服务器。用户密码使用bcrypt哈希后存储。导出CSV文件时弹出安全提示"数据包含个人财务信息,请妥善保管"。登录态token有效期7天,本地加密存储。
性能:启动速度与交互流畅性
应用冷启动到主页可交互时间 ≤ 2秒;页面切换动画帧率保持60fps不掉帧;账目列表使用RecyclerView + Paging分页(每页20条),滑动无卡顿;票据图片压缩至 ≤ 500KB 后存储。
应用导航与页面结构
应用采用底部导航栏(BottomNavigationView)三Tab结构:「首页」(账目列表+记账入口)、「分析」(趋势图表+简报)、「我的」(账户管理+设置)。首页顶部含搜索/筛选栏,FAB浮动按钮触发记账方式选择(语音/扫票据/手动)。页面路由使用Jetpack Navigation管理,支持返回栈。登录/注册独立于Tab之外,未登录时显示Auth页面。