所有文章 > AI驱动 > AI大模型实现OCR识别验证码
AI大模型实现OCR识别验证码

AI大模型实现OCR识别验证码

LLM(Large Language Model)技术是一种基于深度学习的自然语言处理技术,旨在训练能够处理和生成自然语言文本的大型模型。

  1. LLM 技术的核心思想是使用深度神经网络,通过大规模的文本数据预训练模型,并利用这些预训练模型进行下游任务的微调或直接应用。
  2. LLM 技术的主要特点是可以从大规模文本数据中学习到丰富的语言知识和语言模式,使得模型能够对自然语言的语义、语法等进行理解和生成,具备更强的语言处理能 LLM 技术在自然语言处理领域具有广泛的应用前景。以下是一些应用前景的示例:
  • 语言理解和生成:LLM 技术可以应用于文本分类、命名实体识别、关系抽取、情感分析等任务,对自然语言进行语义理解和信息提取。
  • 机器翻译:LLM 技术可以应用于机器翻译任务,训练模型能够自动将一种语言翻译成另一种语言。
  • 问答系统:LLM 技术可以用于构建智能问答系统,通过理解用户的问题并检索相关信息,给出准确的答案。
  • 对话生成:LLM 技术可以应用于对话系统,模拟人类对话,进行自然、流畅的交互。
  • 文本摘要和生成:LLM 技术可以用于自动摘要生成,将长文本压缩为简洁准确的摘要,也可以用于生成文章、新闻等文本内容。

1.LLM常见应用

  1. 文本到文本:摘要、翻译、问答 文本到文本应用程序通常属于自然语言处理 (NLP) 的范畴,采用 Transformer 模型或 BERT(Transformers 的双向编码器表示)等复杂算法。在文本摘要的背景下,Rouge Score 或 BLEU(双语评估研究)指标等技术可以评估生成的摘要的质量。对于企业来说,这对于自动总结冗长的报告、从而更快地做出决策来说非常宝贵。文本翻译服务通常采用在并行语料库上接受过培训的领域LLM,并使用 METEOR 等指标进行评估。这些服务对于全球运营的企业至关重要,可以实现跨越语言障碍的无缝沟通。问答平台通常依赖上下文感知算法来提供高度准确的答案。企业可以将领域LLM集成到支持系统中,以实现实时、有数据支持的响应。
  2. 语音转文本:转录服务、声控助手 语音转文本技术的关键在于自动语音识别 (ASR) 系统。ASR 系统采用隐马尔可夫模型或深度神经网络来转录口语单词。企业可以利用 ASR 系统在电话会议期间提供自动实时转录服务,创建易于搜索和存档的文本记录。声控助手采用 ASR 和 NLP 来执行命令。这里的商业应用范围从促进仓库中的免提操作到零售业中复杂的客户交互系统。

