具有相同名称导入问题的模块的两个实现

时间:2016-08-11 15:08:58

标签: python import package caffe

我使用两个基于caffe构建的库:crf-rnn(https://github.com/torrvision/crfasrnn/tree/master/python-scripts)和hed(https://github.com/s9xie/hed/blob/master/examples/hed/),前者用于语义图像分割,后者用于轮廓检测。最后,我意识到如何让它们一起工作以进行对象跟踪,但现在我面临一个令人尴尬的问题:因为它们都是在caffe之上构建的,所以它们导入相同的包,但每个包含非常不同的内容,即crf-rnn使用caffe.Segmenter,hed没有和ed使用caffe.TEST crf-rnn没有。

Python不允许导入两个具有相同名称的包。我已经尝试通过将hed放在一个单独的Python文件中并在主脚本中导入它,并使用asimport caffe as cf获取其中一个软件包来找到一种解决方法,但到目前为止还没有任何结果。

有什么建议吗?

编辑:这是一个名为Aux.py

的文件
def import_hed_caffe():
    import sys,os
    caffe_dir = '/home/alex/Downloads/hed/python'
    sys.path.insert(0,caffe_dir)
    hed_model = 'deploy.prototxt'
    hed_pretrained = 'hed_pretrained_bsds.caffemodel'
    import caffe as cf
    net = cf.Net(hed_model, hed_pretrained, cf.TEST)
    return  net

这是主要的脚本:

caffe_root = '../caffe-crfrnn/'
sys.path.insert(0, caffe_root + 'python')
import caffe as espresso
import AuxScript
net = espresso.Segmenter(MODEL_FILE, PRETRAINED, gpu=False)
a=AuxScript.import_hed_caffe()

我得到了

AttributeError: 'module' object has no attribute 'TEST'

毋庸置疑,单独一切正常,所以只是导入

编辑2:

./ CMakeFiles

./ CMakeFiles / pycaffe.dir

./ CMakeFiles / pycaffe.dir / CAFFE

./ CAFFE

./ CAFFE / imagenet

./ CAFFE /原

./ CAFFE /测试

编辑3:

├── caffe
│   ├── _caffe.cpp
│   ├── _caffe.so -> /home/alex/Downloads/hed/lib/_caffe.so
│   ├── classifier.py
│   ├── classifier.pyc
│   ├── detector.py
│   ├── detector.pyc
│   ├── draw.py
│   ├── imagenet
│   │   └── ilsvrc_2012_mean.npy
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── io.py
│   ├── io.pyc
│   ├── net_spec.py
│   ├── net_spec.pyc
│   ├── proto
│   │   ├── caffe_pb2.py
│   │   └── __init__.py
│   ├── pycaffe.py
│   ├── pycaffe.pyc
│   └── test
│       ├── test_layer_type_list.py
│       ├── test_net.py
│       ├── test_net_spec.py
│       ├── test_python_layer.py
│       ├── test_python_layer_with_param_str.py
│       └── test_solver.py
├── classify.py
├── CMakeFiles
│   ├── CMakeDirectoryInformation.cmake
│   ├── progress.marks
│   └── pycaffe.dir
│       ├── build.make
│       ├── caffe
│       │   └── _caffe.cpp.o
│       ├── cmake_clean.cmake
│       ├── CXX.includecache
│       ├── DependInfo.cmake
│       ├── depend.internal
│       ├── depend.make
│       ├── flags.make
│       ├── link.txt
│       └── progress.make
├── cmake_install.cmake
├── CMakeLists.txt
├── detect.py
├── draw_net.py
├── Makefile
├── requirements.txt

2 个答案:

答案 0 :(得分:1)

我已经看过你的上一次编辑了,我必须说在你的上下文中需要更改/篡改python sys.path但这里还不够:你必须重命名其中一个caffe包。 / p>

例如:如果caffe包是名为caffe的目录,其中包含__init__.py个文件,请将caffe重命名为espresso,并在您的代码中简单地:< / p>

import espresso

(如果它只是一个caffe.py文件,请重命名为espresso.py,尽管如果同一目录中还有其他模块可能会出现问题,非常值得一试)

BTW:导入模块时,例如xxx,您可以通过输入以下内容来了解​​它正在使用的完整文件路径:

print(xxx.__file__)

(当你有疑问时很有用)

答案 1 :(得分:0)

好的,所以我找到了最简单的解决方案:我写了两个脚本,一个用于crf-rnn生成blob,我只在整个数据集上运行一次并存储输出。

然后我编写了第二个脚本,每次检测和跟踪对象时都会使用hed边缘检测器。