当前位置: 首页 > news >正文

Java - 免费图文识别_Java_免费_图片转文字_文字识别_spring ai_spring ai alibaba

本文主要是介绍借助阿里云免费的大模型额度来做高质量的图转文识别,图片转文字,或者文字识别都可以使用,比传统的OCR模式要直接和高效很多 。

本文使用的技术是spring ai + qwen vl 。 Qwen vl有 100万Token 免费额度,可以用来免费做图片识别,实现简单,按本文方案一步一步做就可以实现。

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

利用大模型提升Java图文识别的效率与准确性

在java开发场景中,我们经常遇到需要处理图文识别的问题。传统的解决方法通常是采用OCR技术,但其准确性和稳定性往往不尽人意。随着技术的进步,现在利用大模型进行java图文识别成为可能,并且能够提供更加出色的效果。通过引入专门训练的大模型,可以大大提高java图文识别的准确性与效率。这样的转变意味着开发者不再受限于传统OCR解决方案所带来的局限性,在实现更高质量java图文识别的同时,也极大地简化了开发流程。无论是对于个人项目还是企业级应用来说,采用大模型来支持java图文识别都是一个非常值得尝试的选择。它不仅能够有效提升用户体验,还能帮助开发者节省大量时间与精力投入到其他重要领域。因此,当你的项目中有涉及到java图文识别的需求时,考虑一下使用最新的大模型技术吧!这将为你的应用程序带来前所未有的改变。本例子使用java spring ai和国产大模型qwen vl来做样例,您也可以换成其他实现。

Spring AI框架概述

在过去,Java 缺乏一个统一且高效的 AI 应用框架,这限制了开发者在 Java 生态系统中快速集成和使用 AI 功能的能力。为了解决这一问题,Spring 团队推出了 Java Spring AI,这是一个专为 AI 工程设计的应用框架。它将 Spring 生态系统的设计原则,如可移植性和模块化设计,应用到了 AI 领域,并支持 POJOs 作为应用程序的构建块。

Java Spring AI 的核心优势在于它提供了一套统一的接口,可以标准化不同 AI 提供者的接口实现,使得开发者只需编写一次代码,通过修改配置即可轻松切换不同的 AI 服务提供商。此外,它与现有的 Spring 生态系统和 Java 的面向对象编程完美兼容,极大地简化了 AI 组件的集成过程。例如,在图文识别等应用场景中,Java Spring AI 可以帮助开发者快速搭建高效且易于维护的 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是Spring AI框架针对阿里云百炼大模型系列的一个实现,旨在简化基于阿里云通义大模型的AI应用开发。它支持多种生成式任务,如对话、文生图、文生语音等,并提供了包括OutputParser、Prompt Template在内的实用工具。通过使用Spring AI Alibaba,开发者能够快速接入国产大模型,例如通义万象和通义千问,从而为业务增加更多智能化能力。其核心优势在于标准化了不同AI供应商的接口,使得仅需修改配置即可切换底层AI服务提供商,极大提高了开发效率和灵活性。此外,Spring AI Alibaba还支持对接OpenAI及其他本地部署的模型,进一步拓宽了应用场景。

使用Spring AI Alibaba实现图文识别的详细指南

基于Spring AI Alibaba进行图文识别,主要涉及到环境配置、依赖引入、API密钥设置以及具体的读图代码构建。下面将详细地按照这些步骤来进行说明。

前置准备

确保您的开发环境满足以下条件:

  • JDK版本为17或以上。
  • Spring Boot版本为3.3.x及以上。
申请通义千问的API Key
  1. 访问阿里云百炼页面,并登录您的阿里云账号。
  1. 开通“百炼大模型推理”服务,并等待开通成功的短信通知。
  1. 开通成功后,再次访问百炼页面,点击右上角的小人图标 -> API-KEY -> 创建新的API-KEY,生成API Key并记录下来。
配置通义千问API Key

在您的操作系统环境中执行如下命令来设置API Key:

export AI_DASHSCOPE_API_KEY=您的有效API-Key

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

  1. 登录到百炼控制台。
  1. 在左侧菜单中选择“模型广场”,找到图像生成部分下的“通义万象”模型。
  1. 点击“API调用”按钮进入详情页,在顶部获取到模型的英文名qwen-vl-max-latest作为后续配置使用。

