分享一个用腾讯云开发的彩票验奖小程序,聊聊 OCR + LLM 的组合实践 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
dagmurphy
V2EX    分享创造

分享一个用腾讯云开发的彩票验奖小程序,聊聊 OCR + LLM 的组合实践

  •  
  •   dagmurphy 12 天前 1951 次点击

    背景

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

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

    核心技术实现

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

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

    • 彩票样式五花八门,双色球、大乐透、福彩 3D 等格式都不一样
    • 光学识别出文字后,还要定位哪些是投注号码、哪些是期号、站点编号等
    • 号码排列有时是横向有时是纵向,传统规则解析很难覆盖所有情况

    后来采用了 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 操作数据库:

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

    这样做的好处:

    • 数据模型层面自动处理权限隔离(通过 _openid)
    • 统一的数据访问接口,避免到处写 collection().where()
    • 更容易做单元测试和代码复用

    3. 订阅通知的实现

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

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

    一些坑和优化

    1. 图片压缩问题

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

    2. OCR 成本控制

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

    • 前端裁剪功能,让用户只上传彩票部分
    • 缓存识别结果,避免重复识别同一张图

    功能亮点

    • 拍照即验奖: 拍照上传,2-3 秒出结果,自动计算奖金
    • 订阅开奖通知: 未开奖彩票可订阅,开奖后自动推送验奖结果
    • 票夹管理: 自动保存验奖历史,支持按状态筛选(中奖/未中奖/未开奖)
    • 适配多玩法: 目前支持双色球、大乐透、福彩 3D 等主流玩法

    技术栈总结

    • 前端: 微信小程序原生框架
    • 后端: Express + CloudBase Node SDK
    • 数据库: 云开发 NoSQL 数据库
    • AI 能力: 腾讯云 OCR + 智谱 AI GLM-4
    • 存储: 云开发对象存储

    一些思考

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

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


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

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

    • 支持刮刮乐彩票拍照验奖
    • 提升视觉解析速度
    • 增加中奖统计分析功能

    22 条回复    2025-11-15 14:33:16 +08:00
    spacebound
        1
    spacebound  
       12 天前
    老铁,官方的小程序支持扫码验奖。。。
    dagmurphy
        2
    dagmurphy  
    OP
       12 天前
    @spacebound 福彩只有部分省份支持扫码验奖。
    x1n04
        3
    x1n04  
       12 天前
    个人小程序支持订阅消息模板么?
    dagmurphy
        4
    dagmurphy  
    OP
       12 天前
    @x1n04 我的小程序主体是企业的,个人是不支持。
    Rrrrrr
        5
    Rrrrrr  
       12 天前
    为什么你可以做,5 ,6 年前我做了一个记录号码的,小程序不给过
    Sh1xin
        6
    Sh1xin  
       12 天前
    我的经验是直接用 LLM 。OCR 这步省掉,不然有些 OCR 识别出来以后结构有变化,反而会误导 LLM
    seamonster
        7
    seamonster  
       12 天前
    很实用,但是首页有点丑,哈哈哈哈,为什么拍照那里的白色背景是个椭圆形,就像分辨率不足被拉伸了一样
    dagmurphy
        8
    dagmurphy  
    OP
       12 天前
    @Sh1xin 感谢你提供的建议
    dagmurphy
        9
    dagmurphy  
    OP
       12 天前
    @seamonster 不会设计,审美不在线。。。
    dagmurphy
        10
    dagmurphy  
    OP
       12 天前
    @Rrrrrr 可能是申请的类目不对吧,或者是主体的问题,个人主体限制较多。
    SaiyZhao
        11
    SaiyZhao  
       12 天前
    有没有可能官方 app 和小程序扫条形码就能验奖啦。线下机子也能扫。
    theroad
        12
    theroad  
       12 天前
    19 年做了一个一样的,包含彩票记事本,自动兑奖的,修改了好几遍都不能上架
    houshengzi
        13
    houshengzi  
       12 天前
    之前也考虑做类似的小程序,看完评论后,没想到有这么多佬都做过了
    chunqiu233
        14
    chunqiu233  
       12 天前
    @dagmurphy 可以问下你是用什么类目吗
    dagmurphy
        15
    dagmurphy  
    OP
       11 天前 via iPhone
    @chunqiu233 信息查询类
    dagmurphy
        16
    dagmurphy  
    OP
       11 天前 via iPhone
    @SaiyZhao 不同的技术方案,12306 能买票,其它平台也有卖,另外功能特性也有差异。
    dagmurphy
        17
    dagmurphy  
    OP
       11 天前 via iPhone
    @theroad 能兑奖吗?你是说算奖吧
    theroad
        18
    theroad  
       11 天前
    @dagmurphy 对对对,算奖
    DavZhn
        19
    DavZhn  
       11 天前
    我一直买体彩,官方的小程序很好用哈哈
    dagmurphy
        20
    dagmurphy  
    OP
       11 天前
    @DavZhn 确实,我买体彩比较少,没深度使用过
    biubiula
        21
    biubiula  
       11 天前
    哈哈哈,我前些天用 AI 也搞了个彩票小程序,后面懒得收尾了
    dagmurphy
        22
    dagmurphy  
    OP
       10 天前 via iPhone
    @biubiula 那等有兴致了,再发个版本吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2859 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 14:09 PVG 22:09 LAX 06:09 JFK 09:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86