自学内容网 自学内容网

AI大模型实现图片OCR识别

一.背景

OCR(Optical Character Recognition,[光学字符识别])是一种将图像中的文字转换为机器编码文本的技术。这项技术可以自动读取纸质文档上的文字信息,并将其转换成电子格式,便于编辑、存储和检索。OCR 技术在很多领域都有广泛应用,比如数据录入、文献数字化、辅助阅读设备等。

LLM 助力 OCR 的方式

文本理解和后处理:

语义理解:LLM 可以帮助 OCR 系统理解识别出的文本内容,从而对错误或模糊的地方进行校正。例如,如果 OCR 系统误读了某个单词,LLM 可以根据上下文来推测正确的单词。

格式修复:对于结构复杂的文档,如包含表格、列表等,LLM 能够帮助恢复原始文档的格式,使输出结果更加符合原始文档的结构。

多模态信息融合

结合图像识别和自然语言处理能力,LLM 可以处理包含文本和图像的混合内容,实现更高级别的信息提取和理解。

特定领域优化:

    • 在特定领域(如法律、医学等),LLM 可以通过预训练和微调来优化对专业术语的理解和识别,提高特定领域的 OCR 准确性。

LLM 进行图像识别与传统 OCR 对比时的主要缺点

LLM 的缺点

高计算资源需求:

训练成本:训练大型语言模型需要大量的计算资源,包括高性能 GPU 和大规模的数据集。这导致训练成本非常高昂。

推理成本:即使在模型训练完成后,进行实时推理也需要较高的计算资源,这对于资源有限的设备(如嵌入式系统)来说是一个挑战。

数据隐私和安全问题:

数据收集:训练 LLM 需要大量的数据,这些数据可能包含敏感信息。收集和使用这些数据需要严格遵守数据隐私和安全法规,增加了合规成本。

数据泄露风险:在传输和存储过程中,数据有泄露的风险,特别是在云环境中。

模型复杂性和可解释性差:

黑盒性质:大型语言模型通常被视为“黑盒”,内部机制难以理解,这在某些需要高度透明和可解释性的应用场景中可能是一个问题。

调试困难:由于模型复杂,调试和优化变得更加困难,尤其是在遇到特定问题时。

训练时间和成本:

长时间训练:训练 LLM 需要大量的时间和计算资源,这在快速迭代和开发周期短的项目中可能是一个瓶颈。

持续优化:模型需要定期进行微调和优化,以适应新的数据和应用场景,这增加了维护成本。

泛化能力的局限性:

特定领域适应:尽管 LLM 具有较强的泛化能力,但在特定领域(如医学、法律等)的性能可能不如专门为这些领域设计的传统 OCR 系统。

长尾问题:对于一些罕见或特殊的字符和布局,LLM 可能表现不佳,因为这些情况在训练数据中出现的频率较低。

实时性和延迟:

响应时间:由于 LLM 的复杂性,实时处理图像和文本的响应时间可能较长,这对于需要快速反馈的应用(如实时翻译、即时通讯等)可能是一个问题。

模型大小和存储:

大模型占用空间:大型语言模型通常体积庞大,占用较多的存储空间,这在存储资源有限的设备上可能是一个问题。

与传统 OCR 的对比

技术成熟度:

传统 OCR:已经发展了几十年,技术相对成熟,有许多现成的商业产品和服务,易于集成和使用。

LLM:虽然近年来取得了显著进展,但仍处于快速发展阶段,技术和工具仍在不断完善中。

成本效益:

传统 OCR:成本相对较低,适合预算有限的小型企业和个人开发者。

LLM:初始投资和长期维护成本较高,更适合大型企业和有较高预算的项目。

应用场景:

传统 OCR:适用于标准化和结构化的文档处理,如发票、表格等。

LLM:适用于复杂和非结构化的文档处理,如手写笔记、多语言文档等。

二.实践LLM识别图形验证码与相关案例

今天我们来看的场景是 图形验证码识别,使用公网大模型API起成本高效识别图形验证码

提示词

请对这张图片进行OCR识别,并输出最准确的验证码,直接输出识别出的结果字符,不要输出其他内容。

文心一言3.5

识别成功

通义千问2.5

识别成功

通义千问2-VL-开源版-7B

图片理解qwen2-vl-7b

识别成功

关于通义7B模型

一般来说,7B参数量的模型在推理时可能需要至少8GB到16GB的GPU显存,但这只是一个粗略的估计。为了更准确地评估所需GPU显存,建议参考该模型官方提供的文档或测试环境中的具体要求。如果是在本地运行,还应该考虑是否进行了任何优化措施,比如[混合精度训练](使用FP16而非FP32),这可以有效减少所需的显存量。如果您打算进行模型训练而不是简单的推理,那么可能还需要更多的显存来存储梯度信息和其他训练过程中产生的数据。

KIMI

识别成功

代码实现

