最近想做一个图片检索的程序,期望实现的功能包括图片信息的记录、重复图片的查找、相似图片的查找等,于是找到了Lire库,一个用于图像搜索的Lucene扩展包。
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使用全局的图像特点来进行基于内容的图像检索。你应该去查阅关于CBIR的基础文献以了解更多底层的方法和技术:
关于使用到的底层Lucene(Java搜索引擎)技术:
线性搜索(从每一个索引文件中匹配查询关键词)
粗略索引(基于G. Amato的文件倒排图像检索技术 )
------------------------------------------------------------------------------
代码示例中的方法均采自Lire开发Wiki页,并稍作修改。使用该方法,可以完成基本的图像识别功能,但是更加精确的搜索结果可能需要其他参数设置。
亦可使用Luke查看Lire生成的索引,可识别文件名(descriptorImageIdentifier)等,如使用CEDD文本生成器会显示CEDD信息(featureCEDD)。
PS:
我在使用lire做大批量的图片索引时遇到一系列的问题,记录如下:
1.java.lang.StackOverflowError
原因是代码中一个变量写错导致无限递归,从而造成栈溢出错误。
2.java.lang.IllegalArgumentException: Empty region!
原因是“ImageIO不支持ico格式图像读写“,索引的文件夹中包含ico格式的图标文件,而lire使用的ImageIO不支持对ico格式图片数据的处理。
3.java.lang.OutOfMemoryError: Java heap space
文件夹过大导致JVM堆空间不够了。由于我使用的是eclipse,打开Run - Open Run Dialog...,定位到当前的运行实例,进入选项Arguments下的VM arguments,
在其中输入-Xms128M -Xmx512M再次运行即可。