Usar OpenCV en Rust

Sahil Bhosale 15 febrero 2024
  1. Comandos de óxido
  2. Instalar óxido
  3. Comience con el óxido
  4. Usar OpenCV en Rust
Usar OpenCV en Rust

Rust es el lenguaje de programación que ayuda a escribir software rápido (en términos de velocidad de ejecución) y más auténtico. Se ocupa de la gestión de la memoria con un sistema de tipo sustancial y un modelo de propiedad.

Es un lenguaje compilado estático, lo que significa que si escribimos un programa Rust, podemos compilarlo en un archivo ejecutable binario, y este archivo puede ejecutarse en cualquier otro sistema donde Rust no esté instalado. Esto varía de otros lenguajes ya que necesitan un intérprete para ejecutar el código.

También es bueno para manejar errores, detectar fallas, representar datos y concurrencia. Este idioma no se recomienda para principiantes; debe estar familiarizado con uno o más lenguajes de programación para una mejor comprensión.

Comandos de óxido

Primero, obtengamos una descripción general básica de algunos comandos de Rust:

  • rustc: rustc es un compilador de Rust utilizado para compilar el código de Rust. Toma el código de entrada en Rust y lo compila en código binario/código legible por máquina.
  • rustup: El comando rustup se utiliza para instalar y actualizar Rust.
  • cargo: este es el sistema de compilación y administrador de paquetes de Rust, similar a otros lenguajes como pip para Python, gem para Ruby y npm para JavaScript.

El resto de comandos se pueden consultar mediante cargo en la terminal.

Instalar óxido

Puede omitir este paso si ya ha instalado Rust en su sistema. Si no tiene Rust instalado en su sistema, puede seguir los pasos que se indican a continuación para su sistema:

Para el sistema Linux/Mac

Para instalar Rust en el sistema Unix, copie y pegue el siguiente comando en su terminal y presione Enter.

curl https://sh.rustup.rs -sSf | sh

Este código descargará e instalará Rust en su sistema.

Si pide opciones de instalación, queremos optar por la instalación predeterminada, por lo que seleccionamos Continuar con la instalación (predeterminada) escribiendo 1 y presionando Enter.

Después de la descarga, al final de la pantalla, puede ver "Rust está instalado ahora. ¡Genial!" y debajo de eso, "Presione la tecla Intro para continuar", así que presionamos Enter y cerrar la terminal.

Para verificar si Rust se ha instalado correctamente, podemos abrir nuevamente una nueva terminal y usar el siguiente comando para mostrar la versión de Rust.

rustc --version

Si aparece el número de versión, el hash de confirmación y la fecha de confirmación, entonces podemos decir que Rust se instaló correctamente.

Comience con el óxido

Primero, ve a la terminal y escribe el siguiente código. Recuerde que la ruta donde está instalado Rust debe ser la misma ruta en la terminal:

cargo

Esto mostrará todos los paquetes y comandos utilizados en Rust.

Luego, escriba el siguiente código para crear un nuevo proyecto en Rust usando cargo. Este es un proyecto codificado en binario con el nombre opencv-rust.

cargo new --bin opencv-rust

Ahora, verá el resultado "Created binary (application) opencv-rust package" en su pantalla. Con este comando, hemos creado un nuevo archivo binario llamado opencv-rust.

Ahora, abra este proyecto usando el siguiente comando.

cd opencv-rust

Esto actualizará su ruta y abrirá su proyecto. Ahora, para escribir código para este proyecto, ingrese lo siguiente:

code .

Esto abrirá su código de Visual Studio.