使用代码实现调用通义千问 大模型API, 以下是片段python示例代码,其它语言类似:

import os
import json
import base64
import requests
from datetime import datetime
class AliBailianImageService:
     def __init__(self, configuration):
         self.configuration = configuration
    def get_api_key(self):
         # 根据环境变量决定从哪里读取 API Key
         dev_environment_variable = os.getenv("ENVIRONMENT")
         is_development = not dev_environment_variable or dev_environment_variable.lower() == "development"
        if is_development:
             # 开发环境从配置中读取
             api_key = self.configuration.get("DASHSCOPE_API_KEY")
         else:
             # 生产环境从环境变量读取
             api_key = os.getenv("DASHSCOPE_API_KEY")
        # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key = "sk-xxx"
         if not api_key:
             print("API Key 未设置。请确保环境变量 'DASHSCOPE_API_KEY' 已设置。")
             return None
        return api_key
    def get_image_base64_string_and_save(self, image_url):
         response = requests.get(image_url)
         if response.status_code != 200:
             raise Exception(f"Failed to download image: {response.status_code}")
        image_data = response.content
         encoded_image = base64.b64encode(image_data).decode('utf-8')
        # 可选步骤:保存图片到文件
         # filename = f"{uuid.uuid4()}.jpg"
         # with open(filename, 'wb') as f:
         #     f.write(image_data)
        return encoded_image
    def send_post_request(self, url, json_content, api_key):
         headers = {
             "Authorization": f"Bearer {api_key}",
             "Content-Type": "application/json",
             "Accept": "application/json"
         }
        response = requests.post(url, data=json_content, headers=headers)
         response_body = response.text
        self.write_response_to_log(response_body)
        if response.status_code >= 200 and response.status_code < 300:
             return response_body
         else:
             return f"请求失败: {response.status_code}"
    def write_response_to_log(self, response_body):
         log_file_path = "Logs/response.log"
         log_dir = os.path.dirname(log_file_path)
        if not os.path.exists(log_dir):
             os.makedirs(log_dir)
        with open(log_file_path, 'a') as f:
             f.write(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Response Body: {response_body}\n")
    def get_results(self):
         api_key = self.get_api_key()
         if not api_key:
             return None
        encoded_image = self.get_image_base64_string_and_save(
             "http://0.0.0.0/7661454/captchaimage?rnd=0.8717223995099175"
         )
        url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"
         json_content = {
             "model": "qwen2-vl-7b-instruct",
             "messages": [
                 {
                     "role": "user",
                     "content": [
                         {"type": "text", "text": "请对这张图片进行OCR识别,并输出最准确的验证码,直接输出识别出的结果字符,不要输出其他内容。"},
                         {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{encoded_image}"}}
                     ]
                 }
             ]
         }
        json_content_str = json.dumps(json_content)
        result = self.send_post_request(url, json_content_str, api_key)
         print(result)
         return result
if __name__ == "__main__":
     # 示例配置
     config = {
         "DASHSCOPE_API_KEY": "your-api-key-here"
     }
    service = AliBailianImageService(config)
     result = service.get_results()
     if result:
         print("Result:", result)

通义千问2-VL-开源版-2B

通义千问VL模型qwen2-vl-2b-instruct可以根据您传入的图片来进行回答,curl参考

curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \ -H "Authorization: Bearer $DASHSCOPE_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "model": "qwen-vl-max", "input":{ "messages":[ { "role": "user", "content": [ {"image": "https://img.alicdn.com/imgextra/i2/O1CN01y1lotD1hINrPr60fs_!!6000000004254-0-tps-1384-3024.jpg"}, {"text": "这是什么?"} ] } ] } }'

事实情况下独立部署LLM也可以, 2B与7B对GPU显存要求不高

测试图片进行识别

以上我们需要识别的图形验证码示例

HTTP Response返回示例

[2024-11-06 16:14:22] Response Body: {"choices":[{"message":{"content":""bafy"","role":"assistant"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":60,"completion_tokens":6,"total_tokens":66},"created":1730880859,"system_fingerprint":null,"model":"qwen-vl-plus","id":"chatcmpl-5a306496-300c-9815-8c50-35e98f15508d"}

目前通义千问仅供免费体验,另一个官方示例是视觉语言模型输出示例

传统OCR工具提取的内容不完整且格式混乱。大模型不仅能精准提取图片中的文字,还能以规整的形式输出。

LLM下识别输出

通义千问团队以Apache 2.0协议开源了Qwen2-VL-2B和Qwen2-VL-7B,开源代码已集成到Hugging Face Transformers、vLLM和其他第三方框架中。开发者可以通过Hugging Face和魔搭ModelScope下载使用模型,也可通过通义官网、通义APP的主对话页面使用模型。

在这里插入图片描述

大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

在这里插入图片描述

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
在这里插入图片描述

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述


原文地址:https://blog.csdn.net/2401_85375151/article/details/143734114

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!