小伙伴们,大家好今天我们来利用ollama本地大模型,三步实现电子发票发票号码的提取。          

步骤1:安装Ollama

    访问官网https://ollama.com/ 下载相应的版本进行安装,下载属于自己平台的ollama,根据安装向导完成安装。

Image

步骤2:安装Llama 3.2-Vision模型

通过在终端运行以下命令

安装Llama 3.2-Vision模型

ollama run llama3.2-vision

步骤3:利用python调用ollma llama3.2-vision 大模型获取对应电子发票的发票号码

          

1)添加提示词:    

Image

2)调用llama3.2-vision 大模型

Image

3)最终结果:查看了下,获取的信息还是比较准确的。          

Image

Image

            

全部代码展示:    

import base64          
import requests          
import json          
import streamingjson          

SYSTEM_PROMPT = """作为OCR助手。分析提供的图像并:         
1. 尽可能准确地识别图像中所有可识别的文本。         
2. 尽可能保持文本的原始结构和格式。        
3. 请主要识别发票号码后面的数字,并重点标识出来          
仅提供转录,不要有任何额外的评论。"""          
def encode_image_to_base64(image_path):          
with open(image_path, "rb") as image_file:          
return base64.b64encode(image_file.read()).decode('utf-8')          
def perform_ocr(image_path):          
base64_image = encode_image_to_base64(image_path)          
response = requests.post(          
"http://10.10.10.56:11434/api/chat",  # 确保此URL与你的Ollama服务端点匹配          
json={          
"model": "llama3.2-vision",          
"messages": [          
{          
"role": "user",          
"content": SYSTEM_PROMPT,          
"images": [base64_image],          
},          
],          
}          
)          
if response.status_code == 200:          
data_string = response.text          
json_segment_a = data_string        
lexer = streamingjson.Lexer()          
lexer.append_string(json_segment_a)          
completed_json = lexer.complete_json()          
return completed_json          
else:          
print("错误:", response.status_code, response.text)          
return None          
if __name__ == "__main__":          
image_path = "发票.png"  # 替换为你的图像路径          
result = perform_ocr(image_path)              
with open('result.txt', 'w') as file:          
file.write(result)          
ls=[]          
with open('result.txt', 'r') as file:          
while True:          
content = file.readline()          
if not content:          
break          
content_json=json.loads(content)          
ls.append(content_json.get("message", {}).get("content", ""))          
my_string = ' '.join(ls)          
print(my_string)    

感谢大家的支持,希望得到大家的关注与点赞,我们下期见。    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90360.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90360.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90360.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

告别下载中断:深入解析Tomcat JSP中的“远程主机强迫关闭连接”与“软件中止连接”