3.图像转文本:图像字幕、OCR(光学字符识别) 图像到文本结合使用卷积神经网络 (CNN) 进行特征提取,并结合循环神经网络 (RNN) 或 Transformer 生成相应的文本。OCR 技术专门采用二值化等图像预处理技术,并采用 k-NN 或 SVM 等机器学习分类器。对于企业来说,领域LLM可以转化为搜索引擎优化视觉内容的自动标记、发票的自动分类等等。

  1. 代码生成:自动生成代码片段,修复Bug 在编码数据库上训练的复杂语言模型可以预测可能的代码片段,从而加快软件开发周期。领域LLM通常采用抽象语法树或控制流图来提高准确性。在错误修复中,集成静态代码分析工具来识别漏洞,机器学习模型建议适当的修复。这提高了业务应用程序的效率和稳健性。
  2. 聊天机器人:客户支持、交互式常见问题解答 业务环境中的聊天机器人通常使用决策树、有状态 LSTM 网络甚至更高级的架构(例如 GPT(生成式预训练变压器))构建。这些聊天机器人通常接受企业历史客户服务交互的培训,这使它们能够更切合实际地解决问题。除了客户支持之外,他们还可以执行从潜在客户开发到自动追加销售的各种角色,从而显着降低人力成本。
  3. 情绪分析:通过评论或社交媒体确定客户情绪 情感分析通常采用自然语言理解 (NLU)(NLP 的一个子领域)来识别表明情感的语言中的细微差别。通常使用 TextBlob、VADER(Valence Aware Dictionary 和 sEtiment Reasoner)以及更先进的神经网络模型。企业可以将情绪分析集成到 CRM 系统中,从而实现实时客户情绪跟踪和更有针对性的客户互动。
  4. 数据清理:识别并纠正错误的数据条目 数据清理过程通常采用无监督学习算法(例如 k 均值聚类或分层聚类)来识别错误或异常数据点。此外,可以配置决策树或基于规则的系统来识别结构化数据中的不一致之处。对于企业而言,数据清洗可确保分析的可靠性,这对于战略规划和运营效率至关重要。
  5. 异常检测:识别数据集中的异常值或异常值 对于异常检测,通常使用 Z 分数等统计技术或隔离森林等机器学习算法。时间序列数据可能会使用长短期记忆网络 (LSTM) 来检测随时间变化的异常情况。企业可以在欺诈检测、制造质量控制或市场趋势预测等各个领域使用异常检测,从而预先识别和减轻风险。

通过了解这些各种领域LLM功能的技术基础和业务应用,企业可以就如何将领域LLM整合到其运营中以产生最大影响做出更明智的决策。

1.0 ChatIE:通过多轮问答问题实现实命名实体识别和关系事件的零样本信息抽取

零样本信息抽取(Information Extraction,IE)旨在从无标注文本中建立IE系统,因为很少涉及人为干预,该问题非常具有挑战性。但零样本IE不再需要标注数据时耗费的时间和人力,因此十分重要。近来的大规模语言模型(例如GPT-3,Chat GPT)在零样本设置下取得了很好的表现,这启发我们探索基于提示的方法来解决零样本IE任务。我们提出一个问题:不经过训练来实现零样本信息抽取是否可行?我们将零样本IE任务转变为一个两阶段框架的多轮问答问题(Chat IE),并在三个IE任务中广泛评估了该框架:实体关系三元组抽取、命名实体识别和事件抽取。在两个语言的6个数据集上的实验结果表明,Chat IE取得了非常好的效果,甚至在几个数据集上(例如NYT11-HRL)上超过了全监督模型的表现。我们的工作能够为有限资源下IE系统的建立奠定基础。

1.1RAG检索增强生成—-LangChain

LangChain的目的是为了开发应用,通过模块组合的方式使用LLM,并与其他模块组合的方式来创造应用。可以理解为Langchain本身并不提供LLM模型,只是对LLM抽象,把LLM当作一个功能模块使用。LangChain能够连接LLM的能力与目前已有的其他能力,创造能力更强大的应用。

实现原理如图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM生成回答。 可以看到,核心是将本地答案数据集转为向量存储到向量数据,当用户输入查询的问题时,把问题转为向量然后从向量数据库中查询相近的答案topK 这个时候其实就是我们最普遍的问答查询方案,在没有大模型的时候就直接返回相关的答案整个流程就结束了。现在有大模型了可以优化回答内容的整体结构。 核心一:文本切割 核心二:embedding及向量化存储 核心点三:LLM总结 通过embedding向量化文本后可根据需要召回TopK的chunk文档,并按照类似如下的prompt template灌给大模型进行总结。

"""
已知信息:{context}
根据上述已知信息,简洁和专业的来回答用户的问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题” 或 “没有提供足够的相关信息”,不允许在答案中添加编造成分,答案请使用中文。
问题是:{question}
"""

1.2 AIGC技术应用

AIGC(Artificial Intelligence Generated Content,人工智能生成内容)是一种利用人工智能技术生成各种形式内容的方法。这些内容包括文本、图像、音频、视频等。

AIGC技术的应用范围非常广泛,包括但不限于以下几个方面:

