Primer vistazo al computer vision | 4Sessions Feb17

155
Primer vistazo al COMPUTER VISION #FourSessions Toni Recio

Transcript of Primer vistazo al computer vision | 4Sessions Feb17

Primer vistazo al COMPUTER VISION#FourSessions

Toni Recio

Toni Recio

@tonirecio

Divulgador tecnológico

[email protected]@

Agenda

Computer Vision

Las diferentes aproximaciones

Benchmarking de API’s en la nube

OpenCV

Consumir clasificador

Detectar vs Identificar

Crear un clasificador

Computer

Vision

2 cámaras de foto biológicas

Captura de foto cada 200ms

En 3 años un niño ha visto cientos

de millones de “fotografías”

Pattern

Recognition

Machine

LearningDeep

Learning

Applied

AI

Strong

AI

Applied

AI

Strong

AI

Applied

AI

Strong

AI

Applied

AI

Strong

AI

Applied

AI

Strong

AI

Applied

AI

Strong

AI

FUTUROLOGÍA

FUTUROLOGÍA

FUTUROLOGÍA

PRESENTOLOGÍA

Las diferentes

aproximaciones

Benchmarking

API’s en la nube

Vision > Computer Vision

Vision > Computer Vision

a cat sitting

in front of a

computer

keyboard

Vision > Computer Vision

Vision > Computer Vision

Vision > Computer Vision

Vision > Computer Vision

Vision > Computer Vision

Vision > Face

Vision > Face

Vision > Face

Vision > Face

Vision > Face

Vision > Face

Vision > Face

Vision > Emotion

Vision > Emotion

Vision > Emotion

Vision > Video

Vision > Video

Vision > Video

Vision > Video

https://www.microsoft.com/cognitive-services/en-US/subscriptions

var visionClient = new VisionServiceClient("CLAVE_EXTRAIDA_DEL _PORTAL_DE_MCS");

using (Stream imageFileStream = File.OpenRead("C:\\CODE\\ComputerVisionSamples\\ComputerVision.Wpf\\Images\\catkeyboard.png"))

{var features = new VisualFeature[] { VisualFeature.Adult,VisualFeature.Categories,VisualFeature.Color,VisualFeature.Description,VisualFeature.Faces,VisualFeature.ImageType,VisualFeature.Tags };var result = await visionClient.AnalyzeImageAsync(imageFileStream, features);

}

https://console.cloud.google.com

https://console.cloud.google.com

public static GoogleCredential CreateCredentials(string path){

GoogleCredential credential;using (var stream = new FileStream(path, FileMode.Open,

FileAccess.Read)){

var c = GoogleCredential.FromStream(stream);credential = c.CreateScoped(VisionService.Scope.CloudPlatform);

}

return credential;}

public static VisionService CreateService(string applicationName,IConfigurableHttpClientInitializer credentials)

{var service = new VisionService(new BaseClientService.Initializer(){

ApplicationName = applicationName,HttpClientInitializer = credentials

});

return service;}

public static IList<AnnotateImageResponse> DetectLabels(VisionService vision, string imagePath)

{// Convert image to Base64 encoded for JSON ASCII text based request byte[] imageArray = System.IO.File.ReadAllBytes(imagePath);string imageContent = Convert.ToBase64String(imageArray);// Post label detection request to the Vision APIvar responses = vision.Images.Annotate(

new BatchAnnotateImagesRequest(){

Requests = new[] {new AnnotateImageRequest() {

Features = new [] {new Feature() {Type = "LABEL_DETECTION"},new Feature() {Type = "TEXT_DETECTION"},new Feature() {Type = "FACE_DETECTION"},new Feature() {Type = "LANDMARK_DETECTION"},new Feature() {Type = "LOGO_DETECTION"},new Feature() {Type = "SAFE_SEARCH_DETECTION"},new Feature() {Type = "IMAGE_PROPERTIES"}

},Image = new Image() { Content = imageContent }

}}}).Execute();

return responses.Responses;}

var credentails = CreateCredentials("c:\\archivos\\credenciales.json");var service = CreateService("TEST", credentails);var result = DetectLabels(service, "C:\\archivos\\playoffs2016.jpg");

Open CV

http://opencv.org/

https://github.com/opencv/opencv/tree/master/data

