Artículo originado en https://medium.com/@hafiqiqmal93/blurry-image-detection-in-laravel-4c91168e00f1
Aspecto crucial de la experiencia del usuario: almacenar imágenes borrosas resta significativamente la calidad de un sitio web o aplicación. Este artículo profundiza en cómo detectar y gestionar imágenes borrosas usando Laravel con la ayuda de Python y OpenCV, garantizando que los medios de la aplicación se mantengan nítidos y atractivos.
Las imágenes borrosas son más que una simple molestia visual; pueden socavar el profesionalismo de su sitio web o aplicación. En el comercio electrónico, listados de bienes raíces, galerías en línea o cualquier plataforma donde la calidad de la imagen sea primordial, garantizar la claridad es esencial. El desafío radica en detectar la borrosidad mediante programación.
Laravel se puede combinar con Python para crear una solución eficaz para este problema. Al aprovechar la validación de archivos de Laravel junto con un script de Python que utiliza OpenCV, los desarrolladores pueden integrar perfectamente la detección de desenfoque en sus procesos de carga de archivos.
La detección de imágenes borrosas implica analizar la nitidez de la imagen. Esto normalmente se hace mediante el operador laplaciano, una herramienta matemática utilizada en el procesamiento de imágenes. El operador laplaciano mide la velocidad a la que cambia la intensidad de los píxeles y una variación más baja del laplaciano indica una imagen más borrosa.
En Laravel, podemos crear una regla de validación personalizada para verificar si la imagen está borrosa. Esta regla ejecuta un script de Python que utiliza el operador laplaciano para determinar la nitidez de la imagen. Analicemos el proceso:
Instalar PIP (Ubuntu):
sudo apt install python3-pip
Instalar OpenCV usando PIP
pip3 install opencv-python
Es posible que desees considerar instalar bajo el usuario **www-data** si tu aplicación se ejecuta bajo **www-data**. En caso afirmativo, siga los siguientes comandos para instalar
sudo mkdir /var/www/.local
sudo mkdir /var/www/.cache
sudo chown www-data.www-data /var/www/.local
sudo chown www-data.www-data /var/www/.cache
sudo -H -u www-data pip3 install opencv-python
import sys
import cv2def get_image_laplacian_value(image_path):
image = cv2.imread(image_path)
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
return cv2.Laplacian(gray_image, cv2.CV_64F).var()if name == "main":
if len(sys.argv) != 2:
sys.exit(1)
image_path = sys.argv[1]
laplacian_value = get_image_laplacian_value(image_path)
print(laplacian_value)
class ImageBlurDetectionRule implements ValidationRule
{
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if ( ! $value instanceof UploadedFile) {
return;
}
// ignore if not image
if ('' !== $value->getPath() && ! in_array($value->guessExtension(), ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp'])) {
return;
}
// get real path for the file
$path = $value->getRealPath();
$command = escapeshellcmd(config('image.python_path') . " blur_detection.py '{$path}'");
$result = Process::path(base_path('scripts'))->run($command);
if ( ! $result->successful()) {
return;
}
if (trim($result->output()) $fail(__('Blur image are not accepted. Please make sure your :attribute image is clearly visible.'));
}
}
}
La integración de Laravel con un script de Python para la detección de desenfoque funciona de manera perfecta, ofreciendo un enfoque sofisticado pero sencillo para garantizar la calidad de la imagen. Así es como se desarrolla el proceso:
Cuando un usuario carga una imagen en la aplicación Laravel, se activa la regla de validación personalizada (ImageBlurDetectionRule).
Esta regla primero verifica si el archivo cargado es realmente una imagen verificando su extensión. Si el archivo no es una imagen, el proceso se detiene aquí.
Si el archivo es una imagen, la regla llama a un script de Python, blur_detection.py. La ruta de la imagen se pasa a este script como argumento de línea de comando.
El guión calcula la variación del laplaciano, que sirve como medida de la nitidez de la imagen. Una variación más baja indica una imagen más borrosa.
Si la imagen está demasiado borrosa (por ejemplo, la varianza laplaciana está por debajo del umbral), la regla de validación falla y el usuario recibe un mensaje que indica que la imagen está borrosa y debe verificarse.
Al evitar la carga de imágenes borrosas y de baja calidad, esta solución mejora la experiencia general del usuario. Se solicita a los usuarios que carguen únicamente imágenes claras y de alta calidad, lo que mantiene el estándar visual de la aplicación.
Este proceso es altamente personalizable. Los desarrolladores pueden ajustar el umbral de borrosidad según las necesidades específicas de su aplicación. Tenga en cuenta que el umbral se basa en su observación. Para un uso avanzado, es posible que necesite ML para determinar el umbral. Además, la integración de Python en Laravel permite una mayor expansión hacia técnicas de procesamiento de imágenes más avanzadas, ofreciendo una solución flexible y sólida para gestionar la calidad de la imagen.
Incorporar esta funcionalidad en su aplicación Laravel mejora la experiencia del usuario al evitar la carga de imágenes de baja calidad. Esto es particularmente útil en escenarios donde la claridad de la imagen es fundamental, como portafolios en línea, catálogos de productos o imágenes de perfil de usuario.
El umbral de borrosidad se puede ajustar según las necesidades específicas. Además, la integración de Python dentro de Laravel ofrece flexibilidad para incorporar técnicas de procesamiento de imágenes más avanzadas si es necesario.
La combinación de Laravel y Python para detectar imágenes borrosas es una solución poderosa. No sólo garantiza la calidad visual de su aplicación, sino que también mejora la experiencia general del usuario. Con este enfoque, los desarrolladores pueden mantener altos estándares para el contenido multimedia, lo que contribuye a una presencia en línea más pulida y profesional.
¿Has intentado implementar esta solución en tu proyecto Laravel? Comparta sus experiencias y cualquier conocimiento que haya obtenido en los comentarios a continuación. ¡Sigamos elevando juntos los estándares del desarrollo web!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3