Artikel berasal dari https://medium.com/@hafiqiqmal93/blurry-image-detection-in-laravel-4c91168e00f1
Aspek penting dalam pengalaman pengguna, menyimpan imej kabur dengan ketara menjejaskan kualiti tapak web atau aplikasi. Artikel ini membincangkan cara anda boleh mengesan dan mengurus imej kabur menggunakan Laravel dengan bantuan Python dan OpenCV, memastikan media aplikasi kekal tajam dan menarik.
Imej kabur bukan sekadar gangguan visual; mereka boleh menjejaskan profesionalisme tapak web atau apl anda. Dalam e-dagang, penyenaraian hartanah, galeri dalam talian atau mana-mana platform yang kualiti imej adalah diutamakan, memastikan kejelasan adalah penting. Cabarannya terletak pada mengesan kekaburan secara atur cara.
Laravel boleh dipasangkan dengan Python untuk mencipta penyelesaian yang berkesan untuk masalah ini. Dengan memanfaatkan pengesahan fail Laravel bersama skrip Python yang menggunakan OpenCV, pembangun boleh menyepadukan pengesanan kabur dengan lancar ke dalam proses muat naik fail mereka.
Pengesanan imej kabur melibatkan analisis ketajaman imej. Ini biasanya dilakukan menggunakan operator Laplacian, alat matematik yang digunakan dalam pemprosesan imej. Pengendali Laplacian mengukur kadar perubahan intensiti piksel dan varians yang lebih rendah bagi Laplacian menunjukkan imej yang lebih kabur.
Dalam Laravel, kami boleh membuat peraturan pengesahan tersuai untuk menyemak kekaburan imej. Peraturan ini melaksanakan skrip Python yang menggunakan operator Laplacian untuk menentukan ketajaman imej. Mari pecahkan prosesnya:
Pasang PIP (Ubuntu) :
sudo apt install python3-pip
Pasang OpenCV menggunakan PIP
pip3 install opencv-python
Anda mungkin ingin mempertimbangkan untuk memasang di bawah **www-data** pengguna jika aplikasi anda berjalan di bawah **www-data**. Jika Ya, ikut arahan di bawah untuk memasang
<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>
<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>
<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>
Penyepaduan Laravel dengan skrip Python untuk pengesanan kabur berfungsi dengan lancar, menawarkan pendekatan yang canggih namun mudah untuk memastikan kualiti imej. Begini cara proses itu berlaku:
Apabila pengguna memuat naik imej ke aplikasi Laravel, peraturan pengesahan tersuai (ImageBlurDetectionRule) akan dicetuskan.
Peraturan ini terlebih dahulu menyemak sama ada fail yang dimuat naik sememangnya imej dengan mengesahkan sambungannya. Jika fail itu bukan imej, prosesnya berhenti di sini.
Jika fail ialah imej, peraturan itu kemudian memanggil skrip Python, blur_detection.py. Laluan imej dihantar ke skrip ini sebagai hujah baris perintah.
Skrip mengira varians Laplacian, yang berfungsi sebagai ukuran ketajaman imej. Varians yang lebih rendah menunjukkan imej yang lebih kabur.
Jika imej terlalu kabur (cth: varians Laplacian berada di bawah ambang), peraturan pengesahan gagal dan pengguna menerima mesej yang menunjukkan bahawa imej itu kabur dan harus diperiksa.
Dengan menghalang muat naik imej kabur berkualiti rendah, penyelesaian ini meningkatkan keseluruhan pengalaman pengguna. Pengguna digesa untuk hanya memuat naik imej yang jelas dan berkualiti tinggi, yang mengekalkan standard visual aplikasi.
This process is highly customizable. Developers can adjust the threshold for blurriness according to the specific needs of their application. Note that, the threshold is based on your observation. For advance usage, may need ML to determine the threshold. Moreover, the integration of Python within Laravel allows for further expansion into more advanced image processing techniques, offering a flexible and robust solution for managing image quality.
Incorporating this functionality in your Laravel application enhances the user experience by preventing the upload of low-quality images. This is particularly useful in scenarios where image clarity is critical, such as online portfolios, product catalogs, or user profile pictures.
The threshold for blurriness can be adjusted according to specific needs. Additionally, the integration of Python within Laravel offers flexibility to incorporate more advanced image processing techniques if required.
The combination of Laravel and Python for detecting blurry images is a powerful solution. It not only ensures the visual quality of your application but also enhances the overall user experience. With this approach, developers can maintain high standards for media content, contributing to a more polished and professional online presence.
Have you tried implementing this solution in your Laravel project? Share your experiences and any insights you’ve gained in the comments below. Let’s continue to elevate the standards of web development together!
The above is the detailed content of Blurry Image Detection in Laravel. For more information, please follow other related articles on the PHP Chinese website!