在Web开发中,提供文件下载功能是一项常见需求。然而,当用户在Tomcat JSP项目中尝试下载文件时,有时会遭遇令人头疼的错误提示:“远程主机强迫关闭了一个现有链接”(Remote host closed connection unexpectedly)或“您的主机中的软件中止了一个已建立的连接”(Software …

实战演练—基于Transformers的NLP解决方案总结

实战演练—基于Transformers的NLP解决方案总结 截至目前讲解的基础组件 以文本分类为例 Transformers显存优化 截至目前讲解的基础组件 Pipeline 流水线,用于模型推理,封装了完整的推理逻辑,包括数据预处理、模型预测及后处理 Tokenizer 分词器,用于数据预处理,将原始文本…

Java 解析前端上传 ZIP 压缩包内 Excel 文件的完整实现方案

使用zip压缩包上传excel文件的优点1、体积更小,节约带宽2、比excel直接读取更方便携带参数及修改3、可以一次性批量导入Java代码 ControllerPostMapping("/importData")ApiOperationSupport(order 3)ApiOperation(value "上传")public R impo…

【shell脚本编程】day1 备份指定文件类型

文章目录1、脚本要求2、脚本编写3、脚本解释4、脚本改进1、脚本要求 编写一个脚本,遍历/data/目录下的.txt文件将这些txt文件做一个备份备份的文件名增加一个年月日的后缀,比如将aming.txt备份为aming.txt_20231001 2、脚本编写 [rootlocalhost shell…

Gata 携手 Walrus 构建 AI 的开放执行基础设施

致力于开发去中心化大模型推理、训练和数据技术的 Gata,现已整合 Walrus,作为其 AI 开放执行基础设施的核心组件。Walrus 将为 Gata 的首款产品 DataAgent 提供关键的数据层,助力其全套应用,将去中心化 AI 的优势直接带给用户&…

DNS及DNS域名解析流程

文章目录什么是DNS域名解析DNS服务器DNS域名解析流程什么是DNS域名解析 我们首先要了解域名和IP地址的区别。IP地址是互联网上计算机唯一的逻辑地址,通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和分别。 但由于I…

用 STM32 的 SYSTICK 定时器与端口复用重映射玩转嵌入式开发

目录 1. SYSTICK 定时器的基本功:时间管理大师 1.1 SYSTICK 的核心寄存器与工作原理 1.2 配置 SYSTICK 的正确姿势 1.3 实战:用 SYSTICK 实现精准延时 1.4 小技巧:SYSTICK 的低功耗优化 2. SYSTICK 中断:让你的程序“活”起来 2.1 配置 SYSTICK 中断 2.2 实战:用 S…

Sa-Token:轻量级Java权限认证框架使用指南

一、Sa-Token简介 Sa-Token 是一个专注于权限认证的轻量级 Java 框架,旨在简化登录认证、权限控制等功能的实现。其核心功能包括: 登录认证:通过 Token 机制管理用户会话,支持单点登录(SSO)。权限认证&am…

动态 vs 静态住宅代理,哪种更适合广告投手?

在广告投放行业,无论你是跑Facebook、Google Ads,还是做TikTok、原生广告,代理IP几乎是绕不开的话题。而选择动态住宅代理还是静态住宅代理,对广告账户的稳定性、投放质量甚至生命周期都有直接影响。本篇文章将结合IPFoxy代理&…

命题是一种清晰、确定的表达。通过学习命题,来帮助你更清晰地表达自己的思想。

文章目录 引言 I 命题的特点 可以判断真伪 同一性 II 有效沟通的小技巧 多用陈述句,少用感叹句和疑问句。 在表述意思时,多用名词,少用代词;多用具体的名词,少用抽象的名词,避免造成不必要的歧义。 正确找托词 引言 要进行有效的逻辑推理,第一步是把我们的想法,我们要…

IPV6地址与IPV4有什么区别?

作为互联网协议的迭代版本,IPV6(Internet Protocol Version 6)与IPV4(Internet Protocol Version 4)在设计理念和功能特性上存在显著差异。本文将简要解析两者的核心区别,帮助读者理解IPV6的优势与必要性。…

python 什么时候应该用函数式编程,什么时候应该用面向对象?

在 Python 这个多范式语言中,选择使用函数式编程(Functional Programming, FP)还是面向对象编程(OOP)并非一个非黑即白的选择,而更像是在一个工具箱中为特定的任务挑选最合适的工具。 我们可以用一个比喻来…

【设计模式】迭代器模式 (游标(Cursor)模式)

迭代器模式(Iterator Pattern)详解一、迭代器模式简介 迭代器模式(Iterator Pattern) 是一种 行为型设计模式(对象行为型模式),它提供了一种方法来顺序访问一个聚合对象中的各个元素&#xff0c…

docker安装 Elasticsearch、Kibana、IK 分词器

Elasticsearch 1.拉去镜像 docker pull elasticsearch:8.12.2 docker pull kibana:8.12.22.创建挂载目录 mkdir /root/elasticsearch3.不挂载启动 docker run -d \ --restartalways \ --name fusion_elasticsearch \ --network fusion_network \ -p 9200:9200 \ -p …

Java面试宝典:Spring专题二

一、介绍下Spring中的事务 1.Spring事务的本质与价值 Spring事务本质是基于AOP的声明式事务封装,通过代理机制在目标方法前后注入事务管理逻辑(开启、提交/回滚)。其核心价值在于: 业务解耦:将事务控制从业务代码剥离,通过配置或注解管理(如@Transactional)。 统一抽…

DGMR压缩技术:让大规模视觉Transformer模型体积减半而性能不减

Transformer架构展现出卓越的扩展特性,其性能随模型容量增长而持续提升。大规模模型在获得优异性能的同时,也带来了显著的计算和存储开销。深入分析主流Transformer架构发现,多层感知器(MLP)模块占据了模型参数的主要部…

JavaWeb学习打卡14(JSP内置对象及作用域)

JSP 中9 大内置对象PageContext // 用来存东西Request // 用来存东西ResponseSession // 用来存东西Application (ServletContext) // 用来存东西config (ServletConfig)outpage…

涛思数据参与起草中国工业互联网研究院《工业数据库规范》全系列标准

最近,《工业数据库规范》系列团体标准正式发布。该标准由中国工业互联网研究院牵头,中国移动通信联合会发布,共分为三部分—— 第1部分:云数据库第2部分:实时数据库第3部分:时序数据库 涛思数据作为三项标…

使用exceljs导出luckysheet表格 纯前端 支持离线使用

一.技术 exceljs,luckysheet 二.实现 参考网上博文exceljs对导出lucksheet表格的实现,发现存在一些问题并给予修复: 1.字体颜色、字号,加粗等适配的问题. 2.单元格对齐方式不生效; 3.单元格边框无法绘制; 4.单元格边框颜色及线型错乱; 5.单元格列…

从0到1学习c++ 命名空间

也是好久没写博客了,主播这半年一直在忙别的领域,在磁力驱动领域干了一年,最好发现自己对这个领域并不是很感兴趣,做这个领域多半都是为了发文章,现在闲下来了,主播终于也是过上好日子了,主播又…