Laravel 中的模糊影像偵測

Susan Sarandon
發布: 2024-10-06 14:10:29
原創
328 人瀏覽過

Blurry Image Detection in Laravel

Article originated from https://medium.com/@hafiqiqmal93/blurry-image-detection-in-laravel-4c91168e00f1

Crucial aspect of user experience, storing blurry images is significantly detract from the quality of a website or application. This article delves into how you can detect and manage blurry images using Laravel with help of Python and OpenCV, ensuring the application’s media remains sharp and engaging.

The Challenge of Blurry Images

Blurry images are more than just a visual nuisance; they can undermine the professionalism of your website or app. In e-commerce, real estate listings, online galleries or any platform where image quality is paramount, ensuring clarity is essential. The challenge lies in detecting blurriness programmatically.

Laravel to the Rescue

Laravel can be paired with Python to create an effective solution for this problem. By leveraging Laravel’s file validation alongside a Python script utilizing OpenCV, developers can seamlessly integrate blur detection into their file upload processes.

Blurriness Detection Concept

The detection of blurry images involves analyzing the image’s sharpness. This is typically done using the Laplacian operator, a mathematical tool used in image processing. The Laplacian operator measures the rate at which pixel intensity changes, and a lower variance of the Laplacian indicates a blurrier image.

Implementing in Laravel

In Laravel, we can create a custom validation rule to check for image blurriness. This rule executes a Python script that uses the Laplacian operator to determine the sharpness of the image. Let’s break down the process:

Installation OpenCV Python:

Install PIP (Ubuntu) :


sudo apt install python3-pip


登入後複製

Install OpenCV using PIP


pip3 install opencv-python


登入後複製

You might want to consider to install under **www-data** user if your application runs under **www-data**. If Yes, follow below commands to install


<p>sudo mkdir /var/www/.local<br>
sudo mkdir /var/www/.cache<br>
sudo chown www-data.www-data /var/www/.local<br>
sudo chown www-data.www-data /var/www/.cache<br>
sudo -H -u www-data pip3 install opencv-python</p>

登入後複製




Create Python Script



<p>import sys<br>
import cv2</p>

<p>def get_image_laplacian_value(image_path):<br>
    image = cv2.imread(image_path)<br>
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)<br>
    return cv2.Laplacian(gray_image, cv2.CV_64F).var()</p>

<p>if <strong>name</strong> == "<strong>main</strong>":<br>
    if len(sys.argv) != 2:<br>
        sys.exit(1)<br>
    image_path = sys.argv[1]<br>
    laplacian_value = get_image_laplacian_value(image_path)<br>
    print(laplacian_value)</p>

登入後複製




Create Laravel Rule:



<p>class ImageBlurDetectionRule implements ValidationRule<br>
{<br>
    public function validate(string $attribute, mixed $value, Closure $fail): void<br>
    {<br>
        if ( ! $value instanceof UploadedFile) {<br>
            return;<br>
        }<br>
        // ignore if not image<br>
        if ('' !== $value->getPath() && ! in_array($value->guessExtension(), ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp'])) {<br>
            return;<br>
        }<br>
        // get real path for the file<br>
        $path = $value->getRealPath();<br>
        $command = escapeshellcmd(config('image.python_path') . " blur_detection.py '{$path}'");<br>
        $result = Process::path(base_path('scripts'))->run($command);<br>
        if ( ! $result->successful()) {<br>
            return;<br>
        }<br>
        if (trim($result->output()) < 100) {<br>
            $fail(__('Blur image are not accepted. Please make sure your :attribute image is clearly visible.'));<br>
        }<br>
    }<br>
}</p>

登入後複製




How It Works

The integration of Laravel with a Python script for blur detection works in a seamless manner, offering a sophisticated yet straightforward approach to ensuring image quality. Here’s how the process unfolds:

Image Upload

When a user uploads an image to the Laravel application, the custom validation rule (ImageBlurDetectionRule) is triggered.

Validation Rule Execution

This rule first checks if the uploaded file is indeed an image by verifying its extension. If the file is not an image, the process stops here.

Python Script Invocation

If the file is an image, the rule then calls a Python script, blur_detection.py. The image's path is passed to this script as a command-line argument.

Image Processing in Python:

  • The Python script uses OpenCV to handle the image analysis.
  • The script reads the image and converts it into grayscale. This simplification allows for more straightforward analysis without the complexity of color.
  • It then applies the Laplacian operator to the grayscale image. The Laplacian operator is a mathematical tool that highlights areas of rapid intensity change, which are typically edges in an image. Blurry images have fewer and less defined edges, resulting in a lower variance of the Laplacian.

Blurriness Measurement

The script calculates the variance of the Laplacian, which serves as a measure of the image’s sharpness. A lower variance indicates a blurrier image.

Result Evaluation:

  • The script outputs the Laplacian variance as a numerical value.
  • Back in Laravel, the validation rule captures this output and checks if the value falls below a predefined threshold. This threshold determines whether an image is considered sharp enough.

Validation Feedback

If the image is too blurry (ex: the Laplacian variance is below the threshold), the validation rule fails and the user receives a message indicating that the image is blurry and should be checked.

User Experience Enhancement

By preventing the upload of low-quality, blurry images, this solution enhances the overall user experience. Users are prompted to only upload clear, high-quality images, which maintains the visual standard of the application.


這個過程是高度可自訂的。開發人員可以根據應用程式的具體需求調整模糊閾值。請注意,閾值是基於您的觀察。對於進階使用,可能需要 ML 來確定閾值。此外,Laravel 中 Python 的整合允許進一步擴展到更先進的影像處理技術,為管理影像品質提供靈活且強大的解決方案。

實際應用

將此功能合併到 Laravel 應用程式中可以防止上傳低品質影像,從而增強使用者體驗。這在圖像清晰度至關重要的場景中特別有用,例如線上作品集、產品目錄或使用者個人資料圖片。

客製化和靈活性

模糊閾值可以根據具體需求進行調整。此外,Laravel 中 Python 的整合提供了靈活性,可以在需要時結合更先進的影像處理技術。

結論

Laravel 和 Python 的結合用於檢測模糊影像是一個強大的解決方案。它不僅可以確保應用程式的視覺質量,還可以增強整體用戶體驗。透過這種方法,開發人員可以保持媒體內容的高標準,從而打造更精緻和專業的線上形象。


您是否嘗試過在 Laravel 專案中實現此解決方案?在下面的評論中分享您的經驗和獲得的任何見解。讓我們一起持續提升Web開發水準!

以上是Laravel 中的模糊影像偵測的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!