SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
Universidade Federal de Santa Catarina - UFSC
Computação e Programação Aplicada ao Processo de Projeto
Professor: Carlos Eduardo Verzola Vaz
Aluno: Jaceguay Zukoski
Sensoriamento por imagens na análise da
utilização de equipamentos urbanos:
Playgrounds em praças públicas
• Objetivo
• Metodologia
• Estudos
• Conclusão
Levantar dados sobre a utilização de equipamentos urbanos, especificamente playgrounds em praças
públicas.
O tratamento dos dados armazenados baseia-se na correlação da densidade de usuários ao longo do
tempo, utilizando-se de técnicas de processamento de imagem.
Tanto a captura quanto o processamento devem ocorrer in-loco, deste modo lidando com restrições sobre
o armazenamento das imagens ou banda para transmissão de dados.
Objetivo:
Metodologia:
As imagens coletadas são processadas diretamente pela
unidade, o resultado é gravado em um mapa de pontos
como um arquivo .csv contendo as coordenadas do ponto,
seu rótulo e tempo em segundos da sua captura:
Metodologia:
Equipamentos:
- Raspberry Pie Model 3B
- Módulo câmera Ov5647 5mp 75° 3.6mm 1080p
- Cartão SD 32Gb
O processamento prevê a visualização da densidade do
uso do espaço através da soma destes pontos.
Metodologia:
Etapas:
- Pré-processamento: remoção de ruído, ajuste de
contraste e normalização;
- Realce: Filtros a fim de destacar as características
básicas (formas, texturas e iluminação);
- Segmentação: Separação em partes
distintas(objetos) e fundo da imagem;
- Classificação: Aplicação de um modelo treinado
por aprendizado de máquina para atribuição do
significado de cada objeto (rótulo).
segmentação de imagem e seleção de objetos. (fonte: https://blogs.nvidia.com)
Aplicação de operações primitivas à imagens (ruído, contraste, nitidez, aplicação de filtros…).
São tratados os valores dos pixels e aplicados métodos estatísticos para sua classificação:
transformação do espaço de cores da combinação RGB(vermelho, verde e azul) em HSV(tom, saturação e valor)
cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
Metodologia - exemplo tratamento de baixo nível :
Definição de um intervalo que representa melhor a área de vegetação, criação de uma máscara, o mesmo foi feito com a areia:
lower_veg = np.array([0, 40, 30])
upper_veg = np.array([170, 255, 90])
mask_veg = cv2.inRange(hsv, lower_veg, upper_veg)
Metodologia - exemplo tratamento de baixo nível :
# ler e transformar imagem
image = cv2.imread('DJI_0128.JPG')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# aplicar modelo de segmentação
sam = sam_model_registry["vit_h"](
checkpoint="sam_vit_h_4b8939.pth")
mask_generator = SamAutomaticMaskGenerator(sam)
masks = mask_generator.generate(image)
# selecionar máscaras com base na área
masks_filtradas = [ann for ann in masks if (ann['area'] > 500) & (ann['area'] < 10000)]
# classificar os objetos encontrados
model = YOLO("yolov8m.pt")
results = model(frame, device="mps")
result = results[0]
bboxes = np.array(result.boxes.xyxy.cpu(), dtype="int")
classes = np.array(result.boxes.cls.cpu(), dtype="int")
Metodologia - exemplo tratamento de alto nível :
Metodologia:
Protótipo:
Estudos:
Estudo 1:
Diferença entre pixels, duas capturas a cada segundo
def comparar_imgs(img1, img2):
# imagens para binário
img1 = cv2.imread(img1)
img2 = cv2.imread(img2)
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
(thresh1, binary1) = cv2.threshold(gray1, 127, 255, cv2.THRESH_BINARY)
(thresh2, binary2) = cv2.threshold(gray2, 127, 255, cv2.THRESH_BINARY)
# diferença entre as imagens
diff = cv2.absdiff(binary1, binary2)
# segmentar o resultado em partes com áreas agrupadas
kernel = np.ones((5, 5), np.uint8)
diff = cv2.morphologyEx(diff, cv2.MORPH_OPEN, kernel)
# encontar os contornos
contours, hierarchy = cv2.findContours(diff, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# uma caixa delimitadora para cada área
boxes = []
for c in contours:
(x, y, w, h) = cv2.boundingRect(c)
boxes.append((x, y, x+w, y+h))
# resultado da diferença,em vermelho as caixas delimitadoras com área maior que 200 pixels
fig, ax = plt.subplots(1, 2, figsize=(20, 8))
ax[0].imshow(diff, cmap='gray')
ax[1].imshow(cv2.drawContours(cv2.cvtColor(diff, cv2.COLOR_GRAY2RGB), contours, -1, (0, 255, 0), 2))
for box in boxes:
if (box[2]-box[0])*(box[3]-box[1]) > 200:
ax[1].add_patch(plt.Rectangle((box[0], box[1]), box[2]-box[0], box[3]-box[1], fill=False, color='red'))
plt.show()
resultado da diferença entre as duas imagens convertidas em imagens monocromáticas, as caixas
delimitadoras com área maior que 200 pixels demarcadas em vermelho:
Estudo 1:
Diferença entre pixels, duas capturas a cada segundo
Estudo 1:
Diferença entre pixels, duas capturas a cada segundo
Estudo 2:
Modelo de classificação de objetos if quadro % 60 == 0:
results = model(frame, device="mps")
result = results[0]
bboxes = np.array(result.boxes.xyxy.cpu(), dtype="int")
classes = np.array(result.boxes.cls.cpu(), dtype="int")
# columnas: coordenada x, y do centróide, classe, quadro e segundo
for cls, bbox in zip(classes, bboxes):
(x, y, x2, y2) = bbox
x_centroide = (x + x2) / 2
y_centroide = (y + y2) / 2
df = pd.DataFrame(
{
"x_centroide": [str(int(x_centroide))],
"y_centroide": [str(int(y_centroide))],
"classe": [str(int(cls))],
"quadro": [str(int(quadro))],
"segundo": [str(int(quadro / 60))],
}
)
df.to_csv(f"centroids/{str(int(quadro))}.csv",
header=False, mode="a", index=False)
You only look once (YOLO)
é um método de detecção de objetos em tempo real que é baseado em
uma única rede neural convolucional (CNN). Esta é responsável em dividir
e classificar a imagem.
A imagem é dividida em regiões iguais que são avaliadas por sua
probabilidade em serem parte de uma classe, incluindo a probabilidade da
posição da caixa delimitadora da classe com base na célula.
fonte: https://pjreddie.com/darknet/yolo/
Estudo 2:
Modelo de classificação de objetos
Estudo 2:
Modelo de classificação de objetos
Estudo 2:
Soma dos pontos detectados ao longo de 45 minutos classe pessoas
Conclusão:
O modelo de baixo nível, possui como vantagens o baixo requisito de
processamento e principalmente a capacidade de funcionar em imagens de
baixa resolução. Já o modelo de alto nível pode capturar o uso do espaço de
modo mais abrangente.
A partir dos resultados obtidos, é possível concluir que a metodologia utilizada
com o modelo de detecção de objetos é eficaz para coletar e tratar dados sobre
o uso dos playgrounds em praças públicas.
É contudo necessário acrescentar uma etapa de contextualização para cada
cenário, de acordo com o local de monitoramento. Para que efetivamente
possam ser comparadas às áreas de lazer infantil, estares e circulação.

Mais conteúdo relacionado

Semelhante a Sensoriamento imagens playgrounds

Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowDevMT
 
Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowGuilherme Campos
 
isk-daemon: busca visual de imagens para todos
isk-daemon: busca visual de imagens para todosisk-daemon: busca visual de imagens para todos
isk-daemon: busca visual de imagens para todosRicardo Cabral
 
Automação de BackOffice de uma grande corporação financeira usando Visão Comp...
Automação de BackOffice de uma grande corporação financeira usando Visão Comp...Automação de BackOffice de uma grande corporação financeira usando Visão Comp...
Automação de BackOffice de uma grande corporação financeira usando Visão Comp...Antonio Carlos da Silva Senra Filho
 
Defesa do meu Mestrado: Segmentação de Imagens 3D com Crescimento de Regiões
Defesa do meu Mestrado: Segmentação de Imagens 3D com Crescimento de RegiõesDefesa do meu Mestrado: Segmentação de Imagens 3D com Crescimento de Regiões
Defesa do meu Mestrado: Segmentação de Imagens 3D com Crescimento de RegiõesTiago Antônio da Silva
 
Tutorial QGIS sobre Análise Fisiográfica
Tutorial QGIS sobre Análise FisiográficaTutorial QGIS sobre Análise Fisiográfica
Tutorial QGIS sobre Análise Fisiográficanlourei
 
Simulador Eletromagnético em um Ambiente de Grades Computacionais
Simulador Eletromagnético em um Ambiente de Grades ComputacionaisSimulador Eletromagnético em um Ambiente de Grades Computacionais
Simulador Eletromagnético em um Ambiente de Grades ComputacionaisIgor José F. Freitas
 
Bootstrap Evaluation in R - Source Code
Bootstrap Evaluation in R -  Source CodeBootstrap Evaluation in R -  Source Code
Bootstrap Evaluation in R - Source CodeMichel Alves
 
QGIS 2.4: Recorte de Raster via Shapefile (Batch Mode)
QGIS 2.4: Recorte de Raster via Shapefile (Batch Mode)QGIS 2.4: Recorte de Raster via Shapefile (Batch Mode)
QGIS 2.4: Recorte de Raster via Shapefile (Batch Mode)Jorge Santos
 
Algoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizesAlgoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizesRADILSON RIPARDO DE FRETIAS
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
Tutorial de econometria espacial utilizando o stata
Tutorial de econometria espacial utilizando o stataTutorial de econometria espacial utilizando o stata
Tutorial de econometria espacial utilizando o stataRicardo Schuch
 
Computação Gráfica em Python
Computação Gráfica em PythonComputação Gráfica em Python
Computação Gráfica em Pythongsroma
 
Escola municipal educandário dixseptiens9ºano
Escola municipal educandário dixseptiens9ºanoEscola municipal educandário dixseptiens9ºano
Escola municipal educandário dixseptiens9ºanoFrancisca Maia Maia
 
ITA - CE-235 - CE-230 - Apresentação Final - SETRAIF - DCN
ITA - CE-235 - CE-230 - Apresentação Final - SETRAIF - DCNITA - CE-235 - CE-230 - Apresentação Final - SETRAIF - DCN
ITA - CE-235 - CE-230 - Apresentação Final - SETRAIF - DCNJefferson Andrade
 

Semelhante a Sensoriamento imagens playgrounds (20)

Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlow
 
Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlow
 
isk-daemon: busca visual de imagens para todos
isk-daemon: busca visual de imagens para todosisk-daemon: busca visual de imagens para todos
isk-daemon: busca visual de imagens para todos
 
Automação de BackOffice de uma grande corporação financeira usando Visão Comp...
Automação de BackOffice de uma grande corporação financeira usando Visão Comp...Automação de BackOffice de uma grande corporação financeira usando Visão Comp...
Automação de BackOffice de uma grande corporação financeira usando Visão Comp...
 
Defesa do meu Mestrado: Segmentação de Imagens 3D com Crescimento de Regiões
Defesa do meu Mestrado: Segmentação de Imagens 3D com Crescimento de RegiõesDefesa do meu Mestrado: Segmentação de Imagens 3D com Crescimento de Regiões
Defesa do meu Mestrado: Segmentação de Imagens 3D com Crescimento de Regiões
 
Scipy meetup-2020-02
Scipy meetup-2020-02Scipy meetup-2020-02
Scipy meetup-2020-02
 
MRO simula
MRO simulaMRO simula
MRO simula
 
comparaciones
comparacionescomparaciones
comparaciones
 
18comparaciones
18comparaciones18comparaciones
18comparaciones
 
Visão Computacional
Visão ComputacionalVisão Computacional
Visão Computacional
 
Tutorial QGIS sobre Análise Fisiográfica
Tutorial QGIS sobre Análise FisiográficaTutorial QGIS sobre Análise Fisiográfica
Tutorial QGIS sobre Análise Fisiográfica
 
Simulador Eletromagnético em um Ambiente de Grades Computacionais
Simulador Eletromagnético em um Ambiente de Grades ComputacionaisSimulador Eletromagnético em um Ambiente de Grades Computacionais
Simulador Eletromagnético em um Ambiente de Grades Computacionais
 
Bootstrap Evaluation in R - Source Code
Bootstrap Evaluation in R -  Source CodeBootstrap Evaluation in R -  Source Code
Bootstrap Evaluation in R - Source Code
 
QGIS 2.4: Recorte de Raster via Shapefile (Batch Mode)
QGIS 2.4: Recorte de Raster via Shapefile (Batch Mode)QGIS 2.4: Recorte de Raster via Shapefile (Batch Mode)
QGIS 2.4: Recorte de Raster via Shapefile (Batch Mode)
 
Algoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizesAlgoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizes
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Tutorial de econometria espacial utilizando o stata
Tutorial de econometria espacial utilizando o stataTutorial de econometria espacial utilizando o stata
Tutorial de econometria espacial utilizando o stata
 
Computação Gráfica em Python
Computação Gráfica em PythonComputação Gráfica em Python
Computação Gráfica em Python
 
Escola municipal educandário dixseptiens9ºano
Escola municipal educandário dixseptiens9ºanoEscola municipal educandário dixseptiens9ºano
Escola municipal educandário dixseptiens9ºano
 
ITA - CE-235 - CE-230 - Apresentação Final - SETRAIF - DCN
ITA - CE-235 - CE-230 - Apresentação Final - SETRAIF - DCNITA - CE-235 - CE-230 - Apresentação Final - SETRAIF - DCN
ITA - CE-235 - CE-230 - Apresentação Final - SETRAIF - DCN
 

Sensoriamento imagens playgrounds

  • 1. Universidade Federal de Santa Catarina - UFSC Computação e Programação Aplicada ao Processo de Projeto Professor: Carlos Eduardo Verzola Vaz Aluno: Jaceguay Zukoski Sensoriamento por imagens na análise da utilização de equipamentos urbanos: Playgrounds em praças públicas
  • 2. • Objetivo • Metodologia • Estudos • Conclusão
  • 3. Levantar dados sobre a utilização de equipamentos urbanos, especificamente playgrounds em praças públicas. O tratamento dos dados armazenados baseia-se na correlação da densidade de usuários ao longo do tempo, utilizando-se de técnicas de processamento de imagem. Tanto a captura quanto o processamento devem ocorrer in-loco, deste modo lidando com restrições sobre o armazenamento das imagens ou banda para transmissão de dados. Objetivo:
  • 5. As imagens coletadas são processadas diretamente pela unidade, o resultado é gravado em um mapa de pontos como um arquivo .csv contendo as coordenadas do ponto, seu rótulo e tempo em segundos da sua captura: Metodologia: Equipamentos: - Raspberry Pie Model 3B - Módulo câmera Ov5647 5mp 75° 3.6mm 1080p - Cartão SD 32Gb O processamento prevê a visualização da densidade do uso do espaço através da soma destes pontos.
  • 6. Metodologia: Etapas: - Pré-processamento: remoção de ruído, ajuste de contraste e normalização; - Realce: Filtros a fim de destacar as características básicas (formas, texturas e iluminação); - Segmentação: Separação em partes distintas(objetos) e fundo da imagem; - Classificação: Aplicação de um modelo treinado por aprendizado de máquina para atribuição do significado de cada objeto (rótulo). segmentação de imagem e seleção de objetos. (fonte: https://blogs.nvidia.com)
  • 7. Aplicação de operações primitivas à imagens (ruído, contraste, nitidez, aplicação de filtros…). São tratados os valores dos pixels e aplicados métodos estatísticos para sua classificação: transformação do espaço de cores da combinação RGB(vermelho, verde e azul) em HSV(tom, saturação e valor) cv2.cvtColor(img, cv2.COLOR_RGB2HSV) Metodologia - exemplo tratamento de baixo nível :
  • 8. Definição de um intervalo que representa melhor a área de vegetação, criação de uma máscara, o mesmo foi feito com a areia: lower_veg = np.array([0, 40, 30]) upper_veg = np.array([170, 255, 90]) mask_veg = cv2.inRange(hsv, lower_veg, upper_veg) Metodologia - exemplo tratamento de baixo nível :
  • 9. # ler e transformar imagem image = cv2.imread('DJI_0128.JPG') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # aplicar modelo de segmentação sam = sam_model_registry["vit_h"]( checkpoint="sam_vit_h_4b8939.pth") mask_generator = SamAutomaticMaskGenerator(sam) masks = mask_generator.generate(image) # selecionar máscaras com base na área masks_filtradas = [ann for ann in masks if (ann['area'] > 500) & (ann['area'] < 10000)] # classificar os objetos encontrados model = YOLO("yolov8m.pt") results = model(frame, device="mps") result = results[0] bboxes = np.array(result.boxes.xyxy.cpu(), dtype="int") classes = np.array(result.boxes.cls.cpu(), dtype="int") Metodologia - exemplo tratamento de alto nível :
  • 12. Estudo 1: Diferença entre pixels, duas capturas a cada segundo def comparar_imgs(img1, img2): # imagens para binário img1 = cv2.imread(img1) img2 = cv2.imread(img2) gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) (thresh1, binary1) = cv2.threshold(gray1, 127, 255, cv2.THRESH_BINARY) (thresh2, binary2) = cv2.threshold(gray2, 127, 255, cv2.THRESH_BINARY) # diferença entre as imagens diff = cv2.absdiff(binary1, binary2) # segmentar o resultado em partes com áreas agrupadas kernel = np.ones((5, 5), np.uint8) diff = cv2.morphologyEx(diff, cv2.MORPH_OPEN, kernel) # encontar os contornos contours, hierarchy = cv2.findContours(diff, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # uma caixa delimitadora para cada área boxes = [] for c in contours: (x, y, w, h) = cv2.boundingRect(c) boxes.append((x, y, x+w, y+h)) # resultado da diferença,em vermelho as caixas delimitadoras com área maior que 200 pixels fig, ax = plt.subplots(1, 2, figsize=(20, 8)) ax[0].imshow(diff, cmap='gray') ax[1].imshow(cv2.drawContours(cv2.cvtColor(diff, cv2.COLOR_GRAY2RGB), contours, -1, (0, 255, 0), 2)) for box in boxes: if (box[2]-box[0])*(box[3]-box[1]) > 200: ax[1].add_patch(plt.Rectangle((box[0], box[1]), box[2]-box[0], box[3]-box[1], fill=False, color='red')) plt.show()
  • 13. resultado da diferença entre as duas imagens convertidas em imagens monocromáticas, as caixas delimitadoras com área maior que 200 pixels demarcadas em vermelho: Estudo 1: Diferença entre pixels, duas capturas a cada segundo
  • 14. Estudo 1: Diferença entre pixels, duas capturas a cada segundo
  • 15. Estudo 2: Modelo de classificação de objetos if quadro % 60 == 0: results = model(frame, device="mps") result = results[0] bboxes = np.array(result.boxes.xyxy.cpu(), dtype="int") classes = np.array(result.boxes.cls.cpu(), dtype="int") # columnas: coordenada x, y do centróide, classe, quadro e segundo for cls, bbox in zip(classes, bboxes): (x, y, x2, y2) = bbox x_centroide = (x + x2) / 2 y_centroide = (y + y2) / 2 df = pd.DataFrame( { "x_centroide": [str(int(x_centroide))], "y_centroide": [str(int(y_centroide))], "classe": [str(int(cls))], "quadro": [str(int(quadro))], "segundo": [str(int(quadro / 60))], } ) df.to_csv(f"centroids/{str(int(quadro))}.csv", header=False, mode="a", index=False) You only look once (YOLO) é um método de detecção de objetos em tempo real que é baseado em uma única rede neural convolucional (CNN). Esta é responsável em dividir e classificar a imagem. A imagem é dividida em regiões iguais que são avaliadas por sua probabilidade em serem parte de uma classe, incluindo a probabilidade da posição da caixa delimitadora da classe com base na célula. fonte: https://pjreddie.com/darknet/yolo/
  • 16. Estudo 2: Modelo de classificação de objetos
  • 17. Estudo 2: Modelo de classificação de objetos
  • 18. Estudo 2: Soma dos pontos detectados ao longo de 45 minutos classe pessoas
  • 19. Conclusão: O modelo de baixo nível, possui como vantagens o baixo requisito de processamento e principalmente a capacidade de funcionar em imagens de baixa resolução. Já o modelo de alto nível pode capturar o uso do espaço de modo mais abrangente. A partir dos resultados obtidos, é possível concluir que a metodologia utilizada com o modelo de detecção de objetos é eficaz para coletar e tratar dados sobre o uso dos playgrounds em praças públicas. É contudo necessário acrescentar uma etapa de contextualização para cada cenário, de acordo com o local de monitoramento. Para que efetivamente possam ser comparadas às áreas de lazer infantil, estares e circulação.