Ambiente de suporte ao ensino de processamento de imagens usando a linguagem Python Alexandre Gonçalves Silva Roberto de Alencar Lotufo Rubens Campos Machado Universidade Estadual de Campinas SBIE 2002 Sumário • Introdução • Modelo de programação Representação de imagens Manipulação matricial • Ambiente de desenvolvimento A linguagem Python O sistema Adesso • Resultados Caixa de ferramentas Corretor automático • Conclusões SBIE 2002 2 Introdução (1) Almeida 96 • Processamento de imagens Biologia, astronomia, engenharia, geologia, artes, ... • Ferramentas apropriadas existentes Khoros, MATLAB, ImageMagik, PhotoPixJ(1) , ... • A linguagem Python e seu pacote numérico • O sistema Adesso • Motivação Agregar o melhor das plataformas • Objetivos Desenvolvimento de um ambiente aberto, multiplataforma, de fácil aprendizagem, para ensino e pesquisa SBIE 2002 3 Modelo de Programação (1) • Níveis de programação Linguagem de Sistema Linguagem Visual • Representação de imagens SBIE 2002 4 Modelo de Programação (2) • Varredura explícita e implícita • Exemplo 1: cálculo do erro médio quadrático 1 MSE Nh Nw Varredura explícita f (i, j, k ) f (i, j, k ) N h 1N w 1 2 i 0 j 0 k 0 2 1 2 Varredura implícita MSE = 0 Nh = altura(f1) Nh = altura(f1) Nw = largura(f1) Nw = largura(f1) MSE = (lineariza(f1) – lineariza(f2 Para todo i entre 0 e Nh-1 faça: MSE = soma(MSE) / (Nh*Nw) Imagem colorida 256x256 Tempo (s) ))2 MATLAB (implícita) 0,038 C 0,051 Python (implícita) 0,136 Java 0,198 Python (explícita) 4,473 Para todo j entre 0 e Nw-1 faça: Para todo k entre 0 e 2 faça: MSE = MSE + (f1[i,j,k] – f2[i,j,k])2 MATLAB (explícita) MSE = MSE / (Nh*Nw) SBIE 2002 14,628 5 Modelo de Programação (3) • Exemplo 2: sintetizar uma imagem em forma de xadrez z(i, j ) x(i, j ) y(i, j )%2 1 2 N 1 2 M 2 2 1 2 M %2 N N 1 2 M 1 1 SBIE 2002 0 1 0 1 1 0 1 0 0 1 0 1 6 Ambiente de desenvolvimento (1) • Programação em Python Interpretada Genérica Multiplataforma Orientada a objetos Sintaxe – – – – Rápida prototipação (RAD) Não declarativa e com tipagem dinâmica Blocos pela identação Flexibilidade de argumentos Código aberto SBIE 2002 7 Ambiente de desenvolvimento (2) • Programação em Python (continuação...) Mecanismo de erros e exceções Eficiente reutilização de código (módulos) Coleta de lixo automática Recursos avançados de manipulação de textos, listas e dicionários Facilmente estendível (API) SBIE 2002 8 Ambiente de desenvolvimento (3) • Pacote numérico (Numerical Python) Extensão de código aberto Projetado sob influência de plataformas como o MATLAB Implementação de arrays multidimensionais – Processar volume de dados (números) tão eficientemente quanto linguagens de sistema Módulos: Numeric, FFT, LinearAlgebra, Mlab, RandomArray, ... Por sua vez, facilmente estendível Exemplo: >>> import Numeric >>> Numeric.zeros((3,5)) array([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]) SBIE 2002 9 Ambiente de desenvolvimento (4) • Interface gráfica Tkinter Gnuplot / Gnuplot.py • Formatos de arquivo PIL SBIE 2002 10 Ambiente de desenvolvimento (5) • O sistema Adesso Parceria com o CenPRA Baseado em componentes reutilizáveis Base de dados em XML e ferramentas de transformação Geração de código, documentação e empacotamento .c .c (API) Makefile Base de Dados XML Linguagem C Python MATLAB Processador de Estilos .py .m LaTeX HTML Folhas de Estilo SBIE 2002 11 Ambiente de desenvolvimento (6) • Transformações implementadas no Adesso para Python Geração de código – – – – Geração de funções Geração de demonstrações Geração de testsuites Flexibilidade de argumentos Geração de wrapper Geração de setup Geração de documentação ilustrada (descrições, saídas numéricas, gráficos, imagens e equações) – DocBook – LaTeX – HTML SBIE 2002 12 Ambiente de desenvolvimento (7) • Exemplo de transformação: <AdFunction lang="python matlab"> <Documentation> <Descr name="Description">Generate a cosenosoid image of size s with amplitude 1, period T, phase phi and wave direction of theta. The output image is a double array.</Descr> <Descr name="Examples"> <PYcode>import Numeric f = <Self/>([128,256], 100, Numeric.pi/4, 0) iashow(ianormalize(f, [0,255]))</PYcode> </Descr> <Descr name="Equation"> <Eq>f(x,y) &amp; = &amp; sin( 2\pi (f_x x + f_y y) + \phi) \\ ... </Eq> </Descr> </Documentation> <Return name="f" type="mmIMAGE" output="yes"> <Args> <Arg name="s" type="mmIMAGE" dir="in" optional="no" default=""> <Descr>size: [rows cols].</Descr> </Arg> ... </Args> <Source lang="python"> <Code>cols, rows = s[1], s[0] x, y = iameshgrid(range(cols),range(rows)) freq = 1./t fcols = freq * Numeric.cos(theta) frows = freq * Numeric.sin(theta) f = Numeric.cos(2*Numeric.pi*(fcols*x + frows*y) + phi)</Code> </Source> … <Platforms>windows linux sunos</Platforms> </AdFunction> def iacos(s,t,theta,phi): """ o Purpose Create a cossenoidal image. o Synopsis f = iacos(s,t,theta,phi) o Input s: size: [rows cols]. t: Period: in pixels. theta: spatial direction... phi: Phase ... o Examples f = iacos([128,256], 100, Numeric.pi/4, 0) iashow(ianormalize(f, [0,255])) """ cols, rows = s[1], s[0] x, y = iameshgrid(range(cols),range(rows)) freq = 1./t fcols = freq * Numeric.cos(theta) frows = freq * Numeric.sin(theta) f = Numeric.cos(2*Numeric.pi*(fcols*x + frows*y) + phi) return f SBIE 2002 13 Resultados (1) • Caixa de ferramentas Mais de 60 algoritmos distribuídos entre os módulos – ia636 – Ia636demo – ia636test Mesmas funcionalidades para MATLAB • Corretor automático Sistema on-line de processamento de entregas Suporte CGI nativo do Python SBIE 2002 14 Resultados (2) • Modalidades do corretor automático Correção Módulo da Submissão Visualização V1(a) V2(a) ... Vn(a) Script de Testes = Módulo Gabarito Saídas V1(b) V2(b) ... Vn(b) SBIE 2002 15 Resultados (3) • Python x MATLAB SBIE 2002 16 Resultados (4) • Aplicação no curso de Visão Computacional (IA636) no 1 Semestre de 2002 • Avaliação on-line final 12 questionários respondidos / 13 alunos matriculados 9 questões sobre o ambiente de suporte ao curso • Algumas respostas relevantes: 1) Quanto tempo aproximadamente você levou para instalar o Python e todos os pacotes necessários ao funcionamento da toolbox IA636? (a) Em poucos minutos: 8, (b) Em poucas horas: 2, (c) Em cerca de um dia: 0, (d) Em cerca de uma semana: 1, (e) Em mais de uma semana: 1 2) Quanto tempo aproximadamente você levou para se habituar à sintaxe Python e Numerical? (a) Menos de duas semanas: 5, (b) Entre duas semanas e um mês: 5, (c) Mais de um mês: 2 SBIE 2002 9) Qual sua avaliação geral sobre o ambiente de suporte ao curso IA636? (a) Ruim: 1, (b) Razoável: 0 , (c) Bom: 8, (d) Excelente: 3 17 Conclusões (1) • Python pode ser usado em vários domínios de aplicação • O pacote Numerical se adapta bem ao propósito deste trabalho Implementações diretas das fórmulas da literatura • O sistema Adesso separa nitidamente conteúdo de apresentação Reduz esforço de manutenção Imunidade a erros nas gerações automáticas Consistência na interface com o usuário Gerações facilmente alteradas de acordo com os avanços tecnológicos SBIE 2002 18 Conclusões (2) • A caixa de ferramentas e toda documentação que a acompanha auxiliam: A aprendizagem da linguagem em si Os algoritmos tradicionais de PI A implementação de um algoritmo ou aplicação nova • O corretor mostrou-se eficaz no auxílio à avaliação de exercícios de programação permitindo: Comparação de tempos e soluções Visualização de valores e imagens finais • A grande vantagem do Python é a generalidade, facilidade e flexibildade de programação, provendo um eficiente sistema direto de manipulação de matrizes totalmente gratuito, de fácil acesso SBIE 2002 19 Trabalhos futuros • Criação de folhas de estilos para criação de páginas dinâmicas • Implementação de programação visual aos moldes do Khoros ou Simulink • Explorar a linguagem Jython para criação de interfaces para Internet (applets) SBIE 2002 20 Obrigado! Alexandre Gonçalves Silva [email protected] SBIE 2002