"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Detecção de imagem borrada no Laravel

Detecção de imagem borrada no Laravel

Publicado em 2024-11-04
Navegar:169

Blurry Image Detection in Laravel

Artigo originado de https://medium.com/@hafiqiqmal93/blurry-image-detection-in-laravel-4c91168e00f1

Aspecto crucial da experiência do usuário, o armazenamento de imagens borradas prejudica significativamente a qualidade de um site ou aplicativo. Este artigo investiga como você pode detectar e gerenciar imagens borradas usando Laravel com ajuda de Python e OpenCV, garantindo que a mídia do aplicativo permaneça nítida e envolvente.

O desafio das imagens borradas

Imagens borradas são mais do que apenas um incômodo visual; eles podem prejudicar o profissionalismo do seu site ou aplicativo. No e-commerce, nos anúncios de imóveis, nas galerias online ou em qualquer plataforma onde a qualidade da imagem é primordial, garantir a clareza é essencial. O desafio está em detectar a desfocagem de forma programática.

Laravel para o resgate

Laravel pode ser emparelhado com Python para criar uma solução eficaz para este problema. Ao aproveitar a validação de arquivos do Laravel junto com um script Python utilizando OpenCV, os desenvolvedores podem integrar perfeitamente a detecção de desfoque em seus processos de upload de arquivos.

Conceito de detecção de desfoque

A detecção de imagens borradas envolve a análise da nitidez da imagem. Isso normalmente é feito usando o operador Laplaciano, uma ferramenta matemática usada no processamento de imagens. O operador Laplaciano mede a taxa na qual a intensidade do pixel muda, e uma variação mais baixa do Laplaciano indica uma imagem mais desfocada.

Implementando em Laravel

No Laravel, podemos criar uma regra de validação personalizada para verificar o desfoque da imagem. Esta regra executa um script Python que usa o operador Laplaciano para determinar a nitidez da imagem. Vamos analisar o processo:

Instalação OpenCV Python:

Instalar PIP (Ubuntu):


sudo apt install python3-pip


Instale OpenCV usando PIP


pip3 install opencv-python


Você pode querer considerar a instalação sob o usuário **www-data** se seu aplicativo for executado sob **www-data**. Se sim, siga os comandos abaixo 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




Criar script Python



import sys
import cv2

def 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)




Criar regra do Laravel:



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.'));
}
}
}




Como funciona

A integração do Laravel com um script Python para detecção de desfoque funciona de maneira contínua, oferecendo uma abordagem sofisticada, porém direta, para garantir a qualidade da imagem. Veja como o processo se desenrola:

Carregamento de imagem

Quando um usuário carrega uma imagem para o aplicativo Laravel, a regra de validação personalizada (ImageBlurDetectionRule) é acionada.

Execução de Regra de Validação

Esta regra primeiro verifica se o arquivo enviado é de fato uma imagem, verificando sua extensão. Se o arquivo não for uma imagem, o processo para aqui.

Invocação de script Python

Se o arquivo for uma imagem, a regra chama um script Python, blur_detection.py. O caminho da imagem é passado para este script como um argumento de linha de comando.

Processamento de imagem em Python:

  • O script Python usa OpenCV para lidar com a análise de imagem.
  • O script lê a imagem e a converte em tons de cinza. Essa simplificação permite uma análise mais direta, sem a complexidade da cor.
  • Em seguida, aplica o operador Laplaciano à imagem em tons de cinza. O operador Laplaciano é uma ferramenta matemática que destaca áreas de rápida mudança de intensidade, que normalmente são bordas de uma imagem. Imagens desfocadas têm bordas cada vez menos definidas, resultando em uma variação menor do Laplaciano.

Medição de desfoque

O script calcula a variância do Laplaciano, que serve como medida da nitidez da imagem. Uma variação menor indica uma imagem mais desfocada.

Avaliação do resultado:

  • O script gera a variação laplaciana como um valor numérico.
  • De volta ao Laravel, a regra de validação captura essa saída e verifica se o valor está abaixo de um limite predefinido. Este limite determina se uma imagem é considerada suficientemente nítida.

Feedback de validação

Se a imagem estiver muito desfocada (ex: a variação laplaciana está abaixo do limite), a regra de validação falha e o usuário recebe uma mensagem indicando que a imagem está desfocada e deve ser verificada.

Melhoria da experiência do usuário

Ao evitar o upload de imagens borradas e de baixa qualidade, esta solução melhora a experiência geral do usuário. Os usuários são solicitados a fazer upload apenas de imagens nítidas e de alta qualidade, o que mantém o padrão visual do aplicativo.


Este processo é altamente personalizável. Os desenvolvedores podem ajustar o limite de desfoque de acordo com as necessidades específicas de sua aplicação. Observe que o limite é baseado na sua observação. Para uso antecipado, pode ser necessário que o ML determine o limite. Além disso, a integração do Python no Laravel permite uma expansão adicional em técnicas de processamento de imagem mais avançadas, oferecendo uma solução flexível e robusta para gerenciar a qualidade da imagem.

Aplicação Prática

A incorporação desta funcionalidade em seu aplicativo Laravel melhora a experiência do usuário, evitando o upload de imagens de baixa qualidade. Isso é particularmente útil em cenários onde a clareza da imagem é crítica, como portfólios on-line, catálogos de produtos ou fotos de perfil de usuário.

Personalização e Flexibilidade

O limite de desfoque pode ser ajustado de acordo com necessidades específicas. Além disso, a integração do Python no Laravel oferece flexibilidade para incorporar técnicas de processamento de imagem mais avançadas, se necessário.

Conclusão

A combinação de Laravel e Python para detectar imagens borradas é uma solução poderosa. Ele não apenas garante a qualidade visual do seu aplicativo, mas também melhora a experiência geral do usuário. Com esta abordagem, os desenvolvedores podem manter padrões elevados para conteúdo de mídia, contribuindo para uma presença online mais refinada e profissional.


Você já tentou implementar esta solução em seu projeto Laravel? Compartilhe suas experiências e quaisquer insights que você obteve nos comentários abaixo. Vamos continuar a elevar os padrões de desenvolvimento web juntos!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/afiqiqmal/blurry-image-detection-in-laravel-4d8d?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3