Maven配置

为了能够顺利使用Spring AI Alibaba相关功能,您需要在项目的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>

构建图文识别Controller

接下来定义一个REST控制器,用于处理图文图片上传及文本识别请求。这里我们将默认提示设为"识别图中的文字",并通过Flux异步流式返回结果。

@RestController
@RequestMapping("/ai")
public class HandwritingRecognitionController {private final ChatModel chatModel;public HandwritingRecognitionController(ChatModel chatModel) {this.chatModel = chatModel;}@Value("classpath:handwriting.png") // 图文图片路径private Resource handwritingResource;private static final String DEFAULT_PROMPT = "识别图中的文字";private static final String HANDWRITING_MODEL = "qwen-vl-max-latest"; // 使用的图文识别模型@GetMapping("/recognizeHandwriting")public Flux<String> recognizeHandwriting(@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, handwritingResource));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());}
}

请确保在src/main/resources/目录下放置一张名为handwriting.png的图文图片作为测试样本。

完成上述所有步骤之后,启动您的Spring Boot应用程序,并通过浏览器或其他客户端工具向http://localhost:8080/ai/recognizeHandwriting发送GET请求即可开始体验图文文字识别功能了。

以上就是利用Spring AI Alibaba实现图文识别功能的具体步骤与代码示例。

相关文章:

Java - 免费图文识别_Java_免费_图片转文字_文字识别_spring ai_spring ai alibaba

本文主要是介绍借助阿里云免费的大模型额度来做高质量的图转文识别&#xff0c;图片转文字&#xff0c;或者文字识别都可以使用&#xff0c;比传统的OCR模式要直接和高效很多 。 本文使用的技术是spring ai qwen vl 。 Qwen vl有 100万Token 免费额度&#xff0c;可以用来免费…...

《JVM第6课》本地方法栈

文章目录 1 什么是本地方法1.1 本地方法的好处1.2 声明本地方法1.3 实现本地方法1. 生成头文件2. 编写C语言实现3. 编译C代码4. 运行Java程序 1.4 使用JNA1.5 总结 2 本地方法栈2.1 特点2.2 本地方法栈与Java虚拟机栈的区别2.3 本地方法栈的工作流程2.4 总结 无痛快速学习入门J…...

3.1 快速启动Flink集群

文章目录 1. 环境配置2. 本地启动3. 集群启动4. 向集群提交作业4.1 提交作业概述4.2 添加打包插件4.3 将项目打包4.4 在Web UI上提交作业4.5 命令行提交作业 在本实战中&#xff0c;我们将快速启动Apache Flink 1.13.0集群&#xff0c;并在Hadoop集群环境中提交作业。首先&…...

如何设计一个毫秒级的接口?

设计一个毫秒级的接口需要考虑多个方面&#xff0c;包括网络延迟、服务器性能、代码效率、数据库查询优化等。以下是一些建议&#xff0c;帮助你设计一个毫秒级的接口&#xff1a; 网络优化&#xff1a; 使用HTTP/2或更高版本&#xff0c;以减少连接建立和传输的开销。尽可能减…...

从语义实施工程师到大数据开发工程师的职业转型

在信息技术行业&#xff0c;随着数据驱动决策的流行和企业对大数据需求的急剧增加&#xff0c;越来越多的专业人士开始考虑将他们的技能转移到大数据领域。本文将探讨如何从一个语义实施工程师转变为一个大数据开发工程师。两者虽然都与数据密切相关&#xff0c;但在技术重点和…...

关联容器笔记

关联容器总结 有序关联容器 键值的顺序自动排序&#xff0c;键值必须支持 < 操作符 底层数据结构 使用平衡树&#xff0c;比如&#xff08;红黑树&#xff09;增删查的平均时间复杂度接近 O(log⁡n) 种类 std::set&#xff1a;集合&#xff0c;包含唯一的键元素。 std…...

在阿里云快速启动Umami玩转网页分析

阿里云计算巢提供了Umami快速部署能力&#xff0c;使用者不需要自己下载代码&#xff0c;不需要自己安装复杂的依赖&#xff0c;不需要了解底层技术&#xff0c;只需要在控制台图形界面点击几下鼠标就可以快速部署并启动Umami&#xff0c;非技术同学也能轻松搞定。 什么是Umam…...