http://www.emgu.com/wiki/index.php/Main_Page

long detectionTime;Mat image = new Mat("C:\\archivos\\playoffs2016.jpg", LoadImageType.Color); List<System.Drawing.Rectangle> faces = new List<System.Drawing.Rectangle>();using (CascadeClassifier cascadeCla =

new CascadeClassifier("Classifiers\\haarcascade_frontalface_default.xml")){

Rectangle[] faces = cascadeCla.DetectMultiScale(image,1.1,8);

}

long detectionTime;Mat image = new Mat("C:\\archivos\\playoffs2016.jpg", LoadImageType.Color); List<System.Drawing.Rectangle> faces = new List<System.Drawing.Rectangle>();using (CascadeClassifier cascadeCla =

new CascadeClassifier("Classifiers\\haarcascade_frontalface_default.xml")){

Rectangle[] faces = cascadeCla.DetectMultiScale(image,1.1,8);

}

Detectar

Vs

Identificar

María

1 2 3 4 5

1 2 3 4 5

Image<Gray, Byte>[] trainingImages = new Image<Gray, Byte>[5];trainingImages[0] = new Image<Gray, byte>("C:\\Images\\alex.png");trainingImages[1] = new Image<Gray, byte>("C:\\Images\\arturo.png");trainingImages[2] = new Image<Gray, byte>("C:\\Images\\lauree.png");trainingImages[3] = new Image<Gray, byte>("C:\\Images\\javier.png");trainingImages[4] = new Image<Gray, byte>("C:\\maria.png");

Image<Gray, Byte>[] trainingImages = new Image<Gray, Byte>[5];trainingImages[0] = new Image<Gray, byte>("C:\\Images\\alex.png");trainingImages[1] = new Image<Gray, byte>("C:\\Images\\arturo.png");trainingImages[2] = new Image<Gray, byte>("C:\\Images\\lauree.png");trainingImages[3] = new Image<Gray, byte>("C:\\Images\\javier.png");trainingImages[4] = new Image<Gray, byte>("C:\\maria.png");

int[] labels = new int[] { 1, 2, 3, 4, 5 };

Image<Gray, Byte>[] trainingImages = new Image<Gray, Byte>[5];trainingImages[0] = new Image<Gray, byte>("C:\\Images\\alex.png");trainingImages[1] = new Image<Gray, byte>("C:\\Images\\arturo.png");trainingImages[2] = new Image<Gray, byte>("C:\\Images\\lauree.png");trainingImages[3] = new Image<Gray, byte>("C:\\Images\\javier.png");trainingImages[4] = new Image<Gray, byte>("C:\\maria.png");

int[] labels = new int[] { 1, 2, 3, 4, 5 };

var recognizer = new LBPHFaceRecognizer(1, 8, 8, 8, 100);recognizer.Train(trainingImages, labels);

Image<Gray, Byte>[] trainingImages = new Image<Gray, Byte>[5];trainingImages[0] = new Image<Gray, byte>("C:\\Images\\alex.png");trainingImages[1] = new Image<Gray, byte>("C:\\Images\\arturo.png");trainingImages[2] = new Image<Gray, byte>("C:\\Images\\lauree.png");trainingImages[3] = new Image<Gray, byte>("C:\\Images\\javier.png");trainingImages[4] = new Image<Gray, byte>("C:\\maria.png");

int[] labels = new int[] { 1, 2, 3, 4, 5 };

var recognizer = new LBPHFaceRecognizer(1, 8, 8, 8, 100);recognizer.Train(trainingImages, labels);

Image<Gray, Byte> testImage = new Image<Gray, Byte>("C:\\Images\\test.png");

Image<Gray, Byte>[] trainingImages = new Image<Gray, Byte>[5];trainingImages[0] = new Image<Gray, byte>("C:\\Images\\alex.png");trainingImages[1] = new Image<Gray, byte>("C:\\Images\\arturo.png");trainingImages[2] = new Image<Gray, byte>("C:\\Images\\lauree.png");trainingImages[3] = new Image<Gray, byte>("C:\\Images\\javier.png");trainingImages[4] = new Image<Gray, byte>("C:\\maria.png");

int[] labels = new int[] { 1, 2, 3, 4, 5 };

var recognizer = new LBPHFaceRecognizer(1, 8, 8, 8, 100);recognizer.Train(trainingImages, labels);

