首页 > 编程语言 >复制下来就能跑 : java 免费开源 从 图片 提取文字 - 图片提取文本

复制下来就能跑 : java 免费开源 从 图片 提取文字 - 图片提取文本

时间:2024-11-20 09:16:13浏览次数:3  
标签:java AI Spring 模型 图像识别 API spring 提取 图片

Java中图像识别后提取文字

在Java开发中,图像识别中提取文字 是一个常见需求,比如用于商品文字识别、文档分析等场景。传统上,这类任务多依赖OCR技术来实现,但其准确性与灵活性往往不尽人意。随着大模型技术的发展,现在可以利用这些先进的AI模型来进行图像识别,不仅提高了识别的准确率,还能更好地理解图片内容,满足更加复杂的应用需求。

本例使用spring ai alibaba  + 阿里通义 vl来实现。

spring ai alibaba 是开源的spring ai调用框架。

通义千问,Qwen vl有 100万Token 免费额度,可以用来免费做图片识别,实现简单,按本文方案一步一步做就可以实现。

同时 Qwen vl模型也是一个开源模型,可以自己部署实现类似的 免费调用效果 7B的模型就可以实现很好的效果了。

Spring AI:统一高效的AI应用框架

过去,Java 缺乏一个统一且高效的 AI 应用框架,这使得开发者在集成和切换不同 AI 提供商时面临诸多不便。为了解决这一问题,Spring 团队推出了 Spring AI,这是一个专门用于 AI 工程的应用框架。Spring AI 的设计目标是将 Spring 生态系统的设计原则,如可移植性和模块化设计,应用到 AI 领域,并推广使用 POJOs 作为应用程序的构建块。其核心优势在于提供了一套统一的接口,使得开发者可以写一次代码,仅通过更改配置就能轻松切换不同的 AI 实现。此外,Spring AI 完美兼容现有的 Java 和 Spring 生态,支持面向对象编程,使得图像识别等复杂任务变得简单易行。

Spring AI的关键功能

能力名字:模型 Model

一句话说明:支持多模态,包括文本、图像等多种数据类型的处理。
输入输出举例:输入可以是文本或图片,如一段文字描述或一张猫的图片;输出则可以是对该段文字的理解或者对图片内容的描述。

能力名字:提示 Prompt

一句话说明:定义了与AI交互时的初始输入信息。
输入输出举例:输入为用户提供的问题或命令,例如"描述这张图片的内容";输出则是基于这个提示生成的回答或执行的动作。

能力名字:提示词模板 Prompt Template

一句话说明:通过预设模板简化和规范化提示的创建过程。
输入输出举例:输入可能是包含变量的模板字符串,比如"我想知道消息id: {id} 的状态";当{id}被实际值替换后,输出就是一个完整的询问消息状态的句子。

能力名字:嵌入 Embedding

一句话说明:将不同类型的数据转换成固定长度向量表示,便于进一步处理。
输入输出举例:输入是一段自然语言文本或一个图像文件;输出是一个数值向量,代表了输入内容在高维空间中的位置。

能力名字:检索增强生成 RAG

一句话说明:结合传统检索技术和大语言模型,以提高回复的质量和准确性。
输入输出举例:输入是一个查询请求,比如"2024年6月止,云智能集团的营收是多少?";系统会从知识库中查找相关信息,并基于这些信息生成准确的答案。

能力名字:函数调用 Function Calling

一句话说明:允许LLM根据需要调用外部定义的功能来完成任务。
输入输出举例:如果提问是关于特定消息的状态(假设ID已知),则可能触发一个名为messageStatusFunction的函数调用来获取并返回最新状态信息。

能力名字:向量存储

一句话说明:提供了高效存储及检索大规模向量数据的能力,适用于多种应用场景。
输入输出举例:输入可以是待索引的新文档或其他形式的数据,而输出则是在进行相似度匹配后找到的相关项。

Spring AI Alibaba:接入阿里云AI产品的标准化接口

Spring AI Alibaba是针对Spring AI的一个实现,它基于Spring AI的API完成了阿里云百炼系列云产品的接入。其核心优势在于提供了标准化接口来接入国产大模型如通义万象、通义千问等,支持包括对话生成、文生图、文生语音等多种AI功能,并通过OutputParser、Prompt Template等工具简化了开发者的工作流程。利用Spring AI Alibaba,开发者可以便捷地集成这些先进的AI能力到自己的应用中,从而快速构建出具有丰富交互性和智能化特性的软件解决方案。该框架特别适合希望利用国产大模型进行创新性开发的企业和个人。

QWen VL介绍:

Qwen VL 是一款专为图像和视频识别设计的多模态大模型,在国内技术水平领先。它在思南大模型评测中表现优异,仅排在国际知名模型GPT与Claude之后,并且在中国同类模型中位居首位。同时,在Hugging Face视觉大模型竞技场里,Qwen VL同样保持了中国第一的位置。欢迎各界人士参与到这些平台中来,通过实际测试体验并投票支持您喜爱的模型。此外,Qwen-VL-Plus及Qwen-VL-Max版本现提供限时免费试用机会,用户可直接访问通义千问官网或下载通义千问APP以享受Max版本的强大功能。

使用Spring AI Alibaba实现二维码图像识别的详细示例