Ahora, ve al archivo main.rs en src a la izquierda. Seleccione y abra main.rs; en el lado derecho, podemos ver un código repetitivo ya presente. Luego, vaya a la terminal VSCode usando Ctrl+Shift+` y ejecute los siguientes comandos.

cargo build
cargo run

Esto compilará paquetes y dependencias y ejecutará el código. En la terminal VSCode, podemos ver la salida del código de la caldera.

Usar OpenCV en Rust

Antes de instalar OpenCV, necesitamos instalar algunos compiladores de paquetes y un sistema de compilación de proyectos para OpenCV. Para instalar, necesitamos instalar Homebrew o brew, un administrador de paquetes para mac. Podemos instalar brew usando este enlace.

Después de esto, ahora instalamos los siguientes paquetes y creamos sistemas para OpenCV uno por uno. Primero está el pkg-config, una herramienta utilizada para compilar bibliotecas.

brew install pkg-config

En segundo lugar, está instalando el sistema CMake, que es un sistema de compilación que brinda soporte para compilar bibliotecas nativas. Para esto, siga el siguiente código.

brew install cmake

Ahora instale el paquete OpenCV y llvm, que incluye todas las herramientas, bibliotecas y archivos de encabezado necesarios para procesar OpenCV y convertirlo en archivos de objetos.

brew install --debug llvm-dev
brew install libopencv-dev

libopencv-dev instala bibliotecas OpenCV. Después de este paso, es fundamental exportar la ruta del entorno.

Necesitamos crear un programa OpenCV para verificar si OpenCV funciona correctamente. Mirando al lado izquierdo, podemos encontrar el archivo Cargo.toml. Haga clic en él y el archivo se abrirá en el lado derecho, luego las dependencias a continuación.

En dependencias, agregue el siguiente código.

opencv = "0.73.0"
bytes = "1"
anyhow = "1"

Para encontrar el nombre de la versión, podemos visitar el sitio web crates.io, buscar OpenCV y encontrar la última versión disponible. Al escribir este artículo, encontramos que la última versión era 0.73.0, por lo que la actualizamos en VSCode.

Ahora, diríjase hacia el archivo main.rs en src y escriba el programa simple OpenCV-Rust a continuación.

Este es un código Rust simple que voltea una imagen horizontalmente usando OpenCV.

Fragmento de código - (óxido):

use anyhow::Result;
use opencv::{
    core::{self, Mat, Vector},
    imgcodecs,
};

fn main() -> Result<()> {
    let source_img = imgcodecs::imread("car.png", imgcodecs::IMREAD_UNCHANGED)?;

    // Flipping image horizontally
    let mut destination_arr = Mat::default();
    core::flip(&source_img, &mut destination_arr, 1)?;

    // Creating an output image
    let arguments: Vector<i32> = Vector::new();
    imgcodecs::imwrite("final-output.png", &destination_arr, &arguments)?;
    Ok(())
}

Primero, hemos importado algunos métodos de las bibliotecas anyhow y opencv: Result, Mat, Vector e imgcodecs como se muestra arriba. Luego, hemos creado una función main que devolverá un Resultado.

Estamos usando Resultado de la biblioteca de todos modos para manejar automáticamente los errores en la salida.

Para leer la imagen fuente dentro de nuestro código Rust, tenemos que usar el imread de OpenCV de los imgcodecs y almacenarlo dentro de la variable source_img. Para este ejemplo, usaremos una imagen de automóvil cuyo nombre de archivo y extensiones son car.png.

Ahora que hemos leído la imagen, tenemos que crear un destination_Arr dentro del cual pasaremos el Mat, un arreglo multicanal. Para voltear la imagen horizontalmente, tenemos que usar el flip de la biblioteca OpenCV y pasar el source_img, destination_arr y 1 al método flip.

El último parámetro, 1, volteará la imagen horizontalmente. Si desea voltear la imagen verticalmente, puede pasar 0 en lugar de 1.

Para guardar la imagen invertida como salida, tenemos que usar el método imwrite de OpenCV. Aquí, puede dar cualquier nombre al archivo de salida pasando el nombre del archivo al primer parámetro.

Finalmente, estamos listos para ejecutar el código. Tenemos que ejecutar los dos comandos siguientes para compilar y ejecutar el código.

cargo build
cargo run

Producción:

Salida de óxido de OpenCV

Esto compilará y ejecutará el código de Rust. Y el resultado de este comando se muestra arriba.

Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn