PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 25 → Trabalhando com imagens
Trabalhando com imagens
Iniciado por Boller, 14,oct. 2024 18:19 - 5 respuestas
Miembro registrado
4.520 mensajes
Publicado el 14,octubre 2024 - 18:19
Prezados,

Segue abaixo um estudo sobre arquivos de imagem com WLanguage:

Com base no código presente no documento, aqui estão exemplos em WLanguage para realizar as operações mencionadas: converter uma imagem em preto e branco, obter o contorno de uma imagem, modificar qualidade, iluminação, contraste e transparência.

1. Converter uma imagem em preto e branco:

IMG_CaptchaOriginal = dLoadImage("imagem.png", imgDefault)

// Loop pelos pixels da imagem
FOR y = 0 TO IMG_CaptchaOriginal..Height - 1
FOR x = 0 TO IMG_CaptchaOriginal..Width - 1
// Pega a cor atual do pixel
corPixel = dPixelColor(IMG_CaptchaOriginal, x, y)

// Calcula o valor médio para converter em escala de cinza
media = (RGBRed(corPixel) + RGBGreen(corPixel) + RGBBlue(corPixel)) / 3

// Se o valor for menor que um limiar, converte para preto, caso contrário, branco
novaCor = IF media < 128 THEN RGB(0, 0, 0) ELSE RGB(255, 255, 255)

// Aplica a nova cor
dSetPixel(IMG_CaptchaOriginal, x, y, novaCor)
END
END

// Salva a imagem
dSaveImagePNG(IMG_CaptchaOriginal, "imagem_bw.png")

2. Detectar contorno de objetos na imagem:

IMG_CaptchaOriginal = dLoadImage("imagem.png", imgDefault)

// Loop pelos pixels da imagem
FOR y = 1 TO IMG_CaptchaOriginal..Height - 2
FOR x = 1 TO IMG_CaptchaOriginal..Width - 2
// Pega a cor atual e as cores dos vizinhos
corPixel = dPixelColor(IMG_CaptchaOriginal, x, y)
corVizinho1 = dPixelColor(IMG_CaptchaOriginal, x + 1, y)
corVizinho2 = dPixelColor(IMG_CaptchaOriginal, x, y + 1)

// Verifica se há uma diferença significativa entre o pixel e seus vizinhos
IF ABS(corPixel - corVizinho1) > 50 OR ABS(corPixel - corVizinho2) > 50 THEN
dSetPixel(IMG_CaptchaOriginal, x, y, RGB(0, 0, 0)) // Define o contorno como preto
ELSE
dSetPixel(IMG_CaptchaOriginal, x, y, RGB(255, 255, 255)) // Define o restante como branco
END
END
END

// Salva a imagem com o contorno
dSaveImagePNG(IMG_CaptchaOriginal, "imagem_contorno.png")

3. Modificar a qualidade da imagem:

IMG_CaptchaOriginal = dLoadImage("imagem.png", imgDefault)
qualidade = 80 // Define a qualidade (0 a 100)

// Salva a imagem com a nova qualidade
dSaveImageJPEG(IMG_CaptchaOriginal, "imagem_qualidade.jpg", qualidade)

4. Modificar iluminação:

IMG_CaptchaOriginal = dLoadImage("imagem.png", imgDefault)
dModifyLightness(IMG_CaptchaOriginal, 20) // Aumenta a iluminação em 20%

// Salva a imagem com nova iluminação
dSaveImagePNG(IMG_CaptchaOriginal, "imagem_iluminacao.png")

5. Modificar contraste:

IMG_CaptchaOriginal = dLoadImage("imagem.png", imgDefault)
contraste = 30 // Define o aumento de contraste (positivo para aumentar, negativo para diminuir)
dModifyContrast(IMG_CaptchaOriginal, contraste)

// Salva a imagem com o novo contraste
dSaveImagePNG(IMG_CaptchaOriginal, "imagem_contraste.png")

6. Modificar transparência:

IMG_CaptchaOriginal = dLoadImage("imagem.png", imgDefault)
transparencia = 50 // Define a transparência (0 a 100)
dModifyOpacity(IMG_CaptchaOriginal, transparencia)

// Salva a imagem com a nova transparência
dSaveImagePNG(IMG_CaptchaOriginal, "imagem_transparente.png")

Esses exemplos demonstram como manipular imagens no WLanguage usando funções como dModifyLightness, dModifyContrast, dModifyOpacity, e operações de pixel para realizar conversões e detecções.

Os comandos mencionados para manipulação de imagens existem no WLanguage, e você pode encontrar informações detalhadas sobre eles no help.windev.com. Aqui está uma breve descrição de cada um, juntamente com o link correspondente para que você possa verificar mais detalhes diretamente no site oficial.

1. dModifyLightness – Modifica a iluminação da imagem:
• Referência no Help
• Descrição: Esta função ajusta o brilho (luminosidade) de uma imagem.
2. dModifyContrast – Modifica o contraste da imagem:
• Referência no Help
• Descrição: Permite modificar o contraste de uma imagem carregada em um controle de imagem.
3. dModifyOpacity – Modifica a opacidade (transparência) da imagem:
• Referência no Help
• Descrição: Esta função ajusta o nível de opacidade de uma imagem (0 a 100).
4. dPixelColor – Retorna a cor de um pixel em uma imagem:
• Referência no Help
• Descrição: Permite obter a cor de um pixel específico na imagem.
5. dSetPixel – Define a cor de um pixel na imagem:
• Referência no Help
• Descrição: Define a cor de um pixel específico em uma imagem.
6. dSaveImagePNG – Salva a imagem no formato PNG:
• Referência no Help
• Descrição: Salva a imagem no formato PNG em um diretório específico.
7. dModifySaturation – Modifica a saturação da imagem:
• Referência no Help
• Descrição: Esta função ajusta o nível de saturação de uma imagem.
8. dLoadImage – Carrega uma imagem no controle de imagem:
• Referência no Help
• Descrição: Carrega uma imagem em um controle de imagem ou diretamente em uma variável de imagem.

Você pode encontrar mais detalhes e exemplos diretamente no site oficial do Windev Help.

Aqui está um exemplo de uma classe em WLanguage para manipulação de imagens, baseada nos comandos fornecidos pelo documento e recursos do Windev. A classe ImageProcessor inclui funcionalidades de manipulação como ajuste de brilho, contraste, saturação, rastreamento de contornos, e outros recursos.

Classe ImageProcessor - WLanguage

// Definição da classe ImageProcessor
CLASS ImageProcessor

// Atributos
private
imgOriginal is Image // Armazena a imagem original
imgProcessed is Image // Armazena a imagem processada

// Métodos da classe
public

// Construtor para carregar uma imagem
PROCEDURE Constructor(imgPath is string)
imgOriginal = dLoadImage(imgPath, imgDefault)
imgProcessed = imgOriginal

// Método para salvar a imagem processada
PROCEDURE SaveProcessedImage(destinationPath is string, format is string)
SWITCH format
CASE "PNG":
dSaveImagePNG(imgProcessed, destinationPath)
CASE "JPEG":
dSaveImageJPEG(imgProcessed, destinationPath, 80) // Qualidade 80%
// Outros formatos podem ser adicionados aqui
END

// Método para converter a imagem para preto e branco
PROCEDURE ConvertToBlackAndWhite()
FOR y = 0 TO imgProcessed..Height - 1
FOR x = 0 TO imgProcessed..Width - 1
pixelColor = dPixelColor(imgProcessed, x, y)
avgColor = (RGBRed(pixelColor) + RGBGreen(pixelColor) + RGBBlue(pixelColor)) / 3
bwColor = IF avgColor < 128 THEN RGB(0, 0, 0) ELSE RGB(255, 255, 255)
dSetPixel(imgProcessed, x, y, bwColor)
END
END

// Método para ajustar o brilho
PROCEDURE AdjustBrightness(brightness is int)
dModifyLightness(imgProcessed, brightness)

// Método para ajustar o contraste
PROCEDURE AdjustContrast(contrast is int)
dModifyContrast(imgProcessed, contrast)

// Método para ajustar a saturação
PROCEDURE AdjustSaturation(saturation is int)
dModifySaturation(imgProcessed, saturation)

// Método para modificar a opacidade
PROCEDURE AdjustOpacity(opacity is int)
dModifyOpacity(imgProcessed, opacity)

// Método para detectar contornos
PROCEDURE DetectEdges(threshold is int)
FOR y = 1 TO imgProcessed..Height - 2
FOR x = 1 TO imgProcessed..Width - 2
colorPixel = dPixelColor(imgProcessed, x, y)
colorRight = dPixelColor(imgProcessed, x + 1, y)
colorBottom = dPixelColor(imgProcessed, x, y + 1)

