py-faster-rcnn之python引入_caffe.so

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 本文并不给出“编写一个c++代码,然后编译为.so文件,然后在python中引入”的hello world,需要的请参考:http://www.oschina.net/question/437227_124449本文意在强调,python的import,引入的不仅是.

本文并不给出“编写一个c++代码,然后编译为.so文件,然后在python中引入”的hello world,需要的请参考:http://www.oschina.net/question/437227_124449

本文意在强调,python的import,引入的不仅是.py(以及.pyc)文件,还可以引入.so文件

首先明确下,python的模块,是指:一个包含若干.py文件的目录dir,并且包含一个__init__.py(内容可以为空,但不能不存在这个文件)

然后,当你需要使用这个目录dir下的某个文件some.py,那就这样引入:

import dir.some

以及,还可以用更复杂的from xx import yy这种语法。

那么这个import是按照什么路径查找的?上面这个import dir.some是从相对路径(当前路径)查找,有时候还有import cv2这种用法。其实是从python内部的sys.path中查找的。当然,你想添加新的目录到“查找目录”中,要么在python代码中往sys.path上追加东西,要么在shell里设定PYTHONPATH包含你所需要的目录。增加到PYTHONPATH的会放到sys.path中。

比如,我的sys.path

img_b05926c36520e0c4339c20fdfda7ea58.png

可以发现,/usr/lib/python2.7/dist-packages包含在sys.path中。而import cv2所引入的cv2所在路径为/usr/lib/python2.7/dist-packages/cv2.86_64-linux-gnu.so`。咦,怎么不是cv.py呢?总之,在sys.path包含的目录下,找到的不仅仅是.py和.pyc文件,还有众多的.so文件。而且,大都可以引入(import)

所以,要明确一点:import xxx引入的不仅仅是.py(c)文件,还可以是.so文件

================= 分割线 ================

好了,现在应该可以知道,在py-faster-rcnn中,caffe-fast-rcnn/python/caffe/pycaffe.py文件第13行, from ._caffe import SGDSolver 是啥意思,一目了然:将当前目录下_caffe.so引入(也就是caffe-fast-rcnn/python/caffe/_caffe.so)。

另:_caffe.socaffe-fast-rcnn/python/CMakeLists.txt中指定的__linkname:

if(NOT HAVE_PYTHON)
  message(STATUS "Python interface is disabled or not all required dependencies found. Building without it...")
  return()
endif()

include_directories(${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} ${Boost_INCLUDE_DIRS})
file(GLOB_RECURSE python_srcs ${PROJECT_SOURCE_DIR}/python/*.cpp)   #!! GLOB_RECURSE递归查找,其实只找到一个,${PROJECT_SOURCE_DIR}/python/caffe/_caffe.cpp

add_library(pycaffe SHARED ${python_srcs})
target_link_libraries(pycaffe ${Caffe_LINK} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES})
set_target_properties(pycaffe PROPERTIES PREFIX "" OUTPUT_NAME "_caffe")
caffe_default_properties(pycaffe)

if(UNIX OR APPLE)
    set(__linkname "${PROJECT_SOURCE_DIR}/python/caffe/_caffe.so")  #!! _caffe.cpp被链接到_caffe.so文件
    add_custom_command(TARGET pycaffe POST_BUILD
                       COMMAND ln -sf $<TARGET_LINKER_FILE:pycaffe> "${__linkname}"
                       COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/python/caffe/proto
                       COMMAND touch ${PROJECT_SOURCE_DIR}/python/caffe/proto/__init__.py
                       COMMAND cp ${proto_gen_folder}/*.py ${PROJECT_SOURCE_DIR}/python/caffe/proto/
                       COMMENT "Creating symlink ${__linkname} -> ${PROJECT_BINARY_DIR}/lib/_caffe${Caffe_POSTFIX}.so")
endif()

# ---[ Install
file(GLOB files1 *.py requirements.txt)
install(FILES ${files1} DESTINATION python)

file(GLOB files2 caffe/*.py)
install(FILES  ${files2} DESTINATION python/caffe)
install(TARGETS pycaffe  DESTINATION python/caffe)
install(DIRECTORY caffe/imagenet caffe/proto caffe/test DESTINATION python/caffe)

注意到图中关键两行(#!!标出),意思是caffe-fast-rcnn/python/caffe/_caffe.cpp编译成caffe-fast-rcnn/python/caffe/_caffe.so。这之后,就可以用import _caffe引入_caffe.so了。

目录
相关文章
|
存储 人工智能 计算机视觉
终极指南:构建用于检测汽车损坏的Mask R-CNN模型(附Python演练)
计算机视觉领域的应用继续令人惊叹着。从检测视频中的目标到计算人群中的人数,计算机视觉似乎没有无法克服的挑战。
2840 0
|
存储 JSON 计算机视觉
终极指南:构建用于检测汽车损坏的Mask R-CNN模型(附Python演练)
介绍 计算机视觉领域的应用继续令人惊叹着。从检测视频中的目标到计算人群中的人数,计算机视觉似乎没有无法克服的挑战。 这篇文章的目的是建立一个自定义Mask R-CNN模型,可以检测汽车上的损坏区域(参见上面的图像示例)。
3254 0
|
10月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1633 102
|
10月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
503 104
|
10月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
392 103
|
10月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
424 82
|
9月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
520 3
|
9月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
753 3
|
9月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
570 3
|
9月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
791 0

推荐镜像

更多