当前位置: 首页 > article >正文

Qianfan-OCR实操手册:批量处理脚本编写与OCR结果去重/合并/校验逻辑

Qianfan-OCR实操手册批量处理脚本编写与OCR结果去重/合并/校验逻辑1. 项目概述Qianfan-OCR是百度千帆推出的开源文档智能多模态模型基于4B参数的端到端架构设计。相比传统OCR方案它集成了文字识别、版面分析和文档理解三大核心功能大幅简化了文档处理流程。核心优势一体化处理单模型完成传统OCR流水线多个步骤智能分析支持布局识别和结构化信息提取开源商用Apache 2.0协议可自由商用和二次开发多语言支持覆盖主流语言的文字识别需求2. 环境准备2.1 基础环境配置确保已安装以下组件Conda环境推荐使用torch28Python 3.11CUDA 11.7GPU加速至少16GB显存推荐24GB以上2.2 服务启动# 进入项目目录 cd /root/Qianfan-OCR # 启动服务 supervisorctl start qianfan-ocr服务启动后可通过http://localhost:7860访问Web界面。3. 批量处理脚本编写3.1 基础批量处理脚本以下Python脚本实现了图片目录的批量OCR处理import os import requests from tqdm import tqdm def batch_ocr(image_dir, output_file, endpointhttp://localhost:7860/api/ocr): 批量OCR处理脚本 :param image_dir: 图片目录路径 :param output_file: 结果输出文件 :param endpoint: API端点地址 results {} image_files [f for f in os.listdir(image_dir) if f.lower().endswith((.png, .jpg, .jpeg))] for img_file in tqdm(image_files, descProcessing images): img_path os.path.join(image_dir, img_file) try: with open(img_path, rb) as f: response requests.post(endpoint, files{image: f}) if response.status_code 200: results[img_file] response.json()[text] else: results[img_file] fError: {response.text} except Exception as e: results[img_file] fException: {str(e)} with open(output_file, w, encodingutf-8) as f: json.dump(results, f, ensure_asciiFalse, indent2)3.2 带布局分析的增强脚本启用Layout-as-Thought模式获取结构化结果def batch_ocr_with_layout(image_dir, output_file): 带布局分析的批量OCR处理 results {} for img_file in os.listdir(image_dir): if not img_file.lower().endswith((.png, .jpg, .jpeg)): continue img_path os.path.join(image_dir, img_file) try: with open(img_path, rb) as f: response requests.post( http://localhost:7860/api/ocr, files{image: f}, data{layout: true} # 启用布局分析 ) results[img_file] response.json() except Exception as e: results[img_file] {error: str(e)} with open(output_file, w, encodingutf-8) as f: json.dump(results, f, ensure_asciiFalse, indent2)4. OCR结果后处理4.1 文本去重算法针对重复出现的文本内容实现智能去重from collections import defaultdict import re def deduplicate_texts(text_list, threshold0.9): 文本内容去重 :param text_list: 待处理文本列表 :param threshold: 相似度阈值(0-1) :return: 去重后的文本列表 unique_texts [] text_groups defaultdict(list) # 基于文本指纹的粗筛 for text in text_list: if not text.strip(): continue # 生成简化指纹去除空格和标点 fingerprint re.sub(r[\s\W], , text.lower()) text_groups[fingerprint[:20]].append(text) # 精细相似度计算 for group in text_groups.values(): if len(group) 1: unique_texts.append(group[0]) continue # 使用编辑距离计算相似度 representative group[0] unique_texts.append(representative) for text in group[1:]: distance levenshtein_distance(representative, text) similarity 1 - (distance / max(len(representative), len(text))) if similarity threshold: unique_texts.append(text) return unique_texts def levenshtein_distance(s1, s2): 计算两个字符串的编辑距离 if len(s1) len(s2): return levenshtein_distance(s2, s1) if len(s2) 0: return len(s1) previous_row range(len(s2) 1) for i, c1 in enumerate(s1): current_row [i 1] for j, c2 in enumerate(s2): insertions previous_row[j 1] 1 deletions current_row[j] 1 substitutions previous_row[j] (c1 ! c2) current_row.append(min(insertions, deletions, substitutions)) previous_row current_row return previous_row[-1]4.2 多页文档合并处理扫描版多页文档的合并逻辑def merge_document_pages(page_results, merge_strategysequential): 合并多页OCR结果 :param page_results: 按页码排序的OCR结果列表 :param merge_strategy: 合并策略(sequential/smart) :return: 合并后的完整文档 merged_text if merge_strategy sequential: # 简单顺序合并 for page in sorted(page_results.keys()): merged_text f\n\n--- Page {page} ---\n{page_results[page]} elif merge_strategy smart: # 智能合并识别页眉页脚 header_footer_threshold 0.7 header_candidates [] footer_candidates [] # 分析页眉页脚模式 sample_pages list(page_results.values())[:3] for text in sample_pages: lines text.split(\n) if len(lines) 1: header_candidates.append(lines[0]) footer_candidates.append(lines[-1]) # 确定公共页眉页脚 common_header find_common_text(header_candidates, thresholdheader_footer_threshold) common_footer find_common_text(footer_candidates, thresholdheader_footer_threshold) # 应用合并 for page_num, text in sorted(page_results.items()): lines text.split(\n) if len(lines) 1: # 移除页眉页脚 if lines[0] common_header: lines lines[1:] if lines[-1] common_footer: lines lines[:-1] merged_text \n.join(lines) \n\n return merged_text.strip()4.3 结果校验机制实现OCR结果的自动校验def validate_ocr_result(text, validation_rulesNone): OCR结果校验 :param text: 待校验文本 :param validation_rules: 校验规则字典 :return: (是否有效, 错误信息) if not validation_rules: validation_rules { min_length: 3, # 最小文本长度 max_repeat: 5, # 最大连续重复字符数 invalid_chars: [, ], # 非法字符 expected_patterns: None # 预期正则模式 } # 检查最小长度 if len(text.strip()) validation_rules[min_length]: return False, Text too short # 检查重复字符 if any(len(list(g)) validation_rules[max_repeat] for k, g in groupby(text)): return False, Excessive character repetition # 检查非法字符 if any(invalid_char in text for invalid_char in validation_rules[invalid_chars]): return False, Contains invalid characters # 检查正则模式 if validation_rules[expected_patterns]: if not any(re.search(pattern, text) for pattern in validation_rules[expected_patterns]): return False, Does not match expected patterns return True, 5. 实战案例发票处理系统5.1 发票信息提取流程def process_invoice_images(image_dir): 完整发票处理流程 # 1. 批量OCR处理 raw_results batch_ocr_with_layout(image_dir, raw_results.json) # 2. 关键信息提取 extracted_data [] for img_file, ocr_result in raw_results.items(): if error in ocr_result: continue # 使用提示词提取关键字段 prompt 请从发票中提取以下信息 - 发票号码 - 开票日期 - 销售方名称 - 购买方名称 - 金额合计(大写) - 金额合计(小写) 以JSON格式返回 response requests.post( http://localhost:7860/api/ocr, json{ text: ocr_result[text], prompt: prompt } ) if response.status_code 200: extracted_data.append({ image: img_file, data: response.json() }) # 3. 数据校验 valid_data [] for item in extracted_data: is_valid, error validate_invoice_data(item[data]) if is_valid: valid_data.append(item) else: print(fInvalid data in {item[image]}: {error}) return valid_data def validate_invoice_data(data): 发票数据校验 required_fields [ 发票号码, 开票日期, 销售方名称, 金额合计(小写) ] for field in required_fields: if field not in data or not data[field].strip(): return False, fMissing {field} # 检查金额格式 if not re.match(r^\d(\.\d{1,2})?$, data[金额合计(小写)]): return False, Invalid amount format return True, 5.2 处理结果可视化import pandas as pd def generate_invoice_report(data, output_file): 生成发票处理报告 df pd.DataFrame([item[data] for item in data]) df[源文件] [item[image] for item in data] # 保存Excel报告 with pd.ExcelWriter(output_file) as writer: df.to_excel(writer, sheet_name发票汇总, indexFalse) # 添加统计信息 stats pd.DataFrame({ 统计项: [发票总数, 总金额, 平均金额], 值: [len(df), df[金额合计(小写)].astype(float).sum(), df[金额合计(小写)].astype(float).mean()] }) stats.to_excel(writer, sheet_name统计信息, indexFalse) print(f报告已生成: {output_file})6. 总结与最佳实践6.1 性能优化建议批量处理优化使用多线程/协程提高处理速度实现失败重试机制设置合理的请求间隔建议200-500ms质量提升技巧对模糊图片进行预处理锐化、二值化组合使用通用OCR和带提示OCR对关键字段实施多重校验资源管理监控GPU显存使用情况定期清理缓存文件对大型任务实施分批处理6.2 扩展应用场景合同处理关键条款提取签名位置识别版本差异比对报表分析表格数据提取趋势图表识别数据交叉验证档案数字化多页文档合并元数据提取智能分类归档获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

