欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Lire图片搜索示例(基于Lucene),lirelucene,import java.

来源: javaer 分享于  点击 36697 次 点评:47

Lire图片搜索示例(基于Lucene),lirelucene,import java.


import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import javax.imageio.ImageIO;import net.semanticmetadata.lire.DocumentBuilder;import net.semanticmetadata.lire.DocumentBuilderFactory;import net.semanticmetadata.lire.ImageDuplicates;import net.semanticmetadata.lire.ImageSearchHits;import net.semanticmetadata.lire.ImageSearcher;import net.semanticmetadata.lire.ImageSearcherFactory;import org.apache.lucene.analysis.SimpleAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;import org.junit.Test;public class TestImageSearch {    private static String INDEX_PATH = "F:/index";// 索引文件存放路径    //要索引的图片文件目录    private static String INDEX_FILE_PATH = "C:/image";    private static String SEARCH_FILE = "C:/x.jpg";//用于搜索的图片    @Test    public void createIndex() throws Exception {        //创建一个合适的文件生成器,Lire针对图像的多种属性有不同的生成器        DocumentBuilder db = DocumentBuilderFactory.getCEDDDocumentBuilder();        IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_33, new SimpleAnalyzer(Version.LUCENE_33));        IndexWriter iw = new IndexWriter(FSDirectory.open(new File(INDEX_PATH)), iwc);        File parent = new File(INDEX_FILE_PATH);        for (File f : parent.listFiles()) {            // 创建Lucene索引            Document doc = db.createDocument(new FileInputStream(f), f.getName());            // 将文件加入索引            iw.addDocument(doc);        }        iw.optimize();        iw.close();    }    @Test    public void searchSimilar() throws Exception {        IndexReader ir = IndexReader.open(FSDirectory.open(new File(INDEX_PATH)));//打开索引        ImageSearcher is = ImageSearcherFactory.createDefaultSearcher();//创建一个图片搜索器        FileInputStream fis = new FileInputStream(SEARCH_FILE);//搜索图片源        BufferedImage bi = ImageIO.read(fis);        ImageSearchHits ish = is.search(bi, ir);//根据上面提供的图片搜索相似的图片        for (int i = 0; i < 10; i++) {//显示前10条记录(根据匹配度排序)            System.out.println(ish.score(i) + ": " + ish.doc(i).getFieldable(DocumentBuilder.FIELD_NAME_IDENTIFIER).stringValue());        }        Document d = ish.doc(0);//匹配度最高的记录        ish = is.search(d, ir);// 从结果集中再搜索        for (int i = 0; i < 4; i++) {            System.out.println(ish.score(i) + ": " + ish.doc(i).getFieldable(DocumentBuilder.FIELD_NAME_IDENTIFIER).stringValue());        }    }    @Test//测试前先将包含重复图片的文件进行索引    public void searchDuplicates() throws Exception {        IndexReader ir = IndexReader.open(FSDirectory.open(new File(INDEX_PATH)));        ImageSearcher is = ImageSearcherFactory.createDefaultSearcher();        ImageDuplicates id = is.findDuplicates(ir);//查找重复的图片,如果没有,则返回null        for (int i = 0; id != null && i < id.length(); i++) {            System.out.println(id.getDuplicate(i).toString());        }    }}//该片段来自于http://byrx.net
相关栏目:

用户点评