Guía paso a paso para compilar e instalar OpenCV de forma nativa en un Mac con chip Apple Silicon (M1/M2). En general basta con pip install opencv-python, pero cuando ese paquete no trae todos los módulos que necesitas (por ejemplo los módulos "non-free" o los de opencv_contrib), o simplemente quieres exprimir el rendimiento nativo de ARM64, hay que compilarlo desde el código fuente — para eso usamos Miniforge, que da paquetes de Python compilados nativamente para Apple Silicon.
Pasos a seguir:
- Homebrew y Xcode Command Line Tools
- Instalar Miniforge
- Crear un entorno virtual con Python 3.8
- Instalar las dependencias necesarias
- Compilar e instalar OpenCV
- Probar OpenCV
Paso 1: Homebrew y Xcode Command Line Tools
Si no tienes Homebrew instalado:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Luego instala wget y cmake:
brew install wget cmake
Y si no tienes las Xcode Command Line Tools:
xcode-select --install
Paso 2: Instalar Miniforge
Instala Miniforge para arm64 (Apple Silicon) desde su repositorio en GitHub. Miniforge permite instalar paquetes de Python compilados nativamente para Apple Silicon.
Por defecto activa un entorno base; puedes desactivar eso con:
conda config --set auto_activate_base false
Paso 3: Crear un entorno virtual
Crea un entorno llamado testcv con Python 3.8:
conda create --name testcv python=3.8
conda activate testcv
Paso 4: Instalar dependencias
Como vamos a compilar OpenCV de forma nativa, necesitamos la versión de Numpy compatible con Apple Silicon:
conda install -c apple tensorflow-deps
Paso 5: Compilar e instalar OpenCV
Descarga OpenCV y OpenCV Contrib (crea antes una carpeta de trabajo, por ejemplo test_opencv):
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.0.zip
unzip opencv.zip && unzip opencv_contrib.zip
cd opencv-4.5.0
mkdir build && cd build
Activa tu entorno conda antes de compilar:
conda activate testcv
Necesitas la ruta a tu entorno (puedes obtenerla con echo $CONDA_PREFIX) para indicarle a CMake dónde está tu Python y los módulos de opencv_contrib. Por ejemplo, si tu entorno vive en /ruta/a/tu/miniforge3/envs/testcv, usarías esa misma ruta en las variables de abajo — reemplázala por la tuya:
cmake \
-DCMAKE_SYSTEM_PROCESSOR=arm64 \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DWITH_OPENJPEG=OFF \
-DWITH_IPP=OFF \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=/ruta/a/tu/miniforge3/envs/testcv/opencv_contrib/modules \
-D PYTHON3_EXECUTABLE=/ruta/a/tu/miniforge3/envs/testcv/bin/python3.8 \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D BUILD_EXAMPLES=ON ..
La compilación con CMake no toma mucho tiempo. Luego corre make (el número después de -j indica cuántos núcleos usar, ajústalo según tu CPU):
make -j8
Esto puede tomar varios minutos. Finalmente instala:
sudo make install
Enlazar OpenCV a tu entorno virtual (sym-link)
Ubica el archivo .so generado durante la compilación:
mdfind cv2.cpython
Deberías ver algo como /ruta/a/tu/miniforge3/envs/testcv/opencv/build/lib/python3/cv2.cpython-38-darwin.so (verifica la ruta real en tu sistema antes de continuar).
Ve al directorio site-packages de tu entorno:
cd /ruta/a/tu/miniforge3/envs/testcv/lib/python3.8/site-packages
Y crea el enlace simbólico:
ln -s /ruta/a/tu/miniforge3/envs/testcv/opencv/build/lib/python3/cv2.cpython-38-darwin.so .
Verifica que todo quedó bien, en una terminal nueva:
conda activate testcv
python3
import cv2
cv2.__version__
Paso 6: Probar OpenCV
Crea un archivo main.py con el siguiente código (usa una foto cualquiera de prueba):
import cv2
image = cv2.imread('grogu.jpeg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Original image', image)
cv2.imshow('Gray image', gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
python3 main.py
El programa simplemente convierte la imagen a escala de grises y la muestra en pantalla.
Paso adicional: desinstalar
Si necesitas desinstalar OpenCV, desde el directorio build:
sudo make uninstall
conda deactivate
conda remove --name testcv --all
Para validar la instalación en cualquier momento:
python -c "import cv2; print(cv2.getBuildInformation())"