首页 > 编程语言 >Java - 文字识别 ;示例代码基于SpringAI和国产大模型

Java - 文字识别 ;示例代码基于SpringAI和国产大模型

时间:2024-10-31 10:51:47浏览次数:8  
标签:Java SpringAI 示例 AI Spring 模型 API spring 识别

文字识别在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
  1. 访问阿里云百炼页面,登录您的阿里云账号。
  1. 选择开通“百炼大模型推理”服务,并等待短信确认服务已成功开通。
  1. 从右上角的小人图标进入个人中心 -> API-KEY -> 创建新的API-KEY。请妥善保存生成的API Key。
配置环境变量

将得到的API Key设置为环境变量:

export AI_DASHSCOPE_API_KEY=YOUR_GENERATED_API_KEY
开通通义万象图像生成模型
  1. 登录到百炼控制台 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
  1. 在左侧列表中选择“模型广场”,找到“图像生成”类别下的“通义万象”模型。
  1. 选择该模型对应的“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端点开始测试您的文字识别服务了。

标签:Java,SpringAI,示例,AI,Spring,模型,API,spring,识别
From: https://blog.csdn.net/whisperzzza/article/details/143383954

相关文章