Article provenant de https://medium.com/@hafiqiqmal93/blurry-image-detection-in-laravel-4c91168e00f1
Aspect crucial de l'expérience utilisateur, le stockage d'images floues nuit considérablement à la qualité d'un site Web ou d'une application. Cet article explique comment détecter et gérer les images floues à l'aide de Laravel avec l'aide de Python et OpenCV, garantissant que les médias de l'application restent nets et attrayants.
Les images floues sont plus qu'une simple nuisance visuelle ; ils peuvent nuire au professionnalisme de votre site Web ou de votre application. Dans le commerce électronique, les annonces immobilières, les galeries en ligne ou toute plateforme où la qualité de l’image est primordiale, garantir la clarté est essentiel. Le défi réside dans la détection du flou par programmation.
Laravel peut être associé à Python pour créer une solution efficace à ce problème. En tirant parti de la validation de fichiers de Laravel ainsi que d'un script Python utilisant OpenCV, les développeurs peuvent intégrer de manière transparente la détection de flou dans leurs processus de téléchargement de fichiers.
La détection d’images floues consiste à analyser la netteté de l’image. Cela se fait généralement à l'aide de l'opérateur laplacien, un outil mathématique utilisé dans le traitement d'images. L'opérateur laplacien mesure la vitesse à laquelle l'intensité des pixels change, et une variance plus faible du laplacien indique une image plus floue.
Dans Laravel, nous pouvons créer une règle de validation personnalisée pour vérifier le flou de l'image. Cette règle exécute un script Python qui utilise l'opérateur laplacien pour déterminer la netteté de l'image. Décomposons le processus :
Installer PIP (Ubuntu) :
sudo apt install python3-pip
Installer OpenCV à l'aide de PIP
pip3 install opencv-python
Vous souhaiterez peut-être envisager d'installer sous un utilisateur **www-data** si votre application s'exécute sous **www-data**. Si oui, suivez les commandes ci-dessous pour installer
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.'));
}
}
}
L'intégration de Laravel avec un script Python pour la détection du flou fonctionne de manière transparente, offrant une approche sophistiquée mais simple pour garantir la qualité de l'image. Voici comment se déroule le processus :
Lorsqu'un utilisateur télécharge une image sur l'application Laravel, la règle de validation personnalisée (ImageBlurDetectionRule) est déclenchée.
Cette règle vérifie d'abord si le fichier téléchargé est bien une image en vérifiant son extension. Si le fichier n'est pas une image, le processus s'arrête ici.
Si le fichier est une image, la règle appelle alors un script Python, blur_detection.py. Le chemin de l'image est transmis à ce script en tant qu'argument de ligne de commande.
Le script calcule la variance du Laplacien, qui sert de mesure de la netteté de l'image. Une variance plus faible indique une image plus floue.
Si l'image est trop floue (ex : la variance laplacienne est inférieure au seuil), la règle de validation échoue et l'utilisateur reçoit un message indiquant que l'image est floue et doit être vérifiée.
En empêchant le téléchargement d'images floues de mauvaise qualité, cette solution améliore l'expérience utilisateur globale. Les utilisateurs sont invités à télécharger uniquement des images claires et de haute qualité, ce qui préserve le niveau visuel de l'application.
Ce processus est hautement personnalisable. Les développeurs peuvent ajuster le seuil de flou en fonction des besoins spécifiques de leur application. Notez que le seuil est basé sur votre observation. Pour une utilisation avancée, le ML peut être nécessaire pour déterminer le seuil. De plus, l'intégration de Python dans Laravel permet une expansion ultérieure vers des techniques de traitement d'image plus avancées, offrant une solution flexible et robuste pour gérer la qualité de l'image.
L'intégration de cette fonctionnalité dans votre application Laravel améliore l'expérience utilisateur en empêchant le téléchargement d'images de mauvaise qualité. Ceci est particulièrement utile dans les scénarios où la clarté de l'image est essentielle, comme les portefeuilles en ligne, les catalogues de produits ou les photos de profil utilisateur.
Le seuil de flou peut être ajusté en fonction des besoins spécifiques. De plus, l'intégration de Python dans Laravel offre la flexibilité d'incorporer des techniques de traitement d'image plus avancées si nécessaire.
La combinaison de Laravel et Python pour détecter les images floues est une solution puissante. Cela garantit non seulement la qualité visuelle de votre application, mais améliore également l’expérience utilisateur globale. Grâce à cette approche, les développeurs peuvent maintenir des normes élevées en matière de contenu multimédia, contribuant ainsi à une présence en ligne plus soignée et professionnelle.
Avez-vous essayé d'implémenter cette solution dans votre projet Laravel ? Partagez vos expériences et toutes les idées que vous avez acquises dans les commentaires ci-dessous. Continuons ensemble à élever les normes du développement Web !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3