Linux练习作业

1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器&#xff0c;对主dns服务器进行数据备份 环境准备 主从服务器都需要进行的操作#关闭防火墙、SELinnux systemctl stop firewalld setenforce 0#软件安装 yum install bind -y实验一&#…...

FFMPEG录屏(21)--- Linux 下基于X11枚举所有可见窗口,并获取标题、图标、缩略图、进程路径等信息

在 Linux X11 下枚举窗口并获取窗口信息 在 Linux 系统中&#xff0c;X11 是一个非常流行的窗口系统&#xff0c;它提供了丰富的 API 用于管理和操作窗口。在这篇博客中&#xff0c;我们将详细介绍如何使用 X11 枚举当前系统中的窗口&#xff0c;并获取它们的标题、截图、进程…...

mybatis resultMap标签注意事项(pageHelper结合使用的坑)

背景 使用pageHelper时&#xff0c;发现分页数据异常&#xff0c;经过排查发现是resultMap 的问题。 resultMap介绍 在使用mybatis时&#xff0c;我们经常会使用在xml文件中编写一些复杂的sql语句&#xff0c;例如多表的join&#xff0c;在映射实体类时&#xff0c;又会使用…...

100种算法【Python版】第33篇——Tonelli-Shanks算法

本文目录 1 模素数下的二次剩余问题2 算法原理2.1 背景知识2.2 算法步骤3 算法示例4 python代码5 算法应用1 模素数下的二次剩余问题 在数论中,给定一个素数 p p p 和一个整数 n n n...

深度学习基础知识-全连接层

全连接&#xff08;Fully Connected&#xff0c;简称 FC&#xff09;层是深度学习神经网络中一种基本的层结构。它主要用于神经网络的最后几层&#xff0c;将高层特征映射到输出空间中。全连接层对数据的每个输入节点与每个输出节点进行连接&#xff0c;用于实现输入特征和输出…...

ffmpeg 提取mp4文件中的音频文件并保存

要从一个 MP4 文件中提取音频并保存为单独的音频文件&#xff0c;可以使用 ffmpeg 工具。以下是一个简单的命令示例&#xff1a; 命令格式 ffmpeg -i input.mp4 -vn -acodec copy output.mp3 参数解释 -i input.mp4: 指定输入文件为 input.mp4。 -vn: 禁用视频流&#xff0…...

【MySQL 保姆级教学】 复合查询--超级详细(10)

复合查询 1. 复合查询的作用2. 创建将进行操作的表2.1 员工表 emp2.2 部门表 dept2.3 薪资等级表 3. 基本查询回顾4. 多表查询4.1 多表查询的定义4.2 笛卡尔积4.3 内连接 inner join4.4 交叉连接 cross join4.5 左外连接 left join4.6 右外连接 right join4.7 自连接 5. 子查询…...

ONLYOFFICE:数字化办公的创新解决方案与高效协作平台

目录 前言—— 关于 ONLYOFFICE 桌面编辑器 1.首页介绍 2.电子表格 功能介绍 适用场景 3.ONLYOFFICE 在线Word功能 4.ONLYOFFICE 在线PPT功能 5.共同办公室 6.探索其他 总结 前言—— 在数字化办公的时代&#xff0c;传统的办公软件常常让人感到束缚与低效。而 ONLY…...

编译Kernel时遇到“error: ‘linux/compiler_types.h‘ file not found“的解决方法

问题描述&#xff1a; 在下载了一份安卓13项目的代码后进行make bootimage编译时遇到了下面编译报错&#xff1a; In file included from /home/bspuser/scode/kernel/msm-4.19/include/uapi/linux/stat.h:5: In file included from /home/bspuser/scode/kernel/msm-4.19/inc…...

开发之翼:划时代的原生鸿蒙应用市场开发者服务

前言 随着"纯血鸿蒙" HarmonyOS NEXT在原生鸿蒙之夜的正式发布&#xff0c;鸿蒙生态正以前所未有的速度蓬勃发展。据知已有超过15000个鸿蒙原生应用和元服务上架&#xff0c;覆盖18个行业&#xff0c;通用办公应用覆盖全国3800万多家企业。原生鸿蒙操作系统降低了接…...

代码随想录一刷——1.两数之和