Qianfan-OCR实操手册:批量处理脚本编写与OCR结果去重/合并/校验逻辑

Qianfan-OCR实操手册:批量处理脚本编写与OCR结果去重/合并/校验逻辑 1. 项目概述 Qianfan-OCR是百度千帆推出的开源文档智能多模态模型,基于4B参数的端到端架构设计。相比传统OCR方案,它集成了文字识别、版面分析和文档理解三大核心功能&am…...

C语言memcpy函数的用法

我们参考用户的问题和提供的引用信息来回答。用户询问memcpy函数的使用方法以及是否可以频繁使用。 引用 提到:memcpy需要提供拷贝的内存长度,易错且使用不便,且长度过大会导致性能下降。同时提到strcpy内部可能调用memcpy,并指出…...

从‘命令未找到’到GPU状态尽在掌握:nvidia-smi环境变量配置全攻略

1. 当nvidia-smi命令罢工时:从报错到定位问题根源 第一次在终端输入nvidia-smi却看到"命令未找到"的提示时,那种感觉就像拿着钥匙却打不开自家大门。作为AI开发者和GPU使用者,我们每天都要和这个强大的监控工具打交道,但…...

拯救你的游戏硬盘!SteamCleaner:一键清理六大游戏平台冗余文件

拯救你的游戏硬盘!SteamCleaner:一键清理六大游戏平台冗余文件 【免费下载链接】SteamCleaner :us: A PC utility for restoring disk space from various game clients like Origin, Steam, Uplay, Battle.net, GoG and Nexon :us: 项目地址: https:/…...

