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

AI助力 三步实现电子发票发票号码的提取

小伙伴们,大家好今天我们来利用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.dtcms.com/a/296994.html

相关文章:

  • 小架构step系列24:功能模块
  • 【ResizeObserver】【页面布局】监听一个 div 元素的动态高度变化并同步设置另一个元素的高度
  • Windows环境下 Go项目迁移至Ubuntu(WSL) 以部署filebeat为例
  • 【数组的定义与使用】
  • 保障工业核心命脉:深度解读工业交换机QoS的“智能流量治理”之道
  • CMake ARGV变量使用指南
  • Python桌面版数独(五版)-优化选择模式触发新棋盘生成
  • OSPF 实验
  • RuoYi-Vue 项目 Docker 全流程部署实战教程
  • 中国、美国、欧盟、日本、英国临床试验API数据接口
  • Ⅹ—6.计算机二级综合题7---10套
  • Mac系统机能连接操控别的平台设备吗?能被远程操作吗?
  • Nginx快速入门及案例
  • 【安卓笔记】解决livedata粘性事件
  • 《Java语言程序设计》第2章复习题(2)
  • RePlugin 坑位使用原理与指南
  • 多源信息融合智能投资【“图神经网络+强化学习“的融合架构】【低配显卡正常运行】
  • 模拟退火算法 (Simulated Annealing, SA)简介
  • JavaWeb学习打卡14(JSP内置对象及作用域)
  • ARM汇编常见伪指令及其用法示例
  • IntelliJ IDEA中管理多版本Git子模块的完整指南
  • 智慧工厂网络升级:新型 SD-WAN 技术架构与应用解析
  • 商场导航软件:3D+AI 基于Deepseek 模型的意图识别技术解析
  • BacNet 是什么?跟 LoRaWAN 的关系是什么?
  • 将JS字节流转化为对象
  • 西安交通大学XJTU 通信/信息工程大三和部分大四 实验和课程答案
  • C++哪些运算符不能被重载?
  • kubernetes集群中部署CoreDNS服务
  • day46day47 通道注意力
  • 一种基于单片机控制的太阳能电池板系统设计