Spaces:
				
			
			
	
			
			
		Runtime error
		
	
	
	
			
			
	
	
	
	
		
		
		Runtime error
		
	| # Copyright (c) Meta Platforms, Inc. and affiliates. | |
| # All rights reserved. | |
| # This source code is licensed under the license found in the | |
| # LICENSE file in the root directory of this source tree. | |
| import os | |
| from setuptools import find_packages, setup | |
| # Package metadata | |
| NAME = "SAM-2" | |
| VERSION = "1.0" | |
| DESCRIPTION = "SAM 2: Segment Anything in Images and Videos" | |
| URL = "https://github.com/facebookresearch/sam2" | |
| AUTHOR = "Meta AI" | |
| AUTHOR_EMAIL = "segment-anything@meta.com" | |
| LICENSE = "Apache 2.0" | |
| # Read the contents of README file | |
| with open("README.md", "r", encoding="utf-8") as f: | |
| LONG_DESCRIPTION = f.read() | |
| # Required dependencies | |
| REQUIRED_PACKAGES = [ | |
| "torch>=2.3.1", | |
| "torchvision>=0.18.1", | |
| "numpy>=1.24.4", | |
| "tqdm>=4.66.1", | |
| "hydra-core>=1.3.2", | |
| "iopath>=0.1.10", | |
| "pillow>=9.4.0", | |
| ] | |
| EXTRA_PACKAGES = { | |
| "notebooks": [ | |
| "matplotlib>=3.9.1", | |
| "jupyter>=1.0.0", | |
| "opencv-python>=4.7.0", | |
| "eva-decord>=0.6.1", | |
| ], | |
| "interactive-demo": [ | |
| "Flask>=3.0.3", | |
| "Flask-Cors>=5.0.0", | |
| "av>=13.0.0", | |
| "dataclasses-json>=0.6.7", | |
| "eva-decord>=0.6.1", | |
| "gunicorn>=23.0.0", | |
| "imagesize>=1.4.1", | |
| "pycocotools>=2.0.8", | |
| "strawberry-graphql>=0.239.2", | |
| ], | |
| "dev": [ | |
| "black==24.2.0", | |
| "usort==1.0.2", | |
| "ufmt==2.0.0b2", | |
| "fvcore>=0.1.5.post20221221", | |
| "pandas>=2.2.2", | |
| "scikit-image>=0.24.0", | |
| "tensorboard>=2.17.0", | |
| "pycocotools>=2.0.8", | |
| "tensordict>=0.5.0", | |
| "opencv-python>=4.7.0", | |
| "submitit>=1.5.1", | |
| ], | |
| } | |
| # By default, we also build the SAM 2 CUDA extension. | |
| # You may turn off CUDA build with `export SAM2_BUILD_CUDA=0`. | |
| BUILD_CUDA = os.getenv("SAM2_BUILD_CUDA", "1") == "1" | |
| # By default, we allow SAM 2 installation to proceed even with build errors. | |
| # You may force stopping on errors with `export SAM2_BUILD_ALLOW_ERRORS=0`. | |
| BUILD_ALLOW_ERRORS = os.getenv("SAM2_BUILD_ALLOW_ERRORS", "1") == "1" | |
| # Catch and skip errors during extension building and print a warning message | |
| # (note that this message only shows up under verbose build mode | |
| # "pip install -v -e ." or "python setup.py build_ext -v") | |
| CUDA_ERROR_MSG = ( | |
| "{}\n\n" | |
| "Failed to build the SAM 2 CUDA extension due to the error above. " | |
| "You can still use SAM 2 and it's OK to ignore the error above, although some " | |
| "post-processing functionality may be limited (which doesn't affect the results in most cases; " | |
| "(see https://github.com/facebookresearch/sam2/blob/main/INSTALL.md).\n" | |
| ) | |
| def get_extensions(): | |
| if not BUILD_CUDA: | |
| return [] | |
| try: | |
| from torch.utils.cpp_extension import CUDAExtension | |
| srcs = ["sam2/csrc/connected_components.cu"] | |
| compile_args = { | |
| "cxx": [], | |
| "nvcc": [ | |
| "-DCUDA_HAS_FP16=1", | |
| "-D__CUDA_NO_HALF_OPERATORS__", | |
| "-D__CUDA_NO_HALF_CONVERSIONS__", | |
| "-D__CUDA_NO_HALF2_OPERATORS__", | |
| ], | |
| } | |
| ext_modules = [CUDAExtension("sam2._C", srcs, extra_compile_args=compile_args)] | |
| except Exception as e: | |
| if BUILD_ALLOW_ERRORS: | |
| print(CUDA_ERROR_MSG.format(e)) | |
| ext_modules = [] | |
| else: | |
| raise e | |
| return ext_modules | |
| try: | |
| from torch.utils.cpp_extension import BuildExtension | |
| class BuildExtensionIgnoreErrors(BuildExtension): | |
| def finalize_options(self): | |
| try: | |
| super().finalize_options() | |
| except Exception as e: | |
| print(CUDA_ERROR_MSG.format(e)) | |
| self.extensions = [] | |
| def build_extensions(self): | |
| try: | |
| super().build_extensions() | |
| except Exception as e: | |
| print(CUDA_ERROR_MSG.format(e)) | |
| self.extensions = [] | |
| def get_ext_filename(self, ext_name): | |
| try: | |
| return super().get_ext_filename(ext_name) | |
| except Exception as e: | |
| print(CUDA_ERROR_MSG.format(e)) | |
| self.extensions = [] | |
| return "_C.so" | |
| cmdclass = { | |
| "build_ext": ( | |
| BuildExtensionIgnoreErrors.with_options(no_python_abi_suffix=True) | |
| if BUILD_ALLOW_ERRORS | |
| else BuildExtension.with_options(no_python_abi_suffix=True) | |
| ) | |
| } | |
| except Exception as e: | |
| cmdclass = {} | |
| if BUILD_ALLOW_ERRORS: | |
| print(CUDA_ERROR_MSG.format(e)) | |
| else: | |
| raise e | |
| # Setup configuration | |
| setup( | |
| name=NAME, | |
| version=VERSION, | |
| description=DESCRIPTION, | |
| long_description=LONG_DESCRIPTION, | |
| long_description_content_type="text/markdown", | |
| url=URL, | |
| author=AUTHOR, | |
| author_email=AUTHOR_EMAIL, | |
| license=LICENSE, | |
| packages=find_packages(exclude="notebooks"), | |
| include_package_data=True, | |
| install_requires=REQUIRED_PACKAGES, | |
| extras_require=EXTRA_PACKAGES, | |
| python_requires=">=3.10.0", | |
| # ext_modules=get_extensions(), | |
| cmdclass=cmdclass, | |
| ) | |
