0


Java 智能图像识别 - 基于国产大模型和spring ai

背景说明

在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

  1. 访问阿里云百炼页面,登录您的阿里云账号。

  2. 开通“百炼大模型推理”服务,并等待开通成功的短信通知。

  3. 开通成功后,再次访问阿里云百炼页面,点击右上角的小人图标,选择API-KEY,然后点击【创建新的API-KEY】生成一个新的API-KEY。请记录下这个key,后续步骤需要用到。

  4. 在终端中执行如下命令来配置API Key(将${REPLACE-WITH-VALID-API-KEY}替换为你实际获取到的API Key):

export AI_DASHSCOPE_API_KEY=${REPLACE-WITH-VALID-API-KEY}

3. 开通通义万象图像生成模型

  1. 打开百炼控制台 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台。

  2. 在左侧列表栏选择模型广场,找到图像生成部分中的通义万象模型,并点击其对应的“API调用”按钮。

  3. 在打开的新页面左上角,复制模型的英文名称,本次使用的模型为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返回流式处理的结果。

请注意,以上步骤提供了从零开始搭建此功能所需的全部指导;如果有任何未提及但同样重要的细节,请参考相关文档或社区支持以获得进一步帮助。


本文转载自: https://blog.csdn.net/whisperzzza/article/details/143330918
版权归原作者 沈询-阿里 所有, 如有侵权,请联系我们删除。

“Java 智能图像识别 - 基于国产大模型和spring ai”的评论:

还没有评论