IF ABS(RGBRed(colorPixel) - RGBRed(colorRight)) > threshold OR ABS(RGBRed(colorPixel) - RGBRed(colorBottom)) > threshold THEN
dSetPixel(imgProcessed, x, y, RGB(0, 0, 0)) // Contorno em preto
ELSE
dSetPixel(imgProcessed, x, y, RGB(255, 255, 255)) // Restante em branco
END
END
END

// Método para redimensionar a imagem
PROCEDURE ResizeImage(newWidth is int, newHeight is int)
dResize(imgProcessed, newWidth, newHeight)

// Método para obter informações da imagem
PROCEDURE GetImageInfo() is string
info is string
info += "Largura: " + imgProcessed..Width + CR
info += "Altura: " + imgProcessed..Height + CR
info += "Bits por Pixel: " + imgProcessed..BitPerPixel + CR
info += "Com Transparência: " + imgProcessed..WithAlpha + CR
RETURN info

// Método para contar pixels de uma cor específica (exemplo: contar pixels pretos)
PROCEDURE CountColorPixels(targetColor is int) is int
count is int = 0
FOR y = 0 TO imgProcessed..Height - 1
FOR x = 0 TO imgProcessed..Width - 1
IF dPixelColor(imgProcessed, x, y) = targetColor THEN
count += 1
END
END
END
RETURN count

// Método para rastrear a borda de objetos na imagem
PROCEDURE TrackObjectEdges()
// Aqui seria possível implementar a lógica para rastrear bordas com base na variação de cor entre pixels adjacentes
// Por exemplo, como foi feito no método de detecção de contornos (DetectEdges)
Trace("Iniciando rastreamento de objetos...")
// ... Código de rastreamento
Trace("Rastreamento completo.")

END

Explicação dos Recursos da Classe

1. Construtor (Constructor): Carrega a imagem especificada no atributo imgOriginal e a inicializa como imgProcessed, que será manipulada durante o processamento.
2. Salvar Imagem Processada (SaveProcessedImage): Salva a imagem processada no formato desejado, seja PNG ou JPEG.
3. Conversão para Preto e Branco (ConvertToBlackAndWhite): Converte a imagem em uma versão em preto e branco baseada na média dos valores RGB de cada pixel.
4. Ajuste de Brilho (AdjustBrightness): Modifica a luminosidade da imagem usando o comando dModifyLightness.
5. Ajuste de Contraste (AdjustContrast): Aumenta ou diminui o contraste da imagem com dModifyContrast.
6. Ajuste de Saturação (AdjustSaturation): Modifica a saturação da imagem, que afeta a intensidade das cores.
7. Modificação de Opacidade (AdjustOpacity): Define a opacidade (transparência) da imagem com dModifyOpacity.
8. Detecção de Contornos (DetectEdges): Identifica as bordas de objetos na imagem com base na diferença de cores entre pixels adjacentes.
9. Redimensionamento (ResizeImage): Redimensiona a imagem para uma nova largura e altura.
10. Informações da Imagem (GetImageInfo): Retorna uma string contendo as principais características da imagem processada, como largura, altura, bits por pixel e se contém transparência.
11. Contagem de Pixels de uma Cor Específica (CountColorPixels): Conta o número de pixels que possuem a cor especificada (por exemplo, contar quantos pixels pretos existem na imagem).
12. Rastreamento de Bordas de Objetos (TrackObjectEdges): Um método que pode ser utilizado para implementar rastreamento de objetos com base nas bordas detectadas na imagem. Pode ser expandido para incluir lógica de rastreamento de formas ou contornos complexos.

Como Usar a Classe

// Cria um objeto da classe ImageProcessor
imgProc is ImageProcessor = new ImageProcessor("imagem.png")

// Converte a imagem para preto e branco
imgProc.ConvertToBlackAndWhite()

// Ajusta o brilho
imgProc.AdjustBrightness(20)

// Salva a imagem processada
imgProc.SaveProcessedImage("imagem_processada.png", "PNG")

// Exibe informações da imagem
Info(imgProc.GetImageInfo())

// Conta quantos pixels pretos existem na imagem
pretoCount = imgProc.CountColorPixels(RGB(0, 0, 0))
Info("Total de pixels pretos: " + pretoCount)

Esse exemplo oferece uma classe com métodos essenciais para manipulação de imagens, o que pode ser facilmente expandido conforme necessário.

Existem vários novos recursos que podem ser adicionados à classe ImageProcessor para torná-la mais robusta e versátil. A seguir estão algumas sugestões de funcionalidades adicionais que podem ser integradas:

1. Rotação da Imagem

Adicionando a capacidade de rotacionar a imagem em ângulos específicos.

// Método para rotacionar a imagem em graus
PROCEDURE RotateImage(angle is int)
dRotate(imgProcessed, angle)

2. Aplicação de Filtros

Filtros como desfocagem (blur), nitidez (sharpen), ou sepia podem ser adicionados para efeitos estéticos.

// Método para aplicar um filtro de desfocagem
PROCEDURE ApplyBlur(strength is int)
dBlur(imgProcessed, strength)

// Método para aplicar um filtro de nitidez
PROCEDURE ApplySharpen(strength is int)
dSharpen(imgProcessed, strength)

// Método para aplicar um efeito sépia
PROCEDURE ApplySepia()
dSepia(imgProcessed)

3. Recorte de Imagem

Adiciona a capacidade de recortar uma região específica da imagem, seja por seleção do usuário ou por coordenadas fixas.

// Método para recortar uma área da imagem
PROCEDURE CropImage(xStart is int, yStart is int, width is int, height is int)
imgProcessed = dCrop(imgProcessed, xStart, yStart, width, height)

4. Sobreposição de Texto

Permite a inserção de texto sobre a imagem, útil para marca d’água ou anotações.

// Método para adicionar texto à imagem
PROCEDURE AddTextToImage(text is string, x is int, y is int, fontColor is int, fontSize is int)
dText(imgProcessed, text, x, y, fontColor, fontSize)

5. Aplicação de Marca d’Água (Watermark)

Adiciona uma imagem de marca d’água em cima da imagem processada.

// Método para adicionar uma marca d'água
PROCEDURE ApplyWatermark(watermarkPath is string, opacity is int)
watermarkImage is Image = dLoadImage(watermarkPath, imgDefault)
dAlphaBlend(imgProcessed, watermarkImage, opacity)

6. Espelhamento de Imagem

Adiciona a funcionalidade de espelhar a imagem horizontal ou verticalmente.

// Método para espelhar horizontalmente
PROCEDURE MirrorImageHorizontally()
dMirrorHorizontal(imgProcessed)

// Método para espelhar verticalmente
PROCEDURE MirrorImageVertically()
dMirrorVertical(imgProcessed)

7. Conversão de Imagem para Outros Formatos

Já que temos PNG e JPEG, você pode expandir para outros formatos como BMP, TIFF, etc.

// Método para salvar a imagem em diferentes formatos
PROCEDURE SaveAsBMP(destinationPath is string)
dSaveImageBMP(imgProcessed, destinationPath)

// Método para salvar a imagem em formato TIFF
PROCEDURE SaveAsTIFF(destinationPath is string)
dSaveImageTIFF(imgProcessed, destinationPath)

8. Redimensionamento Proporcional

Redimensiona a imagem mantendo a proporção original (aspect ratio).

// Método para redimensionar mantendo a proporção
PROCEDURE ResizeProportional(newWidth is int)
originalWidth is int = imgProcessed..Width
originalHeight is int = imgProcessed..Height

// Calcula a nova altura com base na proporção original
newHeight is int = (newWidth * originalHeight) / originalWidth
dResize(imgProcessed, newWidth, newHeight)

9. Detecção de Faces ou Objetos

Utilizando bibliotecas externas ou técnicas de reconhecimento de padrões, pode-se adicionar a detecção de faces ou outros objetos comuns na imagem.

// Pseudocódigo para detecção de faces (usando integração com bibliotecas externas)
PROCEDURE DetectFaces()
// Integração com biblioteca de detecção de faces
// Carrega uma imagem e detecta rostos
dDetectFaces(imgProcessed) // Supondo que seja uma função externa que detecte faces

10. Histograma da Imagem

Gera um histograma de cores da imagem, permitindo visualizar a distribuição de cores.

// Método para gerar histograma da imagem
PROCEDURE GenerateHistogram()
histogramRed, histogramGreen, histogramBlue are array of int

// Inicializa arrays com 256 valores para cada cor (8 bits por canal)
ArrayResize(histogramRed, 256)
ArrayResize(histogramGreen, 256)
ArrayResize(histogramBlue, 256)