基于Spring AI Alibaba完成一个有Prompt 和流Flux返回的二维码图像识别,可以按照以下步骤进行配置和编码。这里我们将以本地的一个二维码png图片为例,并且设置default_prompt为“识别图中的文字”,最后通过流式返回识别结果。

前置准备

  1. 确保你的JDK版本在JDK 17及以上。
  1. Spring Boot版本需在3.3.x及以上。
  1. 在阿里云申请通义千问的API Key,并记录下来。

配置阿里云API Key

首先,在环境变量中设置AI_DASHSCOPE_API_KEY

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

${REPLACE-WITH-VALID-API-KEY}替换为你从阿里云获得的有效API Key。

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

  1. 访问百炼控制台
  1. 选择左侧列表栏中的“模型广场”,找到并选择“图像生成”类别下的“通义万象”。
  1. 单击“API调用”按钮后,在新页面左上角查找模型英文名称(例如:qwen-vl-max-latest),这将是后续配置所需使用的模型名。

添加Spring仓库及依赖

在项目的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>

<dependencies>
    <!-- 添加Spring Boot父项目 -->
    <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>

构建读图代码

接下来创建一个控制器类ChatModelController,用于处理图像识别请求。同时确保已将待识别的二维码图片放置于src/main/resources/目录下,并命名为qrcode.png

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

    private static final Logger logger = LoggerFactory.getLogger(ChatModelController.class);

    @Value("classpath:qrcode.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()));
        Flux<String> fluxString = fluxResponse.map(resp -> resp.getResult().getOutput().getContent());
        return fluxString;
    }
}

配置API Key

在application.properties文件中添加之前获取到的API Key:

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

确保正确设置了系统环境变量或直接在此处填写实际值。

总结

以上就是使用Spring AI Alibaba实现图像识别功能的所有步骤。本示例展示了如何集成特定的阿里云AI服务来执行图像内容分析任务,并以流的形式异步接收处理结果。用户可以通过访问http://localhost:8080/ai/imageRecognition端点来测试该功能,其中默认提示信息为“识别图中的文字”。

标签:java,AI,Spring,模型,图像识别,API,spring,提取,图片
From: https://blog.csdn.net/whisperzzza/article/details/143840067

相关文章

  • springboot基于Java的城市公交调度管理系统的设计与实现
    收藏关注不迷路!!......
  • JavaFX + MySQL:动态显示数据库查询结果的JavaFX应用程序
    文章目录示例概述示例代码导入必要的包定义主类和主方法详细解释导入必要的包定义主类和主方法连接数据库并处理查询结果运行效果示例数据库表结构注意事项示例概述我们将创建一个JavaFX应用程序,该应用程序连接到MySQL数据库,查询某个表中的数据,并将结果显示在一......
  • Java API 进阶指南:从核心API到高级应用的全面提升
    文章目录JavaAPI进阶学习指南1.深入理解核心API1.1集合框架(CollectionsFramework)1.2输入输出流(I/OStreams)1.3并发编程(Concurrency)1.4反射(Reflection)1.5泛型(Generics)2.高级API应用2.1网络编程2.2数据库访问2.3日志记录2.4性能优化3.最佳实践3.1代码规......
  • Java API 学习指南:从入门到精通的全面指导
    文章目录JavaAPI学习指南1.了解JavaAPI的基本概念2.掌握基础的Java知识3.使用官方文档4.实践练习5.深入理解关键API6.关注最新的API更新7.加入社区8.创造性地应用JavaAPI学习指南1.了解JavaAPI的基本概念API是一系列预定义的函数或类,它们提供了......
  • Java面试之多线程&并发篇(6)
    前言本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!产生死锁的四个必要条件?如何避免死锁?线程池核心线程数怎么设置呢?Java线程池中队列常用类型有哪些?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘***12万字的java面试题整理******java核心面试知识整理***......
  • Java OOM原因与应对
    一、引言在Java开发的世界里,内存管理是一个至关重要的环节。Java虽然有着自动内存管理机制(通过垃圾回收器,即GC来回收不再使用的对象所占用的内存),但这并不意味着开发者可以高枕无忧,内存溢出(OutOfMemory,简称OOM)问题依然可能悄然降临,给应用程序带来严重的影响,甚至导致系......
  • Java 反射:解锁 Java 世界的 “隐藏技能”
    一、引言在Java开发的广袤天地中,存在着一种犹如魔法般的技术——Java反射。它就像是一把隐藏的钥匙,能够打开Java类与对象内部那些平时看似难以触及的“暗格”,让开发者在运行时去动态地获取类的信息、操作对象的属性以及调用对象的方法等。无论是构建灵活的框架、实现......
  • Java序列化
    在Java的世界中,序列化是一个不可或缺的概念,它允许我们将对象的状态保存到文件中,或者通过网络传输到其他JVM实例。作为一名Java技术专家和架构师,深入理解序列化机制对于构建高效、可靠的系统至关重要。本文将带你从基础到高级,全面掌握Java序列化。Java序列化基础什么是序列化......
  • 前端必知必会-JavaScript 迭代器
    文章目录JavaScript可迭代对象ForOf循环迭代对字符串进行迭代遍历数组遍历集合在Map上进行迭代JavaScript迭代器自制可迭代对象总结JavaScript可迭代对象可迭代对象是可迭代对象(如数组)。可以使用简单高效的代码访问可迭代对象。可以使用for…of循环对可......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现一
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......