在Java开发中,将图像中的文字进行识别能力被广泛应用于多种场景,比如自动审核图片内容、商品搜索分析等。
过去,这类需求主要通过OCR(光学字符识别)技术来实现,但其对于复杂图像的处理效果往往不尽人意。
如今,随着大模型技术的发展,利用这些先进的AI模型进行文字识别成为可能,不仅大大提升了识别精度和速度,还能更好地理解图像中的复杂信息,为用户提供更加准确可靠的服务。
本文采用spring ai alibaba 调用通义qwen vl来实现。 qwen vl有100万免费Token额度,可以快速实现,同时,因为qwen vl也是个开源的模型,我们可以自己搭建模型来实现免费使用
过去,Java在AI应用开发方面缺乏一个高效且统一的框架,导致开发者需要针对不同的AI服务提供商分别进行接口对接,增加了开发和维护的成本。为了解决这个问题,Spring团队推出了Spring AI,这是一个专为AI工程设计的应用框架,旨在将Spring生态系统的可移植性、模块化等设计原则引入到AI领域。Spring AI最核心的优势在于它提供了一套统一的接口,允许开发者只需编写一次代码,通过简单的配置更改即可切换至不同AI服务提供商的实现上,极大地简化了跨平台迁移的工作量。此外,Spring AI与现有的Java面向对象编程范式无缝集成,并支持包括文字识别在内的多种AI功能,使得基于Spring生态的项目能够更加平滑地过渡到包含AI能力的新阶段。
本例使用Spring AI alibaba和通义qwen vl模型来实现文字识别,大家也可以在调通以后换成其他实现,通义目前有免费额度,可以薅起来
Qwen-VL是一款专为图像和视频识别设计的多模态大模型,在国内技术领域处于领先地位。它在思南评测平台(https://arena.opencompass.org.cn/)上表现优异,仅次于国际知名的GPT和Claude模型;
同时,在国外视觉大模型竞技场(https://huggingface.co/spaces/lmarena-ai/chatbot-arena-leaderboard)中也稳居中国首位。Qwen-VL不仅展示了强大的视觉理解能力,还促进了国内外AI技术交流。
大家也可以参与和支持这些竞技活动,亲自体验并投票支持你心目中的最佳模型。
Spring AI Alibaba 是一个针对 Spring AI 的实现,它基于阿里云百炼系列云产品的大模型接入,包括通义大模型等国产大模型。其核心优势在于提供了多种常见生成式AI功能的适配,例如对话、文生图、文生语音等,并支持OutputParser、Prompt Template及Prompt Stuff等功能,极大简化了开发者对接不同AI服务的过程。通过Spring AI Alibaba,用户可以利用统一且简洁的API来开发和集成各类AI应用,特别是在利用阿里云通义提供的聊天、图像或语音生成方面,使得AI能力的集成更加高效便捷。
要基于Spring AI Alibaba来构建一个能够接收用户输入并以流式返回结果的文字识别服务,首先需要进行一系列准备工作和配置。以下是详细的步骤说明:
将得到的API Key设置为环境变量:
export AI_DASHSCOPE_API_KEY=YOUR_GENERATED_API_KEY
qwen-vl-max-latest
)用于后续配置。在项目的pom.xml
文件中添加Spring官方仓库以及必要的依赖项:
sonatype-snapshots
https://oss.sonatype.org/content/repositories/snapshots
true
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
spring-snapshots
Spring Snapshots
https://repo.spring.io/snapshot
false
com.alibaba.cloud.ai
spring-ai-alibaba-starter
1.0.0-M3.1
同时确保指定了Spring Boot作为父项目:
org.springframework.boot
spring-boot-starter-parent
3.3.4
编辑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 imageRecognition(
@RequestParam(value = "prompt", required = false, defaultValue = DEFAULT_PROMPT) String prompt,
HttpServletResponse response) throws Exception {
response.setCharacterEncoding("UTF-8");
List 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
端点开始测试您的文字识别服务了。