// Itera pelos pixels da imagem
FOR y = 0 TO imgProcessed..Height - 1
FOR x = 0 TO imgProcessed..Width - 1
colorPixel = dPixelColor(imgProcessed, x, y)
histogramRed[RGBRed(colorPixel)] += 1
histogramGreen[RGBGreen(colorPixel)] += 1
histogramBlue[RGBBlue(colorPixel)] += 1
END
END

// Agora os arrays contêm a distribuição das cores na imagem
// Você pode exibir ou salvar esse histograma conforme necessário
RETURN [histogramRed, histogramGreen, histogramBlue]

11. Comparação de Imagens

Adiciona a capacidade de comparar duas imagens para detectar diferenças entre elas (pixel a pixel ou usando alguma métrica de similaridade).

// Método para comparar duas imagens
PROCEDURE CompareImages(imagePath2 is string) is int
imgToCompare is Image = dLoadImage(imagePath2, imgDefault)
IF imgProcessed..Width <> imgToCompare..Width OR imgProcessed..Height <> imgToCompare..Height THEN
RETURN -1 // Imagens de tamanhos diferentes
END

diffCount is int = 0
FOR y = 0 TO imgProcessed..Height - 1
FOR x = 0 TO imgProcessed..Width - 1
IF dPixelColor(imgProcessed, x, y) <> dPixelColor(imgToCompare, x, y) THEN
diffCount += 1
END
END
END
RETURN diffCount // Retorna a contagem de pixels diferentes

12. Efeitos de Transição (Fade In/Out)

Efeito visual que pode ser útil para criar transições entre imagens.

// Método para fazer fade in na imagem
PROCEDURE FadeIn(duration is int)
FOR opacity = 0 TO 100 STEP 5
dModifyOpacity(imgProcessed, opacity)
Multitask(duration / 20) // Delay para a transição
END

// Método para fazer fade out na imagem
PROCEDURE FadeOut(duration is int)
FOR opacity = 100 TO 0 STEP -5
dModifyOpacity(imgProcessed, opacity)
Multitask(duration / 20) // Delay para a transição
END

13. Detecção de Cores Predominantes

Função que identifica a cor predominante na imagem.

// Método para identificar a cor predominante na imagem
PROCEDURE GetDominantColor() is int
colorCount is associative array of int

FOR y = 0 TO imgProcessed..Height - 1
FOR x = 0 TO imgProcessed..Width - 1
pixelColor = dPixelColor(imgProcessed, x, y)
colorCount[pixelColor] += 1
END
END

dominantColor is int = 0
maxCount is int = 0

// Encontra a cor com maior contagem
FOR EACH color OF colorCount
IF colorCount[color] > maxCount THEN
maxCount = colorCount[color]
dominantColor = color
END
END

RETURN dominantColor


Esses novos recursos tornam a classe ImageProcessor mais completa, oferecendo uma variedade de funcionalidades para manipulação e análise de imagens. Isso pode ser útil em aplicativos de processamento de imagens, editores gráficos, ferramentas de reconhecimento de padrões, entre outros. Esses recursos podem ser expandidos de acordo com a necessidade do seu projeto, sempre utilizando as funções nativas do WLanguage e aproveitando o poder das bibliotecas disponíveis.

Para melhorar os recursos de manipulação de imagens em WLanguage e na sua classe ImageProcessor, você pode considerar integrar bibliotecas DLL que ofereçam funcionalidades mais avançadas de processamento de imagens. Abaixo estão algumas bibliotecas populares e altamente recomendadas que podem ser usadas para estender as capacidades do Windev:

1. OpenCV (Open Source Computer Vision Library)

O OpenCV é uma das bibliotecas mais poderosas e amplamente utilizadas para processamento de imagens e visão computacional. Ela oferece uma vasta gama de funcionalidades, desde detecção de bordas, filtros, reconhecimento facial, segmentação de imagem, até manipulação avançada de cores e transformação geométrica.

• Funcionalidades que ela pode adicionar:
• Detecção de bordas avançada (Canny, Sobel)
• Redimensionamento e rotação de imagens com alta qualidade
• Detecção e rastreamento de objetos
• Reconhecimento de faces e objetos
• Conversão de imagens entre diferentes espaços de cores (RGB, HSV, LAB, etc.)
• Remoção de ruído e aplicação de filtros avançados (Blur, Gaussian, Bilateral)
• Transformações geométricas (Affine, Perspectiva)
• Como integrar:
• Você precisará da DLL do OpenCV (geralmente opencv_world.dll ou outras dependências específicas) e das funções de API externa do Windev para chamar essas funções.
• É possível usar funções como CallDLL32 para fazer chamadas às funções do OpenCV.
• Documentação: OpenCV Documentation

// Exemplo de como chamar uma função OpenCV através de uma DLL (supondo que a função foi mapeada corretamente)
res is int
res = CallDLL32("opencv_world.dll", "cvCanny", imgPointer, lowerThreshold, upperThreshold)

2. FreeImage

FreeImage é uma biblioteca open-source focada na manipulação de imagens com suporte para uma vasta gama de formatos, incluindo BMP, JPEG, TIFF, PNG, e GIF. Ela oferece muitas funcionalidades para leitura, escrita e manipulação de imagens.

• Funcionalidades que ela pode adicionar:
• Leitura e gravação de vários formatos de imagem
• Manipulação de pixels e paletas de cores
• Suporte para compressão de imagens
• Redimensionamento e rotação de imagens
• Manipulação de metadados de imagens (EXIF, XMP)
• Conversão de formatos de imagem
• Como integrar:
• Você pode integrar a FreeImage utilizando a DLL FreeImage.dll e chamar as funções utilizando CallDLL32 ou CallDLL64 para manipular as imagens dentro do seu código WLanguage.
• Documentação: FreeImage Documentation

// Exemplo de chamada para carregar uma imagem usando FreeImage
imagePointer is int
imagePointer = CallDLL32("FreeImage.dll", "FreeImage_Load", FIF_PNG, "image.png", 0)

3. ImageMagick

ImageMagick é outra poderosa biblioteca de manipulação de imagens que oferece funcionalidades para criar, editar, e converter imagens em diferentes formatos. A grande vantagem do ImageMagick é o suporte para uma ampla gama de formatos de imagem, além de manipulações avançadas de imagem.

• Funcionalidades que ela pode adicionar:
• Suporte para mais de 100 formatos de imagem (incluindo PSD, SVG, TIFF)
• Manipulação de cores, transparências e camadas
• Transformações de imagens como recortes, redimensionamento, rotação, e perspectiva
• Aplicação de efeitos e filtros complexos (blur, sharpening, embossing)
• Manipulação de vetores e texto dentro de imagens
• Criação de animações (GIFs animados)
• Como integrar:
• A biblioteca ImageMagick disponibiliza o arquivo CORE_RL_magick_.dll que pode ser utilizado com chamadas API para realizar manipulação de imagens. Você pode utilizar funções como CallDLL32 para integração.
• Documentação: ImageMagick Documentation

// Exemplo de uso do ImageMagick
CallDLL32("CORE_RL_magick_.dll", "MagickReadImage", "input.jpg")
CallDLL32("CORE_RL_magick_.dll", "MagickResizeImage", newWidth, newHeight)
CallDLL32("CORE_RL_magick_.dll", "MagickWriteImage", "output_resized.jpg")

4. LeadTools

LeadTools é uma solução comercial e completa para processamento de imagens. Ela oferece recursos avançados como OCR (Reconhecimento Óptico de Caracteres), leitura de códigos de barras, processamento DICOM para imagens médicas, entre outras funcionalidades.

• Funcionalidades que ela pode adicionar:
• OCR (Reconhecimento de Texto em Imagens)
• Leitura e escrita de códigos de barras em imagens
• Manipulação de imagens médicas (DICOM)
• Manipulação avançada de cores e pixels
• Compressão e descompressão de imagens em tempo real
• Como integrar:
• A LeadTools disponibiliza várias DLLs para diferentes funcionalidades, e você pode usar CallDLL32 ou CallDLL64 para integração em Windev.
• Documentação: LeadTools Documentation

// Exemplo de integração básica com LeadTools
CallDLL32("Leadtools.dll", "L_ConvertToGrayScale", imgPointer)

5. GDAL (Geospatial Data Abstraction Library)

GDAL é uma biblioteca especializada em dados espaciais e imagens de satélite. Se o seu projeto envolve manipulação de dados geográficos, imagens aéreas ou processamento de dados geoespaciais, o GDAL pode ser uma excelente adição.

• Funcionalidades que ela pode adicionar:
• Manipulação de imagens de satélite e georreferenciamento
• Suporte a grandes volumes de dados de imagens geográficas
• Processamento e conversão de formatos especializados como GeoTIFF
• Extração de dados geoespaciais de imagens
• Como integrar:
• Utilize a DLL gdal.dll para acessar as funções de processamento de dados geoespaciais e manipulação de imagens raster.
• Documentação: GDAL Documentation

// Exemplo de uso do GDAL
CallDLL32("gdal.dll", "GDALOpen", "geospatial_image.tif", GA_ReadOnly)

6. Skia

Skia é uma biblioteca de gráficos 2D de código aberto usada pelo Google em muitos de seus produtos, como o Chrome. Ela pode ser usada para renderizar gráficos e imagens com alta performance, incluindo operações de manipulação de pixels, redimensionamento, e muito mais.

• Funcionalidades que ela pode adicionar:
• Renderização de gráficos 2D de alta qualidade
• Manipulação avançada de imagens com foco em performance
• Criação de gráficos vetoriais e bitmap
• Suporte para animações básicas
• Como integrar:
• Você pode integrar a biblioteca Skia através de sua DLL (geralmente skia.dll) e utilizar funções específicas para manipulação gráfica.
• Documentação: Skia Documentation

// Exemplo de uso do Skia para desenhar em uma imagem
CallDLL32("skia.dll", "sk_canvas_draw_rect", imgPointer, x, y, width, height, paintPointer)

Considerações Finais

Ao escolher uma biblioteca para melhorar os recursos de manipulação de imagens na sua classe, considere o escopo do projeto e as funcionalidades que você precisa. O OpenCV e ImageMagick são ótimas escolhas se você precisar de uma biblioteca de propósito geral com muitos recursos. Se você estiver trabalhando com imagens geoespaciais, GDAL será mais adequado, e para gráficos 2D com alta performance, Skia pode ser uma boa escolha.

A integração dessas bibliotecas com Windev pode ser feita via chamadas DLL (CallDLL32 ou CallDLL64), permitindo que você expanda as capacidades da sua classe de processamento de imagens com funcionalidades mais avançadas.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Miembro registrado
4.520 mensajes
Publicado el 14,octubre 2024 - 18:26
Há vários outros aspectos e técnicas que podemos explorar para melhorar ainda mais sua classe de processamento de imagens, levando em consideração o uso de bibliotecas adicionais, recursos nativos do Windev, e práticas de otimização e desenvolvimento para manipulação eficiente de imagens. Abaixo estão algumas áreas que podemos aprofundar:

1. Processamento de Imagens em Paralelo

Para melhorar a performance do processamento de grandes imagens ou realizar operações complexas, você pode explorar o paralelismo. O Windev permite que você utilize threads para dividir o trabalho de processamento em diferentes partes, aproveitando o poder dos processadores multicore.

• Como implementar:
• Divida a imagem em seções (linhas ou blocos) e processe cada seção em uma thread separada. Quando todas as threads terminarem, os resultados podem ser combinados.

// Exemplo de processamento paralelo em threads para conversão de imagem em preto e branco
PROCEDURE ParallelConvertToBlackAndWhite(startY is int, endY is int)
FOR y = startY TO endY
FOR x = 0 TO imgProcessed..Width - 1
pixelColor = dPixelColor(imgProcessed, x, y)
avgColor = (RGBRed(pixelColor) + RGBGreen(pixelColor) + RGBBlue(pixelColor)) / 3
bwColor = IF avgColor < 128 THEN RGB(0, 0, 0) ELSE RGB(255, 255, 255)
dSetPixel(imgProcessed, x, y, bwColor)
END
END
END

// Executa o processamento em paralelo usando threads
ThreadExecute("Thread1", threadNormal, ParallelConvertToBlackAndWhite, 0, imgProcessed..Height / 2)
ThreadExecute("Thread2", threadNormal, ParallelConvertToBlackAndWhite, imgProcessed..Height / 2, imgProcessed..Height - 1)

2. Integração com APIs de Visão Computacional na Nuvem

Além de bibliotecas locais como OpenCV e ImageMagick, você pode integrar sua classe com APIs de visão computacional na nuvem para funcionalidades avançadas de reconhecimento de objetos, OCR, e análise de imagens.

• Google Cloud Vision API: Oferece reconhecimento de objetos, leitura de texto (OCR), e detecção de rostos.
• AWS Rekognition: Permite reconhecimento facial, análise de objetos e cenas, detecção de conteúdo explícito, entre outros.
• Azure Computer Vision: Oferece OCR, detecção de rostos, extração de texto em PDF e imagens.

Exemplo de como integrar uma API de OCR da Google Vision:

// Pseudocódigo para chamada à API Google Vision OCR
// Integração via REST para análise de texto em uma imagem
PROCEDURE AnalyzeTextInImage(imagePath is string)
httpRequest is httpRequest
httpRequest.URL = "https://vision.googleapis.com/v1/images:annotate…"
httpRequest.Method = httpPost

imageData is Buffer = fLoadBuffer(imagePath) // Carrega a imagem como buffer
requestBody is string = "{'requests': [{'image': {'content': '" + Base64Encode(imageData) + "'}, 'features': [{'type': 'TEXT_DETECTION'}]}]}"

httpRequest.Content = requestBody
httpResponse is httpResponse = HTTPRequest(httpRequest)

IF httpResponse.StatusCode = 200 THEN
// Processa o resultado
resultText is string = JSONToText(httpResponse.Content)
RETURN resultText
ELSE
Error("Erro na análise da imagem", httpResponse.StatusCode)
END
END

3. Processamento de Imagens com Inteligência Artificial

Você pode explorar Redes Neurais Convolucionais (CNNs) para tarefas de classificação e segmentação de imagens, especialmente se precisar de reconhecimento avançado de objetos ou rostos. Existem bibliotecas e frameworks como TensorFlow e PyTorch, que podem ser integrados ao seu projeto usando APIs.

• Como implementar:
• Execute o treinamento de modelos fora do Windev, usando frameworks como TensorFlow ou PyTorch, e depois utilize chamadas API para aplicar o modelo treinado nas imagens carregadas no Windev.

// Pseudocódigo para enviar uma imagem a um modelo de IA treinado no TensorFlow para classificação
PROCEDURE ClassifyImageWithTensorFlow(imagePath is string)
// Converte a imagem para o formato base64 e envia via REST para o servidor TensorFlow
imgBase64 is string = Base64Encode(fLoadBuffer(imagePath))
apiEndpoint is string = "http://your-tensorflow-server/classify"
response is httpResponse = HTTPRequest(apiEndpoint, imgBase64)

IF response.StatusCode = 200 THEN
classificationResult is string = JSONToText(response.Content)
Info("Resultado da classificação: " + classificationResult)
ELSE
Error("Erro ao classificar a imagem")
END
END

4. Manipulação de Imagens em Grandes Escalas

Se você estiver lidando com imagens de alta resolução (imagens médicas, satélites, ou grandes gráficos), é importante otimizar o uso de memória. Aqui estão algumas práticas e técnicas:

• Processamento em blocos: Em vez de carregar a imagem inteira na memória, processe a imagem em pequenos blocos ou partes.
• Memória de vídeo (GPU): Aproveitar a GPU (Unidade de Processamento Gráfico) para acelerar o processamento de imagens pode ser um caminho interessante, especialmente se for usado com bibliotecas que suportam CUDA (como o OpenCV com suporte a GPU).

// Exemplo de processamento de imagem em blocos
blockSize is int = 512 // Define o tamanho do bloco a ser processado
FOR y = 0 TO imgProcessed..Height - 1 STEP blockSize
FOR x = 0 TO imgProcessed..Width - 1 STEP blockSize
// Processa o bloco da imagem (x, y) com dimensões blockSize x blockSize
ProcessBlock(x, y, blockSize, blockSize)
END
END

5. Análise de Imagens com Reconhecimento de Padrões

Adicionando algoritmos de reconhecimento de padrões como SIFT (Scale-Invariant Feature Transform) ou SURF (Speeded-Up Robust Features), você pode identificar objetos ou características específicas em imagens. Esses algoritmos estão disponíveis em bibliotecas como OpenCV.

// Pseudocódigo para integrar SIFT via OpenCV (após configurar a DLL)
PROCEDURE DetectFeaturesWithSIFT(imagePath is string)
imgPointer is int = CallDLL32("opencv_world.dll", "cvLoadImage", imagePath, 0)
keyPoints is int = CallDLL32("opencv_world.dll", "cvSIFTDetect", imgPointer)
// Processa os keyPoints detectados
Info("Pontos-chave detectados: " + keyPoints)
END

6. Compressão e Otimização de Imagens

Para melhorar a performance de carregamento em aplicações web ou móveis, a compressão de imagens pode ser vital. Você pode integrar algoritmos de compressão avançada como WebP ou otimizações de JPEG e PNG.

// Exemplo de compressão e otimização de imagem usando WebP
PROCEDURE CompressImageToWebP(imagePath is string, outputImage is string)
// Supondo que você tenha uma DLL para WebP instalada
CallDLL32("webp.dll", "WebPEncode", imagePath, outputImage)
END

7. Automatização de Efeitos de Imagens com IA

Você pode usar redes neurais treinadas para aplicar efeitos automáticos em imagens, como o famoso deep dream ou transferência de estilo (style transfer).

• Deep Dream: Uma técnica que modifica uma imagem para destacar padrões e texturas.
• Transferência de Estilo: Um modelo que aplica o estilo de uma imagem (como uma pintura) em outra imagem.

// Pseudocódigo para aplicar transferência de estilo
PROCEDURE ApplyStyleTransfer(contentImage is string, styleImage is string)
// Integração com um modelo de IA treinado para transferência de estilo
CallStyleTransferAPI(contentImage, styleImage)
END

8. Automatização com Scripts Python

Caso seu projeto precise de uma integração ainda mais profunda com bibliotecas como Pillow (biblioteca de imagens em Python), você pode usar scripts Python dentro do Windev para executar operações avançadas e retornar os resultados ao ambiente WLanguage.

// Chama um script Python para realizar operações avançadas de imagem
PROCEDURE CallPythonScript(scriptPath is string, imagePath is string)
pythonCmd is string = "python " + scriptPath + " " + imagePath
result is string = fExecute(pythonCmd)
Info(result)
END

Considerações Finais

O processamento de imagens é um campo vasto, e há muitas maneiras de expandir as funcionalidades de sua classe ImageProcessor. Seja integrando APIs na nuvem, utilizando redes neurais para reconhecimento de padrões, ou otimizando o processamento com técnicas de paralelismo e compressão, há sempre novas abordagens a explorar. A seguir, vamos explorar outras considerações importantes para melhorar ainda mais a manipulação de imagens em seu projeto.

9. Otimização do Uso de Memória e Desempenho

Ao lidar com imagens grandes ou muitas imagens ao mesmo tempo, é crucial otimizar o uso de memória e garantir que seu código seja eficiente. Algumas técnicas de otimização incluem:

A. Processamento Lazy (Sob Demanda)

Processamento de imagens apenas quando necessário, em vez de carregar e processar todas as imagens imediatamente. Isso ajuda a economizar recursos e melhora o tempo de resposta.

// Carrega a imagem somente quando necessário
PROCEDURE LazyLoadImage(imagePath is string)
IF NOT fFileExist(imagePath) THEN
Error("A imagem não existe.")
RETURN
END
imgOriginal = dLoadImage(imagePath, imgDefault)
END

B. Cache de Imagens

Manter um cache das imagens carregadas na memória para evitar múltiplos carregamentos da mesma imagem.

// Exemplo de cache de imagens
cacheImages is associative array of Image

PROCEDURE LoadImageWithCache(imagePath is string) is Image
IF cacheImages[imagePath] = Null THEN
cacheImages[imagePath] = dLoadImage(imagePath, imgDefault)
END
RETURN cacheImages[imagePath]
END

10. Automatização de Fluxo de Trabalho (Batch Processing)

Se o seu projeto envolve a manipulação de um grande número de imagens, é interessante adicionar funcionalidades para processamento em lote (batch processing). Isso permite que você aplique operações a múltiplas imagens de uma só vez.

// Exemplo de processamento em lote de imagens em um diretório
PROCEDURE BatchProcessImages(directoryPath is string)
fileList is array of string = fListFile(directoryPath + "\*.png", frFile)

FOR EACH imagePath OF fileList
imgProcessor is ImageProcessor = new ImageProcessor(imagePath)
imgProcessor.ConvertToBlackAndWhite()
imgProcessor.SaveProcessedImage(directoryPath + "\processed_" + fExtractPath(imagePath, fFileName), "PNG")
END
END

11. Manipulação de Imagens Vetoriais (SVG)

Se o seu projeto envolve gráficos vetoriais, como SVG (Scalable Vector Graphics), é interessante incluir suporte para carregar, manipular e renderizar esses tipos de imagem.

• Como implementar:
• ImageMagick e Skia suportam o carregamento e manipulação de SVG.
• Outra abordagem seria usar uma biblioteca externa que renderize SVG para um formato rasterizado como PNG ou JPG.

// Exemplo de uso do ImageMagick para converter SVG para PNG
PROCEDURE ConvertSVGToPNG(svgPath is string, pngPath is string)
CallDLL32("CORE_RL_magick_.dll", "MagickReadImage", svgPath)
CallDLL32("CORE_RL_magick_.dll", "MagickWriteImage", pngPath)
END

12. Reconhecimento de Códigos de Barras e QR Codes

A detecção de códigos de barras e QR codes pode ser uma funcionalidade importante, especialmente em projetos relacionados a comércio, logística ou identificação. Bibliotecas como ZXing ou ZBar podem ser integradas via DLL para adicionar essa capacidade.

• ZXing (Zebra Crossing): Oferece leitura de códigos de barras e QR codes.

// Pseudocódigo para integrar ZXing para leitura de QR codes
PROCEDURE ReadQRCode(imagePath is string)
CallDLL32("ZXing.dll", "DecodeQRCode", imagePath)
END

13. Remoção de Fundo em Imagens

A remoção automática de fundo de uma imagem, mantendo apenas o objeto principal, é um recurso muito útil em diversos cenários, como edição de fotos ou criação de imagens para e-commerce.

• Background Removal API: Existem APIs específicas, como a remove.bg, que são especializadas em remoção de fundo de imagens. Você pode integrá-las ao seu sistema.

// Exemplo de uso de API de remoção de fundo (remove.bg)
PROCEDURE RemoveBackground(imagePath is string)
httpRequest is httpRequest
httpRequest.URL = "https://api.remove.bg/v1.0/removebg"
httpRequest.Method = httpPost
httpRequest.ContentType = "multipart/form-data"
httpRequest.Content = fLoadBuffer(imagePath)
httpRequest.AddHeader("X-API-Key", "SUA_CHAVE_DE_API")

httpResponse is httpResponse = HTTPRequest(httpRequest)

IF httpResponse.StatusCode = 200 THEN
fSaveBuffer("output_image.png", httpResponse.Content)
ELSE
Error("Erro ao remover fundo", httpResponse.StatusCode)
END
END

14. Análise de Imagens para Segmentação de Objetos

A segmentação de objetos permite identificar e separar objetos dentro de uma imagem, como em aplicações de visão computacional avançada.

• Mask R-CNN: Uma técnica poderosa que pode ser usada para a segmentação de objetos em imagens. Você pode integrar um modelo pré-treinado via APIs ou bibliotecas externas.

// Pseudocódigo para segmentação de objetos com Mask R-CNN via API
PROCEDURE SegmentObjectsInImage(imagePath is string)
// Envia a imagem para um servidor que executa Mask R-CNN
serverURL is string = "http://seu-servidor-mask-rcnn/analyze"
response is httpResponse = HTTPRequest(serverURL, fLoadBuffer(imagePath))

IF response.StatusCode = 200 THEN
Info("Segmentação completa: " + response.Content)
ELSE
Error("Erro na segmentação de objetos")
END
END

15. Reconhecimento de Emoções em Rostos

Outra funcionalidade interessante é a capacidade de reconhecer emoções em rostos em uma imagem. APIs como Microsoft Azure Face API ou Google Cloud Vision podem identificar emoções como alegria, tristeza, raiva, etc.

// Exemplo de integração com Microsoft Azure Face API para reconhecimento de emoções
PROCEDURE AnalyzeEmotionsInImage(imagePath is string)
httpRequest is httpRequest
httpRequest.URL = "https://[REGION].api.cognitive.microsoft.com/face/v1.0/detect?returnFaceAttributes=emotion"
httpRequest.Method = httpPost
httpRequest.AddHeader("Ocp-Apim-Subscription-Key", "SUA_CHAVE_DE_API")
httpRequest.Content = fLoadBuffer(imagePath)

httpResponse is httpResponse = HTTPRequest(httpRequest)

IF httpResponse.StatusCode = 200 THEN
emotionData is string = JSONToText(httpResponse.Content)
Info("Dados de emoções: " + emotionData)
ELSE
Error("Erro ao detectar emoções")
END
END

16. Manipulação de Imagens em Realidade Aumentada (AR)

Se o seu projeto envolve realidade aumentada (AR), você pode explorar a integração com bibliotecas de AR para sobrepor objetos virtuais em imagens ou vídeos em tempo real.

