Статья взята с https://medium.com/@hafiqiqmal93/blurry-image-detection-in-laravel-4c91168e00f1
Важнейший аспект взаимодействия с пользователем: хранение размытых изображений значительно снижает качество веб-сайта или приложения. В этой статье рассказывается, как вы можете обнаруживать размытые изображения и управлять ими с помощью Laravel с помощью Python и OpenCV, гарантируя, что медиафайлы приложения останутся четкими и привлекательными.
Размытые изображения — это больше, чем просто визуальный дискомфорт; они могут подорвать профессионализм вашего веб-сайта или приложения. В электронной коммерции, объявлениях о недвижимости, онлайн-галереях или на любой другой платформе, где качество изображения имеет первостепенное значение, обеспечение ясности имеет решающее значение. Задача заключается в программном обнаружении размытости.
Laravel можно объединить с Python, чтобы создать эффективное решение этой проблемы. Используя проверку файлов Laravel вместе со скриптом Python, использующим OpenCV, разработчики могут легко интегрировать обнаружение размытия в свои процессы загрузки файлов.
Обнаружение размытых изображений включает анализ резкости изображения. Обычно это делается с помощью оператора Лапласа — математического инструмента, используемого при обработке изображений. Оператор Лапласа измеряет скорость изменения интенсивности пикселей, а более низкая дисперсия лапласиана указывает на более размытое изображение.
В Laravel мы можем создать собственное правило проверки для проверки размытости изображения. Это правило выполняет сценарий Python, который использует оператор Лапласа для определения резкости изображения. Давайте разберем процесс:
Установить PIP (Ubuntu):
sudo apt install python3-pip
Установите OpenCV с помощью PIP
pip3 install opencv-python
Возможно, вам стоит рассмотреть возможность установки от имени пользователя **www-data**, если ваше приложение работает под именем **www-data**. Если да, следуйте приведенным ниже командам для установки
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.'));
}
}
}
Интеграция Laravel со скриптом Python для обнаружения размытия работает без проблем, предлагая сложный, но простой подход к обеспечению качества изображения. Вот как разворачивается этот процесс:
Когда пользователь загружает изображение в приложение Laravel, срабатывает пользовательское правило проверки (ImageBlurDetectionRule).
Это правило сначала проверяет, действительно ли загруженный файл является изображением, проверяя его расширение. Если файл не является изображением, процесс останавливается здесь.
Если файл представляет собой изображение, правило вызывает скрипт Python Blur_detection.py. Путь к изображению передается этому сценарию в качестве аргумента командной строки.
Скрипт вычисляет дисперсию лапласиана, которая служит мерой резкости изображения. Меньшая дисперсия указывает на более размытое изображение.
Если изображение слишком размытое (например, дисперсия Лапласа ниже порогового значения), правило проверки не выполняется, и пользователь получает сообщение о том, что изображение размыто и его следует проверить.
Предотвращая загрузку некачественных и размытых изображений, это решение повышает общее удобство использования. Пользователям предлагается загружать только четкие изображения высокого качества, которые соответствуют визуальным стандартам приложения.
Этот процесс легко настраивается. Разработчики могут настроить порог размытия в соответствии с конкретными потребностями своего приложения. Обратите внимание, что порог основан на ваших наблюдениях. Для предварительного использования может потребоваться ML для определения порога. Более того, интеграция Python в Laravel позволяет использовать более совершенные методы обработки изображений, предлагая гибкое и надежное решение для управления качеством изображений.
Включение этой функции в ваше приложение Laravel повышает удобство работы пользователя, предотвращая загрузку изображений низкого качества. Это особенно полезно в сценариях, где четкость изображения имеет решающее значение, например, в онлайн-портфолио, каталогах продуктов или изображениях профилей пользователей.
Порог размытости можно настроить в соответствии с конкретными потребностями. Кроме того, интеграция Python с Laravel обеспечивает гибкость для использования более продвинутых методов обработки изображений, если это необходимо.
Комбинация Laravel и Python для обнаружения размытых изображений — мощное решение. Это не только обеспечивает визуальное качество вашего приложения, но и улучшает общее впечатление от пользователя. Благодаря такому подходу разработчики могут поддерживать высокие стандарты медиаконтента, способствуя более безупречному и профессиональному присутствию в Интернете.
Вы пробовали реализовать это решение в своем проекте Laravel? Поделитесь своим опытом и любыми знаниями, которые вы получили, в комментариях ниже. Давайте продолжим повышать стандарты веб-разработки вместе!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3