Visão Computacional: Aplicações de Inteligência Artificial com poucas linhas de código

Wolfram Cloud & Wolfram Language
Semana da Engenharia - UNICID - 2015 - SP - Brasil

Daniel Carvalho @danielscarvalho - Advisor Tecnologia

Adriano Tegani @ategani - Advisor Tecnologia

Marcelo Vianello - UNICID

http://www.wolframcloud.com/
http://www.advisor.net.br/
http://www.unicid.com.br/

Conceitos

Visão Computacional e Inteligência Artificial com o software Mathematica

Como obter informação a partir de imagens com poucas linhas de código

- Programação funcional
- Linguagem de quarta geração (mais alto nível)
- Inteligência Artificial
- Morfologia Matemática (Morphology)
- Computação Simbólica

A Inteligência artificial (IA) está presente em nosso dia a dia, os serviços mais utilizados e interessantes na Internet atualmente fazem uso da IA tal como: Google, Youtube, Amazon, Netflix, Facebook, Twitter entre outros.

Com o avanço da IA há ameaça dos trabalhos em escritório (colarinho branco - white-collar). Assim como os robôs substituíram os operários na indústria (colarinho azul - blue-collar), a AI vai automatizar muitas das atividades de escritório em curto e médio prazo. Porém novas profissões e demandas de mercado serão geradas, novas profissões que não temos consciência ainda vão surgir.

A sorte favorece a mente bem preparada.
Louis Pasteur

Mathematica & Wolfram Language

Mais sobre Visualização de Dados e Visão Computacional:

Channels: Wolfram Language Image Processing Virtual Workshop
The Wolfram Language: FAST INTRODUCTION FOR PROGRAMMERS

Imagens provenientes de busca no “Google Images”, são de propriedade de seus respectivos autores!!! Uso didático, imagens utilizadas conforme preferência/conveniência da audiência da apresentação.

Os comandos do Mathematica são normalmente palavras em inglês com a primeira letra em caixa alta, os parâmetros são separados por vígula e ficam entre colchetes [ ], listas (vetores e matrizes) são agrupados entre chaves {0, 1, 2, 3} e os itens separados por vírgula também. Parâmetros das funções seguem a forma “NomeDoParâmetro -> Valor”. Depois de digitar os comandos utilize as combinação de teclas shift + enter para processar/executar as instruções.

É fácil para iniciantes encontrar a função que lhes interessa pois estão relacionadas com seu objetivo, e são definidos no sistema de forma consistente.

2+2

Plus[2,2]

1/9

N[1/9,100]

MatrixForm[{{a,b,c},{1,2,3},{10,20,30}}]

m1 = {{a,b,c},{1,2,3},{10,20,30}};

m2= {i, j, k};

m2 * m1 //MatrixForm

m2 . m1 //MatrixForm

Plot[Sinc[x],{x,-10,10}]

Plot3D[Sinc[x]*Sinc[y],
{x,-10,10},
{y,-10,10},
PlotRange-> All,
ColorFunction->"Rainbow"]

img1=Import["https://www.petfinder.com/wp-content/uploads/2012/11/dog-how-to-select-your-new-best-friend-thinkstock99062463-253x190.jpg"]

Blur[img1,30]

EdgeDetect[img1,10]

Pesquisa livre: em Inglês (free form input)

= sertaozinho to sao paulo
= show sky now
= what is the meaning of life?
= who you are?
= who is Sonia Braga?

Dados são obtidos do site: www.wolframalpha.com | Desenvolvido com Wolfram Language e Mathematica

Reconhecimento de placas de carro - OCR

Imagens de placas obtidas do Google Images: placas de carros

TextRecognize[]

placas={,,,, ,,};

Blur[ImageTake[,{40,96},{10,-10}],8]
TextRecognize[%]

Blur[ImageTake[,{40,96},{10,-10}],8]

Blur[ImageTake[,{70,220}],8]
TextRecognize[%]

TextRecognize[Blur[ImageTake[,-160],8]]