文本生成:使用自然语言处理技术,根据给定的输入,自动生成符合语法和语义规则的文章、故事、广告语等。 图像生成:利用计算机视觉技术,根据给定的输入,自动生成符合要求的图片、海报、漫画等。 音频生成:使用语音合成技术,根据给定的文字或语音输入,自动生成符合要求的音频文件,如语音助手、语音导航等。 视频生成:利用计算机视觉和语音识别技术,根据给定的输入,自动生成符合要求的视频文件,如智能监控、智能安防等。 AIGC技术的应用不仅可以提高内容生成的效率和质量,还可以降低内容制作的成本和风险。例如,在媒体和广告行业,AIGC技术可以快速生成符合品牌调性和用户需求的文章、图片和视频,提高品牌曝光和用户粘性。在游戏行业,AIGC技术可以自动生成游戏场景、角色和道具等,提高游戏开发效率和质量。

  • 部分案例:
    • 腾讯“AI写稿”:在2018年雅加达亚运会期间,腾讯新闻写稿机器人以接近500篇/天的速度发布关于亚运会的赛事新闻,内容覆盖11个比赛大项。通过结合计算机视觉与自然语言处理技术,腾讯写稿机器人可以从网上抓取信息给图片打标签;然后基于标签通过算法挖掘出图片中的信息;再根据各种框架算出精彩指数并挑选图片;最后选择历史文章片段完成文本写作。整个流程耗时不超过5秒。
    • 阿里巴巴“AI设计”:阿里巴巴的“鹿班”是一款可以秒级自动生成大量Banner图的在线设计工具,2017年双11期间,鹿班累计设计4.4亿张Banner图,而人类设计师的极限是1000张。鹿班突出的一个功能是“智能排版”,用户只需要任意输入一段文字、上传一张图片即可,通过算法就能自动分析内容与背景的关系,实现元素间的最优布局。
    • 快手“AI合成主播”:2020年,快手推出“AI合成主播”,该主播可以24小时在线直播,只需输入文字即可生成内容。这种主播可以替代部分人工主播,降低直播成本,提高直播效率。
    • 微软小冰“AI写诗”:微软小冰通过深度学习和自然语言处理技术,可以自动生成符合格律和意境的诗歌。这些诗歌不仅可以用于文化娱乐,还可以用于教育和科研等领域。
    • 谷歌“AI作画”:谷歌推出了一种名为“DeepDream”的AI作画工具,可以根据给定的输入自动生成具有艺术风格的图像。这些图像可以用于艺术创作、广告设计和游戏开发等领域。

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

LLM 的缺点

  1. 高计算资源需求:
  • 训练成本:训练大型语言模型需要大量的计算资源,包括高性能 GPU 和大规模的数据集。这导致训练成本非常高昂。
  • 推理成本:即使在模型训练完成后,进行实时推理也需要较高的计算资源,这对于资源有限的设备(如嵌入式系统)来说是一个挑战。
  1. 数据隐私和安全问题:
  • 数据收集:训练 LLM 需要大量的数据,这些数据可能包含敏感信息。收集和使用这些数据需要严格遵守数据隐私和安全法规,增加了合规成本。
  • 数据泄露风险:在传输和存储过程中,数据有泄露的风险,特别是在云环境中。
  1. 模型复杂性和可解释性差:
  • 黑盒性质:大型语言模型通常被视为“黑盒”,内部机制难以理解,这在某些需要高度透明和可解释性的应用场景中可能是一个问题。
  • 调试困难:由于模型复杂,调试和优化变得更加困难,尤其是在遇到特定问题时。
  1. 训练时间和成本:
  • 长时间训练:训练 LLM 需要大量的时间和计算资源,这在快速迭代和开发周期短的项目中可能是一个瓶颈。
  • 持续优化:模型需要定期进行微调和优化,以适应新的数据和应用场景,这增加了维护成本。
  1. 泛化能力的局限性:
  • 特定领域适应:尽管 LLM 具有较强的泛化能力,但在特定领域(如医学、法律等)的性能可能不如专门为这些领域设计的传统 OCR 系统。
  • 长尾问题:对于一些罕见或特殊的字符和布局,LLM 可能表现不佳,因为这些情况在训练数据中出现的频率较低。
  1. 实时性和延迟:
  • 响应时间:由于 LLM 的复杂性,实时处理图像和文本的响应时间可能较长,这对于需要快速反馈的应用(如实时翻译、即时通讯等)可能是一个问题。
  1. 模型大小和存储:
  • 大模型占用空间:大型语言模型通常体积庞大,占用较多的存储空间,这在存储资源有限的设备上可能是一个问题。

