LIRE教程之源码分析 |LIRE Tutorial of Analysis of the Source Code

最近在做地理图像识别和检索的研究,发现了一个很好用的框架LIRE,遂研究了一通。网上的教程不算很多,而且LIRE更新比较快,一些方法已经更新或废弃,故想写几篇文章重新总结一下框架内的多种方法,方便他人使用。
LIRE(Lucene Image Retrieval)是一个开源的轻量级图像识别Java框架,提供了多种简单易用的图片检索方法。事实上,LIRE是基于Lucene这个全文检索引擎修改的,也沿用了该检索引擎的思路。
LIRE相关资料:
官网首页:http://www.lire-project.net/
下载地址:http://www.itec.uni-klu.ac.at/~mlux/lire-release/
Github:https://github.com/dermotte/LIRE
官方文档:https://github.com/dermotte/LIRE/blob/master/src/main/docs/developer-docs/docs/index.md
官方教程:http://www.semanticmetadata.net/wiki/
在进入正文之前,再推荐一下DaveBobo的博客,作者已经总结了不少方法,可以参考:https://blog.csdn.net/davebobo/article/category/6466512
在下载LIRE之后,同时也要确保Lucene相关的jar包没有缺失。


接下来进入正题。本文的内容是结合官方给出的Sample Application,完成图片的提取特征、索引生成、图片检索。下载地址:[LIRE Sample Application]

笔者使用的是Intellij Idea。首先导入工程。从左边的文件夹中,可以发现LIRE的class都在net.semanticmetadata.lire这个文件夹中,而官方给出的案例则在net.semanticmetada.sampleapplication中。

图片特征提取和索引生成

打开案例中的Index.java文件(Github),点击右上角的三角,修改Idea的配置文件,输入图片文件夹的路径。

运行,等待程序结束后发现右边文件夹多出了一个index文件。

事实上,这个程序是最基本的索引文件。其步骤是:

(1) 读取输入文件夹下所有的照片文件。

(2) 设置提取图片要素的方法和descriptors。

(3) 对图片进行特征提取并写入索引。

其中,重点在于图片特征的提取方法。根据源码,可以发现首先建立了一个GlobalFeatureBuilder。这相当于图片提取的容器,再设置了图片提取要素的方法,在这段源码中包括CEDD,FCTH,AutoColorCorrelogram这三种方法。事实上,除了这些方法之外,还可以参考lib/net.semanticmetadata.lire/imageanalysis/features/global这个文件夹下的其他类,这个文件夹下包括了LIRE中包含的全局要素提取方法。

GlobalDocumentBuilder globalDocumentBuilder = new GlobalDocumentBuilder(false, false);
globalDocumentBuilder.addExtractor(CEDD.class);
globalDocumentBuilder.addExtractor(FCTH.class);
globalDocumentBuilder.addExtractor(AutoColorCorrelogram.class);

接下来,只要使用GlobalDocumentBuilder.createDocument()方法就可以完成图片的特征提取。提取之后还需要建立索引,从而方便之后的图片检索。LIRE是建立在Lucene的基础上的,通过Lucene可以非常快速建立文档及其索引。新建一个IndexWriter,并将图片的特征写入其中。具体代码是下面这一段:

BufferedImage img = ImageIO.read(new FileInputStream(imageFilePath));
Document document = globalDocumentBuilder.createDocument(img, imageFilePath);
iw.addDocument(document);

即从本地上读取图片,再进行图片的特征提取,最后生成索引文件。

图片检索

在完成图片的特征提取之后,下一步是进行图片的检索,即给定一张图片,找出与这张图片最相似的图片。
打开案例中的Searcher.java文件(Github)。修改Idea配置文件,传入给定图片的路径。
运行之后可以发现输出了一串从小到大的分数及其具体的图片路径。分数越小说明该图片与给定图片越相似。如果分数为0说明两者一样。

这个程序是最基本的检索文件。其步骤是:

(1) 读取给定的图片。

(2) 读取之前生成的图片索引,寻找与给定图片最相似的图片。

(3) 输出相似度分数及具体的图片。

根据源码,可以发现使用了IndexReader读取了索引文件,之前是使用IndexWriter将这些索引文件写入了硬盘。

IndexReader ir = DirectoryReader.open(FSDirectory.open(Paths.get("index")));

接下来使用了ImageSearcher.search()方法寻找最相似的图片。其方法是使用CEDD方法对给定的图片进行特征提取,之后在索引中进行搜索。在这段代码中,返回与给定图片最相似的30张图片。ImageSearchHits即为最相似的图片,可以从中获取相似度分数和图片路径等。

ImageSearcher searcher = new GenericFastImageSearcher(30, CEDD.class);
ImageSearchHits hits = searcher.search(img, ir);

以上构成了一个完整的图片特征提取-生成索引-图片检索步骤,使用这两份代码已经满足基础的使用了。

转载于:https://www.cnblogs.com/kkyyhh96/p/8758957.html

