V2EX 前天 16:43
小程序实现彩票拍照验奖
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了一款利用微信小程序和腾讯云开发实现彩票拍照验奖的工具。该工具的核心技术采用OCR识别与大语言模型(LLM)结合,解决了彩票样式多样、号码识别困难的问题。通过OCR识别文字,再由LLM进行结构化解析,准确提取投注号码、期号等关键信息,并与开奖数据比对,自动计算奖金。后端采用云托管和数据模型设计,实现了用户数据隔离和便捷的数据管理。此外,还实现了订阅开奖通知功能,并在图片压缩、OCR成本控制等方面进行了优化。该项目展示了OCR+LLM结合在处理非标准化信息上的优势,以及Serverless架构对个人开发者的便利性。

📸 **拍照即验奖,高效便捷**:该小程序通过拍照上传彩票图片,利用腾讯云OCR技术识别票面文字,并结合智谱AI的LLM进行智能解析,能够准确识别不同玩法的投注号码、期号等信息,并与开奖数据进行比对,在2-3秒内快速给出验奖结果和奖金计算,极大地简化了传统验奖流程。

💡 **OCR+LLM的智能解析方案**:面对彩票样式繁多、号码排列不一等难题,项目采用了OCR识别与LLM结构化提取的创新组合。LLM能够理解上下文信息,准确判断号码类型(如红球、蓝球),相比传统的规则匹配,显著提高了识别的准确性和鲁棒性,降低了对新彩票样式的适配成本。

☁️ **Serverless架构,专注业务开发**:后端技术选型为腾讯云的云开发(CloudBase)和云托管(Cloud Run),其Serverless架构省去了服务器运维的麻烦。通过CloudBase SDK操作数据模型,实现了用户数据的权限隔离(通过`_openid`)和统一的数据访问接口,使得开发者可以更专注于业务逻辑的实现和功能的迭代。

🔔 **订阅通知与票夹管理**:为提升用户体验,小程序提供了未开奖彩票的订阅通知功能,开奖后自动推送验奖结果。同时,自动保存验奖历史记录,并支持按状态筛选,方便用户管理自己的彩票信息,形成一个完整的“票夹”功能。

⚙️ **成本优化与功能亮点**:在实际应用中,项目通过前端图片压缩(限制尺寸和质量)和缓存识别结果等方式,有效控制了OCR的成本和存储开销。整体功能亮点包括拍照即验奖、开奖订阅通知、票夹管理以及对双色球、大乐透、福彩3D等主流玩法的支持。

背景

之前帮家人买过几次彩票,验奖时发现体验挺麻烦的:要么去投注站扫描,要么手动一个个核对号码。作为程序员当然想到能不能写个工具解决,于是就有了这个小程序项目。

技术选型上选择了微信小程序 + 腾讯云开发(CloudBase),主要是看中了云开发的 Serverless 架构,省去了运维的麻烦,可以专注在业务逻辑上。

核心技术实现

1. OCR 识别 + LLM 解析的组合方案

最开始的想法是直接用 OCR 识别彩票上的号码,但实际遇到了几个问题:

后来采用了 OCR + LLM 结构化提取 的方案:

// 1. 先用腾讯云 OCR 识别文字const ocrResult = await customOCRService.detectFromDataURL(imageData);// 2. 将 OCR 结果交给智谱 AI 的 LLM 进行结构化解析const lotteryInfo = await parseLotteryByZhipuLLM(ocrResult.ocr_result);// 3. 获取开奖数据进行比对const issue = await getIssue(app, lotteryType, lotteryInfo.issue);const calcRes = await calculateWinning(lotteryInfo, issue);

LLM 的好处是可以理解上下文,自动识别出"这是双色球"、"这些是红球号码"、"这是蓝球",准确率比纯规则匹配高很多。

2. 云托管 + 数据模型设计

后端采用云托管(Cloud Run)部署 Express 服务,配合 CloudBase SDK 操作数据库:

// 使用数据模型而不是直接操作 databaseconst models = cloudBaseClient.getModels();await models.tickets.create({  data: {    lottery_type,    issue,    numbers,    status: isOpened ? 'winning' : 'undrawn',    _openid: openId  // 安全隔离,每个用户只能查看自己的数据  }});

这样做的好处:

3. 订阅通知的实现

未开奖的彩票可以订阅开奖通知,技术上用的是微信小程序订阅消息能力:

// 前端申请订阅权限wx.requestSubscribeMessage({  tmplIds: ['xxx'],  success: (res) => {    // 调用后端接口记录订阅    callCloudApi('/api/message/subscribe', { ticketId, issue })  }})// 后端定时任务检查开奖// 当检测到新期开奖时,批量推送消息给订阅用户

一些坑和优化

1. 图片压缩问题

最初直接上传原图,有些用户拍照动辄 5-8MB,上传慢还占存储。后来加了前端压缩,限制宽度 1200px,质量 0.8,效果不错。

2. OCR 成本控制

腾讯云 OCR 按次计费,为了省钱做了些优化:

功能亮点

技术栈总结

一些思考

这个项目让我对 OCR + LLM 结合 有了新的认识。传统做法是 OCR 识别后用正则或规则提取信息,但面对非标准化的场景(比如各种彩票样式),维护成本很高。引入 LLM 做结构化提取后,准确率和鲁棒性都提升了不少,而且几乎不需要针对新样式单独写规则。

另外云开发这种 Serverless 模式确实适合个人开发者,不用操心服务器、域名备案、数据库运维这些琐事,专注写业务逻辑就行。


小程序搜索"彩运多"可以体验,欢迎交流技术实现细节。

项目还在持续优化中,后续计划:


Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

彩票验奖 微信小程序 腾讯云开发 OCR 大语言模型 LLM Serverless 拍照识彩票 AI Lottery Verification WeChat Mini Program Tencent Cloud Development Optical Character Recognition Large Language Model Serverless Architecture AI Lottery Scan
相关文章