GetText[input_List]:= TextRecognize[Blur[ImageTake[#,-160],8]]&/@ input;

GetText[placas]

StringReplace[#,{"["-> "","]"-> ""," "-> "","|"-> "1"}]&/@GetText[placas]

Reconhecimento de face

family = ExampleData[{"TestImage","Lena"}]

family=Import["lena.jpg"]

family = Import["the-simpsons.jpg"]

family = Import["monica.jpg"];

caras=FindFaces[family]

ImageTrim[family,#]&/@caras

Show[family,Graphics[{EdgeForm[{Red,Thick}],Opacity[0],Rectangle@@@caras}]]

IA não é robusta para reconhecer/distinguir desenhos!!! :-) Treinada apenas para rostos humanos.
Podem ocorrer falsos positivos (overfitting).

conference=Import["conference.jpg"]

caras=FindFaces[conference]

ImageTrim[conference,#]&/@caras

Show[conference,Graphics[{EdgeForm[{Red,Thick}],Opacity[0],Rectangle@@@caras}]]

Há 1 falso positivo

Reconhecimento de código de barra

BarcodeRecognize[]

BarcodeRecognize[]

BarcodeRecognize[]|

BarcodeRecognize[]

Reconhecimento de imagem

Image Identify: www.imageidentify.com

img1=Import["https://www.petfinder.com/wp-content/uploads/2012/11/dog-how-to-select-your-new-best-friend-thinkstock99062463-253x190.jpg"]

ImageIdentify[img1]

Table[ImageIdentify[img1,SpecificityGoal->i],{i,0,1,.1}]

WordCloud[%]

img2 = Import["https://www.imageidentify.com/public/prd/result/1/0/2/5/j/f/h/1/1/l/6/s/e/preview.jpeg?v=1.9&t=1431531931"]

Table[ImageIdentify[img2,SpecificityGoal->i],{i,0,1,.1}]
WordCloud[%]

Classificação - Inteligência Artificial & Estatística

Fonte: Exemplos Workshop Wolfram

Classificação de dígitos manuscritos. Utilizando MNIST database banco de dados de digitos manuscritos

digit=Classify[\[LeftAssociation]
0->{,,,,,,,,,},
1->{,,,,,,,,,},
2->{,,,,,,,,,},
3->{,,,,,,,,,},
4->{,,,,,,,,,},
5->{,,,,,,,,,},
6->{,,,,,,,,,},
7->{,,,,,,,,,},
8->{,,,,,,,,,},
9->{,,,,,,,,,}\[RightAssociation]]

digit[{,,,,,,,,,}]

digit[{,,,,,,,,,},"Probabilities"]

Classificação de imagens: Noite e Dia!!!

daynight =Classify[\[LeftAssociation]"Night"->{,,,,,,,,,,,,,,},"Day"->{,,,,,,,,,,,,,,}\[RightAssociation]]

daynight[{,,,,}]

Contar objetos na imagem

Imagens obtidas via Raspberry Pi

img3=;

img3=;

Binarize[img3]

centroidData=ComponentMeasurements[Binarize[GaussianFilter[img3,17]],{"Centroid"}][[All,2,1]]

Binarize[GaussianFilter[,17]]

Show[Image[img3,ImageSize->640],
Graphics[{White,
Circle[#,30]&/@centroidData,
Red,
Table[Inset[ToString[i],centroidData[[i]]],
{i,1,Length[centroidData]}]}]]

Binarize[Blur[img3,20]]

RemoveBackground[img3,{"Background",Black}]

Automatos Celulares & DNA

Conceito: http://demonstrations.wolfram.com/CellularAutomataEvaluation/ 
Exemplo: http://demonstrations.wolfram.com/ApplyingTheSmithWatermanSimilarityToCellularAutomata/
Sequence/DNA Align: http://www.seas.gwu.edu/~simhaweb/cs151/lectures/module12/align.html

SequenceAlignment["GTCAA","GTACC"]

SmithWatermanSimilarity[{1,0,1},{1,1,1}]

Manipulate[RandomSeed[seed];
Module[{ca, recurrence, swsSerie},
ca=CellularAutomaton[rule,RandomInteger[1,size],size-1];
recurrence = Table[SmithWatermanSimilarity[xStep,yStep],{xStep,ca},{yStep,ca}];
swsSerie=SmithWatermanSimilarity[#[[1]],#[[2]]]&/@Partition[Riffle[Drop[ca,-1],Rest[ca]],2];

Grid[{{
ArrayPlot[ca,Frame-> None,ImageSize-> {100,100}],
ListPlot[swsSerie,Filling->Axis,AxesLabel-> {"steps","sws"},Joined->join, ImageSize-> {200,100}] },
{ArrayPlot[recurrence,Frame-> None,ColorFunction->"Rainbow",ImageSize-> {250,250},PlotLabel-> Text@"Smith-Waterman similarity recurrence plot"],
SpanFromLeft}},Frame-> All,Alignment->{Center,Center}]],

{{rule,110,"rule number"},0,255,1,Appearance-> "Labeled"},
{{size,50},10,100,1,Appearance-> "Labeled"},
{seed,100,10000,1,Appearance-> "Labeled"}, 
{join,{False,True}}
]

GEO + Serviço WEB Wolfram Cloud

Mathematica on-line: serviços para aplicações móveis e WEB

Wolfram Cloud: http://www.wolframcloud.com/

Função GetStreeMap gera mapa com base na posição latitude e longitude

GetStreetMap[point_List]:=GeoGraphics[GeoMarker[point],GeoRange->Quantity[1,"Kilometer"]];

Função CloudDeploy e APIFunction combinadas geram serviço disponível na WEB (REST e JSON)

CloudDeploy[APIFunction[{"latitude"->"Number","longitude"->"Number"},GeoGraphics[GeoMarker[{#latitude,#longitude}],GeoRange->Quantity[1,"Kilometer"]]&,"PNG"],Permissions->"Public"]

CloudObject["https://www.wolframcloud.com/objects/faf09043-f977-4d02-b1e5-c132ff8e628a"]

Passando os parâmetros via URL o mapa é gerado, pode ser chamado de aplicação WEB ou Mobile via JavaScript ou outras linguagens como Java ou Python.

URL: https://www.wolframcloud.com/objects/faf09043-f977-4d02-b1e5-c132ff8e628a?latitude=-23.5417&longitude=-40.5650

Demo em JavaScript

Internet das Coisas

Wolfram Language & Mathematica disponível em dispositivos

Raspberry Pi
Wolfram Language & Raspberry Pi
http://www.wolfram.com/raspberry-pi/

Intel Edison
Wolfram Language & Intel Edison
http://www.wolfram.com/intel-edison/?source=frontpage