Encontro dos usuários do Mathematica 2015:

Visualização de Dados e Inteligência Artificial

Daniel Carvalho - Advisor Tecnologia - @danielscarvalho
Adriano Tegani - Advisor Tecnologia - @ategani

Inteligência Artificial

A Wolfram Language conta com uma série de funções que utilizam inteligência artifical

ImageIdentify[]

TextRecognize[]

Classify[]

Interpreter[]

BarcodeRecognize[]

Entrada livre de texto (=, ==, WolframAlpha, Entity)

Análise de DNA

Processamento de Imagens

Morfologia Matemática

Segmentação

Etc

Entre outros...

Automatic

As diversas funções do Mathematica tomam a decisões para escolher o método mais apropriado e resolver o problema face a entrada de dados, porém o método pode ser especificado pelo programador.

Method-> "NeuralNetwork"

Identificação de Imagens

É possível identificar objetos e o contexto de imagens, e obter detalhes estatísticos da análise
(imagen obtida no Google para uso apenas didático, são de autoria de seus respectivos autores)

(* carro1, carro2, conference, wolf *)
Import["carro1.jpg"]
ImageIdentify[%]

Import["carro2.jpg","Probability"]
ImageIdentify[%]

img2=Import["wolf.jpg"]
ImageIdentify[img2]

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

Reconhecimento de Texto (OCR)

OCR d’hora!!! 🐺 
(imagen obtida no Google para uso apenas didático)

invoice=;

ImageTake[invoice,{1200,-1640},{350,-400}]
TextRecognize[ImageResize[%,Scaled[4]],Language-> "German"]

Classificação (IA)

Treinar uma função para realizar classificação
(imagens obtidas no Google para uso didático, são de autoria de suas respectivas marcas)

cerveja =Classify[
\[LeftAssociation]
"Heineken"->{,,,,,,,,,},

"Brahma"->{,,,,,,,,,},
"Skol"-> {,,,,,,,,,}
\[RightAssociation]]

cerveja[{,,,,,,,}]

cerveja[{,,},"Probabilities"]

Interpretação Inteligente

Isso é muito LOCO!!! Ctrl =

Testar: MIT, SP, NYC, KM - M, RAD - DEG, Taj Mahal, Esphinge...

FullForm[]
Ctrl^=

GeoGraphics[GeoDisk[(Entity["Massachusetts Institute of Technology", Entity["University","MassachusettsInstituteOfTechnology166683"], "Entity[\"University\", \"MassachusettsInstituteOfTechnology166683\"]", "university"]),(Quantity[1, "km", kilometers, "Kilometers"])]]

(Entity["China", Entity["Country","China"], "Entity[\"Country\", \"China\"]", "country"])["Population"]/EntityValue[(Entity["United States", Entity["Country","UnitedStates"], "Entity[\"Country\", \"UnitedStates\"]", "country"]),(EntityProperty[(RowDefault["GDP", " | ", (RowWithSeparators[;, ";", "nominal", "quarterly", "seasonally adjusted"])]), EntityProperty["Country","GrossDomesticProduct",{"Adjustment"->"Nominal","Frequency"->"Quarterly","SeasonalAdjustment"->"SeasonallyAdjusted"}], "EntityProperty[\"Country\", \"GrossDomesticProduct\", {\"Adjustment\" -> \"Nominal\", \"Frequency\" -> \"Quarterly\", \"SeasonalAdjustment\" -> \"SeasonallyAdjusted\"}]"])]

LinguisticAssistant+ (Quantity[2, "rad", radians, "Radians"])

(Entity["São Paulo", Entity["City",{"SaoPaulo","SaoPaulo","Brazil"}], "Entity[\"City\", {\"SaoPaulo\", \"SaoPaulo\", \"Brazil\"}]", "city"])[EntityProperty["City","Population"]]/(Entity["Sertaozinho", Entity["City",{"Sertaozinho","SaoPaulo","Brazil"}], "Entity[\"City\", {\"Sertaozinho\", \"SaoPaulo\", \"Brazil\"}]", "city"])[(EntityProperty["city population", EntityProperty["City","Population"], "EntityProperty[\"City\", \"Population\"]"])]

