diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index c53299d265b..319923dd587 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -9,26 +9,16 @@ add_library(pycaffe SHARED ${python_srcs}) caffe_default_properties(pycaffe) set_target_properties(pycaffe PROPERTIES PREFIX "" OUTPUT_NAME "_caffe") target_include_directories(pycaffe PUBLIC ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR}) -target_link_libraries(pycaffe PUBLIC ${Caffe_LINK} ${PYTHON_LIBRARIES}) - -if(UNIX OR APPLE) - set(__linkname "${PROJECT_SOURCE_DIR}/python/caffe/_caffe.so") - add_custom_command(TARGET pycaffe POST_BUILD - COMMAND ln -sf $ "${__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() +target_link_libraries(pycaffe PUBLIC ${Caffe_LINK} ${PYTHON_LIBRARIES} ${Boost_PYTHON_LIBRARY}) # ---[ Install # scripts file(GLOB python_files *.py requirements.txt) -install(FILES ${python_files} DESTINATION python) +install(FILES ${python_files} DESTINATION lib/python3.11/dist-packages) # module install(DIRECTORY caffe - DESTINATION python + DESTINATION lib/python3.11/dist-packages FILES_MATCHING PATTERN "*.py" PATTERN "ilsvrc_2012_mean.npy" @@ -36,5 +26,14 @@ install(DIRECTORY caffe ) # _caffe.so -install(TARGETS pycaffe DESTINATION python/caffe) +install(TARGETS pycaffe DESTINATION lib/python3.11/dist-packages/caffe) + +if(UNIX OR APPLE) + add_custom_target(copy_files ALL + COMMAND ${CMAKE_COMMAND} -E make_directory /usr/local/lib/python3.11/dist-packages/caffe + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/lib/_caffe.so /usr/local/lib/python3.11/dist-packages/caffe/ + COMMENT "Copying files to /usr/local/lib/python3.11/dist-packages" + DEPENDS pycaffe + ) +endif() diff --git a/src/caffe/CMakeLists.txt b/src/caffe/CMakeLists.txt index 4a805568566..eb9647b0f49 100644 --- a/src/caffe/CMakeLists.txt +++ b/src/caffe/CMakeLists.txt @@ -1,3 +1,6 @@ +# Set Python installation directory +set(CMAKE_INSTALL_PYTHONDIR lib/python3.11/dist-packages) + # generate protobuf sources file(GLOB proto_files proto/*.proto) caffe_protobuf_generate_cpp_py(${proto_gen_folder} proto_srcs proto_hdrs proto_python ${proto_files}) @@ -37,14 +40,17 @@ set_target_properties(caffe PROPERTIES ) # ---[ Tests - add_subdirectory(test) +add_subdirectory(test) # ---[ Install install(DIRECTORY ${Caffe_INCLUDE_DIR}/caffe DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(FILES ${proto_hdrs} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/caffe/proto) install(TARGETS caffe caffeproto EXPORT CaffeTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}) +# Generate an __init__.py file to ensure Python packages are recognized file(WRITE ${PROJECT_BINARY_DIR}/__init__.py) list(APPEND proto_python ${PROJECT_BINARY_DIR}/__init__.py) -install(PROGRAMS ${proto_python} DESTINATION python/caffe/proto) + +# Install Python files to the correct directory +install(FILES ${proto_python} DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/caffe/proto) diff --git a/src/caffe/layers/window_data_layer.cpp b/src/caffe/layers/window_data_layer.cpp index 1bf3760e9fd..f41169debe4 100644 --- a/src/caffe/layers/window_data_layer.cpp +++ b/src/caffe/layers/window_data_layer.cpp @@ -290,7 +290,7 @@ void WindowDataLayer::load_batch(Batch* batch) { image_database_cache_[window[WindowDataLayer::IMAGE_INDEX]]; cv_img = DecodeDatumToCVMat(image_cached.second, true); } else { - cv_img = cv::imread(image.first, CV_LOAD_IMAGE_COLOR); + cv_img = cv::imread(image.first, cv::IMREAD_COLOR); if (!cv_img.data) { LOG(ERROR) << "Could not open or find file " << image.first; return; diff --git a/src/caffe/util/io.cpp b/src/caffe/util/io.cpp index 5295d9dddb9..6bf19e4fb04 100644 --- a/src/caffe/util/io.cpp +++ b/src/caffe/util/io.cpp @@ -54,7 +54,7 @@ bool ReadProtoFromBinaryFile(const char* filename, Message* proto) { CHECK_NE(fd, -1) << "File not found: " << filename; ZeroCopyInputStream* raw_input = new FileInputStream(fd); CodedInputStream* coded_input = new CodedInputStream(raw_input); - coded_input->SetTotalBytesLimit(kProtoReadBytesLimit, 536870912); + coded_input->SetTotalBytesLimit(536870912); bool success = proto->ParseFromCodedStream(coded_input); @@ -73,8 +73,8 @@ void WriteProtoToBinaryFile(const Message& proto, const char* filename) { cv::Mat ReadImageToCVMat(const string& filename, const int height, const int width, const bool is_color) { cv::Mat cv_img; - int cv_read_flag = (is_color ? CV_LOAD_IMAGE_COLOR : - CV_LOAD_IMAGE_GRAYSCALE); + int cv_read_flag = (is_color ? cv::IMREAD_COLOR : + cv::IMREAD_GRAYSCALE); cv::Mat cv_img_origin = cv::imread(filename, cv_read_flag); if (!cv_img_origin.data) { LOG(ERROR) << "Could not open or find file " << filename; @@ -179,8 +179,8 @@ cv::Mat DecodeDatumToCVMat(const Datum& datum, bool is_color) { CHECK(datum.encoded()) << "Datum not encoded"; const string& data = datum.data(); std::vector vec_data(data.c_str(), data.c_str() + data.size()); - int cv_read_flag = (is_color ? CV_LOAD_IMAGE_COLOR : - CV_LOAD_IMAGE_GRAYSCALE); + int cv_read_flag = (is_color ? cv::IMREAD_COLOR : + cv::IMREAD_GRAYSCALE); cv_img = cv::imdecode(vec_data, cv_read_flag); if (!cv_img.data) { LOG(ERROR) << "Could not decode datum ";