与传统 OCR 的对比

  1. 技术成熟度:
  • 传统 OCR:已经发展了几十年,技术相对成熟,有许多现成的商业产品和服务,易于集成和使用。
  • LLM:虽然近年来取得了显著进展,但仍处于快速发展阶段,技术和工具仍在不断完善中。
  1. 成本效益:
  • 传统 OCR:成本相对较低,适合预算有限的小型企业和个人开发者。
  • LLM:初始投资和长期维护成本较高,更适合大型企业和有较高预算的项目。
  1. 应用场景:
  • 传统 OCR:适用于标准化和结构化的文档处理,如发票、表格等。
  • LLM:适用于复杂和非结构化的文档处理,如手写笔记、多语言文档等。

识别图型验证码

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

提示词

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

文心一言3.5

通义千问2.5

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

图片理解qwen2-vl-7b

关于7B模型

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

KIMI

Gemini 1.5 Flash

做 OCR 效果非常好,可以在 Prompt 里面定制要输出的格式,并且成本极低。 案例有宝玉反馈其朋友某公司使用第三方的OCR的服务,用来提取发票上的文字为结构化数据。但收费较高.
参考提示词: *** Extract text from the provided image and organize it into a structured JSON format. ***

Google 每天为开发者免费提供15亿个Token,其中 Gemini 1.5 Flash免费套餐包含: – 每分钟15次请求(RPM) – 每分钟100万个Token(TPM) – 每天1,500次Token(RPD) – 免费上下文缓存服务,每小时最多可存储100万个Token – 免费微调 Gemini 1.5 Pro免费套餐包含: – 每分钟2次请求(RPM) – 每分钟32,000个Token(TPM) – 每天50次请求(RPD) 微调模型 text-embedding-004 提供: – 每分钟1,500次请求(RPM) 除了前面说的 API,Google AI Studio 还为开发者提供免费访问,其中 Gemini 1.5 Pro 有 2M Token上下文窗口。 价格页面:https://ai.google.dev/pricing Google AI Studio:https://aistudio.google.com

发票识别示例场景

代码实现

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": "这是什么?"} ] } ] } }'


事实情况下独立部署也可以

测试图片进行识别

返回示例

[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工具提取的内容不完整且格式混乱。大模型不仅能精准提取图片中的文字,还能以规整的形式输出。

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

图片理解

https://bailian.console.aliyun.com/#/model-market/detail/qwen2-vl-2b-instruct?tabKey=sdk

视觉理解

https://help.aliyun.com/zh/model-studio/user-guide/vision?spm=a2c4g.11186623.help-menu-2400256.d_1_0_2.5ef477e9sJEdx7&scm=20140722.H_2845871._.OR_help-V_1#f1cbd5b8a8k5w

阿里云百炼平台:

https://help.aliyun.com/zh/model-studio/developer-reference/qwen-vl-api

GitHub:

https://github.com/QwenLM/Qwen2-VL

HuggingFace:

https://huggingface.co/collections/Qwen/qwen2-vl-66cee7455501d7126940800d

魔搭ModelScope:

https://modelscope.cn/organization/qwen?tab=model

模型体验:

https://huggingface.co/spaces/Qwen/Qwen2-VL

https://qwen.readthedocs.io/en/latest/benchmark/speed_benchmark.html

文章转自微信公众号@机器学习AI算法工程

#你可能也喜欢这些API文章!