- bin/ 包含二进制文件
- conf/ 一系列配置文件
- imgInfo/ 图像文件集及提取图像信息的脚本
- include/ 头文件
- src/ 源文件
- mist/ 数据库表生成文件及Google protobuf定义文件
- opencv >= 2.0 且编译NONFree 库
- postgresql >= 9.0
- ImageMagick ,在用脚本提取图像信息的时候用到
- Google Protobuf ,图像检索服务器用于客户端通讯
- 创建数据库及相应的表
# 创建名为 imret的数据库,在PostgreSQL中可能需要切换到pgsql用户才有权限 $ createdb imret $ cd mist # 使用用户 pgsql 在数据库imret中 创建表 $ psql -U pgsql -d imret -f ./createTB.sql
- 添加图像集,读取图像信息,写入数据库
# 假设图像集放在目录 mist/img/PI100 下 $ cd mist # 读取图像信息, 并以带头CSV格式输出到标准输出,使用重定向写入到文件 $ ./readImgInfo.sh img/PI100 PI100 > PI100.csv # 上述命令的第2个参数为图像集的标签 # 将图像信息写入数据库,参数为 ./readImgInfo.sh 生成的文件,默认使用pgsql用户 $ ./writeImgInfoDB.sh PI100.csv
- 生成二进制可执行文件
$ cd src $ make all # 生成的可执行代码放在 bin/目录下
配置文件的每行均为key=”value” 形式,以 # 开头的为注释 支持的key如下:
- PGURI,连接数据库的URI,egg:postgresql://username:password@server-address/database
- image,用于选择初始化的图像集,imageClass为给图像的标签,改语句实际为SQL语句中的where子句, 所以可以加入其它符合SQL语法的命令。这个值确定好后不要修改,不然会无法读取已经写入的数据!
- k ,k-means聚类时使用的k
- precision, k-means收敛的精度
- maxCount, k-means的最大迭代次数
- nresult, 图像检索服务器返回的最大结果数
- resultSimilarity, 图像检索服务器返回结果的最小相似度[0,1]
- 计算SIFT特征
# 确保在bin/ 目录下的可执行文件能够读取图像集 $ cd bin $ ln -s ../imgInfo/img img # 先手动写入CSV文件的头 $ echo "imageID,position,feature" > PI100_SIFT.csv # ./calcSift 的参数为配置文件路径,结果会输出到标准输出,运行状态会输出到标准错误 $ ./calcSift ../conf/PI100.conf >> PI100_SIFT.csv
至此img/PI100目录下的图像的SIFT特征均存提取并存放在文件PI100_SIFT.csv
- 统计视觉词汇频率直方图
# ./featsKmeans 需要两个参数,第一个为配置文件,第二个为含有头的SIFT的csv文件, # 结果会写入数据库 $ ./featsKmeans ../conf/PI100.conf PI100_SIFT.csv
- 运行图像检索服务器
# 服务器将缓存文件放在当前目录的 userData/cache文件夹下,需要新建这个文件夹 $ cd bin $ mkdir userData $ mkdir userData/cache $ ./server ../conf/PI100.conf
- 向图像检索服务器发出检索请求
$ ./client <path-to-img> [server-ip] [server-port]
Report bug szive(at)live.com