selective_search的python使用,以及其在python3错误解决

1、绪论
Selective Search是R-CNN这篇文章里用的Region Proposal Method。Selective Search的文章是J.R.R. Uijlings, et al, Selective Search for Object Recognition, IJCV 2012。其中selective search的Python实现开源代码(https://github.com/AlpacaDB/selectivesearch)

2、源码使用
selective_search的python使用,以及其在python3错误解决_第1张图片
example文件夹放了一个例子
selectivesearch文件夹放了selective_search核心代码
源码给了一个简单的例子,如下所示

import skimage.data
import selectivesearch

img = skimage.data.astronaut()
img_lbl, regions = selectivesearch.selective_search(img, scale=500, sigma=0.9, min_size=10)
regions[:10]
=>
[{'labels': [0.0], 'rect': (0, 0, 15, 24), 'size': 260},
 {'labels': [1.0], 'rect': (13, 0, 1, 12), 'size': 23},
 {'labels': [2.0], 'rect': (0, 15, 15, 11), 'size': 30},
 {'labels': [3.0], 'rect': (15, 14, 0, 0), 'size': 1},
 {'labels': [4.0], 'rect': (0, 0, 61, 153), 'size': 4927},
 {'labels': [5.0], 'rect': (0, 12, 61, 142), 'size': 177},
 {'labels': [6.0], 'rect': (7, 54, 6, 17), 'size': 8},
 {'labels': [7.0], 'rect': (28, 50, 18, 32), 'size': 22},
 {'labels': [8.0], 'rect': (2, 99, 7, 24), 'size': 24},
 {'labels': [9.0], 'rect': (14, 118, 79, 117), 'size': 4008}]

结果如下:
selective_search的python使用,以及其在python3错误解决_第2张图片

3、python3错误解决
参考博客selectivesearch python3 错误解决
使用python3的朋友们可能会遇到在运行时会遇到如下错误:
错误一:
这里写图片描述
这个比较简单,都会解决,用编辑器打开example.py,在35行使用python3的print用法就行。

for x, y, w, h in candidates:
    # print x, y, w, h
    print(x, y, w, h)
    rect = mpatches.Rectangle((x, y), 
        w, h, fill=False, edgecolor='red', linewidth=1)
    ax.add_patch(rect)
plt.show()

错误二:
selective_search的python使用,以及其在python3错误解决_第3张图片

用编辑器打开selectivesearch.py
将第285行:

i, j = sorted(S.items(), cmp=lambda a, b: cmp(a[1], b[1]))[-1][0]

替换成:

i, j = sorted(list(S.items()), key = lambda a: a[1])[-1][0]

然后将init.py文件中的

from selectivesearch import selective_search  # NOQA

改成

from .selectivesearch import selective_search  # NOQA

详细原因请查看python3 module中init.py的需要注意的地方(其实也可以把两个程序放在同一个文件夹下)

由于字典并 python3 和 python2 并不兼容在206行(R = regions.items())下面添加将 dict_items 转换成 list

r = [elm for elm in R]
R = r

这下就可以正常使用了

你可能感兴趣的:(深度学习)