文章说明:

本文主要就是一个快速的用java接入阿里通义千问来实现图片手写识别 。

代码本使用spring ai alibaba 和国产大模型qwen vl来做样例,您也可以换成其他实现。

值得一提的是,QWen目前提供100万免费Token额度支持初期开发,并且作为一个开源模型,开发者可以自行部署以实现长期免费使用

文章背景:

在Java开发中,手写识别是一个常见的需求。过去,我们通常依赖OCR技术来实现java手写识别,但其效果并不总是稳定。现在,借助大模型的力量,我们可以更高效地处理java手写识别任务。使用大模型进行java手写识别不仅能提高准确性,还能适应更多样化的书写风格。对于需要频繁执行java手写识别的应用来说,这是一个巨大的进步。通过采用先进的大模型,开发者们能够轻松构建出性能优越的java手写识别系统,从而为用户提供更加流畅自然的服务体验。这标志着从传统方法向现代解决方案转变的重要一步,在许多场景下,这种基于大模型的java手写识别方案展现出了前所未有的优势。随着技术不断进步,未来我们将看到越来越多利用大模型实现java手写识别的成功案例。

Spring AI介绍:

过去,Java在AI应用开发方面缺乏一个高效且易于使用的框架,这给开发者带来了不少挑战。为了解决这一问题,Spring团队推出了Spring AI,这是一个专为AI工程设计的应用框架。Spring AI旨在将Spring生态系统的设计原则,例如可移植性和模块化设计,引入到AI领域中,并推广使用POJOs作为应用程序构建块的理念。其核心优势之一在于提供了一套统一的接口,使得开发者能够轻松切换不同的AI服务提供商(如OpenAI、Azure等),只需更改配置即可,而无需重写大量代码。此外,Spring AI与现有的Spring生态以及Java面向对象编程完美兼容,特别适用于需要集成手写识别等功能的应用场景。通过这种方式,Spring AI不仅简化了AI功能的接入过程,也大幅减少了迁移和维护的成本。

Qwen VL 介绍:领先的图像与视频识别多模态大模型

Qwen VL是一款专为图像与视频识别设计的多模态大模型,在国内技术领域处于领先地位。根据思南平台(CompassArena)上的评测结果,Qwen VL紧随国际知名的GPT和Claude之后,位列第三;而在国际视觉大模型竞技场(https://huggingface.co/spaces/lmarena-ai/chatbot-arena-leaderboard)上,它同样占据了中国第一的位置。目前,Qwen-VL-Plus和Qwen-VL-Max版本正限时免费开放体验,用户可通过通义千问官网或通义千问APP直接访问Max版本的强大功能。欢迎各界人士参与测试并投票支持!

Spring AI Alibaba 介绍:简化阿里云大模型集成的开发工具

Spring AI Alibaba 是一个基于 Spring AI 框架实现的解决方案,特别针对阿里云百炼系列的国产大模型进行了优化。它允许开发者轻松地接入和利用通义大模型(包括但不限于通义千问)提供的聊天、文本生成图像、语音合成等AI功能。通过提供一套统一且易于使用的API接口,Spring AI Alibaba 极大地简化了不同AI服务间的切换过程,并支持以标准化方式与这些先进的AI能力集成,从而加速开发流程。此外,该框架还内置了诸如Prompt Template和OutputParser等功能,使得处理复杂的AI应用场景变得更加直观高效。总之,借助Spring AI Alibaba,开发者能够快速为自己的项目增添强大的国产大模型AI能力。

基于Spring AI Alibaba实现手写识别的详尽示例

基于spring ai alibaba 做手写识别的详细例子

为了实现基于Spring AI Alibaba的手写文字识别功能,我们将采用阿里云提供的通义万象模型进行图像识别。以下为详细的步骤和配置:

1. 环境准备
  • 确保你的JDK版本在JDK17(含)以上。
  • 使用Spring Boot版本3.3.x或更高。
2. 开通资源与获取API Key
  • 成功开通后,在控制台生成一个新的API Key,并记下该Key值用于后续配置。
  • 设置环境变量以保存API Key:export AI_DASHSCOPE_API_KEY=your_api_key_here
3. 配置Maven仓库

由于当前使用的Spring AI M3版本尚未发布到官方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>
4. 添加依赖项

同样地,在pom.xml文件中加入必要的依赖项,包括spring-ai-alibaba-starter及Spring Boot parent依赖:

<parent>
    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>3.3.4</version>

    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>

        <artifactId>spring-ai-alibaba-starter</artifactId>

        <version>1.0.0-M3.1</version>

    </dependency>

    <!-- 其他项目所需依赖 -->
</dependencies>
5. 创建读图控制器

创建一个简单的REST控制器来处理图片上传请求,并调用AI模型解析图片内容。这里我们假设已经有一张名为handwriting.png的手写图片位于src/main/resources/目录下。

@RestController
@RequestMapping("/ai")
public class HandwritingRecognitionController {

    private final ChatModel chatModel;
    
    @Value("classpath:handwriting.png")
    private Resource imageResource;

    public HandwritingRecognitionController(ChatModel chatModel) {
        this.chatModel = chatModel;
    }

    private static final String DEFAULT_PROMPT = "识别图中的文字";
    private static final String HANDWRITING_MODEL = "qwen-vl-max-latest";

    @GetMapping("/handwritingRecognition")
    public Flux<String> handwritingRecognition(
            @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(HANDWRITING_MODEL)
                                .withMultiModel(true)
                                .build()));
        return fluxResponse.map(resp -> resp.getResult().getOutput().getContent());
    }
}

此外,别忘了通过application.properties文件配置API Key:

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}

按照上述步骤完成所有设置后,启动应用程序并通过访问http://localhost:8080/ai/handwritingRecognition即可体验手写文字识别功能了。注意确保本地开发环境中存在一张名为handwriting.png的手写图片。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