5步快速上手UK Biobank研究分析平台:生物医学数据分析的完整指南

5步快速上手UK Biobank研究分析平台:生物医学数据分析的完整指南 【免费下载链接】UKB_RAP Access share reviewed code & Jupyter Notebooks for use on the UK Biobank (UKBB) Research Application Platform. Includes resources from DNAnexus webinars, on…...

番茄小说下载神器:3步实现离线阅读自由

番茄小说下载神器:3步实现离线阅读自由 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 还在为网络不稳定无法畅读番茄小说而烦恼吗?fanqienovel-downloader 这款开源…...

.NET逆向神器dnSpyEx:无源码调试与程序集编辑完全指南

.NET逆向神器dnSpyEx:无源码调试与程序集编辑完全指南 【免费下载链接】dnSpy Unofficial revival of the well known .NET debugger and assembly editor, dnSpy 项目地址: https://gitcode.com/gh_mirrors/dns/dnSpy 还在为无法调试第三方.NET程序而烦恼&a…...

英雄联盟云顶之弈自动挂机刷经验:5个简单步骤快速提升游戏等级

英雄联盟云顶之弈自动挂机刷经验:5个简单步骤快速提升游戏等级 【免费下载链接】LOL-Yun-Ding-Zhi-Yi 英雄联盟 云顶之弈 全自动挂机刷经验程序 外挂 脚本 ,下载慢可以到https://gitee.com/stringify/LOL-Yun-Ding-Zhi-Yi 项目地址: https://gitcode.com/gh_mirro…...

