<jupyter_start><jupyter_text>Entorno de trabajo Puesta en marcha del Python, jupyter notebooks y la versión de OpenCV que necesitamos (no todas nos sirven).  Instalación Clonamos [el repositorio](https://github.com/albertoruiz/umucv) con el material de la asignatura:    git clone https://github.com/albertoruiz/umucv.git    En días sucesivos lo iremos actualizando con    git pull    Otra posibilidad es descargar solo [la versión más reciente](https://github.com/albertoruiz/umucv/archive/master.zip):    wget https://github.com/albertoruiz/umucv/archive/master.zip    unzip master.zip  LINUX Descargamos [miniconda](https://conda.io/miniconda.html) para nuestro sistema con python 3 y lo instalamos.    bash Miniconda3-latest-Linux-x86_64.shNos preguntará si queremos inicializar la instalación (sí) y la forma de configurarlo para que los terminales no arranquen automáticamente dentro del entorno base.Una vez instalado hay que cerrar el terminal y abrir otro. Comprobamos que está bien instalado:    conda activate base    (base) usuario @ maquina> python    Python 3.7 Creamos un [entorno de conda](https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html) con todo lo necesario. Hay varias formas de hacer esto.1) La más sencilla es descargarnos una versión completa consistente que incluye todos los paquetes necesarios:    wget https://robot.inf.um.es/material/va/via-local.zip        unzip via-local.zip        cd via-local    conda create --name via --file visionreqlocal.txt        conda activate via        bash install-pip.shSi todo ha ido bien puedes borrar el archivo `via-local.zip` y el directorio `via-local` descomprimido.Debe funcionar todo sin mayores problemas, pero tiene versiones de los paquetes que no son recientes y es más difícil actualizarla. Podemos añadir al final de nuestro `.bashrc` una orden `conda activate via` para que los terminales que abramos estén automáticamente en el entorno deseado. 2) Una opción mejor es compilar OpenCV. Requiere más tiempo pero es recomendable para tener un entorno más completo y actualizado.    wget https://robot.inf.um.es/material/va/opencv.tar.gz        tar -xzf opencv.tar.gzHace falta instalar algunos paquetes con apt-get. Se hace con un script incluido en el tgz:    cd opencv        bash packagesEn ubuntus recientes es necesario hacer antes lo siguiente:    sudo add-apt-repository ppa:rock-core/qt4     sudo apt update Creamos el entorno:    conda create --name viacv        conda activate viacv        conda install numpy    Lanzamos el script de configuración incluido en el tgz:         cd build        bash opencvconfigRevisamos la salida para ver si están las opciones deseadas: en la opción Video I/O debe salir YES en FFMPEG y en v4l/v4l2. (Para compilarlo con CUDA consulta al profesor).    make -j4        make install    Comprobamos que se ha instalado correctamente:    cd    python        import cv2        cv2.__version__    Y completamos la instalación con    pip install pyqtgraph pyqt5 pyopengl    pip install dlib    pip install http://robot.inf.um.es/material/umucv.tar.gz        pip install matplotlib Igual que en el caso anterior, podemos añadir al final de nuestro `.bashrc` una orden `conda activate viacv`   para que los terminales que abramos estén automáticamente en el entorno deseado. Se recomienda no instalar jupyter en este entorno porque puede interferir con las versiones  de qt que acabamos de instalar. Es mejor utilizar otro entorno sencillo para trabajar con los notebooks y reservar viacv para los "programas" interactivos.     conda deactivate viacv    conda activate base    conda install jupyter opencv 3) Descargamos un miniconda especialImportante: dentro de un usuario alumno (en /home/alumno, para que funcione también en el lab)    wget http://robot.inf.um.es/material/va/mcvia.tar.gz    unzip mcvia.tar.gz(Si queremos añadir paquetes lo hacemos como alumno)Añadimos en .bashrc de nuestro usuario:    export PATH=/home/alumno/mcvia/envs/via/bin:$PATH 3) Una imagen docker (ver ../docker/README)     cd docker    ./run  WINDOWSInstalamos [anaconda completo](https://www.anaconda.com/distribution/download-section).En anaconda prompt ejecutamos    python -m pip install opencv-python        python -m pip install http://robot.inf.um.es/material/umucv.tar.gz      python -m pip install pyqtgraph    python -m pip install pyopengl Para comprobar que la instalación es correcta abrimos un nuevo anaconda prompt, nos cambiamos al subdirectorio de la asignatura y ejecutamos algunos programa de prueba:    cd ubicacion/del/repositorio/umucv/code    python webcam.py    python stream.py    python stream.py --dev=../images/rot4.mjpg    python surface.py     Otra posibilidad es utilizar el Subsistema Linux de Windows (WSL), como se explica en [este notebook](WSL.ipynb) realizado por vuestro compañero <NAME>.  MACLas instrucciones de instalación se explican en [este notebook](MAC.ipynb) realizado por vuestro compañero <NAME>.  MYBINDER Hemos creado una máquina virtual con los paquetes necesarios. A veces tarda un rato en arrancar y si te despistas un poco se cierra la sesión, pero es una herramienta útil para experimentar en un entorno reproducible.[VIA en mybinder](https://mybinder.org/v2/gh/albertoruiz/generic/master?filepath=Visi%C3%B3n_Artificial.ipynb)  COLAB Podemos abrir los notebooks en las máquinas de google, que tienen instalados casi todos los paquetes necesarios. (Hay que descargar cada vez las imágenes de ejemplo y otros archivos auxiliares o leerlos de ubicaciones remotas.) Son especialmente útiles para experimentos de Deep Learning porque permiten utilizar GPUs y TPUs.[https://colab.research.google.com/github/albertoruiz/umucv/blob/master/notebooks/VIA.ipynb](https://colab.research.google.com/github/albertoruiz/umucv/blob/master/notebooks/VIA.ipynb)  Prueba rápida En primer lugar importamos las bibliotecas necesarias.<jupyter_code>%matplotlib inline

import numpy             as np
import cv2               as cv
import matplotlib.pyplot as plt

from skimage import io<jupyter_output><empty_output><jupyter_text>Para importar una imagen podríamos usar `imread` de opencv. El problema es que intercambia los canales R y B:<jupyter_code>img = cv.imread('../images/coins.png')
print(type(img))
print(img.shape)
#print(img)
plt.imshow(img)
plt.axis('off');<jupyter_output><empty_output><jupyter_text>Para arreglarlo usamos la función que convierte espacios de color.<jupyter_code>plt.imshow(cv.cvtColor(img,cv.COLOR_BGR2RGB));<jupyter_output><empty_output><jupyter_text>Podemos intercambiar los canales aprovechando las posibilidades de indexado de arrays de numpy:<jupyter_code>plt.imshow(img[:50,400:500,[2,1,0]]);<jupyter_output><empty_output><jupyter_text>Pero es más sencillo usar `imread` de skimage, que además puede leer de url remotas.<jupyter_code>path = "https://github.com/albertoruiz/umucv/raw/master/images/"

view = io.imread(path+"plate.jpg")
plt.imshow(view);
plt.imshow(io.imread("../images/monty-python1.jpg"));<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.07174314533314391, 'fraction_numerical': 0.005398494104276176, 'mean_word_length': 4.305199698568199, 'pattern_counts': {'":': 0, '<': 23, '<?xml version=': 0, '>': 24, 'https://': 13, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '299161', 'license': 'BSD-3-Clause', 'n_tokens_mistral': 2343, 'n_tokens_neox': 2283, 'n_words': 771, 'path': 'notebooks/install.ipynb', 'repo_name': 'smitexx/umucv', 'size': '7072'}