当我们需要查询一个元素是否出现过&#xff0c;或者一个元素是否在集合里的时候&#xff0c;就要第一时间想到哈希法。 C&#xff1a; unordered_map class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int…...

vue自定义组件实现v-model双向数据绑定

一、Vue2 实现自定义组件双向数据绑定 ① v-model 实现双向数据绑定 在vue2中&#xff0c;子组件上使用v-model的值默认绑定到子组件的props.value属性上&#xff0c;由于子组件不能改变父组件传来的属性&#xff0c;所以需要通过$emit触发事件使得父组件中数据的变化&#xf…...

excel指定单元格输入相同的值,比如给D1~D10000输入现在的值

注意&#xff0c;一点不用用WPS&#xff0c;不然运行宏是会报&#xff1a;Droiact-Module1,第1行等Λ列语法错误: Unexpected identifier 步骤 1&#xff0c;altF11打开宏 2&#xff0c;输入脚本 3&#xff0c;点击运行按钮 成功后会看看到...

中国最强乳企伊利,三个季度净赚超百亿

伊利三季度的业绩完全超出了市场预期。 在一个飞天茅台都在不断跌价的消费趋势里&#xff0c;伊利三季度扣非净利润的同比增幅达到13.4%。大部分机构和投资者&#xff0c;都没料到伊利这一次的表现如此强悍。这一次&#xff0c;伊利在“大气层”。 并且&#xff0c;伊利前三季…...

SpringBoot源码解析(二):启动流程之引导上下文DefaultBootstrapContext

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;启动流程之SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;启动流程之引导上下文DefaultBootstrapContext 目录 前言一、入口二、DefaultBootstrapContext1、BootstrapRegistry接口2、BootstrapCon…...

配置elk插件安全访问elk前台页面

编辑els配置文件vim elasticsearch.yml,添加以下配置文件 用elk用户&#xff0c;启动els服务 关闭防火墙&#xff0c;查看els启动是否成功&#xff0c;通过是否启动java进程来判断 或者通过查看是否启动9200和9300端口来判断是否启动 交互模式启动密码配置文件interactive表示交…...

[操作系统作业]页面置换算法实现(C++)

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;linux &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 目录 必做题代码分析&#xff08;重点以时间统计…...

前端技术月刊-2024.11

本月技术月刊聚焦于前端技术的最新发展和业务实践。业界资讯部分&#xff0c;React Native 0.76 版本发布&#xff0c;带来全新架构&#xff1b;Deno 2.0 和 Node.js 23 版本更新&#xff0c;推动 JavaScript 生态进步&#xff1b;Flutter 团队规模缩减&#xff0c;引发社区关注…...

搜索引擎语法大全(Google、bing、baidu)

搜索引擎语法大全 搜索引擎语法通常指的是在搜索引擎中使用特定的运算符和语法来优化搜索结果。 提高搜索精度&#xff1a;使用特定的语法可以帮助用户更精确地找到相关信息&#xff0c;避免无关结果。例如&#xff0c;通过使用引号搜索确切短语&#xff0c;可以确保搜索结果包…...

java设计模式之行为型模式(11种)

行为型模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象型模式&#xff0c;前者采用继承机制来在类间分派…...

微服务系列一:基础拆分实践

目录 前言 一、认识微服务 1.1 单体架构 VS 微服务架构 1.2 微服务的集大成者&#xff1a;SpringCloud 1.3 微服务拆分原则 1.4 微服务拆分方式 二、微服务拆分入门步骤 &#xff1a;以拆分商品模块为例 三、服务注册订阅与远程调用&#xff1a;以拆分购物车为例 3.1 …...

leetcode 1470.重新排列数组

1.题目要求: 2.题目代码: class Solution { public:vector<int> shuffle(vector<int>& nums, int n) {vector<int> x_array(nums.begin(),nums.begin() n);vector<int> y_array(nums.begin() n,nums.end());int x_index 0;int y_index 0;for…...

windows在两台机器上测试 MySQL 集群实现实时备份

在两台机器上测试 MySQL 集群实现实时备份的基本步骤&#xff1a; 一、环境准备 机器配置 确保两台机器&#xff08;假设为服务器 A 和服务器 B&#xff09;能够互相通信&#xff0c;例如它们在同一个局域网内&#xff0c;并且开放了 MySQL 通信所需的端口&#xff08;默认是 …...