Interpreter["Date"]["June 23, 1988"]

Interpreter["DateTime"]["Tue 10 Nov 2015 20:55:46 GMT +0"]

GeoGraphics[GeoDisk[Interpreter["Location"]["23.47°S 46.67°W"],(Quantity[1, "km", kilometers, "Kilometers"])]]

FullForm[(Entity["São Paulo", Entity["City",{"SaoPaulo","SaoPaulo","Brazil"}], "Entity[\"City\", {\"SaoPaulo\", \"SaoPaulo\", \"Brazil\"}]", "city"])]

Leitura de Código de Barras

Reconhecimento de códigos de barras, inclusive QRCODE
(Imagens obtidas no Google images, uso didático, são de propriedade de seus respectivos autores)

BarcodeRecognize[]

BarcodeRecognize[]

Entrada em texto livre

Um dos objetivos do Mathematica é permitir que não programadores possam obter seus resultados e programas usando linguagem natural. É um grande desafio!!!

= sertaozinho to sao paulo
= show sky now
= solar system now
= what is the meaning of life?
= who you are?
= who is Sonia Braga?
= apple, google, ibm, oracle

Processamento de Imagem

Encontrar faces

img=Import["conference.jpg"]
facesList=FindFaces[%]
ImageTrim[img, #] & /@ facesList

Show[img, Graphics[{EdgeForm[{Red, Thick}], Opacity[0], Rectangle @@@ facesList}]]

Contar objetos

images={ImageTake[,{1,-2}],ImageTake[,{1,-2}]};

Manipulate[
Module[{centroidData,combinedImage,gfImage},
centroidData=ComponentMeasurements[combinedImage=Binarize[gfImage = GaussianFilter[images[[index]],filter]],{"Centroid"}][[All,2,1]];
Pane[
 Switch[
step,
1,Column[{Text@"Original image",Image[images[[index]],ImageSize-> 400]}],
2,Column[{Text@"Apply a Gaussian filter to reduce image noise.",Image[gfImage,ImageSize-> 400]}],
3,Column[{Text@"Binarize to get only a black\[Hyphen]and\[Hyphen]white binary image.",Image[combinedImage,ImageSize-> 400]}],
4,Column[{Text@"Center of each cluster",MatrixForm[centroidData]}],
5,Column[{Text@"Result: original image with objects counted.",

Show[Image[images[[index]],ImageSize-> 400],
Graphics[{If[index ==1,White,Black],
Circle[#,8]&/@centroidData,
Red,
Table[Inset[Style[ToString[i],FontSize->15,FontWeight->Bold],centroidData[[i]]],
{i,1,Length[centroidData]}]}]]

}]
 ],
ImageSize->{420,350},Alignment->Center]
],

{step,1,5,1,Setter},
{{filter,3,"blurring radius"},1,20,1,Appearance->"Labeled"},
{{index,1,"image"},{1-> "low contrast",2-> "high contrast"}},
SaveDefinitions->True]

Alinhamento de DNA e Automatos Celulares
Smith-Waterman Similarity

Idéia maluca!!  \[FreakedSmiley]

Nucleotídeos: Adenine, Guanine, Thymine, Cytosine

ChemicalData[#,"MoleculePlot"]&/@ (EntityClass["nucleotides", EntityClass["Chemical","Nucleotides"], "EntityClass[\"Chemical\", \"Nucleotides\"]", "chemicals"])

SequenceAlignment[
"GTCACC",
"GTCATT"]

SequenceAlignment[
"Não é comigo",
"é comigo"]

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

init=RandomInteger[1,size];
Manipulate[
Module[{ca, recurrence, swsSerie},
ca=CellularAutomaton[rule,init,size-1];
recurrence = Table[SmithWatermanSimilarity[ca1,ca2],{ca1,ca},{ca2,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"},
{join,{False,True}}
]