如何高效管理原神游戏数据:开源工具箱的终极解密

如何高效管理原神游戏数据:开源工具箱的终极解密 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao …...

告别枯燥理论!在Proteus里玩转DAC0832:按键实时调节正弦波频率和幅度

在Proteus中打造DAC0832波形实验室:从按键交互到失真优化实战 当仿真平台遇上经典DAC芯片,会碰撞出怎样的火花?Proteus与DAC0832的组合为电子爱好者提供了一个绝佳的虚拟实验场。不同于传统教材中静态的理论分析,我们将通过实时交…...

B站缓存视频终极拯救指南:3分钟将m4s文件转换为永久MP4

B站缓存视频终极拯救指南:3分钟将m4s文件转换为永久MP4 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的情况&…...

四轴无人机飞控核心:深入理解MPU6050数据融合与STM32的PID控制环路

四轴无人机飞控核心:深入理解MPU6050数据融合与STM32的PID控制环路 当四轴无人机在风中稳稳悬停时,很少有人会思考这背后精妙的控制艺术。就像杂技演员走钢丝时不断调整身体姿态一样,无人机也在以每秒数百次的速度进行着微观调整。这种看似简…...

nli-MiniLM2-L6-H768入门必看:无需训练、纯本地的零样本文本分类工具

nli-MiniLM2-L6-H768入门必看:无需训练、纯本地的零样本文本分类工具 1. 工具概述 nli-MiniLM2-L6-H768是一款基于cross-encoder/nli-MiniLM2-L6-H768轻量级NLI模型开发的本地零样本文本分类工具。它彻底改变了传统文本分类需要大量标注数据和训练过程的繁琐流程&…...

语言模型在物理构建任务中的表现与挑战

1. 语言模型在物理构建任务中的表现与挑战最近在BuilderBench基准测试中的实验揭示了当前最先进语言模型(如GPT-5.2、Claude Opus 4.6和Gemini 3 Flash)作为智能代理在物理构建任务中的表现。这些模型在简单任务上表现良好,但在27项困难任务中…...

LFM2.5-VL-1.6B效果展示:科研论文图→方法复现步骤图文拆解+公式解释

LFM2.5-VL-1.6B效果展示:科研论文图→方法复现步骤图文拆解公式解释 1. 模型概述 LFM2.5-VL-1.6B是由Liquid AI推出的轻量级多模态大模型,专为端侧和边缘设备设计。这个模型结合了1.2B参数的语言模型和约400M参数的视觉模型,总参数量为1.6B…...

MATLAB/Simulink仿真研究:基于下垂控制的蓄电池SOC均衡策略

MATLAB/Simulink仿真,蓄电池SOC均衡 采用下垂控制,根据自身容量选择出力,直流母线电压、功率保持稳定无波动 MATLAB/Simulink仿真,蓄电池SOC均衡(锂电池) 根据微网内功率盈余,两组SOC不同的蓄电…...

【限时开放】Java 25虚拟线程高并发调优手册(含Arthas动态注入vthread堆栈、Prometheus自定义指标采集脚本)