• ARCore (Google): Oferece ferramentas para criar experiências de AR em dispositivos móveis.
• ARKit (Apple): Similar ao ARCore, mas voltado para dispositivos iOS.

Essas integrações exigem que você trabalhe com motores de AR que podem ser invocados dentro do seu aplicativo.

17. Visão Termográfica

Se você estiver trabalhando com imagens térmicas (por exemplo, em diagnósticos industriais ou médicos), pode integrar bibliotecas que permitam processar imagens termográficas.

• FLIR SDK: FLIR é um dos maiores fabricantes de câmeras térmicas, e seu SDK pode ser utilizado para manipular dados de imagem termográfica.

// Pseudocódigo para integração com o SDK da FLIR para processamento de imagens térmicas
PROCEDURE ProcessThermalImage(imagePath is string)
CallDLL32("FLIR.dll", "FLIRLoadImage", imagePath)
CallDLL32("FLIR.dll", "FLIRProcessThermalData")
END

Conclusão

Como você pode ver, há uma vasta gama de funcionalidades que podem ser adicionadas à sua classe de processamento de imagens. Desde integrações com bibliotecas e APIs avançadas, passando por técnicas de otimização e uso de inteligência artificial, você pode expandir as capacidades da sua classe ImageProcessor para atender a quase qualquer necessidade de manipulação de imagens.

Dependendo do escopo do seu projeto, você pode optar por adicionar funcionalidades que otimizem a performance (como processamento paralelo e em blocos) ou funcionalidades que adicionem valor ao usuário final (como reconhecimento de objetos, detecção de emoções, e remoção de fundos). A escolha das ferramentas e bibliotecas certas vai depender das necessidades específicas do seu projeto e dos recursos que você deseja incorporar.

Se você tiver mais perguntas ou quiser aprofundar algum desses tópicos, fique à vontade para perguntar!

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Miembro registrado
4.520 mensajes
Publicado el 14,octubre 2024 - 18:30
O Google oferece uma variedade de APIs poderosas para trabalhar com imagens, fornecendo ferramentas de análise, reconhecimento e manipulação de imagens por meio de aprendizado de máquina e visão computacional. A seguir estão as principais APIs do Google relacionadas ao processamento e análise de imagens:

1. Google Cloud Vision API

A Google Cloud Vision API é uma das APIs mais completas para análise de imagens. Ela permite extrair informações de imagens de várias maneiras, incluindo detecção de objetos, reconhecimento de texto (OCR), detecção de rostos e muito mais.

• Funcionalidades:
• Detecção de rótulos e objetos: Detecta objetos em imagens e retorna uma lista de rótulos que descrevem o conteúdo da imagem.
• Detecção de texto (OCR): Extrai texto de imagens, incluindo texto manuscrito e impresso. Também oferece suporte para detecção de idiomas.
• Detecção de rostos: Identifica rostos humanos em imagens e pode determinar a posição das características faciais (olhos, boca, nariz) e detectar emoções (como alegria, tristeza).
• Detecção de marcas: Reconhece marcas e logotipos comerciais em imagens.
• Classificação de conteúdo explícito: Detecta conteúdo inadequado, como nudez, violência ou conteúdo explícito.
• Segmentação de imagem: Identifica diferentes elementos e objetos dentro de uma imagem, retornando os pixels que correspondem a cada objeto.
• Detecção de cores dominantes: Identifica as cores predominantes em uma imagem.
• Reconhecimento de pontos de referência: Reconhece monumentos e locais de interesse geográfico em imagens.
• Casos de uso:
• Análise de conteúdo visual para aplicativos móveis ou da web.
• Reconhecimento de texto em documentos digitalizados ou fotos.
• Identificação automática de objetos e locais em fotos.
• Documentação: Google Cloud Vision API

Exemplo de solicitação de OCR com Google Vision API (OCR):

POST https://vision.googleapis.com/v1/images:annotate…

{
"requests": [
{
"image": {
"source": {
"imageUri": "gs://path-to-your-image"
}
},
"features": [
{
"type": "TEXT_DETECTION"
}
]
}
]
}

2. Google Photos API

A Google Photos API permite que você acesse e manipule as fotos armazenadas na conta do Google Photos de um usuário. Ela oferece recursos para buscar fotos, criar álbuns, fazer uploads e compartilhar imagens.

• Funcionalidades:
• Busca por fotos: Pesquise fotos no Google Photos com base em metadados, como data, local e palavras-chave.
• Criação de álbuns: Crie álbuns de fotos e adicione ou remova fotos.
• Upload de fotos: Envie fotos diretamente para o Google Photos.
• Compartilhamento: Compartilhe fotos ou álbuns com outros usuários via link.
• Casos de uso:
• Gerenciamento de coleções de fotos do usuário.
• Aplicações de galeria que interagem com as fotos armazenadas no Google Photos.
• Documentação: Google Photos API

Exemplo de solicitação para criar um álbum no Google Photos:

POST https://photoslibrary.googleapis.com/v1/albums

{
"album": {
"title": "My Album Title"
}
}

3. Google Street View Image API

A Street View Image API permite obter imagens de panoramas do Google Street View com base em coordenadas de latitude e longitude ou um local específico. A imagem é retornada como uma única imagem estática de 360 graus.

• Funcionalidades:
• Obtenção de imagens de locais específicos: Permite obter imagens de visualização da rua com base em coordenadas geográficas.
• Customização de imagens: A API permite definir o ponto de vista, o ângulo de visão e o campo de visão da imagem retornada.
• Casos de uso:
• Aplicações que precisam incorporar imagens de ruas para navegação ou visualização de locais.
• Criação de visualizações interativas ou mapeamento de rotas.
• Documentação: Google Street View Image API

Exemplo de URL para obter uma imagem de Street View:

https://maps.googleapis.com/maps/api/streetview…

4. Google Cloud Storage (para armazenamento de imagens)

Embora não seja uma API diretamente voltada para o processamento de imagens, o Google Cloud Storage oferece uma solução de armazenamento altamente escalável para armazenar grandes volumes de imagens e outros arquivos multimídia. Pode ser combinado com outras APIs (como o Vision API) para processar imagens armazenadas na nuvem.

• Funcionalidades:
• Armazenamento de imagens: Armazene, recupere e gerencie imagens em buckets de armazenamento na nuvem.
• Controle de acesso: Defina permissões de acesso para diferentes usuários e aplicativos.
• Integração com outras APIs do Google: Pode ser usado como backend para armazenar dados que serão processados com Vision API ou outras ferramentas.
• Casos de uso:
• Armazenamento de fotos, vídeos ou imagens para posterior análise ou entrega em uma aplicação.
• Backup de imagens e gerenciamento de grandes volumes de arquivos multimídia.
• Documentação: Google Cloud Storage API

5. Google Cloud Video Intelligence API

Embora seja focada principalmente em vídeos, a Google Cloud Video Intelligence API também pode ser usada para analisar frames de vídeos que contêm imagens. A API oferece recursos avançados de reconhecimento de objetos, detecção de atividades e extração de metadados em vídeos, que podem ser aplicados a imagens extraídas dos vídeos.

• Funcionalidades:
• Análise de vídeo quadro a quadro: Extração de informações visuais de vídeos, como objetos, cenas, e atividades em cada frame.
• Detecção de objetos: Identifica objetos e cenas em vídeos e imagens.
• Reconhecimento de texto em vídeos: Usado para detectar texto em imagens capturadas de vídeos.
• Casos de uso:
• Análise de frames de vídeo para identificar objetos em movimento ou rastrear mudanças em imagens.
• Extração de informações visuais de arquivos de vídeo que contenham imagens.
• Documentação: Google Cloud Video Intelligence API

Exemplo de solicitação para detecção de objetos em um vídeo:

POST https://videointelligence.googleapis.com/v1/videos:annotate…

{
"inputUri": "gs://path-to-your-video",
"features": [
"OBJECT_TRACKING"
]
}

6. Google Earth Engine API

O Google Earth Engine API oferece ferramentas de processamento de grandes volumes de dados geoespaciais, incluindo imagens de satélite e dados climáticos. Embora seja voltada para imagens geoespaciais, ela pode ser usada para análise e manipulação de imagens de satélite.

• Funcionalidades:
• Processamento de imagens de satélite: Analise e manipule imagens geoespaciais, como imagens de satélites Landsat, MODIS, Sentinel, entre outros.
• Detecção de mudanças ambientais: Identifique alterações em florestas, corpos d’água, ou áreas urbanas em diferentes períodos.
• Análise temporal: Combine séries temporais de imagens para estudar mudanças ao longo do tempo.
• Casos de uso:
• Monitoramento de mudanças ambientais.
• Processamento de grandes volumes de imagens geoespaciais.
• Documentação: Google Earth Engine API

