2026/8/31 15:52:49

YOLO+大模型:工业数字识别检测系统从选型到实战

YOLO+大模型:工业数字识别检测系统从选型到实战 这两年做工业视觉和自动化项目的人多多少少都会遇到一个场景现场采集回来的仪表照片要求自动读出数字并上传系统。很多人第一反应是用 OCR 库结果发现反光、倾斜、字体不统一、数字重叠时传统 OCR 的识别率很不稳定也有人想直接调用视觉大模型让模型看一眼图片就把数字读出来但延迟和成本又让人犹豫。最后大家往往会回到目标检测这条路上先用 YOLO 把数字区域框出来再做分类或拼接形成完整读数。可一旦打开 GitHub 搜索 YOLOv8、YOLOv10、YOLOv11、YOLOv12甚至还有 v26 这样的新编号很多人会陷入选型焦虑到底该从哪个版本入手这篇文章想先给出一个明确判断数字识别这类任务YOLOv8 已经足够作为基线v10、v11、v12 甚至更新的版本收益主要体现在训练效率、边缘部署、注意力机制等工程维度而不是那种换一个版本精度就大涨的质变。相比之下真正让系统从能用变成好用的往往是后处理规则和大语言模型的语义理解层。千问、DeepSeek 这类大语言模型在这个项目里不是用来替代检测模型的而是用来把识别出一串数字升级为读懂这串读数并自动完成异常判断、报表生成、设备联动。接下来我会按一条完整链路展开从任务边界和模型选型讲起再到数据集标注、YOLO 训练、FastAPI 部署最后集成千问或 DeepSeek 做智能分析。文章会给出可直接复制的代码、配置文件以及一套不依赖运气的模型对比方法。1. 先搞清楚数字识别检测系统到底在解决什么问题很多讨论把数字识别和OCR混在一起这是第一个容易踩的坑。OCR 通常指从图像中提取文本它处理的是印刷体、手写体、自然场景文字而本文说的数字识别检测特指识别数字字符区域比如电表读数、水表读数、银行卡号、包装日期、门牌号。它往往有几个 OCR 很难搞定的特征第一数字字符小且密集。电表上的一串数字往往只有几十个像素高OCR 对这种小目标的定位能力不如专门训练的目标检测模型稳定。第二现场环境光线复杂。反光、阴影、遮挡会让字符边缘不清晰传统的 OCR 预处理很容易误分割。第三语义后缀很重要。很多表计读数包含小数位、单位、正负号你可能需要检测数字 小数点 负号这些组合这超出了通用 OCR 的输出范围。所以这套系统真正的技术闭环是YOLO 负责框出每个数字字符并判断它是几后处理负责按空间顺序拼接成读数大语言模型负责判断读数是否正常、是否需要告警、如何生成结构化记录。三个模块各管一段缺一不可。对开发者来说最有价值的不是把某个 YOLO 版本调到极致而是把这条链路跑通让每个环节都可控、可替换、可回归。2. YOLOv8/v10/v11/v12 模型演进与选型思路YOLO 系列的版本号演进很快但如果只看数字识别这类小目标、单类别或十类别的任务核心差异并没有想象中那么大。下面这张对比表可以作为选型时的快速参考。版本发布时间核心变化对数字识别项目的影响YOLOv82023Ultralytics 统一检测、分割、分类框架C2f 结构Anchor-Free生态最稳权重多社区资料全适合做基线YOLOv102024无 NMS 训练端到端检测双标签分配推理组件更简单部署时少一个后处理环节YOLOv112024引入 C3k2、C2PSA 等模块Ultralytics 新默认版本训练效率提升是官方维护最积极的版本之一YOLOv122025引入注意力机制 Area Attention兼顾实时性与感受野在遮挡、背景复杂场景可能有收益但显存开销更大v26 等新编号社区/项目命名通常是某个仓库或团队对 YOLO 的深度定制版本选型时先看有没有官方权重能不能进 Ultralytics 流程这里要说明一下v26这个问题。截止本文写作时官方生态里还没有一个公认的 YOLOv26更多是社区项目或企业内部仓库为了区分迭代轮次起的编号。选型时如果遇到这类版本不要只看名字要重点检查三个东西有没有可下载的预训练权重、能不能直接用 Ultralytics 的 API 训练、社区讨论是否足够解决报错。否则一个看起来更新的版本很可能会消耗大量调试时间。我的实际建议是小团队、快速落地、需要稳定文档直接用 YOLOv8n 或 YOLOv8s 做基线。要部署到边缘设备或手机端优先考虑 YOLOv10它的无 NMS 设计在端侧更友好。在服务器上追求最高精度、显存足够可以试 YOLOv12用同样的数据集和超参跑一次对比。不要一上来就追新版本。数字检测的数据质量、标注一致性、后处理规则对最终效果的影响远大于模型版本之间的差异。一个合理的工程做法是用同一份数据集、相同的图片尺寸和训练轮数分别跑通 v8、v11、v12记录 mAP50、mAP50-95、FPS、显存占用四个指标再决定上线版本。后面我会专门讲这套对比方法。3. 大语言模型在检测系统里的角色千问与 DeepSeek 怎么接入先明确分工。YOLO 检测模型的输出是哪个位置有数字、这个数字是几、置信度多高它不关心这串数字是不是异常。而大语言模型擅长的是语义理解、格式生成、异常判断。所以集成千问或 DeepSeek不是让大模型去重新读图那是视觉大模型的活而是让大模型读真正的业务化问题。举个例子。电表读数是 012345.6YOLO 把每个字符都检测出来了也拼接正确了。这时候你希望系统自动生成一条记录{ device_id: MTR-001, reading_value: 12345.6, status: normal, alert: false, suggestion: 无需处理 }如果只靠普通代码你要写规则判断小数位、位数、量程、是否接近阈值规则一多就变得很难维护。而把识别结果和业务上下文一起发给千问或 DeepSeek让模型在提示词的约束下输出固定格式 JSON代码量会大幅减少也能覆盖更多异常场景。接入方式有两种第一种是调用云 API。千问 DashScope、DeepSeek 开放平台都提供了 OpenAI 兼容接口写法很接近适合快速验证、不关心内网部署的团队。第二种是本地部署。用 Ollama、LM Studio、vLLM 等工具把 qwen 或 deepseek 的量化模型跑在自己机器上。好处是数据不出内网坏处是显存占用高、推理速度不如云端而且配置模型的工程成本明显更高。对于刚起步的数字识别项目我建议先走云端 API把业务逻辑验证清楚再根据合规要求决定是否本地化。这条链路的完整流程可以概括为图片输入 - YOLO 检测数字字符 - 按坐标排序拼接 - 生成候选读数 - 调用千问/DeepSeek - 输出结构化 JSON - 上传数据库或触发告警大语言模型在这里承担的是决策助手和格式转换器的角色它让系统不需要为每种异常情况写死规则。4. 环境准备与项目结构在动手写代码之前先把环境梳理清楚。下面这套环境是我建议的起点版本号以你实际安装时官方文档为准因为 YOLO 和 PyTorch 的依赖组合更新很快。操作系统Windows 10/11 或 Ubuntu 20.04 以上均可建议 Linux 服务器。Python3.9 到 3.11尽量避免用最新的 Python 3.12某些依赖包可能还没适配。GPUNVIDIA 显卡CUDA 11.8 或 12.1 均可。显存 6GB 以上的 GTX 1660 Ti 也能训练 YOLOv8n只是速度较慢更推荐 8GB 以上显存。核心 Python 包ultralytics、torch、torchvision、fastapi、uvicorn、opencv-python、openai、pillow。安装命令如下pip install ultralytics fastapi uvicorn openai opencv-python pillow如果要用 GPU 训练PyTorch 建议单独安装先到 PyTorch 官网选择对应的 CUDA 版本再安装 ultralytics。常见的坑是直接pip install ultralytics会把 CPU 版 torch 一起装进来训练速度会慢很多。项目目录结构可以这样组织digit-detection/ ├── dataset/ │ ├── dataset.yaml │ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/ ├── runs/ │ └── digit/ ├── app.py ├── infer.py ├── llm_client.py └── requirements.txt把数据集、训练产物、API 服务、LLM 客户端分开管理后续替换模型或对接不同大模型时只需要修改对应模块。项目早期不要把所有逻辑堆在一个文件里否则排查问题时会很痛苦。5. 数据集准备与标注规范数字识别检测可以基于三种数据来源自建真实场景图片、公开车牌或仪表盘数据集、程序自动生成的合成数据。工业项目里我建议以真实图片为主合成数据作为补充因为合成数据很难完全模拟反光和遮挡。如果你的业务没有现成数据可以先用程序自动化生成一批数字图片跑通流程。做法很简单把数字字符渲染到不同背景上加上随机位置、旋转、模糊和亮度变化然后自动生成 YOLO 标注。这样能快速验证整个工程链路等真实数据积累到几百张以后再用真实数据微调模型。YOLO 的标注格式是每行一个目标class_id x_center y_center width height其中坐标都是相对图片宽高的归一化值。举个例子一个数字 7 标注时类别 id 是 7中心点相对坐标是 (0.5, 0.5)框宽高是 (0.1, 0.2)那么标注文件里就是7 0.5 0.5 0.1 0.2数据集配置文件dataset/dataset.yaml如下# dataset/dataset.yaml path: dataset train: images/train val: images/val names: 0: digit_0 1: digit_1 2: digit_2 3: digit_3 4: digit_4 5: digit_5 6: digit_6 7: digit_7 8: digit_8 9: digit_9这里只列了 0-9 十个数字类别。如果你的业务还需要识别小数点、负号、正号建议把它们也加进去作为独立的类别便于后处理时根据业务语义拼接。标注工具有很多选择LabelImg、LabelStudio、X-AnyLabeling 都支持 YOLO 格式导出。我建议团队统一使用同一个标注工具并且提前约定标注规范当数字字符倾斜明显时用旋转框还是水平框字符紧密连在一起时框边界压到哪里被遮挡一半的字符是否标。这些看似简单的问题会直接影响模型效果和团队协作效率。标注规范一旦确定就不要频繁修改否则会浪费大量返工时间。最后训练集和验证集要按设备或场景切分不要把同一台仪表的连续帧同时放进训练集和验证集否则指标会虚高部署到新设备时效果明显下降。这是一个很容易被忽视但非常关键的问题。6. 使用 Ultralytics 训练 YOLO 模型数据集准备好之后训练一个数字识别检测模型很简单。Ultralytics 把训练、验证、预测都封装成了统一 API这也是它成为业界主流的重要原因。下面这段代码是最小可用的训练脚本train_yolo.py# train_yolo.py from ultralytics import YOLO # 加载预训练权重。可替换为 yolov8n.pt / yolo11n.pt / yolov12n.pt model YOLO(yolo11n.pt) # 指定训练参数开始训练 model.train( datadataset/dataset.yaml, epochs100, imgsz640, batch16, device0, projectruns/digit, nameyolo11n, patience20, save_period10, )参数解释如下data指向第 5 节写好的dataset.yaml。epochs是训练轮数小数据集 100 轮通常足够早期可以先用 50 轮验证流程。imgsz是训练图片尺寸数字字符如果很小可以适当提高到 960但显存和训练时间会成倍增加。batch是批大小显存不足时先降到 8 或 4。device指定显卡编号只有 CPU 时写devicecpu。patience表示当验证集指标连续多少轮不提升时提前停止避免过拟合和浪费时间。save_period表示每隔多少轮保存一次中间权重方便回溯。如果你想对比 YOLOv8、YOLOv11、YOLOv12 的效果只需要把YOLO(yolo11n.pt)换成YOLO(yolov8n.pt)或YOLO(yolov12n.pt)训练命令保持不变改一下name参数即可。这样就能保证对比实验的公平性。训练过程中Ultralytics 会在命令行实时打印 loss 和 mAP 指标同时把结果写入 project 目录。个人电脑上如果不想开 TensorBoard训练结束后直接看runs/digit/xxx/results.png里的损失曲线和精确率曲线即可。如果发现训练损失不断下降但验证损失不降说明过拟合已经开始要增加数据增强、减少轮数或增加数据量。训练完成后真正要用的产物是runs/digit/yolo11n/weights/best.pt。这个文件就是最终模型后面推理和部署都依赖它。7. 推理、后处理与 FastAPI 服务化部署训练得到 best.pt 之后第一步先写一个本地推理脚本验证模型在真实图片上的表现。下面这段代码infer.py完成三件事加载模型、检测数字、按空间位置拼接成字符串。# infer.py from ultralytics import YOLO model YOLO(runs/digit/yolo11n/weights/best.pt) results model.predict(test_sample.jpg, conf0.5, imgsz640) for r in results: if r.boxes is None: print(未检测到任何数字) continue dets [] for box in r.boxes: x1, y1, x2, y2 box.xyxy[0].tolist() cls int(box.cls[0]) conf float(box.conf[0]) dets.append({x1: x1, y1: y1, x2: x2, y2: y2, cls: cls, conf: conf}) # 从左到右排序这一行对拼接读数非常关键 dets.sort(keylambda d: d[x1]) number_str .join(str(d[cls]) for d in dets) print(识别数字:, number_str) print(检测框数量:, len(dets))这段代码里最关键的是sort(keylambda d: d[x1])。数字检测模型返回的检测框顺序是不确定的如果不按 x 坐标排序同一个仪表图片每次拼接出来的数字串可能都不一样。对于被检测为两位数的同一字符或者同一行有多个数字的情况这个排序逻辑还需要结合 y 坐标做分行处理。如果图片里数字是多行排列可以更严格一点先按 y 坐标聚类分行再对每一行按 x 坐标排序。这不是 YOLO 模型该做的事而是后处理规则需要解决的通常在服务端实现。下一步是把推理脚本封装成 HTTP 接口方便前端、小程序或自动化系统调用。下面是一个基于 FastAPI 的最小服务app.py# app.py import io import numpy as np from fastapi import FastAPI, File, UploadFile from PIL import Image from ultralytics import YOLO app FastAPI() model YOLO(runs/digit/yolo11n/weights/best.pt) def parse_result(results): all_text [] for r in results: if r.boxes is None: all_text.append() continue dets [] for box in r.boxes: x1, y1, x2, y2 box.xyxy[0].tolist() cls int(box.cls[0]) conf float(box.conf[0]) dets.append({ box: [x1, y1, x2, y2], cls: cls, conf: conf, }) dets.sort(keylambda d: d[box][0]) all_text.append(.join(str(d[cls]) for d in dets)) return all_text app.post(/recognize) async def recognize(file: UploadFile File(...)): data await file.read() img Image.open(io.BytesIO(data)).convert(RGB) results model.predict(np.array(img), conf0.5, imgsz640) texts parse_result(results) return {result: texts[0] if texts else }启动服务uvicorn app:app --host 0.0.0.0 --port 8000调用接口测试curl -X POST http://127.0.0.1:8000/recognize \ -H Content-Type: multipart/form-data \ -F filetest_sample.jpg如果返回{result:12345.6}说明检测和拼接链路已经跑通。生产环境里可以在这个接口外面加一层鉴权、日志和限流避免直接被外部调用。部署到嵌入式设备或手机端时思路则不一样。你要把 best.pt 导出为 ONNX 或 TensorRT 格式再通过对应的推理引擎加载Ultralytics 提供了一行导出的 APIyolo export modelruns/digit/yolo11n/weights/best.pt formatonnx imgsz640导出 ONNX 后可以用 ONNX Runtime 在 CPU、嵌入式设备上运行。需要注意的是导出后要重新用验证集检查输出一致性因为部分算子在导出过程中可能发生数值误差。8. 集成千问/DeepSeek 做智能读数分析识别结果拼接成12345.6只是第一步。接下来把大语言模型接入系统实现对读数的语义分析。这里使用 OpenAI 兼容接口千问和 DeepSeek 的调用方式几乎一致只需要切换 base_url 和 model 名。先看 OpenAISDK 的基本调用llm_client.py# llm_client.py import json from openai import OpenAI # 千问 DashScope 兼容模式 client OpenAI( api_keyYOUR_API_KEY, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ) # DeepSeek 可以用: # client OpenAI( # api_keyYOUR_API_KEY, # base_urlhttps://api.deepseek.com/v1, # ) SYSTEM_PROMPT 你是一个工业仪表读数分析助手。用户会给你一段识别出来的数字串和业务上下文。 请只输出 JSON不要输出任何解释。JSON 格式如下 { parsed_value: 数字串, valid: true, reason: 简短判断依据, alert: false, suggestion: 建议操作 } 如果数字串中包含明显识别错误或者无法判断valid 设置为 false。 def analyze_reading(reading_text: str, device_id: str) - dict: resp client.chat.completions.create( modelqwen-plus, # 实际模型名以官方文档为准 messages[ {role: system, content: SYSTEM_PROMPT}, { role: user, content: f设备编号: {device_id}, 识别读数: {reading_text}, }, ], response_format{type: json_object}, temperature0.1, ) content resp.choices[0].message.content return json.loads(content) if __name__ __main__: result analyze_reading(12345.6, MTR-001) print(result)这段代码里值得注意几个设计点第一temperature0.1是为了让模型输出更稳定减少随机性。读数是事实数据不需要模型发挥创造力。第二response_format{type: json_object}强制模型输出 JSON后续直接用json.loads解析省去正则提取的麻烦。第三提示词里明确要求如果无法判断valid 设置为 false。大模型最常见的风险是强行解释你要在系统提示词里给它一个合法的拒绝出口否则系统会把错误读数当成正常读数处理。把 LLM 客户端接入 FastAPI 服务后一个完整的识别 分析接口就出来了。请求图片时先由 YOLO 返回数字串再调 LLM 生成结构化分析两张能力完成了组合。实际使用时建议对 LLM 增加超时控制和失败重试。如果 LLM 调用超时系统最好降级为直接返回 YOLO 的识别结果而不是让整个接口报错。因为检测识别是核心能力语义分析是增强能力两者不能相互拖累。如果走本地部署路线可以先用 Ollama 或 LM Studio 拉取一个 qwen 或 deepseek 的量化模型再把它作为 OpenAI 兼容服务启动。本地部署的好处是数据和密钥不出内网但你要接受更低的推理速度和显存压力。以 8GB 显存为例跑 7B 级别的量化模型已经比较吃力处理并发请求时会明显卡顿。所以我的建议是项目刚起步时用云端 API跑通业务后再评估是否有必要本地化。9. 模型版本对比与效果评估方法论很多文章喜欢直接给出v11 比 v8 高了多少个点的结论但这类结论高度依赖数据集和业务场景。更可靠的做法是掌握一套对比方法在自己的数据上跑出真实指标。我建议每次对比固定五个条件同一份训练集和验证集。同一个imgsz比如都是 640。同样的训练轮数和 batch。同样的数据增强策略。同样的置信度阈值。在这组条件下记录以下指标指标含义对数字识别项目的影响mAP50目标框与真实框 IoU 超过 0.5 时的平均精度判断模型有没有找对数字位置mAP50-95不同 IoU 阈值下的平均精度判断框的定位精度是否足够细单张推理耗时平均处理一张图片的时间影响系统吞吐量和实时性显存占用训练/推理时的峰值显存决定能否在现有 GPU 上运行拼接正确率最终按坐标拼接出的数字串与真实读数一致的百分比这是业务最终关注的指标比 mAP 更有说服力其中最重要的是最后一项拼接正确率。模型检测出 10 个字符但如果排序逻辑错了最终读数依然是错的。所以评估时不要只看 mAP一定要在验证集上跑完整的——检测、排序、拼接——流程统计最终数字串的正确率。很多时候你会发现问题并不在模型而在你的后处理排序逻辑。具体的对比脚本可以复用第 6 节的方法把model YOLO(yolo11n.pt)换成不同版本训练后分别对同一批测试图片做推理记录指标最后汇总成一张对比表。需要提醒的是要避免因为某一次随机波动就下结论。条件允许时同一个模型跑 2 到 3 次取平均结果会更可信。另外一个很实际的经验对数字识别这种目标小、语义明确的场景v8n 或 v11n 这类轻量模型往往已经能打赢大部分业务需求。如果 mAP 上不去优先去查标注错误、增加困难样本、提高图片分辨率而不是立刻换更大的模型。加大模型参数量精度可能只有小幅提升但推理耗时和显存占用会明显上升对部署并不友好。10. 常见问题与排查思路在训练和部署过程中下面这几个问题几乎每个人都会遇到。我把排查顺序列出来按顺序走能省不少时间。问题现象可能原因排查方式解决方案训练时 loss 为 nan学习率过大、数据异常、PyTorch 与 CUDA 版本不匹配查看前几步 loss 变化检查图片是否有纯黑或损坏文件降低学习率清洗数据重装匹配的 PyTorch模型推理不出任何检测框置信度阈值过高、图片尺寸与训练不一致、数据类别 id 混乱先调低 conf 到 0.1 测试打印原始模型输出降低阈值统一推理 imgsz检查标注类别映射拼接出的数字顺序错乱只按 x 排序但数字跨了多行打印检测框坐标观察实际分布增加按 y 坐标分行逻辑再对每行按 x 排序训练速度极慢装了 CPU 版 torch 或 batch 过大导致频繁换页执行python -c import torch; print(torch.cuda.is_available())重新安装 GPU 版 torch调小 batchLLM 接口超时网络问题、模型推理慢、并发过高先单独测试 LLM 客户端查看后端日志加超时和重试把 LLM 调用改为异步任务导出的 ONNX 与 pt 结果不一致部分算子转换差异、动态轴设置问题用同一张图分别跑 pt 和 ONNX 对比固定输入尺寸选用支持的算子验证集指标高但现场效果差训练集和验证集来自同一设备数据分布过于接近按设备或时间段切分数据集重新划分数据集增加现场真实样本除了表格里的问题还有一个隐藏问题容易被忽略类别 id 和标注文件不一致。如果你用脚本批量生成标注一定要抽样可视化检查把标注框和原图叠加输出肉眼确认每个数字的类别有没有错位。这类错误不会导致训练报错但会悄悄拉低精度排查起来最费时间。11. 最佳实践与工程建议到这里完整链路已经跑通了。如果你想把这个项目用到生产环境下面几条工程建议值得认真对待。第一先用最小闭环验证再逐步优化。第一次做这个项目不要同时引入多个模型版本、多套提示词和复杂部署工具。先用 YOLOv8n 训练一个模型用 FastAPI 起一个接口再手动调用一次千问或 DeepSeek把整条链路跑通。这个闭环会暴露绝大多数真实问题比如数据集格式、接口参数、模型加载方式这些基础问题不解决后面再优化都是空中楼阁。第二把后处理规则当成一等公民。很多团队在模型训练上花大量时间调参却忽视了数字排序、多行拆分、置信度过滤、去重等后处理逻辑。实际项目里后处理规则对最终读数正确率的影响往往比换模型更大。建议给后处理模块写独立的单元测试用几十张典型图片覆盖各种布局。第三大语言模型的提示词要版本化管理。把系统提示词放在配置文件或单独的代码文件里不要散落在各个业务方法中。每次修改提示词后要像对待模型版本一样记录变更内容因为提示词改动同样可能改变输出结构。如果大模型输出偶尔不符合 JSON 格式不要修改提示词去硬刚应该在代码里加一个解析兜底比如提取第一个符合 JSON 结构的大括号片段。第四注意隐私和密钥安全。仪表图片可能包含设备位置、编号等敏感信息日志中不要打印图片内容大模型的 API 密钥一定要放在环境变量或配置中心里不要硬编码到代码仓库。在对生产环境做任何更改前都要先备份当前模型文件并保留上一版可回滚的权重。这会成为你上线后最有价值的行为习惯。第五关注系统监控。上线后至少要监控三个指标YOLO 检测的平均置信度、LLM 调用成功率、最终读数与现场人工抽检的一致率。置信度整体下降可能意味着数据分布变化LLM 调用失败要尽快降级抽检一致率是判断系统真实效果的最终标准。只有把这些指标配好系统才算真正进入了可维护阶段。12. 总结与下一步行动这篇文章从一个典型的工业读数识别场景出发梳理了数字识别检测系统的完整技术链路确认任务边界、对比 YOLOv8/v10/v11/v12 的选型思路、准备数据集、训练模型、做排序拼接、用 FastAPI 部署再到集成千问或 DeepSeek 做语义分析。贯穿全文的核心判断是检测模型和大语言模型是分工关系不是替代关系。YOLO 负责把数字在哪、是什么这件事做到可控、可微调大语言模型负责把识别结果转化为业务决策。很多项目失败并非模型精度不够而是没有把这条协作链路设计清楚。如果你正准备开始这个项目建议按下面的节奏行动今天先用公开数据集或合成图片跑通 YOLOv8n 的训练和推理明天加上 FastAPI 接口后天用千问或 DeepSeek 的云端 API 完成一次智能分析调用。三天内跑完最小闭环后再回来对比 v11 或 v12你会发现选型变得容易得多因为那时你已经知道真正的瓶颈在哪里。你在做数字识别检测系统时是更担心 YOLO 版本选型还是更头疼后处理拼接和大模型输出的稳定性欢迎在评论区交流实际项目中踩过的坑后续我也可以写一篇关于多行数字排序后处理和大模型提示词调优的深入文章。