第一章:Java 25虚拟线程高并发调优全景概览Java 25正式将虚拟线程(Virtual Threads)从预览特性转为标准特性,并深度整合进JVM线程调度、监控与诊断体系。相比传统平台线程,虚拟线程以极低内存开销(约1KB栈空…...

Blazor 2026配置避坑大全,12个高频崩溃场景+对应csproj/.cshtml/.razor配置修复代码块

第一章:Blazor 2026配置避坑大全导论Blazor 2026 引入了多项底层运行时增强与项目模板重构,但其默认配置在跨平台构建、AOT 预编译、HTTP/3 支持及 WASM 主机生命周期管理等场景中存在隐性兼容陷阱。开发者若沿用 Blazor 2024 或更早版本的经验直接升级&…...

当大模型开始控制设备:我是怎么理解 Agent 架构的

一、前言:什么是 OFA VQA 模型? OFA(One For All)是字节跳动提出的多模态预训练模型,支持视觉问答、图像描述、图像编辑等多种任务,其中视觉问答(VQA)是最常用的功能之一——输入一张…...

如何永久保存微信聊天记录:WeChatMsg让你的数字记忆永不丢失

如何永久保存微信聊天记录:WeChatMsg让你的数字记忆永不丢失 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

nli-MiniLM2-L6-H768应用场景:数字政府12345热线工单与政策法规条款智能关联

nli-MiniLM2-L6-H768应用场景:数字政府12345热线工单与政策法规条款智能关联 1. 引言:政务热线面临的挑战 在数字政府建设中,12345政务服务便民热线每天都会收到大量市民咨询和投诉工单。传统处理方式面临两大痛点: 人工匹配效…...

Spring Boot 自动配置触发机制详解

Spring Boot 自动配置触发机制详解 Spring Boot以其“约定优于配置”的理念,极大简化了Spring应用的开发流程。其中,自动配置(Auto-Configuration)是其核心特性之一,能够根据项目依赖和上下文环境智能加载所需的配置。…...

从老式万用表到手机拍照:聊聊AD转换技术是怎么‘润物细无声’地改变我们生活的

从老式万用表到手机拍照:AD转换技术如何重塑现代生活 上世纪八十年代,一位电子工程师调试电路时,总会盯着指针式万用表的表盘,观察那根微微颤动的金属针——这是模拟时代最直观的测量方式。而今天,我们只需掏出手机拍照…...

GPU加速批量轨迹优化GATO在机器人MPC中的应用

1. GATO:GPU加速批量轨迹优化如何革新机器人MPC在工业机械臂高速分拣或四足机器人动态越障的场景中,传统控制算法常面临一个致命瓶颈——当需要同时处理数十种可能的运动轨迹方案时,CPU算力往往捉襟见肘。这正是我们团队开发GATO(…...

248MHz RISC-V MCU还能这么玩?手把手教你用AG32VF407内置的2KLE CPLD做高速数据采集

248MHz RISC-V MCU与2KLE CPLD的协同设计实战:构建高速数据采集系统 当传统MCU遇到多路高速信号采集需求时,开发者常面临两种选择:要么增加昂贵的专用芯片,要么外挂FPGA/CPLD实现硬件并行处理。AG32VF407的独特之处在于&#xff0…...

Phi-mini-MoE-instruct效果实测:长文本摘要+关键信息抽取双任务

Phi-mini-MoE-instruct效果实测:长文本摘要关键信息抽取双任务 1. 模型概览 Phi-mini-MoE-instruct是一款轻量级混合专家(MoE)指令型小语言模型,在多项基准测试中展现出卓越性能: 代码能力:在RepoQA、Hu…...

瑞萨RL78单片机Bootloader实战:手把手教你配置User工程(CS+ for CACX环境)

瑞萨RL78单片机Bootloader实战:CS for CACX环境下的User工程全流程配置 在嵌入式系统开发中,Bootloader的设计与实现往往是项目成功的关键一环。不同于常见的ARM架构单片机,瑞萨RL78系列在Bootloader开发方面的公开资料相对匮乏,这…...

CatBoost在房价预测中的优势与实践

1. CatBoost简介与房价预测背景CatBoost作为梯度提升决策树(GBDT)家族的重要成员,由Yandex团队于2017年推出。与其他提升算法相比,它最显著的特点是对类别型特征的原生支持。在房价预测这类典型场景中,我们经常会遇到大…...

3个简单步骤,让你在Windows上获得终极免费媒体播放体验

3个简单步骤,让你在Windows上获得终极免费媒体播放体验 【免费下载链接】mpc-hc MPC-HCs main repository. For support use our Trac: https://trac.mpc-hc.org/ 项目地址: https://gitcode.com/gh_mirrors/mpc/mpc-hc 你是否厌倦了臃肿的商业播放器&#x…...

Transformer跳跃连接原理与工程实践详解

1. 跳跃连接在Transformer模型中的核心价值我第一次在Vision Transformer中尝试引入跳跃连接时,准确率直接提升了7个百分点——这个结果让我意识到,这个看似简单的结构远比想象中重要。跳跃连接(Skip Connection)本质上是将神经网…...