复制下来就能跑:java ai 识别发票
在Java场景中,java识别发票的需求日益增长,通过传统OCR方式实现java识别发票存在准确性不足的问题。借助于大模型技术,特别是像Qwen VL这样的国产大模型,java识别发票变得更加高效准确。Spring AI提供了一个强大的框架支持,在Java环境下利用AI进行java识别发票变得前所未有的简单。这种基于深度学习的方法对于处理复杂图像数据尤其有效,不仅提高了java识别发票的精确度,还
用图像做发票识别,最简单高效
在java场景中,我们经常需要进行java识别发票的任务。过去,这类需求主要通过OCR等方式来实现,但效果并不总是稳定。现在,有了大模型的支持,我们可以更加高效且准确地完成java识别发票的工作。借助于先进的深度学习技术,大模型在处理图像数据时表现出色,对于java识别发票这类任务来说,尤其有效。
采用大模型进行java识别发票不仅能提高识别的准确性,还能适应多种复杂的环境条件,如不同的光照、角度以及车牌样式等。这种方式使得开发人员可以更容易地构建出可靠的车牌识别系统。尽管传统的OCR方法也有其应用场景,但在追求更高精度和更广泛适应性的今天,基于大模型的方法显然成为了更好的选择。
本文采用spring ai alibaba + 通义qwen vl 来实现。
通义千问qwen vl有100万免费Token额度,可以快速实现,同时,因为qwen vl也是个开源的模型,我们可以自己搭建模型来实现免费使用
Spring AI介绍
过去,Java 缺乏一个优秀的 AI 应用框架,这使得开发者在使用 AI 组件时需要面对多种不同接口和复杂的集成工作。Spring 团队推出的 Spring AI 正是为了填补这一空白。Spring AI 是一个用于 AI 工程的应用框架,它将 Spring 生态系统的设计原则如可移植性和模块化设计应用到 AI 领域,并鼓励使用 POJOs 作为应用程序的构建块,从而与 Java 的面向对象编程完美兼容。
Spring AI 的核心优势在于提供了一套统一的接口,可以标准化各个不同的 AI 提供者(例如 OpenAI, Azure, 阿里云等)的实现,使得开发者只需编写一次代码并通过修改配置就能轻松切换不同的 AI 实现。此外,由于其与 Spring 生态系统的无缝集成,Spring AI 在发票识别等实际应用场景中能够更高效地进行开发和部署,极大简化了程序员的工作流程,减少了对接文档查找和迁移成本。
qwen vl介绍
Qwen-VL是一款专为图像和视频识别设计的多模态大模型,在国内技术领域处于领先地位。它展示了卓越的视觉理解能力,尤其在文档分析(DocVQA)和中文图像相关任务上超越了GPT-4V,达到了世界最佳水平。Qwen-VL有两个版本:Qwen-VL-Plus和Qwen-VL-Max。这两个版本在MMMU、MathVista等测评中表现出色,远超业界所有开源模型。此外,Qwen-VL不仅推动了AI技术的发展,还促进了国内外的技术交流。
大家也可以参与和支持这些竞技活动,亲自体验并投票支持你心目中的最佳模型。它在思南评测平台 CompassArena 上表现优异,仅次于国际知名的GPT和Claude模型;
同时,在国外视觉大模型竞技场 https://huggingface.co/spaces/lmarena-ai/chatbot-arena-leaderboard 中也稳居中国首位。
Spring AI alibaba介绍
Spring AI Alibaba 是一个针对Spring AI的实现,它基于Spring AI的API完成了阿里云百炼系列云产品大模型的接入。Spring AI Alibaba支持包括对话、文生图、文生语音等在内的多种生成式AI功能,并提供OutputParser、Prompt Template等功能,极大地方便了开发者利用国产大模型(如通义万象)构建AI应用。其核心优势在于通过标准化接口抽象,使得开发人员可以轻松切换不同的AI服务提供者而无需大量重写代码,同时兼容市面上大部分基于流的机器人模型。此外,Spring AI Alibaba还简化了对接过程中的复杂性,减少了查阅各种文档和进行接口适配的工作量,提升了开发效率。
基于spring ai alibaba 做发票识别的详细例子
基于Spring AI Alibaba集成发票图像识别,可以通过使用通义千问的API来实现。下面是详细的步骤说明:
前置准备
- 确保你的JDK版本在JDK 17(含)以上。
- 确保你的Spring Boot版本在3.3.x以上。
申请开通资源
- 打开阿里云百炼页面并登录您的阿里云账号。
- 选择开通“百炼大模型推理”服务,并等待开通成功的短信通知。
- 开通成功后,再次登录阿里云百炼页面,点击右上角小人图标,选择API-KEY,然后点击【创建新的API-KEY】生成一个API-KEY。请记录这个key,后面需要配置在百炼 API_KEY里面。
配置百炼 API KEY
export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}
开通通义万象图像生成模型
- 打开百炼控制台 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台。
- 在左侧列表栏选择模型广场,找到图像生成,选择通义万象,并点击对应的“API调用”按钮。
- 在打开的页面左上角,复制模型的英文名字,这里是
qwen-vl-max-latest
,这是专门用来做图片识别的特化模型。
添加spring仓库和依赖
在pom.xml中添加以下仓库配置:
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
接着添加如下依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3.1</version>
</dependency>
...其他依赖...
</dependencies>
构建读图代码
在Controller Bean中注入 ChatClient
实例,通过application.properties 注入刚才申请的apikey:
spring.ai.dashscope.api-key: ${AI_DASHSCOPE_API_KEY}
以下是具体的Controller示例代码,用于发票图像识别:
@RestController
@RequestMapping("/ai")
public class LicensePlateRecognitionController {
private static final Logger logger = LoggerFactory.getLogger(LicensePlateRecognitionController.class);
@Value("classpath:licenseplate.png")
private Resource imageResource;
private final ChatModel chatModel;
public LicensePlateRecognitionController(ChatModel chatModel) {
this.chatModel = chatModel;
}
private static final String DEFAULT_PROMPT = "识别这张发票的详细内容”;
private static final String DEFAULT_MODEL = "qwen-vl-max-latest";
@GetMapping("/recognizeLicensePlate")
public Flux<String> recognizeLicensePlate(
@RequestParam(value = "prompt", required = false, defaultValue = DEFAULT_PROMPT) String prompt,
HttpServletResponse response)
throws Exception {
response.setCharacterEncoding("UTF-8");
List<Media> mediaList = List.of(
new Media(
MimeTypeUtils.IMAGE_PNG,
imageResource));
UserMessage message = new UserMessage(prompt, mediaList);
message.getMetadata().put(DashScopeChatModel.MESSAGE_FORMAT, MessageFormat.IMAGE);
Flux<ChatResponse> fluxResponse = chatModel.stream(
new Prompt(
message,
DashScopeChatOptions.builder()
.withModel(DEFAULT_MODEL)
.withMultiModel(true)
.build()));
Flux<String> fluxString = fluxResponse.map(resp -> resp.getResult().getOutput().getContent());
return fluxString;
}
}
确保将本地的发票PNG图片放置于src/main/resources/licenseplate.png
位置。
这样,通过访问http://localhost:8080/ai/recognizeLicensePlate
即可让模型识别指定的图片并流式返回识别结果。
更多推荐
所有评论(0)