Exemplo de código para processamento de imagem no Earth Engine:

var landsatImage = ee.ImageCollection('LANDSAT/LC08/C01/T1')
.filterBounds(geometry)
.filterDate('2020-01-01', '2020-12-31')
.sort('CLOUD_COVER')
.first();

Conclusão

O Google oferece uma ampla gama de APIs para trabalhar com imagens, desde análise avançada com aprendizado de máquina até o armazenamento e manipulação de imagens geoespaciais. Dependendo do seu caso de uso, você pode escolher a Google Cloud Vision API para tarefas de reconhecimento de imagens, a Google Photos API para gerenciamento de álbuns e fotos do usuário, ou a Google Street View API para incorporar visualizações de ruas. Se você estiver lidando com vídeos ou imagens de satélite, a Video Intelligence API e o Earth Engine também são ótimas opções.

Se você tiver mais perguntas ou quiser explorar um caso específico com uma dessas APIs, estou à disposição para ajudar!

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Miembro registrado
4.520 mensajes
Publicado el 14,octubre 2024 - 18:33
Aqui está um exemplo detalhado de como usar a Google Cloud Vision API com WLanguage para reconhecer texto em uma imagem (OCR). Esse exemplo envolve uma solicitação HTTP à API do Google para análise de uma imagem, utilizando o método TEXT_DETECTION da API.

Passos para usar a API do Google Vision para reconhecer texto em imagens:

1. Crie um projeto no Google Cloud Console.
• Vá para o Google Cloud Console.
• Crie um novo projeto.
• Ative a Google Cloud Vision API para o projeto.
• Crie uma API Key para autenticação.
2. Configuração no WLanguage:
• Certifique-se de ter o caminho da imagem que deseja analisar.
• Tenha a chave da API (API Key) que foi criada para acessar a API do Google.

Exemplo em WLanguage para chamar a Google Vision API e realizar OCR em uma imagem:

// Definindo a URL da API Vision e sua chave
API_KEY is string = "SUA_CHAVE_DE_API" // Substitua pela sua chave de API
apiURL is string = "https://vision.googleapis.com/v1/images:annotate…=" + API_KEY

// Caminho para a imagem local que será analisada
imagePath is string = "C:\imagens\exemplo.png"

// Função para carregar a imagem em formato Base64
PROCEDURE LoadImageAsBase64(imagePath is string) is string
bufferImage is Buffer = fLoadBuffer(imagePath) // Carrega a imagem como buffer
resultBase64 is string = BufferToBase64(bufferImage) // Converte para Base64
RETURN resultBase64
END

// Função para reconhecer texto na imagem usando a API Google Vision
PROCEDURE RecognizeTextInImage(imagePath is string)
// Carrega a imagem como Base64
base64Image is string = LoadImageAsBase64(imagePath)

// Cria a requisição JSON para a API Vision
requestBody is string = [
'{"requests": [',
'{"image": {"content": "', base64Image, '"},',
'"features": [{"type": "TEXT_DETECTION"}]',
'}]}'
]

// Configura a requisição HTTP
httpRequest is httpRequest
httpRequest..URL = apiURL
httpRequest..Method = httpPost
httpRequest..ContentType = "application/json"
httpRequest..Content = requestBody // Conteúdo da requisição

// Envia a requisição
httpResponse is httpResponse = HTTPRequest(httpRequest)

// Verifica a resposta
IF httpResponse.StatusCode = 200 THEN
// Resposta JSON retornada pela API
responseContent is string = httpResponse.Content
// Exibe o conteúdo extraído
Info("Texto extraído: ", ExtractTextFromJSON(responseContent))
ELSE
Error("Erro na requisição. Código: " + httpResponse.StatusCode)
END
END

// Função para extrair o texto da resposta JSON
PROCEDURE ExtractTextFromJSON(jsonContent is string) is string
// Use a função JSONDecode para analisar o JSON retornado
jsonResponse is object
JSONTo(jsonResponse, jsonContent)

IF jsonResponse.requests[1].fullTextAnnotation.text <> "" THEN
RETURN jsonResponse.requests[1].fullTextAnnotation.text
ELSE
RETURN "Nenhum texto encontrado na imagem."
END
END

// Exemplo de uso
RecognizeTextInImage(imagePath)

Explicação do Código:

1. LoadImageAsBase64: Esta função carrega a imagem de um arquivo local e converte o conteúdo da imagem em uma string Base64, que é o formato necessário para enviar a imagem para a Google Vision API.
2. RecognizeTextInImage: Esta função configura a requisição HTTP para a API, enviando a imagem codificada em Base64 e solicitando a detecção de texto na imagem usando o recurso TEXT_DETECTION.
3. HTTPRequest: A API do Google é acessada usando uma requisição POST, com o conteúdo da imagem codificado em Base64 e a API Key incluída na URL.
4. ExtractTextFromJSON: Esta função extrai o texto reconhecido a partir da resposta JSON que a API retorna. O JSON contém uma estrutura detalhada com o texto detectado na imagem.
5. httpResponse.StatusCode: O código de status HTTP é verificado para garantir que a solicitação foi bem-sucedida (status 200). Se o status for diferente de 200, é exibida uma mensagem de erro.

Resultado Esperado:

• O texto contido na imagem será extraído e exibido na tela através da função Info.
• Se não houver texto na imagem ou se houver um erro na requisição, uma mensagem de erro será exibida.

Considerações Finais:

• Limite de Tamanho: A Google Vision API tem um limite de tamanho de imagem (máximo de 4 MB). Imagens maiores precisam ser otimizadas ou redimensionadas antes de serem enviadas.
• Autenticação: Certifique-se de que sua chave de API está ativa e que você tem permissões corretas para acessar a Google Cloud Vision API.
• Quotas: Verifique os limites de uso gratuito e quotas da API no Google Cloud Console.

Este exemplo demonstra como integrar a API do Google Vision com WLanguage para realizar OCR e reconhecer texto em imagens. É uma abordagem simples, mas poderosa, para processar imagens e obter informações valiosas.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Miembro registrado
4.520 mensajes
Publicado el 14,octubre 2024 - 18:36
Atualmente, a Google Cloud Vision API não fornece um método direto para converter imagens coloridas em preto e branco (grayscale). A Google Vision API é mais focada na análise e reconhecimento de imagens (OCR, detecção de objetos, etc.), mas não em manipulação direta da imagem, como conversão para grayscale. Para essa funcionalidade, você precisaria de bibliotecas de manipulação de imagens, como ImageMagick, OpenCV, ou algo similar.

No entanto, é possível converter uma imagem colorida em preto e branco antes de enviá-la à Google Cloud Vision API para análise, usando o WLanguage com bibliotecas de manipulação de imagens locais. Abaixo está um exemplo de como fazer isso usando uma abordagem local com WLanguage, para converter a imagem colorida em preto e branco e, depois, enviá-la à Google Cloud Vision API para OCR ou outro tipo de análise.

Passos:

1. Converter a imagem colorida para preto e branco usando WLanguage.
2. Enviar a imagem convertida para a Google Vision API para análise (por exemplo, OCR).

Exemplo em WLanguage: Converter imagem colorida para preto e branco e enviar para a API do Google Vision

1. Conversão de Imagem Colorida para Preto e Branco usando WLanguage

// Função para converter uma imagem colorida em preto e branco
PROCEDURE ConvertToBlackAndWhite(imagePath is string, outputPath is string)
// Carrega a imagem original
imgOriginal is Image = dLoadImage(imagePath, imgDefault)

// Loop pelos pixels da imagem
FOR y = 0 TO imgOriginal..Height - 1
FOR x = 0 TO imgOriginal..Width - 1
// Pega a cor atual do pixel
pixelColor = dPixelColor(imgOriginal, x, y)

// Calcula o valor médio para conversão em escala de cinza (preto e branco)
grayValue is int = (RGBRed(pixelColor) + RGBGreen(pixelColor) + RGBBlue(pixelColor)) / 3

// Define a nova cor do pixel em escala de cinza
grayColor is int = RGB(grayValue, grayValue, grayValue)
dSetPixel(imgOriginal, x, y, grayColor)
END
END

// Salva a imagem convertida em preto e branco
dSaveImagePNG(imgOriginal, outputPath)

RETURN outputPath
END

2. Enviar a Imagem Preto e Branco para a Google Vision API

Depois de converter a imagem para preto e branco, você pode enviar a imagem processada para a Google Vision API. O código abaixo usa o mesmo formato de exemplo anterior para realizar o OCR na imagem em preto e branco.

