# OCR与语音识别——政务AI的两个实用场景
OCR与语音识别——政务AI的两个实用场景OCR和语音识别听起来高大上实际上做起来没那么复杂。这篇记录我用EasyOCR、PaddleOCR做文字识别用科大讯飞做语音转文字的过程。不是论文是踩坑笔记。一、EasyOCR最省事的文字识别importeasyocr readereasyocr.Reader([ch_sim,en],gpuFalse)resultreader.readtext(rd:\20250325151517.jpg)fordetectioninresult:print(detection[1])三行代码。ch_sim是简体中文en是英文gpuFalse用CPU跑。输入一张图片输出识别的文字。优点安装简单pip install easyocr一条命令支持中文开箱即用CPU就能跑不需要GPU缺点速度慢一张图几秒钟中文识别准确率一般手写体和模糊图片效果差不支持表格结构识别适合场景简单的文字提取不要求高准确率。二、PaddleOCR中文识别更强还支持表格文字识别frompaddleocrimportPaddleOCR ocrPaddleOCR(use_angle_clsTrue,langch)resultocr.ocr(rd:\20250325151517.jpg,clsTrue)forlineinresult:forjinrange(0,line.__len__()):print(line[j][1][0])也是几行代码。use_angle_clsTrue开启文字方向检测图片倒着也能识别。比EasyOCR好在哪中文识别准确率明显更高速度更快PaddlePaddle底层优化支持旋转文字检测表格结构识别frompaddleocrimportPPStructure table_enginePPStructure(table_model_dirre:\model\ch_ppstructure_mobile_v2.0_SLANet_infer)resulttable_engine(rd:\20250325151517.jpg)print(result)PPStructure是PaddleOCR的扩展专门做文档结构分析。输入一张包含表格的图片输出表格的结构行、列、单元格和内容。政务场景大量表格——审批表、报销单、统计报表。以前要人工录入PPStructure可以直接从图片里提取表格数据。注意事项模型文件要单独下载不像文字识别模型自动下载表格识别准确率取决于图片质量拍照歪的、有阴影的效果差复杂合并单元格识别不太准两者对比维度EasyOCRPaddleOCR安装pip一条命令pip安装可能需要额外下载模型中文准确率一般较好速度慢快表格识别不支持支持PPStructureGPU需求不需要不需要但有GPU更快适合场景快速验证、简单文字生产环境、表格提取我的结论在政务场景下PaddleOCR是更好的选择。中文识别准确率更高表格识别是刚需。具体选型可以看我另一篇《政务OCR选型EasyOCR vs PaddleOCR》。三、科大讯飞语音听写PCM音频转文字政务热线有大量电话录音需要转成文字做分析。原理讯飞语音听写API用WebSocket协议客户端把音频分帧发送服务端实时返回识别结果。importwebsocketimportbase64importjson STATUS_FIRST_FRAME0STATUS_CONTINUE_FRAME1STATUS_LAST_FRAME2frameSize1280# 每帧1280字节intervel0.04# 发送间隔40ms模拟实时语音流withopen(AudioFile,rb)asfp:whileTrue:buffp.read(frameSize)audiostr(base64.b64encode(buf),utf-8)ifnotaudio:statusSTATUS_LAST_FRAME# 第一帧带参数ifstatusSTATUS_FIRST_FRAME:d{header:{status:0,app_id:APPID},parameter:{iat:{domain:slm,language:zh_cn,accent:mulacc}},payload:{audio:{audio:audio,sample_rate:16000,encoding:raw}}}ws.send(json.dumps(d))statusSTATUS_CONTINUE_FRAME# 中间帧只带音频elifstatusSTATUS_CONTINUE_FRAME:d{header:{status:1,app_id:APPID},payload:{audio:{audio:audio,sample_rate:16000,encoding:raw}}}ws.send(json.dumps(d))# 最后一帧elifstatusSTATUS_LAST_FRAME:d{header:{status:2,app_id:APPID},payload:{audio:{audio:audio,sample_rate:16000,encoding:raw}}}ws.send(json.dumps(d))breaktime.sleep(intervel)鉴权机制讯飞的API鉴权比较复杂——HMAC-SHA256签名signature_originhost: iat.cn-huabei-1.xf-yun.com\nsignature_origindate: date\nsignature_originGET /v1 HTTP/1.1signature_shahmac.new(APISecret.encode(utf-8),signature_origin.encode(utf-8),digestmodhashlib.sha256).digest()authorizationbase64.b64encode(signature_sha).decode(utf-8)把host、date、request-line拼接后用HMAC-SHA256签名再base64编码拼成URL参数。这是标准的HTTP签名鉴权模式很多云服务都用这种方式。返回结果解析defon_message(ws,message):messagejson.loads(message)payloadmessage.get(payload)ifpayload:textpayload[result][text]textjson.loads(str(base64.b64decode(text),utf8))resultforiintext[ws]:forjini[cw]:resultj[w]print(result)讯飞返回的结果是base64编码的JSON里面ws是词组列表cw是字列表w是每个字的文本。解析过程有点绕但跑通一次就好了。注意事项音频格式讯飞要求PCM格式16K采样率。如果是WAV/MP3需要先用FFmpeg转换实时性每帧40ms发送模拟实时语音流。如果是离线文件转写讯飞也有专门的API并发限制免费版有并发连接数限制批量转写需要注意四、环境搭建总结组件安装方式EasyOCRpip install easyocr首次运行自动下载模型约100MBPaddleOCRpip install paddleocr表格模型需手动下载讯飞语音pip install websocket-client需注册讯飞开放平台获取APPID/KeyPython3.9-3.11三个工具都不需要GPUCPU就能跑。PaddleOCR和讯飞语音在有GPU的环境下会更快。五、总结工具做了什么关键点EasyOCR简单文字识别安装最简单中文准确率一般PaddleOCR中文文字表格识别政务场景首选表格识别是刚需讯飞语音PCM音频转文字WebSocket分帧发送实时返回结果三个工具分别解决三个问题图片里有字→OCR提取、图片里有表格→PPStructure解析、录音里有话→讯飞转写。在政务AI落地中这三个能力经常组合使用热线电话录音转文字 → 文字做NLP分析 → 分析结果输出到报表报表里的表格可能又需要OCR识别。环环相扣。相关阅读《政务OCR选型EasyOCR vs PaddleOCR》《94万条热线问题的分析之路——KMeans聚类、动态相似度与大模型分类》《向量数据库实战——用MilvusOllama搭建社保知识检索系统》