文字识别在Java开发中的应用
在Java开发中,将图像中的文字进行识别能力被广泛应用于多种场景,比如自动审核图片内容、商品搜索分析等。
过去,这类需求主要通过OCR(光学字符识别)技术来实现,但其对于复杂图像的处理效果往往不尽人意。
如今,随着大模型技术的发展,利用这些先进的AI模型进行文字识别成为可能,不仅大大提升了识别精度和速度,还能更好地理解图像中的复杂信息,为用户提供更加准确可靠的服务。
Spring AI:简化AI服务对接的统一框架
过去,Java在AI应用开发方面缺乏一个高效且统一的框架,导致开发者需要针对不同的AI服务提供商分别进行接口对接,增加了开发和维护的成本。为了解决这个问题,Spring团队推出了Spring AI,这是一个专为AI工程设计的应用框架,旨在将Spring生态系统的可移植性、模块化等设计原则引入到AI领域。Spring AI最核心的优势在于它提供了一套统一的接口,允许开发者只需编写一次代码,通过简单的配置更改即可切换至不同AI服务提供商的实现上,极大地简化了跨平台迁移的工作量。此外,Spring AI与现有的Java面向对象编程范式无缝集成,并支持包括文字识别在内的多种AI功能,使得基于Spring生态的项目能够更加平滑地过渡到包含AI能力的新阶段。
本例使用Spring AI alibaba和通义qwen vl模型来实现文字识别,大家也可以在调通以后换成其他实现,通义目前有免费额度,可以薅起来
Spring AI Alibaba功能及优势介绍
Spring AI Alibaba 是一个针对 Spring AI 的实现,它基于阿里云百炼系列云产品的大模型接入,包括通义大模型等国产大模型。其核心优势在于提供了多种常见生成式AI功能的适配,例如对话、文生图、文生语音等,并支持OutputParser、Prompt Template及Prompt Stuff等功能,极大简化了开发者对接不同AI服务的过程。通过Spring AI Alibaba,用户可以利用统一且简洁的API来开发和集成各类AI应用,特别是在利用阿里云通义提供的聊天、图像或语音生成方面,使得AI能力的集成更加高效便捷。
插播:总计30万奖金,Spring AI Alibaba 应用框架挑战赛开赛点此了解
基于Spring AI Alibaba实现文字识别功能的详尽示例
要基于Spring AI Alibaba来构建一个能够接收用户输入并以流式返回结果的文字识别服务,首先需要进行一系列准备工作和配置。以下是详细的步骤说明:
前置准备
- 确保你的JDK版本不低于17。
- Spring Boot版本至少为3.3.x。
开通资源及获取API Key
- 访问阿里云百炼页面,登录您的阿里云账号。
- 选择开通“百炼大模型推理”服务,并等待短信确认服务已成功开通。
- 从右上角的小人图标进入个人中心 -> API-KEY -> 创建新的API-KEY。请妥善保存生成的API Key。
配置环境变量
将得到的API Key设置为环境变量:
export AI_DASHSCOPE_API_KEY=YOUR_GENERATED_API_KEY
开通通义万象图像生成模型
- 登录到百炼控制台 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台。
- 在左侧列表中选择“模型广场”,找到“图像生成”类别下的“通义万象”模型。
- 选择该模型对应的“API调用”按钮,在打开页面顶部找到并记录下模型名称(如
qwen-vl-max-latest
)用于后续配置。
Maven仓库与依赖添加
在项目的pom.xml
文件中添加Spring官方仓库以及必要的依赖项:
<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>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3.1</version>
</dependency>
<!-- 其他依赖 -->
</dependencies>
同时确保指定了Spring Boot作为父项目:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/>
</parent>
应用程序属性配置
编辑application.properties
文件以包含API Key:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
编写控制器代码
创建一个新的Controller类来处理图片上传请求并返回识别结果。这里我们使用ChatClient
实例与AI模型交互。
@RestController
@RequestMapping("/ai")
public class ChatModelController {
@Value("classpath:catexample.png") // 或者任何其他默认图片路径
private Resource imageResource;
private final ChatModel chatModel;
public ChatModelController(ChatModel chatModel) {
this.chatModel = chatModel;
}
private static final String DEFAULT_PROMPT = "输出图像里的文字:";
private static final String DEFAULT_MODEL = "qwen-vl-max-latest";
@GetMapping("/imageRecognition")
public Flux<String> imageRecognition(
@RequestParam(value = "prompt", required = false, defaultValue = DEFAULT_PROMPT) String prompt,
HttpServletResponse response) throws Exception {
response.setCharacterEncoding("UTF-8");
List<Media> mediaList = Collections.singletonList(new Media(MimeTypeUtils.IMAGE_PNG, imageResource));
UserMessage message = new UserMessage(prompt, mediaList);
message.getMetadata().put(DashScopeChatModel.MESSAGE_FORMAT, MessageFormat.IMAGE);
return chatModel.stream(
new Prompt(message, DashScopeChatOptions.builder()
.withModel(DEFAULT_MODEL)
.withMultiModel(true)
.build()))
.map(resp -> resp.getResult().getOutput().getContent());
}
}
以上就是基于Spring AI Alibaba实现文字识别功能的全部过程,包括了所有必要的配置和代码示例。确保按照上述指南正确设置了每个步骤后,您就可以通过访问/ai/imageRecognition
端点开始测试您的文字识别服务了。