// Função para carregar a imagem em formato Base64
PROCEDURE LoadImageAsBase64(imagePath is string) is string
bufferImage is Buffer = fLoadBuffer(imagePath) // Carrega a imagem como buffer
resultBase64 is string = BufferToBase64(bufferImage) // Converte para Base64
RETURN resultBase64
END

// Função para reconhecer texto na imagem em preto e branco usando a API Google Vision
PROCEDURE RecognizeTextInBWImage(imagePath is string)
// Convertendo a imagem para preto e branco
bwImagePath is string = "C:\imagens\imagem_bw.png"
ConvertToBlackAndWhite(imagePath, bwImagePath)

// Carrega a imagem convertida (preto e branco) como Base64
base64Image is string = LoadImageAsBase64(bwImagePath)

// Cria a requisição JSON para a API Vision
API_KEY is string = "SUA_CHAVE_DE_API" // Substitua pela sua chave de API
apiURL is string = "https://vision.googleapis.com/v1/images:annotate…=" + API_KEY

requestBody is string = [
'{"requests": [',
'{"image": {"content": "', base64Image, '"},',
'"features": [{"type": "TEXT_DETECTION"}]',
'}]}'
]

// Configura a requisição HTTP
httpRequest is httpRequest
httpRequest..URL = apiURL
httpRequest..Method = httpPost
httpRequest..ContentType = "application/json"
httpRequest..Content = requestBody // Conteúdo da requisição

// Envia a requisição
httpResponse is httpResponse = HTTPRequest(httpRequest)

// Verifica a resposta
IF httpResponse.StatusCode = 200 THEN
// Resposta JSON retornada pela API
responseContent is string = httpResponse.Content
// Exibe o conteúdo extraído
Info("Texto extraído: ", ExtractTextFromJSON(responseContent))
ELSE
Error("Erro na requisição. Código: " + httpResponse.StatusCode)
END
END

// Função para extrair o texto da resposta JSON
PROCEDURE ExtractTextFromJSON(jsonContent is string) is string
// Use a função JSONDecode para analisar o JSON retornado
jsonResponse is object
JSONTo(jsonResponse, jsonContent)

IF jsonResponse.responses[1].fullTextAnnotation.text <> "" THEN
RETURN jsonResponse.responses[1].fullTextAnnotation.text
ELSE
RETURN "Nenhum texto encontrado na imagem."
END
END

// Exemplo de uso
RecognizeTextInBWImage("C:\imagens\exemplo_colorido.png")

Explicação dos Passos:

1. ConvertToBlackAndWhite: Esta função converte uma imagem colorida em preto e branco (grayscale) utilizando a manipulação de pixels. Ela salva a imagem convertida em um novo caminho.
2. LoadImageAsBase64: A função carrega a imagem em preto e branco convertida e a transforma em uma string Base64, que é necessária para o envio à Google Vision API.
3. RecognizeTextInBWImage: Essa função coordena todo o processo:
• Converte a imagem original colorida para preto e branco.
• Carrega a imagem convertida e a envia para a Google Vision API para reconhecimento de texto (OCR).
• Exibe o texto reconhecido ou uma mensagem de erro, caso não seja encontrado texto.
4. ExtractTextFromJSON: Extrai o texto da resposta JSON retornada pela Google Vision API, processando o resultado do OCR.

Considerações Finais:

• Conversão para Preto e Branco: A conversão da imagem para preto e branco é feita localmente no WLanguage usando a função dPixelColor para manipular os valores dos pixels.
• Integração com Google Vision API: Após a conversão, a imagem preto e branco é enviada para a Google Vision API para reconhecimento de texto.
• Uso da API: Lembre-se de garantir que a chave de API do Google Cloud está corretamente configurada e que o projeto tem acesso à Google Vision API.

Se precisar de mais alguma ajuda para ajustar o código ou integrar outros recursos, estou à disposição!

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Miembro registrado
4.520 mensajes
Publicado el 14,octubre 2024 - 18:41
Aqui está uma lista de comandos WLanguage usados para trabalhar com imagens, junto com um breve descritivo de cada comando:

Comandos de Manipulação de Imagens no WLanguage:

1. dLoadImage
• Descrição: Carrega uma imagem de um arquivo em um controle de imagem ou variável do tipo Image.
• Exemplo: img is Image = dLoadImage("imagem.png")
• Referência
2. dSaveImagePNG
• Descrição: Salva uma imagem em formato PNG em um arquivo.
• Exemplo: dSaveImagePNG(img, "imagem_bw.png")
• Referência
3. dSaveImageJPEG
• Descrição: Salva uma imagem em formato JPEG com um nível de compressão especificado.
• Exemplo: dSaveImageJPEG(img, "imagem.jpg", 80)
• Referência
4. dResize
• Descrição: Redimensiona uma imagem para novas dimensões (largura e altura).
• Exemplo: dResize(img, 300, 200)
• Referência
5. dPixelColor
• Descrição: Retorna a cor de um pixel específico da imagem.
• Exemplo: colorPixel = dPixelColor(img, x, y)
• Referência
6. dSetPixel
• Descrição: Define a cor de um pixel específico em uma imagem.
• Exemplo: dSetPixel(img, x, y, RGB(255, 0, 0))
• Referência
7. dModifyLightness
• Descrição: Modifica o nível de iluminação (brilho) de uma imagem.
• Exemplo: dModifyLightness(img, 20)
• Referência
8. dModifyContrast
• Descrição: Modifica o nível de contraste de uma imagem.
• Exemplo: dModifyContrast(img, 30)
• Referência
9. dModifyOpacity
• Descrição: Modifica a opacidade (transparência) de uma imagem.
• Exemplo: dModifyOpacity(img, 50)
• Referência
10. dRotate
• Descrição: Rotaciona uma imagem pelo ângulo especificado (em graus).
• Exemplo: dRotate(img, 90)
• Referência
11. dMirrorHorizontal
• Descrição: Espelha a imagem horizontalmente.
• Exemplo: dMirrorHorizontal(img)
• Referência
12. dMirrorVertical
• Descrição: Espelha a imagem verticalmente.
• Exemplo: dMirrorVertical(img)
• Referência
13. dCrop
• Descrição: Recorta uma imagem para uma área especificada.
• Exemplo: imgCropped = dCrop(img, 10, 10, 100, 100)
• Referência
14. dBlur
• Descrição: Aplica um efeito de desfoque à imagem.
• Exemplo: dBlur(img, 5)
• Referência
15. dSharpen
• Descrição: Aplica um efeito de nitidez à imagem.
• Exemplo: dSharpen(img, 10)
• Referência
16. dText
• Descrição: Insere texto em uma imagem.
• Exemplo: dText(img, "Exemplo", 100, 100, RGB(255, 255, 255), 12)
• Referência
17. dAlphaBlend
• Descrição: Mescla duas imagens, permitindo controlar a opacidade (útil para sobrepor uma imagem).
• Exemplo: dAlphaBlend(imgBase, imgWatermark, 50)
• Referência
18. dHistogram
• Descrição: Calcula o histograma de uma imagem, fornecendo a distribuição das cores.
• Exemplo: histogram = dHistogram(img)
• Referência
19. dSepia
• Descrição: Aplica um efeito sépia à imagem, simulando fotos antigas.
• Exemplo: dSepia(img)
• Referência
20. dGrayScale
• Descrição: Converte uma imagem colorida para escala de cinza (grayscale).
• Exemplo: dGrayScale(img)
• Referência
21. dInvert
• Descrição: Inverte as cores de uma imagem, gerando um efeito negativo.
• Exemplo: dInvert(img)
• Referência
22. dLoadImageFromBuffer
• Descrição: Carrega uma imagem diretamente de um buffer (útil para imagens armazenadas na memória).
• Exemplo: img = dLoadImageFromBuffer(bufferImage)
• Referência
23. dModifySaturation
• Descrição: Modifica o nível de saturação das cores de uma imagem.
• Exemplo: dModifySaturation(img, 50)
• Referência
24. dCopyRect
• Descrição: Copia uma área retangular de uma imagem para outra.
• Exemplo: dCopyRect(imgSource, imgDest, x, y, width, height)
• Referência
25. dTransparentColor
• Descrição: Define uma cor específica de uma imagem como transparente.
• Exemplo: dTransparentColor(img, RGB(255, 255, 255))
• Referência

Considerações:

• Estes comandos são parte da biblioteca gráfica do WLanguage e são amplamente utilizados para manipulação, edição e análise de imagens.
• Links de Referência: Para mais detalhes sobre cada comando, visite o site oficial de ajuda do Windev: help.windev.com.

Caso você precise de mais detalhes ou exemplos de como usar algum comando específico, estarei à disposição para ajudar!

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/