Image<Gray, Byte> testImage = new Image<Gray, Byte>("C:\\Images\\test.png");

var label = recognizer.Predict(testImage);

Image<Gray, Byte>[] trainingImages = new Image<Gray, Byte>[5];trainingImages[0] = new Image<Gray, byte>("C:\\Images\\alex.png");trainingImages[1] = new Image<Gray, byte>("C:\\Images\\arturo.png");trainingImages[2] = new Image<Gray, byte>("C:\\Images\\lauree.png");trainingImages[3] = new Image<Gray, byte>("C:\\Images\\javier.png");trainingImages[4] = new Image<Gray, byte>("C:\\maria.png");

int[] labels = new int[] { 1, 2, 3, 4, 5 };

var recognizer = new LBPHFaceRecognizer(1, 8, 8, 8, 100);recognizer.Train(trainingImages, labels);

Image<Gray, Byte> testImage = new Image<Gray, Byte>("C:\\Images\\test.png");

var label = recognizer.Predict(testImage);

Crear un

clasificador

http://acodigo.blogspot.com.es/2015/12/entrenar-opencv-en-deteccion-de-objetos.html

http://www-cvr.ai.uiuc.edu/ponce_grp/data/

https://github.com/TutorProgramacion/opencv-

traincascade/blob/master/image_dataset/images.rar

pos/pos-532.pgm 1 0 0 100 40

pos/pos-166.pgm 1 0 0 100 40

pos/pos-76.pgm 1 0 0 100 40

pos/pos-193.pgm 1 0 0 100 40

pos/pos-0.pgm 1 0 0 100 40

pos/pos-84.pgm 1 0 0 100 40

pos/pos-333.pgm 1 0 0 100 40

pos/pos-15.pgm 1 0 0 100 40

pos/pos-371.pgm 1 0 0 100 40

pos/pos-44.pgm 1 0 0 100 40

pos/pos-172.pgm 1 0 0 100 40

cars.info

neg/neg-225.pgm

neg/neg-310.pgm

neg/neg-24.pgm

neg/neg-119.pgm

neg/neg-198.pgm

neg/neg-155.pgm

neg/neg-31.pgm

neg/neg-441.pgm

neg/neg-56.pgm

neg/neg-455.pgm

neg/neg-144.pgm

neg.info

cd C:\opencv\build\x86\vc11\bin

opencv_createsamples -info cars.info -num 550 -w 48 -h 24 -vec cars.vec

c:\opencv\build\x64\vc12\bin>opencv_traincascade.exe -data data -vec cars.vec

-bg neg.info -numPos 500 -numNeg 500 -numStages 10 -w 48 -h 24 -featureType LBP

c:\opencv\build\x64\vc12\bin>opencv_traincascade.exe -data data -vec cars.vec

-bg neg.info -numPos 500 -numNeg 500 -numStages 10 -w 48 -h 24 -featureType LBP

Un vistazo

atrás

Toni Recio

@tonirecio

[email protected]@

Q&A

GRACIAS

http://www.freepik.com/free-vector/abstract-blue-background-with-

triangles_710166.htm#term=glacial&page=1&position=0

http://www.freepik.com/free-vector/computers-and-school-

elements_719102.htm#term=learning&page=1&position=37

http://www.freepik.com/free-vector/colorful-brain-

icons_764996.htm#term=brain&page=1&position=1

http://www.freepik.com/free-vector/five-senses-

icons_837465.htm#term=senses&page=1&position=0

http://www.freepik.com/free-vector/analog-camera-

icon_791929.htm#term=camera&page=1&position=1

http://www.freepik.com/free-vector/photos-and-

cameras_804428.htm#term=picture&page=1&position=0

http://www.freepik.com/free-vector/magnifying-glass-data-

analysis_761448.htm#term=information&page=1&position=4

http://www.freepik.com/free-vector/educational-future-

concept_776917.htm#term=future&page=1&position=3

http://www.freepik.com/free-vector/global-education-

background_780891.htm#term=logic&page=1&position=0

http://www.freepik.com/free-vector/cartoon-scientist-with-chemical-

elements_848470.htm#term=scientist&page=1&position=9

http://www.freepik.com/free-vector/colorful-information-

buttons_807853.htm#term=information&page=1&position=5