LIRE教程之源码分析 | LIRE Tutorial of Analysis of the Source Code相关推荐

  1. LIRE原理与源码分析(二)——相关接口

    1. LIRE原理与源码分析(二)-- 代码结构 2. LIRE原理与源码分析(二)-- 相关接口 上一篇文章介绍了LIRE的基本内容和源码的代码结构.本文针对LIRE中主要的三个接口(LireFea ...

  2. LIRe图像检索:FCTH算法原理与源码分析

    本文节选自论文<基于半监督和主动学习相结合的图像的检索研究>,并结合我对LIRe中FCTH源码进行分析.解读和研究. 模糊颜色和纹理直方图(Fuzzy Color and Texture ...

  3. LIRe图像检索:CEDD算法原理与源码分析

    本文节选自论文<Android手机上图像分类技术的研究>,并结合我对LIRe中CEDD源码进行分析.解读和研究. 颜色和边缘方向性描述符(Color and EdgeDirectivity ...

  4. AI作曲基础-Python编程作曲软件篇-FoxDot文档及源码分析-官方教程01

    AI作曲基础-Python编程作曲软件篇-FoxDot文档及源码分析-官方教程01 前言 本系列系列目录放在文尾: 本系列是AI作曲的基础,暂时和AI关系不大,但尤为重要: 借助FoxDot,从文档分 ...

  5. Cubemx与HAL库系列教程|系统时钟配置详解及源码分析

    STM32时钟系统简介 STM32种类繁多,时钟系统也不尽相同,但基本的还是大差不差,今日小飞哥就F1系列的MCU简单聊一聊STM32的时钟系统 1.时钟种类介绍: 先来看一看时钟树图,包含了整个系统 ...

  6. 视频教程-经典Vue从入门到案例到源码分析教程(含资料)-Vue

    经典Vue从入门到案例到源码分析教程(含资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业 ...

  7. 源码分析教程5部曲之1——漫游C语言-杨振平-专题视频课程

    源码分析教程5部曲之1--漫游C语言-5052人已学习 课程介绍         源码分析教程5部曲之1--漫游C语言 课程收益     源码分析教程5部曲之1--漫游C语言 讲师介绍     杨振平 ...

  8. php区块链以太坊,兄弟连区块链教程以太坊源码分析CMD深入分析(一)

    兄弟连区块链教程以太坊源码分析CMD深入分析. cmd包分析 cmd下面总共有13个子包,除了util包之外,每个子包都有一个主函数,每个主函数的init方法中都定义了该主函数支持的命令,如 geth ...

  9. cl.zk0.info/index.php,兄弟连区块链入门到精通教程btcpool矿池源码分析环境搭建

    原标题:兄弟连区块链入门到精通教程btcpool矿池源码分析环境搭建 btcpool矿池-测试环境搭建及使用cgminer测试 本文档基于Ubuntu 16.04 LTS, 64 Bits. 安装Bi ...

最新文章

  1. vc++学习篇(三)——预处理命令之条件编译(#ifdef,#else,#endif,#if等)
  2. 梯度下降法和随机梯度下降法的区别
  3. 机器学习实战-KNN算法-20
  4. Domino+Qucikplace+Sametime构建企业办公平台图文攻略(四)
  5. 日志采集框架Flume、Flume介绍、概述、运行机制、Flume采集系统结构图(1、简单结构、复杂结构)...
  6. NOIP2010-普及组初赛C语言解析
  7. 如何使用ArcMap将Excel数据转换为shp数据
  8. 【html----花瓣特效(附源代码)】
  9. MySQL 实时同步 解决方案
  10. 自媒体是什么?三大媒体平台详细介绍,不了解的赶紧看着吧!
  11. 阿里正式交棒在即 普通股“一拆八”为赴港上市铺路?
  12. 小学校计算机教室年度工作总结,小学计算机教师年度工作总结
  13. dataframe读取以文本形式储存的excel中的数字
  14. 数据库想法整合,多表联立交互
  15. 快钱支付平台 退款功能
  16. 5G NR标准: 第20章 5G的演进
  17. 计算机文献双语外文,22中英文双语外文文献翻译成品:基于Unity3D的虚拟现实(VR)新方法...
  18. 小型继电器的使用及proteus仿真
  19. 上海大学计算机哪个导师,上海大学计算机工程与科学学院导师信息——岳晓冬...
  20. 牛客寒假6-C.项链

热门文章

  1. SYN Cookies 技术
  2. JPM Coin 三部曲 (上) - 深入理解摩根币的运作
  3. java printwriter用法_Java中printwriter类的用法 | 学步园
  4. frpc windows开机启动设置。
  5. 机器学习中的数学——常用概率分布(七): 拉普拉斯分布(Laplace分布)
  6. 微信小程序框架(二)-全面详解(学习总结---从入门到深化)
  7. 【雕爷学编程】Arduino动手做(136)---0.91寸OLED液晶屏模块
  8. Android自定义View注意事项
  9. 女白领放弃几十万年薪种菜 身家已过亿
  10. axel 下载东西 ubuntu