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

AI驱动的图像文本提取【Llama 3.2-Vision】

本月初,我尝试了书籍封面识别,将 YOLOv10、EasyOCR 和 Llama 3 结合成一个无缝工作流程。结果如何?我自信地从书籍封面中提取标题和作者,就像这是我的新超能力一样。你可以在这篇文章中查看这一旅程:使用自定义 Yolov10 和 Ollama (Llama 3) 增强 OCR。

但猜怎么着?仅仅几周后,这种方法已经开始感觉像流媒体时代的旧 VHS 录像带。为什么?随之而来的是 Llama 3.2-Vision——闪亮、新颖、超群的兄弟——完全提高了标准,让我之前的方法感觉像是来自恐龙。

让我们深入探讨为什么这种新方法会改变游戏规则

1、从优秀到卓越:进入 Llama 3.2-Vision

Llama 3.2-Vision 增强了 OCR + 信息提取管道。新的“视觉”支持使其比以前的版本更智能、更快速、更高效。

Llama 3.1 负责清理原始 OCR 输出,但 Llama 3.2-Vision 不仅能完成这些工作,还能做更多 — 直接处理图像,减少麻烦,减少对 EasyOCR 等第三方 OCR 工具的需求。它将所有内容集成到一个简单、精简的流程中。

这简化了工作流程并提高了准确性,因为 Llama 3.2-Vision 可以一次性完成整个任务:分析图像、检测文本并根据您的要求对其进行结构化。

2、Llama 3.2-Vision:如何安装和使用

在深入研究代码之前,你需要安装最新版本的 Ollama 来运行 Llama 3.2-Vision。请按照这篇文章获取分步指南。

安装后,直接从图像中提取书名和作者的代码非常简单:

from PIL import Image
import base64
import io

def image_to_base64(image_path):
    # Open the image file
    with Image.open(image_path) as img:
        # Create a BytesIO object to hold the image data
        buffered = io.BytesIO()
        # Save the image to the BytesIO object in a specific format (e.g., JPEG)
        img.save(buffered, format="PNG")
        # Get the byte data from the BytesIO object
        img_bytes = buffered.getvalue()
        # Encode the byte data to base64
        img_base64 = base64.b64encode(img_bytes).decode('utf-8')
        return img_base64

# Example usage
image_path = 'image.png'  # Replace with your image path
base64_image = image_to_base64(image_path)

import ollama

# Use Ollama to clean and structure the OCR output
response = ollama.chat(
    model="x/llama3.2-vision:latest",
    messages=[{
      "role": "user",
      "content": "The image is a book cover. Output should be in this format - <Name of the Book>: <Name of the Author>. Do not output anything else",
      "images": [base64_image]
    }],
)
# Extract cleaned text
cleaned_text = response['message']['content'].strip()
print(cleaned_text)

让我们看几个例子——

示例 1:单张图片输入

我们从上一篇文章中使用的单本书封面图片开始。

输出:

The Secret History: Donna Tartt.


该模型成功识别了书名和作者的全名,并根据指定的模板完美格式化。

示例 2:生成作者的全名

在这种情况下,作者的名字不完整。

Soure: Gyaanstore

输出:

Norwegian Wood: Haruki Murakami.

该模型毫不费力地精确提取了书名和作者姓名的可用部分。但令人印象深刻的是:它智能地填写了缺失的名字,给我们完整的作者姓名,就像它一直在那里一样。

示例 3:多本书

如果我们一次提供多本书封面的图片会怎么样?

Source: Elocalshop

输出:

Norwegian Wood: Haruki Murakami
Kafka on the Shore: Haruki Murakami
Men Without Women: Haruki Murakami
Sputnik Sweetheart: Haruki Murakami
South of the Border, West of the Sun: Haruki Murakami
A Wild Sheep Chase: Haruki Murakami
Birthday Stories: Haruki Murakami
Underground: Haruki Murakami
After Dark: Haruki Murakami
After the Quake: Haruki Murakami
The Elephant Vanishes: Haruki Murakami

