基于LIRE的图像检索系统(C/S架构)

版权声明:个人学习之路,若有误,欢迎指正。其中一些博文被证明有错误的地方,最近比较忙,没时间更正,谨慎参考!! https://blog.csdn.net/y396397735/article/details/78386250

关于

自己业余时间搭建的一个基于LIRE的图像检索系统,可用于对图像检索研究领域的相关人员作为相关结果展示参考等。

简介

系统功能:

①点击客户端界面可对ImagesFolder文件目录下图像文件进行创建索引操作,默认设置为CEDD、PHOG等18种特征提取索引文件一次全部创建。
②创建索引后,选择本地一张图片,点击开始检索,会根据选择的相应的特征提取算法,检索出相应的最相似的60张照片(现默认设置为60张)。

系统设计

①服务端环境:JDK8,Eclipse Jee Oxygen
②客户端环境:Qt5.9.0
③通信方式:TCP socket通信
客户端发送请求相关部分代码:

void MainWindow::SendRequest(const QString& strAction, const QString& filepath, const QString& depends)
{
    m_pSocket->connectToHost("127.0.0.1", 12345);
    bool connected = m_pSocket->waitForConnected();// waitForConnected();
    QString sendStr = strAction + "CSU" + filepath + "CSU" + depends + "CSU" + "\n";
    if(connected)
    {
        m_pSocket->write(sendStr.toStdString().c_str(), sendStr.size());
        m_pSocket->waitForBytesWritten();
    }
}

客户端通过发送
strAction + "CSU" + filepath + "CSU" + depends + "CSU" + "\n"
字符串给服务端
strAction 表示为搜素或索引指令
filepath 表示为所选择的图像文件的路径
depends 表示为选择的图像特征提取算法


服务端处理部分代码:


BufferedWriter outbuf = new BufferedWriter(new OutputStreamWriter(tclient.getOutputStream()));
            BufferedReader inbuf = new BufferedReader(new InputStreamReader (tclient.getInputStream()));
            String recvMsg = inbuf.readLine();//读取接受客户端的数据
            String[] recvDataStr = recvMsg.split("CSU");
            // action 客户端请求类型
            String action = recvDataStr[0];
            //搜索请求                                  
            if(action.equals("SEARCH")){         
                String imgPath = recvDataStr[1];
                String imgDepends = recvDataStr[2];
                SearchDependsType searchDependsType;
                switch (imgDepends) {
                    case "AutoColorCorrelogram":
                        searchDependsType = SearchDependsType.AutoColorCorrelogram;break;
                    //略..
                default:
                    searchDependsType = SearchDependsType.CEDD;
                    break;
                }
                Searcher mySearcher = new Searcher();
                //开始搜索,默认搜索60幅图像
                mySearcher.DoSearch(imgPath, searchDependsType, 60);

                String str = "";
                for(int i=0; i< Searcher.imgList.size();i++){
                    str+=Searcher.imgList.get(i)+"CSU";
                }
                System.out.println("Send String is: " + str);
                outbuf.write(str);
                outbuf.close();
            }else if(action.equals("INDEX")) {   //索引请求                         
                //建立索引文件
                String imagePath="ImagesFolder";
                Indexer myIndexer = new Indexer();
                boolean isIndexover =  myIndexer.IndexAll(imagePath);
                if(isIndexover){
                    String str = "Index over!";
                    System.out.println(str);
                    outbuf.write(str);
                    outbuf.close();
                }
            }
            tclient.close();

服务端根据不同请求作相应的索引或者检索处理。


系统效果

客户端界面

客户端界面


CEDD算法的检索效果

这里写图片描述


PHOG算法的检索效果

这里写图片描述


后台索引文件创建

这里写图片描述


源码路径

项目地址路径分享:
https://github.com/lesliefish/ImageSearcher

猜你喜欢

转载自blog.csdn.net/y396397735/article/details/78386250