摸索AI(一)安装Ollama和本地大模型部署
之前也是花了巨多的时间从Github上下载了一些AI摸索的实践项目,涉及到的有文生图、文生视频、图生图、语音克隆、数字人等,它们的实践对电脑配置的依赖有一定的要求,而且实践的过程复杂程度较高,属于摸索着玩玩而已。本次摸索AI的范围则是面向对擅长领域的代码接入实践。如果你对Java代码交互的AI大模型有一些兴趣,又或者是跟我一样不知从哪里入手,或许看看我这里分享的前后实践过程与实践的案例范围,也是不错的选择。 所以,本系列教程相关的实践是在本地部署大模型,并且使用Java代码与本地的大模型进行交互。除了本地部署的大模型以为,也是可以付费接入网络上的一些付费大模型,比如Deepseek、千问等等,但是对我个人来讲,私有化的本地大模型更加有意义,毕竟可以免费的集成到企业级应用实践当中。 1.安装Ollama (1)Ollama 是一个用于简化本地大模型部署和使用的平台或工具。它的主要作用是帮助用...
文章分类:经验分享 技术知识
Spring Ai小小的整理一下OCR的实现
OCR以前偶尔看到过,从来没想过项目中会用得到这东西,感觉很高大上的样子。最近有一个需求是从一个PDF文件中读取数据,而PDF文件的内容为图片(相当于文件中没有文本,无法用鼠标选中复制),并且给了一个OCR的商业实现方案“泰比”,下载了它的应用软件试用了一下确实很强大,但是它的SDK需要线上申请,由他们销售联系注册申请试用,最后一步给了一个英文的网页让去填写什么什么的(没仔细看,你懂得)。由于是分析实现可行性,所以也查阅着一些开源组件的实现方案,感觉合适的大致上有两种:一、使用tesseract-ocr组件;二:使用tess4j实现; 对于这种高大上东西的如何实现不是我考虑的,对于我这种小渣渣选手来说,找到一个最合适的组件来满足需要就已经是最好的了。所以我重点关注方案的选型、使用角度。 tesseract-ocr是什么大家可以自行寻找理论,如果想在程序中使用,需要安装tesseract-o...
文章分类:经验分享 技术知识
报表导出Word与Excel的实现
也算是做过不少报表导出了,最多的导出类型为Word与Excel两种。下面容我来分析一下这些导出的实现方式。 一、导出Word的实现 1、使用 freemarker模板实现 此种实现是最普遍的,预先按照最终的需要调整好一个doc格式的文件,填上相关数据后,将此doc格式的文件转换为Word格式的xml文件,再编辑xml文件,将需要替换的位置写上一些变量、循环判断逻辑等,在后台使用freemarker实现为其填充数据,并将此文件的后缀格式保存为doc类型。 优点: 1)实现简单、易于维护,推荐使用; 2)可借助于freemarker技术对相关字段进行格式化、逻辑处理等; 3)导出效果可与实际操作Word效果一致; 缺点: 1)导出的格式为doc类型(docx的格式简单试了一下不行,没有继续深入); 2)如果后期导出的样式需要调整将会很痛苦,相当于模板需要重新维护一次; 2、使用拼html标签代...
文章分类:经验分享 技术知识
根据JSON生成JavaBean
根据json格式数据生成一个javabean对象,首先这是一个简单的功能,但是要写出一个比较好的版本实际还是有些难点的,这里跟大家分享一种实现,基于fastjson、freemarker。 实现要求 1. json格式中可包括boolean类型、String类型、int类型、金额类型等常见类型; 2. json格式中可出现其它关联对象,包括其对象类型、集合类型; 3. 相关联的对象类不能作为一个单独的类创建,作为子类创建在内部; 4. 理论上支持无限极JSON对象格式(可能会出现子类、孙子类、重孙子类等); 测试示例 一.最简单的json对象创建 1.json文本 { "active": true, "date": "2016-12-20", "id": 1001, "money": 5.25, "name": "china" } 2.生成的Java类 package com.vo; im...
文章分类:经验分享 技术知识
网页中的录音实现方案
前几天逛了逛论坛,发现了一个网页中录音的实现方案,基于flash实现,即在页面中嵌入一个flash实现录音,然后将录音的文件上传至服务器中,可以搜索一下该组件FlashWavRecorder,给出我看到的原文地址:http://uikoo9.com/blog/detail/java-flashwavrecorder-new,文章中有github地址的源码下载,此为背景。 作为储备的知识,我觉得研究研究还是挺不错的,故将此代码整理整理,摘出来一份儿干净的代码跟大家分享出来。注:此组件的API并未研究,如需正式使用需关注下flash与后台上传时的细节问题。 下面给出运行效果、下载地址,如下: ...
文章分类:经验分享 技术知识
使用SMB/CIFS做文件服务器
背景介绍 SMB/CIFS组件是一种Java访问共享文件夹的实现,使用它也是可以很方便的管理上传下载的文件,先闲话一些别的吧。很久以前有遇到文件的上传下载时,很“单纯”的将文件写至servletContext.getRealPath("/files");目录下,然后就没有然后了,后来慢慢的将某个服务器的共享文件夹以磁盘映射的方式作为本地的磁盘进行访问,也就是说访问时以Z:\\shares......去访问共享文件......在之前的项目中新做的文件上传下载有要求写入一个服务器上,而使用的技术实现则是从一个老系统中迁移出来的,我还一直以为用到的实现时上传的文档服务器提供的接口,并未多想,如果不是前段时间又遇到此种问题了,或许也就没有下文了。最近我找了找它还真的是一个开源组件,基于smb协议的文件访问。 一般项目当中的文档管理,基本的功能是对文档目录的列表读取、文件(夹)的增删改查以及文件的上...
文章分类:经验分享 技术知识
将Java程序制作成exe文件
背景介绍 以前关注过一段时间的制作Java安装程序的实现,当时找的是install4j,也跟着教程实现了一下,给我的感觉就是过程太复杂了,业余了解一下就够了,而前段时间的制作俄罗斯方块的安装包时发现了exe4j的实现,感觉制作过程简单多了。现在说一下这两个软件给我的感觉:install4j感觉是重量级的,制作出的安装程序有下一步下一步的安装功能,跟一般软件的安装过程差不多,而exe4j貌似比较轻量级了,就是将一套程序包写入exe文件,直接双击打开exe文件就是程序的执行文件,无需下一步一下一步的安装了(了解的有点片面了,有不当之处可指出),可按自己所需进行选择。 最近有个需求决定使用swing实现,swing这种东西用的太少了,但是一直都没丢,时不时的还用它写个小玩意儿,所以面对使用swing做一个程序问题不大,而开发工具就使用熟悉的MyEclipse自带的插件,之后再找一套swing的皮...
文章分类:经验分享 技术知识
RandomAccessFile分割、还原文件(三)
背景介绍 关于前面两篇分割、还原文件的介绍,示例代码运行无误,但发现遇到分割3.xxG大小的操作系统文件时,却出现错误,错误原因为:Exception in thread "main" java.io.IOException: Negative seek offset 意思是说指针位置指向的错了,后来分析半天代码发现在代码实现中定义的分割文件的大小用的int类型,而在参与指针位置计算的时候有long类型的参与,但结果还是ing类型的,可能是int越界吧,成了负数导致,将int修改为long类型的即可。另外还有一个地方计算分割文件的开始、结束位置时采用另外一种运算,感觉这种begin、end范围更加科学,代码参考如下: package com; import java.io.BufferedOutputStream; import java.io.File; import java.io.F...
文章分类:经验分享 技术知识
RandomAccessFileRandomAccessFile分割、还原文件(二)
背景介绍 前文中有一个简单版本的示例,基于彼示例,我做了进一步的优化调整,添加了分割文件的配置属性文件,属性文件一般可以是properties类型的,这里我就采用序列化文件,直接将一个存储好数据的对象写入文件,还原文件时再读入此文件作为还原的标准配置。 记录的属性有以下几个: fileName源文件名称:用于还原文件时恢复分割前的文件原名称; fileLength源文件大小:可用于还原文件前检查现有的还原目录的可用磁盘是否充足; fileSuffix源文件后缀:作用不大可作为预留属性值; partList分割的碎片:按照先后顺序存储所有被分割的碎片文件,还原文件时按照此组数据的先后顺序进行先后写入; 原理同前一篇文章相同,只是功能越完善需要添加的代码和逻辑也就越多了,参考代码如下: 代码实现 1.文件分割 package com; import java.io.BufferedOutput...
文章分类:经验分享 技术知识
RandomAccessFileRandomAccessFile分割、还原文件(一)
背景介绍 想写个例子去分割大文件已经很久了,由于一些问题始终没有搞明白,故一直没去做,然而今天还是艰难的下手了,实现了这个功能示例,并且稍微完善了一下,基于RandomAccessFile随机读取文件,分割、还原文件等动作。本篇文章主要关注一下一个简单版本的分割文件、合并文件的核心模块处理逻辑,目的在于像我一样渣渣水平的人可以从基础入门,对于一些运算逻辑太复杂,或者是封装的太深的代码不太容易对于这块儿的新手儿来理解,所以本篇我重点在于精简代码,并给出相关的注释,在异常的处理上就放宽松点吧,文件的分割网上示例非常多,我理解的文件分割与我们数据库的数据分页原理类似,都是获取到总记录数total,再根据每页显示数据条数pageSize,先得出一共有多少页totalPage,再从1开始循环至totalPage,将每页的数据读取出来,而文件分割是一样的,只不过是将每页的字节单独存储为一个文件,参考代...
文章分类:经验分享 技术知识
RandomAccessFileJSP自定义标签动态sql条件处理
这是一些很早之前写的代码了,一来丰富一下系统的内容量,二来觉得这些个实现方法特别的好,坚决不能丢了,近期将其整理整理,本篇着重的讲一下查询标签中的sql处理方式。 既然是处理sql,显然离不开要说道dao层的实现了,可以在关于系统栏目下找到关于系统持久层解决方案中的相关描述,也可就只看此篇对于查询标签的sql处理。 处理sql的相关问题: 1、sql的参数传递问题,如果直接在页面上sql页面上是否方便维护逻辑? 查询sql语句中包括一些基本的参数可以通过el表达式${param.xxx}的方式进行获取,可拼接在sql语句当中,参数值获取很方便,不对页面的美观造成影响,参考效果如下: <my:queryOne sql="SELECT userid AS 'userId' , realname 'realName' FROM sysuser WHERE userId = ${param.use...
文章分类:经验分享 技术知识
JSP自定义标签运营时间: 天
用户数量: 人
文章数量: 篇
评论数量: 条
点赞个数: 个
最后更新:
欢迎来到陈冬冬的学习天地 | 学习与经验整理分享平台