使用Lire索引并搜索图片

最近想做一个图片检索的程序,期望实现的功能包括图片信息的记录、重复图片的查找、相似图片的查找等,于是找到了Lire库,一个用于图像搜索的Lucene扩展包。

示例代码见:Lire图片搜索示例。以下内容译自:Lire - Lucene Image REtrieval:

Lire - Lucene Image REtrieval

Lire(全名:Lucene图像检索),是一种简单的用于创建图片的Lucene索引并实现基于内容的图片检索库。Lire实现的特色包括:

  • ScalableColor、ColorLayout和EdgeHistogram。(MPEG-7标准,多媒体内容描述接口中的描述工具,工具释义参见:http://t.cn/zWyIGQw)

  • CEDD和FCTH

  • 颜色柱状图(HSV和RGB),Tamura & Gabor,自动色彩图, JPEG系数柱图(通用全局描述符)

  • SIFT和SURF中的视觉关键词

此外,还提供了基于Lucene的用于从索引中检索的方法。

Lire是从Caliph & Emir项目中的一部分发展而来的,它包含的基于内容的图片检索(CBIR)特征旨在为Caliph & Emir对其它Java项目提供一种简单和轻量的使用方式。

同时,它也发展成为一个大的很有意思的项目。

Lire 是如何工作的?

Lire使用全局的图像特点来进行基于内容的图像检索。你应该去查阅关于CBIR的基础文献以了解更多底层的方法和技术:

  • 图像检索:概念,影响和新时代的趋势

  • 近代CBIR技术

关于使用到的底层Lucene(Java搜索引擎)技术:

  • 线性搜索(从每一个索引文件中匹配查询关键词)

  • 粗略索引(基于G. Amato的文件倒排图像检索技术

------------------------------------------------------------------------------

Lire官网:http://t.cn/aK1y4zAPI:http://t.cn/zWyIbOC

代码示例中的方法均采自Lire开发Wiki页,并稍作修改。使用该方法,可以完成基本的图像识别功能,但是更加精确的搜索结果可能需要其他参数设置。

亦可使用Luke查看Lire生成的索引,可识别文件名(descriptorImageIdentifier)等,如使用CEDD文本生成器会显示CEDD信息(featureCEDD)。

PS:

我在使用lire做大批量的图片索引时遇到一系列的问题,记录如下:

1.java.lang.StackOverflowError

http://blog.csdn.net/zhuam/article/details/1222121

原因是代码中一个变量写错导致无限递归,从而造成栈溢出错误。

2.java.lang.IllegalArgumentException: Empty region!

原因是“ImageIO不支持ico格式图像读写“,索引的文件夹中包含ico格式的图标文件,而lire使用的ImageIO不支持对ico格式图片数据的处理。

参考:ico图片转换、ImageIO读取图像时报的两种错误

3.java.lang.OutOfMemoryError: Java heap space

参考:http://floger.iteye.com/blog/758031

文件夹过大导致JVM堆空间不够了。由于我使用的是eclipse,打开Run - Open Run Dialog...,定位到当前的运行实例,进入选项Arguments下的VM arguments

在其中输入-Xms128M -Xmx512M再次运行即可。

你可能感兴趣的:(Lucene,LIRE)