qwen-vl 实现OCR的测试

OCR 技术是数字化时代必不可少的实用工具。以前都依赖专业的公司的专业软件才能完成。成本很高。也正因为如此,我国纸质资料的数字化并不普及。基于大模型的ORC 也许会改变这样的现状。

使用深度学习进行文本识别

深度学习彻底改变了文本识别,显著提升了准确性和性能。目前已有多种基于深度学习的文本识别方法。

  • 卷积神经网络 (CNN):CNN 通常用于基于图像的文本识别。输入图像由卷积层驱动,提取特征并学习文本表征。然后,CNN 的输出被传递到循环神经网络 (RNN) 进行进一步处理和文本识别。

  • 循环神经网络 (RNN):RNN 广泛应用于基于序列的文本识别,例如手写和语音识别。RNN 使用反馈循环来处理序列数据,从而能够捕捉长期依赖关系和上下文信息。

  • 编码器-解码器网络:编码器-解码器网络用于端到端文本识别。输入图像首先被编码为特征向量,然后解码为字符或单词序列。这些网络可以进行端到端训练,从而提高效率和准确性。

记得十年前学习google 的tensorflow 神经网络技术的第一个项目就是手写数字的识别。伴随着大模型(LLM) 特别是多模态大模型的出现,基于AI大模型 的OCR 变现出显著的优势。而且使用十分简单。最近我就尝试了基于阿里的qwen-vl 大模型实现OCR 。

输入:

这是一个page 的文档,通过截屏出来的图片。

代码

python 复制代码
import os
from openai import OpenAI
import base64
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")
 
input_image_path = r"./text.png"
base64_image = encode_image(input_image_path)
client = OpenAI(
    api_key="sk-27c202869xxxxxxa4a9300767e0d",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen-vl-ocr-latest",
    messages=[
        {
            "role": "system",
            "content": [{"type": "text", "text": "You are a helpful assistant."}],
        },
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": f"data:image/jpeg;base64,{base64_image}"
                    },
                },
                {"type": "text", "text": "请识别出图片文字"},
            ],
        },
    ],
)

print(completion.choices[0].message.content)

OCR的结果

python 复制代码
播客电台项目报告
项目简介
项目的目标
本项目标是实现像收听电台一样收听自己喜爱的播客节目。节目单是根据听众的喜好,利用
AI技术的推荐算法自动生成。实现听众完全脱离屏幕操作,可以在多种设备收听播客节目。
本项目的另一个目标是将国外优质的播客节目翻译成中文播客,使国内听众能够收听到国外
生活,教育类的播客节目。倾听世界的声音。
项目的背景
国内播客的现状
国内的播客平台主要包括喜马拉雅和小宇宙。本人收听了一段时间的播客节目,总的感觉有一些高
质量的播客节目,比如我喜欢的播客包括:硅谷101,商业就是这样的。但是高质量的节目比较少,
主要表现在:
• 音频书比较多,访谈类节目比较少。从我个人的体验而言,我更喜欢访谈类节目,感觉有一个人
在讲述。更加亲切。

我尝试使用了两个大模型

  • qwen-vl-max-latest
  • qwen-vl-ocr-latest

初步测试,感觉两个模型的OCR 识别能力都很棒。

我也尝试过OllamaOCR ,它是基于Llama 3.2-Vision 11B 实现的,感觉对中文的识别效果不行。

PDF 分页转换成图(PDF2Image)

如果要将一个PDF 文档进行OCR 识别,需要将PDF 文档的每一页转换成一个图片,然后在进行OCR 转换。

这里,我们使用pdf2image 的模块。而它有需要使用poppler 模块。

python 复制代码
#pip install pdf2image
#conda install -c conda-forge poppler
from pdf2image import convert_from_path
pages = convert_from_path('./2.pdf', 500)
for count, page in enumerate(pages):
    page.save(f'./pages/page{count}.jpg', 'JPEG')

分页转换程序

python 复制代码
from openai import OpenAI
import base64
import  os.path
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")
 
#input_image_path = r"./text.png"
#base64_image = encode_image(input_image_path)
client = OpenAI(
    api_key="sk-27c202869xxxxx4a9300767e0d",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
def PageOCR(base64_image):
    completion = client.chat.completions.create(
        model="qwen-vl-ocr-latest",
        messages=[
            {
                "role": "system",
                "content": [{"type": "text", "text": "You are a helpful assistant."}],
            },
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": f"data:image/jpeg;base64,{base64_image}"
                        },
                    },
                    {"type": "text", "text": "请识别出图片文字,以markdown的格式输出。内容仅包含文字和标点符号,不包含任何说明,注释。"},
                ],
            },
        ],
    )
    
    print(completion.choices[0].message.content)
    return completion.choices[0].message.content
def Main():
    DIR = './pages'
    FileNumber=len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR, name))])
    Text=""
    for  count in range(FileNumber):
       base64_image=  encode_image(f'./pages/page{count}.jpg' ) 
       Text=Text+PageOCR(base64_image)
    f = open("Content.md", "a")
    f.write(Text)
    f.close()
Main()

OCR 了一篇繁体字的散文

可以在网络上搜索到。一共7页。

结果很满意,准确率很高。但是要求大模型以markdown 格式输出,好像它没有照我做。

结束语

很感慨,技术进步有时候真的很无情,一些企业做了许多年的OCR , 被大模型超越了,真是被时代淘汰,连招呼都不打。

无论是语音转码(TTS/STT),还是OCR ,中文还是要依靠国内的力量来开发。也是国内团队具有优势的场景之一。

相关推荐
思通数据2 小时前
AI全域智能监控系统重构商业清洁管理范式——从被动响应到主动预防的监控效能革命
大数据·人工智能·目标检测·机器学习·计算机视觉·数据挖掘·ocr
向北威威4 小时前
eSearch:一款集截图、OCR与录屏于一体的多功能软件
ocr
静心问道15 小时前
Donut:无OCR文档理解Transformer
深度学习·ocr·transformer
开开心心就好1 天前
高效全能PDF工具,支持OCR识别
java·前端·python·pdf·ocr·maven·jetty
一个人的博客@你2 天前
C# 通用OCR识别
图像处理·c#·ocr·图像识别·文字提取
Grassto3 天前
dockerfile: PaddleOCR hubserving api 服务
docker·ocr·paddleocr
TextIn智能文档云平台4 天前
PDF文档解析新突破:图表识别、公式还原、手写字体处理,让AI真正读懂复杂文档!
图像处理·人工智能·算法·自然语言处理·pdf·ocr
带鱼工作室5 天前
通义读光系列文字检测+识别模型端到端OCR应用
python·opencv·计算机视觉·ocr
白熊1885 天前
【计算机视觉】OpenCV实战项目:Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析
opencv·计算机视觉·ocr
沉到海底去吧Go5 天前
【身份证识别表格】批量识别身份证扫描件或照片保存为Excel表格,怎么大批量将身份证图片转为excel表格?基于WPF和腾讯OCR的识别方案
ocr·wpf·excel·身份证识别表格·批量扫描件身份证转表格·图片识别表格·图片识别excel表格