背景说明
在Java场景中,我们经常需要利用图像识别的能力来处理多种业务需求,比如自动分类商品图片、辅助医疗影像分析、提升安防监控效率等。过去,这类需求主要依赖于OCR(光学字符识别)技术或其他传统的图像处理方法,但这些方式的效果往往不尽如人意,尤其是在面对复杂多变的图像内容时。随着大模型技术的发展,如今我们可以借助更加先进的AI模型来进行图像识别任务,不仅提高了准确率和灵活性,而且能够更好地适应不同场景下的具体要求,从而显著改善了应用效果和服务体验。
本例使用的组合是spring AI + qwen vl 。 Qwen vl有 100万Token 免费额度,可以用来免费做图片识别,实现简单,按本文方案一步一步做就可以实现。
同时 Qwen vl模型也是一个开源模型,可以自己部署实现类似的 免费调用效果 7B的模型就可以实现很好的效果了。
Spring AI 介绍:简化Java中AI功能集成的高效框架
在过去,Java 缺乏一个高效且易于使用的 AI 应用框架,这使得开发者在集成AI功能时面临着较大的挑战。为解决这一问题,Spring团队推出了Spring AI,它是一个专为调用各种AI组件而设计的应用框架。Spring AI 的核心优势在于提供了一套统一的接口,允许开发人员只需编写一次代码,并通过简单的配置更改就能切换不同的AI服务提供商。此外,该框架与Spring生态系统无缝兼容,同时支持Java面向对象编程范式,这极大地简化了AI应用程序的开发流程。对于需要处理图像识别任务的项目而言,使用 Java Spring AI 可以轻松接入多种图像识别模型,并将这些复杂的操作封装成简单的API调用来供业务逻辑层调用,从而加速开发进程并降低维护成本。
通义千问 Qwen VL 2.5 介绍
Qwen-VL是一款专为图像与视频识别设计的多模态大模型,在国内相关技术领域处于领先地位。它不仅在思南平台 上仅次于国际知名的GPT和Claude系列,还在 Hugging Face的视觉模型竞技场 中稳居中国首位。Qwen-VL的强大性能得益于其先进的架构与训练方法,使其能够准确理解和生成复杂的多媒体内容。欢迎各位参与到这些开放平台上,体验并评价这一前沿技术。
Spring AI Alibaba介绍 :集成阿里云大模型的Spring AI框架
Spring AI Alibaba 是一个专为 Spring 生态系统设计的AI应用框架,专注于集成阿里云的国产大模型服务。它基于Spring AI API实现了对通义系列(如通义千问、通义万象)等国产大模型的支持,使得开发者能够便捷地开发出具备聊天、图像生成等功能的应用。
其核心优势在于提供了统一且标准的接口来访问多种AI能力,支持通过简单的配置变更来切换不同的AI服务提供者,从而极大简化了跨平台迁移和多AI提供商接入的工作。此外,Spring AI Alibaba 还支持包括流式处理在内的高级特性,进一步提升了应用开发效率和灵活性。
使用Spring AI Alibaba进行图像识别的详细示例
1. 前置准备
首先,确保你的开发环境满足以下要求:
JDK版本需在JDK 17及以上。
Spring Boot版本需在3.3.x及以上。
2. 申请并配置通义千问的API Key
访问阿里云百炼页面,登录您的阿里云账号。
开通“百炼大模型推理”服务,并等待开通成功的短信通知。
开通成功后,再次访问阿里云百炼页面,点击右上角的小人图标,选择API-KEY,然后点击【创建新的API-KEY】生成一个新的API-KEY。请记录下这个key,后续步骤需要用到。
在终端中执行如下命令来配置API Key(将
${REPLACE-WITH-VALID-API-KEY}
替换为你实际获取到的API Key):
export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}
3. 开通通义万象图像生成模型
打开百炼控制台 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台。
在左侧列表栏选择模型广场,找到图像生成部分中的通义万象模型,并点击其对应的“API调用”按钮。
在打开的新页面左上角,复制模型的英文名称,本次使用的模型为
qwen-vl-max-latest
,这是一个专用于图片识别的特化模型。
4. 添加Spring仓库及依赖
由于
spring-ai-alibaba-starter
尚未提交至Maven官方仓库,请先在
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>
接着,在
pom.xml
中加入对
spring-ai-alibaba-starter
的依赖:
<dependencies>
<!-- Spring Boot Parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/>
</parent>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M3.1</version>
</dependency>
<!-- 其他所需依赖... -->
</dependencies>
5. 构建读图代码
在你的项目中创建一个新的Controller类
ChatModelController.java
,内容如下所示:
@RestController
@RequestMapping("/ai")
public class ChatModelController {
private static final Logger logger = LoggerFactory.getLogger(ChatModelController.class);
@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 = 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()));
return fluxResponse.map(resp -> resp.getResult().getOutput().getContent());
}
}
确保你已经在项目的
src/main/resources
目录下放置了一张名为
catexample.png
的测试图片。
6. 配置应用程序属性
在
application.properties
或
application.yml
文件中设置之前获取的API Key:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
至此,您已完成了基于Spring AI Alibaba实现图像识别功能的所有准备工作。现在可以通过访问
http://localhost:8080/ai/imageRecognition
端点来测试您的应用,它会根据提供的Prompt返回流式处理的结果。
请注意,以上步骤提供了从零开始搭建此功能所需的全部指导;如果有任何未提及但同样重要的细节,请参考相关文档或社区支持以获得进一步帮助。
版权归原作者 沈询-阿里 所有, 如有侵权,请联系我们删除。