该模型处理每幅图像并输出相应的标题和作者,使其能够灵活地批量处理多本书。

示例 4:书堆

在此场景中,我们呈现了一张多本书堆叠在一起的图像,就像它们在真实场景中一样

Souce: Typing Madly

输出:

* Norwegian Wood: Haruki Murakami
* Sputnik Sweetheart: Haruki Murakami
* After Dark: Haruki Murakami
* Dance, Dance, Dance: Haruki Murakami
* Kafka on the Shore: Haruki Murakami
* Hear the Wind Sing: Haruki Murakami
* A Wild Sheep Chase: Haruki Murakami
* Blind Willow, Sleeping Woman: Haruki Murakami
* After the Quake: Haruki Murakami
* The Wind-Up Bird Chronicle: Haruki Murakami

即使在书籍堆叠或部分被遮挡的情况下,Llama 3.2-Vision 也能尽可能准确地识别书名和作者。

3、有什么变化?

在我之前的方法中,我首先使用 YOLOv10 检测书籍封面上的文本区域,然后将这些区域通过 EasyOCR 进行文本提取,最后依靠 Llama 3 清理结果。现在,有了 Llama 3.2-Vision,这是一个一体化的流畅过程:我给它输入一张图片,它会立即给我一个随时可用的结构化响应——不再需要在多个模型之间来回切换。

以下是快速比较:

旧方法:

  • YOLOv10:用于检测文本区域。
  • EasyOCR:用于 OCR 处理。
  • Llama 3.1:用于清理和构造文本。

新方法:

  • Llama 3.2-Vision:一体化处理——图像分析、文本检测和构造。

4、为什么重要?

升级后的工作流程具有实际好处:

  • 简单:更少的工具意味着更少的配置、更少的依赖关系和更容易的维护。
  • 效率:Llama 3.2-Vision 可一次性处理所有任务,减少所需的时间和资源。
  • 准确性:控制整个过程的单一模型可减少不同阶段之间出错的可能性。
  • 多功能性:你可以使用 Ollama 在本地轻松运行此模型,并且该模型可以适应除简单文本提取之外的更复杂用例。

AI 驱动的文本提取前景光明,而 Llama 3.2-Vision 只是一个开始。


原文链接:Llama 3.2-Vision文本提取 - 汇智网


http://www.kler.cn/a/373094.html

相关文章:

  • uniapp实现【时间戳转换为日期格式(年-月-日 时-分-秒)】
  • 别被忽悠了 Lua 数组真的也可以从 0 开始索引?
  • 前端好用的网站分享——CSS(持续更新中)
  • 机器学习-决策树
  • //传入年龄、年龄类型,返回出生日期,通过日期计算年龄类型
  • CF1152F2 Neko Rules the Catniverse (Large Version) 题解(插入类dp,状压,矩阵乘法,dp技巧)
  • CSS实现回到顶部且平滑过渡
  • Zoho x Zendure:借助Zoho One加速从0到1出海品牌搭建
  • 【速查笔记】单片机
  • 让卷积神经网络来辨识马和人
  • 【折腾一上午】Java POI 导出 Excel 自适应列宽行高
  • STM32FreeRTOS 使用QSPI驱动nandFlash
  • Sentinel底层如何计算京东双十一线上系统实时QPS
  • 【SAP FICO】八大业务_6货币资金管理
  • 挑战Java面试题复习第3天,无人扶我青云志
  • ELK Stack与Graylog:强大的日志分析和可视化工具
  • 分类算法——LightGBM 详解
  • 基于SSM+微信小程序的汽车维修管理系统(汽车5)
  • 使用Python批量合并多个PDF文档
  • 使用 Flask 实现简单的登录注册功能
  • Unity计算二维向量夹角余弦值和正弦值的优化方法参考
  • cmake学习笔记
  • 什么是目标检测?
  • P1037 [NOIP2002 普及组] 产生数
  • Mybatis-18.动态SQL-sqlinclude
  • 【从零开始的LeetCode-算法】3216. 交换后字典序最小的字符串