图片消息识别,难点不在"调识别接口",在识别方案选型和置信度处理。识别可能是提取文字、识别物体、识别条码,不同场景要用不同的识别引擎。识别完置信度不高怎么办,也要有明确策略,不能一律照用。
一、识别引擎选型——按场景选而不是一刀切
图片要识别什么,决定用哪种引擎。文字提取用OCR,通用OCR适合文档截图,手写或模糊图片要选带预处理的OCR。物体识别用视觉模型,判断图里是什么商品、什么场景。条码和二维码有专门的解码库,别用OCR去认。
选型还要考虑成本和速度。视觉模型准确但调用贵、耗时长;OCR相对便宜快。高频场景优先算成本——每条图片消息都调贵模型,账单会很难看。
二、场景路由——不同图片走不同通道
做多场景的机器人,要先判断图片属于哪个场景再路由。判断方式有几种:按发送渠道、按用户类型、按图片尺寸特征。
路由的工程实现是场景识别加引擎映射。场景识别——先用轻量方式判断图片类型(尺寸、是否含条码特征)。引擎映射——每个场景配一个识别引擎,路由到对应引擎处理。这样客服场景走OCR,商品场景走视觉模型,互不干扰。
三、置信度分级处理
识别结果带置信度,不同置信度走不同处理。高置信(0.85以上)——直接按结果自动处理,回复用户。中置信(0.6到0.85)——先回复一个试探性结果,让用户确认或纠正。低置信(0.6以下)——不硬用,转人工或让用户补充描述。
置信度分级的意义是控制错误成本。识别错了直接自动执行,可能把钱算错、把工单建错,补救成本远高于让人确认一下。
图片识别方案对照
识别场景 | 引擎类型 | 相对成本 | 置信度要求 |
|---|---|---|---|
文字提取 | OCR | 低 | 0.8以上 |
物体识别 | 视觉模型 | 高 | 0.7以上 |
条码二维码 | 解码库 | 很低 | 0.9以上 |
图片识别路由与置信度处理实现
class ImageRecognitionRouter: def __init__(self): self.engines = { "text": OCREngine(), "object": VisionEngine(), "barcode": BarcodeEngine() } self.confidence_gate = { "auto": 0.85, # 高置信自动处理 "confirm": 0.6 # 中置信需确认 } def route(self, image, context): # 场景识别:先判断图片属于哪个场景 scene = self.detect_scene(image, context) engine = self.engines.get(scene) if not engine: return self.fallback(image) return self.recognize(engine, image, scene) def detect_scene(self, image, context): # 场景判断:按渠道/尺寸/特征 if context.get("scene"): return context["scene"] if self.has_barcode(image): return "barcode" # 含条码特征 if image.width > 800: return "text" # 大图多为文档截图 return "object" def recognize(self, engine, image, scene): # 识别:拿结果和置信度 result = engine.recognize(image) conf = result["confidence"] if conf >= self.confidence_gate["auto"]: return self.auto_process(result) # 高置信自动处理 elif conf >= self.confidence_gate["confirm"]: return self.confirm_process(result) # 中置信让用户确认 else: return self.to_human(image, result) # 低置信转人工 def auto_process(self, result): # 自动处理:按识别结果执行动作 action = self.match_action(result["text"]) return action.execute(result) def confirm_process(self, result): # 试探性回复:让用户确认 return reply(f"识别到:{result['text']},是否正确?") def fallback(self, image): # 兜底:无法识别 return reply("图片无法识别,请用文字描述")落地建议
识别引擎按场景选——文字、物体、条码用不同引擎,一刀切既不准也不省。场景路由要前置——先判断图片属于哪个场景再调引擎,避免每条图片都调最贵的模型。置信度必须分级——高置信自动处理,中置信让用户确认,低置信转人工,别让低置信结果直接执行。兜底不能省——识别失败要有提示,不能对用户不理。微信侧的图片下载和消息发送由Eyun这类个人微信API平台 提供,识别引擎对接和置信度策略在自建服务实现,接口字段以平台开发文档为准。