Imagen de boceto a lápiz con Python: hacia la IA

Estás leyendo la publicación: Imagen de boceto a lápiz con Python: hacia la IA

Publicado originalmente en Hacia la IA, la empresa líder mundial en noticias y medios de IA y tecnología. Si está creando un producto o servicio relacionado con la IA, lo invitamos a considerar convertirse en patrocinador de la IA. En Hacia la IA, ayudamos a escalar las empresas emergentes de IA y tecnología. Permítanos ayudarlo a dar rienda suelta a su tecnología a las masas.

En este tutorial, le mostraré cómo podemos crear una imagen de boceto de “lápiz” usando Python con solo unas pocas líneas de código.

Siempre me ha fascinado la visión por computadora, especialmente su poder para manipular imágenes en la multiplicación rápida de matrices. Una imagen es una matriz de números en Python. Entonces podemos hacer varias manipulaciones de matrices para obtener resultados interesantes. Entonces, en los tutoriales anteriores, aprendimos cómo separarnos del fondo, detectar rostros y hacer todo esto en tiempo real. En este tutorial, le mostraré cómo podemos crear una imagen de boceto de “lápiz” con solo unas pocas líneas de código.

El proceso es bastante simple:

  1. Escala de grises la imagen;
  2. Invierte los colores de la misma;
  3. Desenfoca la imagen invertida;
  4. Aplique la mezcla Sobreexponer a la imagen borrosa y en escala de grises.

Podemos elegir cualquier imagen que queramos para esto. Pero demostraré cómo crear un objeto que podamos aplicar a cualquier imagen, video o transmisión en tiempo real. Haré esto para ampliar la funcionalidad del proyecto de eliminación de fondo en el que estoy trabajando en esta serie de tutoriales.

Importar bibliotecas

OpenCV y Numpy son las únicas bibliotecas que se necesitan para el proyecto. Los importamos con las siguientes dos líneas de código:

🔥 Recomendado:  Cómo cancelar su suscripción con creadores de sitios web comunes

Leer foto

Este es uno de los comandos que se pueden usar para leer una imagen almacenada en un disco usando OpenCV:

Este comando lee el archivo “image.png” ubicado en la carpeta actual del disco y almacenado en la memoria como un cuadro. Pero como mencioné, esto puede ser una secuencia de cuadros o una imagen cargada por otros métodos.

Mostrar imagen usando OpenCV

El siguiente paso importante al crear un boceto de este tipo en nuestro proyecto es saber cómo ver rápidamente los resultados sin guardarlos en el disco. Los siguientes comandos de OpenCV se pueden usar para mostrar la imagen en la pantalla:

Cuando se ejecutan estas líneas, la imagen se abrirá en una nueva ventana con un título como ‘imagen’:

escala de grises la imagen

Primero, lo que debemos hacer con nuestra imagen es escalarla en grises (convertirla a blanco y negro). Podemos hacerlo con la biblioteca cv2 o numpy. Pero numpy no tiene ninguna función integrada para la escala de grises. Pero podemos convertir fácilmente nuestra imagen a escala de grises, conociendo las matemáticas detrás de eso. Pero sin entrar en las matemáticas, la fórmula será la siguiente:

Aquí estamos multiplicando los canales de imagen RGB con los valores apropiados y concatenándolos en un solo canal. Por eso, necesitamos volver a la imagen de 3 capas; lo hacemos con la función de pila numpy. Esto es lo que obtenemos:

Invertir la imagen

Ahora tenemos que invertir la imagen. Cuando digo invertir, quiero decir que el blanco debe convertirse en negro y viceversa. Es tan simple como simplemente restar 255 de cada píxel de la imagen. Porque, por defecto, las imágenes son de 8 bits y tienen un máximo de 256 tonos:

🔥 Recomendado:  El Apple Watch acaba de recibir ChatGPT con esta aplicación: cómo probarlo ahora

Cuando mostramos la imagen invertida o la guardamos en un disco, recibimos la siguiente imagen:

desenfocar la imagen

Ahora necesitamos desenfocar la imagen invertida. El desenfoque se realiza aplicando un filtro gaussiano a la imagen invertida. Lo más importante aquí es la varianza de la función gaussiana o sigma. A medida que aumenta sigma, la imagen se vuelve más borrosa. Sigma controla la cantidad de dispersión y, por lo tanto, el grado de desenfoque. Se puede elegir un valor adecuado de sigma por prueba y error:

Los resultados de la imagen borrosa son los siguientes:

Esquivar y fusionar

Sobreexposición de color el modo de fusión divide la capa inferior de la capa superior invertida. Esto ilumina la capa inferior dependiendo del valor de la capa superior. Tenemos una imagen borrosa que resalta los bordes más llamativos.

¡Y eso es! Aquí están los resultados:

Aquí está el código completo del boceto a lápiz para el objeto:

Es posible adivinar que no tenemos mucho espacio para jugar aquí aparte del parámetro blur_sigma durante el desenfoque. Agregué una función adicional para enfocar la imagen para resolver este problema. Los resultados de la nitidez se pueden ver en este GIF animado:

Es muy similar al proceso de desenfoque, excepto que ahora, en lugar de crear un núcleo para promediar la intensidad de cada píxel, estamos creando un núcleo que hará que la intensidad del píxel sea más alta y, por lo tanto, más visible para el ojo humano.

Aquí hay un código básico sobre cómo usar el objeto PencilSketch para nuestra imagen de porche:

🔥 Recomendado:  IA generativa: el futuro de la inteligencia artificial (IA) | por Roberto Iriondo

Los resultados del código anterior se puede ver lo siguiente:

Conclusión:

Fue un tutorial bastante bueno que no requirió ningún conocimiento profundo de Python para lograr este increíble estilo de boceto de “lápiz” de cualquier imagen. Mientras usa mis archivos de proyecto de GitHub y el objeto Engine, puede aplicar fácilmente este efecto a cualquier imagen, video o transmisión de cámara web en tiempo real.

En el próximo tutorial, cubriré algo aún más emocionante. Estoy pensando en el reconocimiento facial porque ya tenemos implementada la detección facial. Lo que queda: identificar a una persona en esa cara.

¡Gracias por leer! Como siempre, todo el código dado en este tutorial se puede encontrar en mi GitHub página y es de uso gratuito!


Imagen de dibujo a lápiz con Python se publicó originalmente en Hacia la IA en Medium, donde las personas continúan la conversación resaltando y respondiendo a esta historia.

Publicado a través de Hacia la IA