diff --git a/.gitignore b/.gitignore index 54569bb..2814d5b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore +# VS Code +.vscode/ + # User-specific files *.suo *.user diff --git a/aiml20/CV training images/ATTRIBUTIONS.md b/aiml20/CV training images/ATTRIBUTIONS.md new file mode 100644 index 0000000..e797f6e --- /dev/null +++ b/aiml20/CV training images/ATTRIBUTIONS.md @@ -0,0 +1,33 @@ +# Attributions for images in this folder + +All images are sourced from [Wikimedia Commons](https://commons.wikimedia.org/) and are used under their respective +Creative Commons licenses. + +Images were selected manually for suitability as part of a custom vision model. Images not eligible for selection include: +- Line art +- SVG files, video files +- Images with multiple different objects or busy scenes +- Images including people +- Images with text or other annotations +- File size exceeding 6Mb + +## Hammers + +https://commons.wikimedia.org/wiki/Category:Claw_hammers +https://commons.wikimedia.org/wiki/Category:Ball-peen_hammers + +## Pliers +https://commons.wikimedia.org/wiki/Category:Long-nose_pliers +https://commons.wikimedia.org/wiki/Category:Needle-nose_pliers +https://commons.wikimedia.org/wiki/Category:Linesman%27s_pliers + +## Screwdrivers + +https://commons.wikimedia.org/wiki/Category:Screwdrivers + +## Drills +https://commons.wikimedia.org/wiki/Category:Cordless_drills + +## Hard Hats: +https://commons.wikimedia.org/wiki/Category:Hard_hats + diff --git a/aiml20/CV training images/drills/Accuboorschroefmachine.jpg b/aiml20/CV training images/drills/Accuboorschroefmachine.jpg new file mode 100644 index 0000000..f87321c Binary files /dev/null and b/aiml20/CV training images/drills/Accuboorschroefmachine.jpg differ diff --git a/aiml20/CV training images/drills/Akkubohrschrauber.jpg b/aiml20/CV training images/drills/Akkubohrschrauber.jpg new file mode 100644 index 0000000..6559e9c Binary files /dev/null and b/aiml20/CV training images/drills/Akkubohrschrauber.jpg differ diff --git a/aiml20/CV training images/drills/Akkuschrauber mit Ladegeraet R7309309.jpg b/aiml20/CV training images/drills/Akkuschrauber mit Ladegeraet R7309309.jpg new file mode 100644 index 0000000..0cb3e5b Binary files /dev/null and b/aiml20/CV training images/drills/Akkuschrauber mit Ladegeraet R7309309.jpg differ diff --git a/aiml20/CV training images/drills/Akkuschrauber.jpg b/aiml20/CV training images/drills/Akkuschrauber.jpg new file mode 100644 index 0000000..dcf4e93 Binary files /dev/null and b/aiml20/CV training images/drills/Akkuschrauber.jpg differ diff --git a/aiml20/CV training images/drills/BOSCH PSR 14,4 cordless drill.gif b/aiml20/CV training images/drills/BOSCH PSR 14,4 cordless drill.gif new file mode 100644 index 0000000..8fb5583 Binary files /dev/null and b/aiml20/CV training images/drills/BOSCH PSR 14,4 cordless drill.gif differ diff --git a/aiml20/CV training images/drills/Battdrill.jpg b/aiml20/CV training images/drills/Battdrill.jpg new file mode 100644 index 0000000..6e60ff2 Binary files /dev/null and b/aiml20/CV training images/drills/Battdrill.jpg differ diff --git a/aiml20/CV training images/drills/CordlessDrill.jpg b/aiml20/CV training images/drills/CordlessDrill.jpg new file mode 100644 index 0000000..445c3bd Binary files /dev/null and b/aiml20/CV training images/drills/CordlessDrill.jpg differ diff --git a/aiml20/CV training images/drills/Dewalt DCD985L2 Combi Drill.jpg b/aiml20/CV training images/drills/Dewalt DCD985L2 Combi Drill.jpg new file mode 100644 index 0000000..4ccc39d Binary files /dev/null and b/aiml20/CV training images/drills/Dewalt DCD985L2 Combi Drill.jpg differ diff --git a/aiml20/CV training images/drills/Drill-driver.JPG b/aiml20/CV training images/drills/Drill-driver.JPG new file mode 100644 index 0000000..b411e71 Binary files /dev/null and b/aiml20/CV training images/drills/Drill-driver.JPG differ diff --git a/aiml20/CV training images/drills/Drill2.jpg b/aiml20/CV training images/drills/Drill2.jpg new file mode 100644 index 0000000..03fb573 Binary files /dev/null and b/aiml20/CV training images/drills/Drill2.jpg differ diff --git a/aiml20/CV training images/drills/Hammer Drill AccuMaster.jpg b/aiml20/CV training images/drills/Hammer Drill AccuMaster.jpg new file mode 100644 index 0000000..5a3e83c Binary files /dev/null and b/aiml20/CV training images/drills/Hammer Drill AccuMaster.jpg differ diff --git a/aiml20/CV training images/drills/Metabo Akku-Bohrschrauber BS 18 LTX BL Quick.jpg b/aiml20/CV training images/drills/Metabo Akku-Bohrschrauber BS 18 LTX BL Quick.jpg new file mode 100644 index 0000000..e5e0549 Binary files /dev/null and b/aiml20/CV training images/drills/Metabo Akku-Bohrschrauber BS 18 LTX BL Quick.jpg differ diff --git a/aiml20/CV training images/drills/Milwaukee Fuel drill.jpg b/aiml20/CV training images/drills/Milwaukee Fuel drill.jpg new file mode 100644 index 0000000..923f89a Binary files /dev/null and b/aiml20/CV training images/drills/Milwaukee Fuel drill.jpg differ diff --git a/aiml20/CV training images/drills/Tool Manager Photo.jpg b/aiml20/CV training images/drills/Tool Manager Photo.jpg new file mode 100644 index 0000000..770bf72 Binary files /dev/null and b/aiml20/CV training images/drills/Tool Manager Photo.jpg differ diff --git a/aiml20/CV training images/drills/Torque control.JPG b/aiml20/CV training images/drills/Torque control.JPG new file mode 100644 index 0000000..49150ad Binary files /dev/null and b/aiml20/CV training images/drills/Torque control.JPG differ diff --git a/aiml20/CV training images/drills/Werkzeugbit extra lang IMGP9240.jpg b/aiml20/CV training images/drills/Werkzeugbit extra lang IMGP9240.jpg new file mode 100644 index 0000000..16fdb8c Binary files /dev/null and b/aiml20/CV training images/drills/Werkzeugbit extra lang IMGP9240.jpg differ diff --git a/aiml20/CV training images/hammers/Any old hammer.jpg b/aiml20/CV training images/hammers/Any old hammer.jpg new file mode 100644 index 0000000..3baf817 Binary files /dev/null and b/aiml20/CV training images/hammers/Any old hammer.jpg differ diff --git a/aiml20/CV training images/hammers/Ball-peen hammer 380mm.JPG b/aiml20/CV training images/hammers/Ball-peen hammer 380mm.JPG new file mode 100644 index 0000000..ef02dba Binary files /dev/null and b/aiml20/CV training images/hammers/Ball-peen hammer 380mm.JPG differ diff --git a/aiml20/CV training images/hammers/Buck Knives Hammer (5075278861).jpg b/aiml20/CV training images/hammers/Buck Knives Hammer (5075278861).jpg new file mode 100644 index 0000000..a247509 Binary files /dev/null and b/aiml20/CV training images/hammers/Buck Knives Hammer (5075278861).jpg differ diff --git "a/aiml20/CV training images/hammers/Cabe\303\247a de martelo.jpg" "b/aiml20/CV training images/hammers/Cabe\303\247a de martelo.jpg" new file mode 100644 index 0000000..d3eb298 Binary files /dev/null and "b/aiml20/CV training images/hammers/Cabe\303\247a de martelo.jpg" differ diff --git a/aiml20/CV training images/hammers/Carpenter's hammer.JPG b/aiml20/CV training images/hammers/Carpenter's hammer.JPG new file mode 100644 index 0000000..7fcd053 Binary files /dev/null and b/aiml20/CV training images/hammers/Carpenter's hammer.JPG differ diff --git a/aiml20/CV training images/hammers/Claw hammer 2.jpg b/aiml20/CV training images/hammers/Claw hammer 2.jpg new file mode 100644 index 0000000..3e846d4 Binary files /dev/null and b/aiml20/CV training images/hammers/Claw hammer 2.jpg differ diff --git a/aiml20/CV training images/hammers/Claw hammer-1.jpg b/aiml20/CV training images/hammers/Claw hammer-1.jpg new file mode 100644 index 0000000..46eb006 Binary files /dev/null and b/aiml20/CV training images/hammers/Claw hammer-1.jpg differ diff --git a/aiml20/CV training images/hammers/Claw-hammer.jpg b/aiml20/CV training images/hammers/Claw-hammer.jpg new file mode 100644 index 0000000..7c94f38 Binary files /dev/null and b/aiml20/CV training images/hammers/Claw-hammer.jpg differ diff --git a/aiml20/CV training images/hammers/Estwing hammer.JPG b/aiml20/CV training images/hammers/Estwing hammer.JPG new file mode 100644 index 0000000..ffdbf3d Binary files /dev/null and b/aiml20/CV training images/hammers/Estwing hammer.JPG differ diff --git a/aiml20/CV training images/hammers/Flowered hammer.jpg b/aiml20/CV training images/hammers/Flowered hammer.jpg new file mode 100644 index 0000000..cdc4e13 Binary files /dev/null and b/aiml20/CV training images/hammers/Flowered hammer.jpg differ diff --git a/aiml20/CV training images/hammers/Framing hammer.jpg b/aiml20/CV training images/hammers/Framing hammer.jpg new file mode 100644 index 0000000..a9c7964 Binary files /dev/null and b/aiml20/CV training images/hammers/Framing hammer.jpg differ diff --git a/aiml20/CV training images/hammers/Hammer 2.jpg b/aiml20/CV training images/hammers/Hammer 2.jpg new file mode 100644 index 0000000..68154a4 Binary files /dev/null and b/aiml20/CV training images/hammers/Hammer 2.jpg differ diff --git a/aiml20/CV training images/hammers/Hammer CleanBackground.png b/aiml20/CV training images/hammers/Hammer CleanBackground.png new file mode 100644 index 0000000..8570b90 Binary files /dev/null and b/aiml20/CV training images/hammers/Hammer CleanBackground.png differ diff --git a/aiml20/CV training images/hammers/Hammer hand tool.jpg b/aiml20/CV training images/hammers/Hammer hand tool.jpg new file mode 100644 index 0000000..d2281db Binary files /dev/null and b/aiml20/CV training images/hammers/Hammer hand tool.jpg differ diff --git a/aiml20/CV training images/hammers/Hammer-1629587.jpg b/aiml20/CV training images/hammers/Hammer-1629587.jpg new file mode 100644 index 0000000..79084a7 Binary files /dev/null and b/aiml20/CV training images/hammers/Hammer-1629587.jpg differ diff --git a/aiml20/CV training images/hammers/Hammer-vertical.jpg b/aiml20/CV training images/hammers/Hammer-vertical.jpg new file mode 100644 index 0000000..761a651 Binary files /dev/null and b/aiml20/CV training images/hammers/Hammer-vertical.jpg differ diff --git a/aiml20/CV training images/hammers/Hammer.jpg b/aiml20/CV training images/hammers/Hammer.jpg new file mode 100644 index 0000000..4538bbf Binary files /dev/null and b/aiml20/CV training images/hammers/Hammer.jpg differ diff --git a/aiml20/CV training images/hammers/Hammer2.jpg b/aiml20/CV training images/hammers/Hammer2.jpg new file mode 100644 index 0000000..e05ae65 Binary files /dev/null and b/aiml20/CV training images/hammers/Hammer2.jpg differ diff --git a/aiml20/CV training images/hammers/Head of IKEA hammer.jpg b/aiml20/CV training images/hammers/Head of IKEA hammer.jpg new file mode 100644 index 0000000..be1e983 Binary files /dev/null and b/aiml20/CV training images/hammers/Head of IKEA hammer.jpg differ diff --git a/aiml20/CV training images/hammers/Hultafors HHSH 16.JPG b/aiml20/CV training images/hammers/Hultafors HHSH 16.JPG new file mode 100644 index 0000000..77e4bcd Binary files /dev/null and b/aiml20/CV training images/hammers/Hultafors HHSH 16.JPG differ diff --git a/aiml20/CV training images/hammers/IKEA hammer.jpg b/aiml20/CV training images/hammers/IKEA hammer.jpg new file mode 100644 index 0000000..48f7042 Binary files /dev/null and b/aiml20/CV training images/hammers/IKEA hammer.jpg differ diff --git a/aiml20/CV training images/hammers/Ingenieurhammer.jpg b/aiml20/CV training images/hammers/Ingenieurhammer.jpg new file mode 100644 index 0000000..4d9e5d6 Binary files /dev/null and b/aiml20/CV training images/hammers/Ingenieurhammer.jpg differ diff --git a/aiml20/CV training images/hammers/Intentions II.jpg b/aiml20/CV training images/hammers/Intentions II.jpg new file mode 100644 index 0000000..f78edf6 Binary files /dev/null and b/aiml20/CV training images/hammers/Intentions II.jpg differ diff --git a/aiml20/CV training images/hammers/Latthammer-Typ-Nr.-298-Picard-Wuppertal.jpg b/aiml20/CV training images/hammers/Latthammer-Typ-Nr.-298-Picard-Wuppertal.jpg new file mode 100644 index 0000000..f4e5939 Binary files /dev/null and b/aiml20/CV training images/hammers/Latthammer-Typ-Nr.-298-Picard-Wuppertal.jpg differ diff --git a/aiml20/CV training images/hammers/Mallory (1562068992).jpg b/aiml20/CV training images/hammers/Mallory (1562068992).jpg new file mode 100644 index 0000000..b98d2a0 Binary files /dev/null and b/aiml20/CV training images/hammers/Mallory (1562068992).jpg differ diff --git a/aiml20/CV training images/hammers/Martillo de bola.JPG b/aiml20/CV training images/hammers/Martillo de bola.JPG new file mode 100644 index 0000000..33aae7c Binary files /dev/null and b/aiml20/CV training images/hammers/Martillo de bola.JPG differ diff --git a/aiml20/CV training images/hammers/Prying up a long nail.jpg b/aiml20/CV training images/hammers/Prying up a long nail.jpg new file mode 100644 index 0000000..9874a20 Binary files /dev/null and b/aiml20/CV training images/hammers/Prying up a long nail.jpg differ diff --git a/aiml20/CV training images/hammers/Stanley graphite claw hammer.jpg b/aiml20/CV training images/hammers/Stanley graphite claw hammer.jpg new file mode 100644 index 0000000..412bc78 Binary files /dev/null and b/aiml20/CV training images/hammers/Stanley graphite claw hammer.jpg differ diff --git a/aiml20/CV training images/hammers/StephensCabinPorch Hammer.jpg b/aiml20/CV training images/hammers/StephensCabinPorch Hammer.jpg new file mode 100644 index 0000000..d232c30 Binary files /dev/null and b/aiml20/CV training images/hammers/StephensCabinPorch Hammer.jpg differ diff --git "a/aiml20/CV training images/hammers/\332\206\332\251\330\264 \331\205\333\214\330\256 \332\251\330\264.JPG" "b/aiml20/CV training images/hammers/\332\206\332\251\330\264 \331\205\333\214\330\256 \332\251\330\264.JPG" new file mode 100644 index 0000000..81fbf5a Binary files /dev/null and "b/aiml20/CV training images/hammers/\332\206\332\251\330\264 \331\205\333\214\330\256 \332\251\330\264.JPG" differ diff --git a/aiml20/CV training images/hard hats/A Hard Hat.JPG b/aiml20/CV training images/hard hats/A Hard Hat.JPG new file mode 100644 index 0000000..459d9d9 Binary files /dev/null and b/aiml20/CV training images/hard hats/A Hard Hat.JPG differ diff --git a/aiml20/CV training images/hard hats/Aa safetyhelmet 00.jpg b/aiml20/CV training images/hard hats/Aa safetyhelmet 00.jpg new file mode 100644 index 0000000..c770e47 Binary files /dev/null and b/aiml20/CV training images/hard hats/Aa safetyhelmet 00.jpg differ diff --git a/aiml20/CV training images/hard hats/CD Helmet.jpg b/aiml20/CV training images/hard hats/CD Helmet.jpg new file mode 100644 index 0000000..dbd8442 Binary files /dev/null and b/aiml20/CV training images/hard hats/CD Helmet.jpg differ diff --git a/aiml20/CV training images/hard hats/Calgary Flames Green HardHat.jpg b/aiml20/CV training images/hard hats/Calgary Flames Green HardHat.jpg new file mode 100644 index 0000000..10bb8c7 Binary files /dev/null and b/aiml20/CV training images/hard hats/Calgary Flames Green HardHat.jpg differ diff --git a/aiml20/CV training images/hard hats/Chainsaw helmet.jpg b/aiml20/CV training images/hard hats/Chainsaw helmet.jpg new file mode 100644 index 0000000..6233774 Binary files /dev/null and b/aiml20/CV training images/hard hats/Chainsaw helmet.jpg differ diff --git a/aiml20/CV training images/hard hats/Chantier de construction, Monastir, Tunisie - 25.jpg b/aiml20/CV training images/hard hats/Chantier de construction, Monastir, Tunisie - 25.jpg new file mode 100644 index 0000000..b496f3e Binary files /dev/null and b/aiml20/CV training images/hard hats/Chantier de construction, Monastir, Tunisie - 25.jpg differ diff --git a/aiml20/CV training images/hard hats/CoolHardHatPix.jpg b/aiml20/CV training images/hard hats/CoolHardHatPix.jpg new file mode 100644 index 0000000..cb26d48 Binary files /dev/null and b/aiml20/CV training images/hard hats/CoolHardHatPix.jpg differ diff --git a/aiml20/CV training images/hard hats/Draeger helm hps4100.jpg b/aiml20/CV training images/hard hats/Draeger helm hps4100.jpg new file mode 100644 index 0000000..9ce5087 Binary files /dev/null and b/aiml20/CV training images/hard hats/Draeger helm hps4100.jpg differ diff --git a/aiml20/CV training images/hard hats/Dummy with safety gear.jpg b/aiml20/CV training images/hard hats/Dummy with safety gear.jpg new file mode 100644 index 0000000..544838c Binary files /dev/null and b/aiml20/CV training images/hard hats/Dummy with safety gear.jpg differ diff --git "a/aiml20/CV training images/hard hats/D\303\274sseldorf-Hafen, M\303\244rz 2019 (19k).jpg" "b/aiml20/CV training images/hard hats/D\303\274sseldorf-Hafen, M\303\244rz 2019 (19k).jpg" new file mode 100644 index 0000000..46e7538 Binary files /dev/null and "b/aiml20/CV training images/hard hats/D\303\274sseldorf-Hafen, M\303\244rz 2019 (19k).jpg" differ diff --git a/aiml20/CV training images/hard hats/Hard hat 20111111.jpg b/aiml20/CV training images/hard hats/Hard hat 20111111.jpg new file mode 100644 index 0000000..a06e6f3 Binary files /dev/null and b/aiml20/CV training images/hard hats/Hard hat 20111111.jpg differ diff --git a/aiml20/CV training images/hard hats/HardHatHarryTruman.jpg b/aiml20/CV training images/hard hats/HardHatHarryTruman.jpg new file mode 100644 index 0000000..2ef07f0 Binary files /dev/null and b/aiml20/CV training images/hard hats/HardHatHarryTruman.jpg differ diff --git a/aiml20/CV training images/hard hats/Husqvarna helmet.jpg b/aiml20/CV training images/hard hats/Husqvarna helmet.jpg new file mode 100644 index 0000000..1b65901 Binary files /dev/null and b/aiml20/CV training images/hard hats/Husqvarna helmet.jpg differ diff --git a/aiml20/CV training images/hard hats/Justgrimes - 30894259187.jpg b/aiml20/CV training images/hard hats/Justgrimes - 30894259187.jpg new file mode 100644 index 0000000..404af46 Binary files /dev/null and b/aiml20/CV training images/hard hats/Justgrimes - 30894259187.jpg differ diff --git a/aiml20/CV training images/hard hats/La Oliva Villaverde - Cueva del Llano 08 ies.jpg b/aiml20/CV training images/hard hats/La Oliva Villaverde - Cueva del Llano 08 ies.jpg new file mode 100644 index 0000000..0f17009 Binary files /dev/null and b/aiml20/CV training images/hard hats/La Oliva Villaverde - Cueva del Llano 08 ies.jpg differ diff --git a/aiml20/CV training images/hard hats/London Gas Museum souvenir pencil sharpener.jpg b/aiml20/CV training images/hard hats/London Gas Museum souvenir pencil sharpener.jpg new file mode 100644 index 0000000..3543e45 Binary files /dev/null and b/aiml20/CV training images/hard hats/London Gas Museum souvenir pencil sharpener.jpg differ diff --git a/aiml20/CV training images/hard hats/Luray Caverns Gift Shop (8041012518) (2).jpg b/aiml20/CV training images/hard hats/Luray Caverns Gift Shop (8041012518) (2).jpg new file mode 100644 index 0000000..99c6386 Binary files /dev/null and b/aiml20/CV training images/hard hats/Luray Caverns Gift Shop (8041012518) (2).jpg differ diff --git a/aiml20/CV training images/hard hats/Occupational Safety Equipment.jpg b/aiml20/CV training images/hard hats/Occupational Safety Equipment.jpg new file mode 100644 index 0000000..ea7f734 Binary files /dev/null and b/aiml20/CV training images/hard hats/Occupational Safety Equipment.jpg differ diff --git a/aiml20/CV training images/hard hats/Schutzhelm.jpg b/aiml20/CV training images/hard hats/Schutzhelm.jpg new file mode 100644 index 0000000..6d6117c Binary files /dev/null and b/aiml20/CV training images/hard hats/Schutzhelm.jpg differ diff --git a/aiml20/CV training images/hard hats/Steel mill worker helmet.JPG b/aiml20/CV training images/hard hats/Steel mill worker helmet.JPG new file mode 100644 index 0000000..06df0ff Binary files /dev/null and b/aiml20/CV training images/hard hats/Steel mill worker helmet.JPG differ diff --git a/aiml20/CV training images/hard hats/V-GardProtectiveCap.png b/aiml20/CV training images/hard hats/V-GardProtectiveCap.png new file mode 100644 index 0000000..fb07fa1 Binary files /dev/null and b/aiml20/CV training images/hard hats/V-GardProtectiveCap.png differ diff --git a/aiml20/CV training images/hard hats/VGARD-ORANGE MSA.jpg b/aiml20/CV training images/hard hats/VGARD-ORANGE MSA.jpg new file mode 100644 index 0000000..b0e235e Binary files /dev/null and b/aiml20/CV training images/hard hats/VGARD-ORANGE MSA.jpg differ diff --git a/aiml20/CV training images/hard hats/Yellow hard hat.jpg b/aiml20/CV training images/hard hats/Yellow hard hat.jpg new file mode 100644 index 0000000..bf633fa Binary files /dev/null and b/aiml20/CV training images/hard hats/Yellow hard hat.jpg differ diff --git a/aiml20/CV training images/pliers/02-Journeyman.jpg b/aiml20/CV training images/pliers/02-Journeyman.jpg new file mode 100644 index 0000000..39fe629 Binary files /dev/null and b/aiml20/CV training images/pliers/02-Journeyman.jpg differ diff --git a/aiml20/CV training images/pliers/05-02 combination pliers big.jpg b/aiml20/CV training images/pliers/05-02 combination pliers big.jpg new file mode 100644 index 0000000..9abe5cc Binary files /dev/null and b/aiml20/CV training images/pliers/05-02 combination pliers big.jpg differ diff --git a/aiml20/CV training images/pliers/160 Year Klein Tools Pliers.png b/aiml20/CV training images/pliers/160 Year Klein Tools Pliers.png new file mode 100644 index 0000000..a3c5aa2 Binary files /dev/null and b/aiml20/CV training images/pliers/160 Year Klein Tools Pliers.png differ diff --git a/aiml20/CV training images/pliers/Alicate bico chato.jpg b/aiml20/CV training images/pliers/Alicate bico chato.jpg new file mode 100644 index 0000000..9327bba Binary files /dev/null and b/aiml20/CV training images/pliers/Alicate bico chato.jpg differ diff --git a/aiml20/CV training images/pliers/AlicateUniversal.JPG b/aiml20/CV training images/pliers/AlicateUniversal.JPG new file mode 100644 index 0000000..9719767 Binary files /dev/null and b/aiml20/CV training images/pliers/AlicateUniversal.JPG differ diff --git a/aiml20/CV training images/pliers/Alicates universales.png b/aiml20/CV training images/pliers/Alicates universales.png new file mode 100644 index 0000000..c293306 Binary files /dev/null and b/aiml20/CV training images/pliers/Alicates universales.png differ diff --git a/aiml20/CV training images/pliers/Basic NeedleNose Pliers.jpg b/aiml20/CV training images/pliers/Basic NeedleNose Pliers.jpg new file mode 100644 index 0000000..a428e5d Binary files /dev/null and b/aiml20/CV training images/pliers/Basic NeedleNose Pliers.jpg differ diff --git a/aiml20/CV training images/pliers/Breaker-grozier-pliers.jpg b/aiml20/CV training images/pliers/Breaker-grozier-pliers.jpg new file mode 100644 index 0000000..b55cc58 Binary files /dev/null and b/aiml20/CV training images/pliers/Breaker-grozier-pliers.jpg differ diff --git a/aiml20/CV training images/pliers/High-Leverage Side-Cutting Pliers Klein Tools.jpg b/aiml20/CV training images/pliers/High-Leverage Side-Cutting Pliers Klein Tools.jpg new file mode 100644 index 0000000..364cd4b Binary files /dev/null and b/aiml20/CV training images/pliers/High-Leverage Side-Cutting Pliers Klein Tools.jpg differ diff --git a/aiml20/CV training images/pliers/IKEA combination pliers.jpg b/aiml20/CV training images/pliers/IKEA combination pliers.jpg new file mode 100644 index 0000000..0b70852 Binary files /dev/null and b/aiml20/CV training images/pliers/IKEA combination pliers.jpg differ diff --git a/aiml20/CV training images/pliers/Klein Journeyman long-nose pliers.jpg b/aiml20/CV training images/pliers/Klein Journeyman long-nose pliers.jpg new file mode 100644 index 0000000..1ff5a8b Binary files /dev/null and b/aiml20/CV training images/pliers/Klein Journeyman long-nose pliers.jpg differ diff --git a/aiml20/CV training images/pliers/Klein Tools D203-6.jpg b/aiml20/CV training images/pliers/Klein Tools D203-6.jpg new file mode 100644 index 0000000..20241ab Binary files /dev/null and b/aiml20/CV training images/pliers/Klein Tools D203-6.jpg differ diff --git a/aiml20/CV training images/pliers/Klein lineman's pliers.jpg b/aiml20/CV training images/pliers/Klein lineman's pliers.jpg new file mode 100644 index 0000000..502780d Binary files /dev/null and b/aiml20/CV training images/pliers/Klein lineman's pliers.jpg differ diff --git a/aiml20/CV training images/pliers/Klieste na segerove poistky.jpg b/aiml20/CV training images/pliers/Klieste na segerove poistky.jpg new file mode 100644 index 0000000..be8b2e9 Binary files /dev/null and b/aiml20/CV training images/pliers/Klieste na segerove poistky.jpg differ diff --git a/aiml20/CV training images/pliers/Kombinationszange detail.jpg b/aiml20/CV training images/pliers/Kombinationszange detail.jpg new file mode 100644 index 0000000..d6f0e7b Binary files /dev/null and b/aiml20/CV training images/pliers/Kombinationszange detail.jpg differ diff --git a/aiml20/CV training images/pliers/Kombinationszange.JPG b/aiml20/CV training images/pliers/Kombinationszange.JPG new file mode 100644 index 0000000..3aee58a Binary files /dev/null and b/aiml20/CV training images/pliers/Kombinationszange.JPG differ diff --git a/aiml20/CV training images/pliers/Lineman's Plier.jpg b/aiml20/CV training images/pliers/Lineman's Plier.jpg new file mode 100644 index 0000000..6fab841 Binary files /dev/null and b/aiml20/CV training images/pliers/Lineman's Plier.jpg differ diff --git a/aiml20/CV training images/pliers/Long-nosePliers.jpg b/aiml20/CV training images/pliers/Long-nosePliers.jpg new file mode 100644 index 0000000..9557a6c Binary files /dev/null and b/aiml20/CV training images/pliers/Long-nosePliers.jpg differ diff --git a/aiml20/CV training images/pliers/Lux 1000V PP.jpg b/aiml20/CV training images/pliers/Lux 1000V PP.jpg new file mode 100644 index 0000000..6e2e31e Binary files /dev/null and b/aiml20/CV training images/pliers/Lux 1000V PP.jpg differ diff --git a/aiml20/CV training images/pliers/Needle nose pliers.jpg b/aiml20/CV training images/pliers/Needle nose pliers.jpg new file mode 100644 index 0000000..3b19615 Binary files /dev/null and b/aiml20/CV training images/pliers/Needle nose pliers.jpg differ diff --git "a/aiml20/CV training images/pliers/N\303\244pitsadKD.jpg" "b/aiml20/CV training images/pliers/N\303\244pitsadKD.jpg" new file mode 100644 index 0000000..40296a2 Binary files /dev/null and "b/aiml20/CV training images/pliers/N\303\244pitsadKD.jpg" differ diff --git a/aiml20/CV training images/pliers/Ostrogubetz.jpg b/aiml20/CV training images/pliers/Ostrogubetz.jpg new file mode 100644 index 0000000..676659b Binary files /dev/null and b/aiml20/CV training images/pliers/Ostrogubetz.jpg differ diff --git a/aiml20/CV training images/pliers/PINZE UNIV VARIE.jpg b/aiml20/CV training images/pliers/PINZE UNIV VARIE.jpg new file mode 100644 index 0000000..bdec21c Binary files /dev/null and b/aiml20/CV training images/pliers/PINZE UNIV VARIE.jpg differ diff --git a/aiml20/CV training images/pliers/Partes de um alicate.GIF b/aiml20/CV training images/pliers/Partes de um alicate.GIF new file mode 100644 index 0000000..742e54e Binary files /dev/null and b/aiml20/CV training images/pliers/Partes de um alicate.GIF differ diff --git "a/aiml20/CV training images/pliers/Pince plate isol\303\251e Facom.jpg" "b/aiml20/CV training images/pliers/Pince plate isol\303\251e Facom.jpg" new file mode 100644 index 0000000..2c2049e Binary files /dev/null and "b/aiml20/CV training images/pliers/Pince plate isol\303\251e Facom.jpg" differ diff --git a/aiml20/CV training images/pliers/Pinchilo 1.jpg b/aiml20/CV training images/pliers/Pinchilo 1.jpg new file mode 100644 index 0000000..319b443 Binary files /dev/null and b/aiml20/CV training images/pliers/Pinchilo 1.jpg differ diff --git a/aiml20/CV training images/pliers/Pinchilo.jpg b/aiml20/CV training images/pliers/Pinchilo.jpg new file mode 100644 index 0000000..4d2e017 Binary files /dev/null and b/aiml20/CV training images/pliers/Pinchilo.jpg differ diff --git a/aiml20/CV training images/pliers/Pinza15.JPG b/aiml20/CV training images/pliers/Pinza15.JPG new file mode 100644 index 0000000..383c3de Binary files /dev/null and b/aiml20/CV training images/pliers/Pinza15.JPG differ diff --git a/aiml20/CV training images/pliers/PinzaCrossmanDowenPaggio-1.jpg b/aiml20/CV training images/pliers/PinzaCrossmanDowenPaggio-1.jpg new file mode 100644 index 0000000..3c530f0 Binary files /dev/null and b/aiml20/CV training images/pliers/PinzaCrossmanDowenPaggio-1.jpg differ diff --git a/aiml20/CV training images/pliers/PinzadePuntaCrossmanDowenPaggio-abr2016.jpg b/aiml20/CV training images/pliers/PinzadePuntaCrossmanDowenPaggio-abr2016.jpg new file mode 100644 index 0000000..8bd7848 Binary files /dev/null and b/aiml20/CV training images/pliers/PinzadePuntaCrossmanDowenPaggio-abr2016.jpg differ diff --git a/aiml20/CV training images/pliers/PinzadepuntaDowenPagio-dec2017.jpg b/aiml20/CV training images/pliers/PinzadepuntaDowenPagio-dec2017.jpg new file mode 100644 index 0000000..0160b6c Binary files /dev/null and b/aiml20/CV training images/pliers/PinzadepuntaDowenPagio-dec2017.jpg differ diff --git a/aiml20/CV training images/pliers/Plier01.jpg b/aiml20/CV training images/pliers/Plier01.jpg new file mode 100644 index 0000000..dc6dc36 Binary files /dev/null and b/aiml20/CV training images/pliers/Plier01.jpg differ diff --git a/aiml20/CV training images/pliers/Plier02.jpg b/aiml20/CV training images/pliers/Plier02.jpg new file mode 100644 index 0000000..16f73f5 Binary files /dev/null and b/aiml20/CV training images/pliers/Plier02.jpg differ diff --git a/aiml20/CV training images/pliers/Pliers after short circuit.JPG b/aiml20/CV training images/pliers/Pliers after short circuit.JPG new file mode 100644 index 0000000..aeca6b1 Binary files /dev/null and b/aiml20/CV training images/pliers/Pliers after short circuit.JPG differ diff --git a/aiml20/CV training images/pliers/Pliers tool.jpg b/aiml20/CV training images/pliers/Pliers tool.jpg new file mode 100644 index 0000000..cb34713 Binary files /dev/null and b/aiml20/CV training images/pliers/Pliers tool.jpg differ diff --git a/aiml20/CV training images/pliers/Pliers20050905.jpg b/aiml20/CV training images/pliers/Pliers20050905.jpg new file mode 100644 index 0000000..7ba840e Binary files /dev/null and b/aiml20/CV training images/pliers/Pliers20050905.jpg differ diff --git a/aiml20/CV training images/pliers/Punttang.jpg b/aiml20/CV training images/pliers/Punttang.jpg new file mode 100644 index 0000000..c872ec0 Binary files /dev/null and b/aiml20/CV training images/pliers/Punttang.jpg differ diff --git a/aiml20/CV training images/pliers/Screw pliers-head.jpg b/aiml20/CV training images/pliers/Screw pliers-head.jpg new file mode 100644 index 0000000..4316354 Binary files /dev/null and b/aiml20/CV training images/pliers/Screw pliers-head.jpg differ diff --git a/aiml20/CV training images/pliers/Screw pliers.jpg b/aiml20/CV training images/pliers/Screw pliers.jpg new file mode 100644 index 0000000..278c01a Binary files /dev/null and b/aiml20/CV training images/pliers/Screw pliers.jpg differ diff --git a/aiml20/CV training images/pliers/Si-ri-zange.jpg b/aiml20/CV training images/pliers/Si-ri-zange.jpg new file mode 100644 index 0000000..64613ca Binary files /dev/null and b/aiml20/CV training images/pliers/Si-ri-zange.jpg differ diff --git a/aiml20/CV training images/pliers/Side cutting pliers.jpg b/aiml20/CV training images/pliers/Side cutting pliers.jpg new file mode 100644 index 0000000..86b5659 Binary files /dev/null and b/aiml20/CV training images/pliers/Side cutting pliers.jpg differ diff --git a/aiml20/CV training images/pliers/Side cutting power pliers.jpg b/aiml20/CV training images/pliers/Side cutting power pliers.jpg new file mode 100644 index 0000000..96c6774 Binary files /dev/null and b/aiml20/CV training images/pliers/Side cutting power pliers.jpg differ diff --git a/aiml20/CV training images/pliers/Spitzzange.jpg b/aiml20/CV training images/pliers/Spitzzange.jpg new file mode 100644 index 0000000..d5ad511 Binary files /dev/null and b/aiml20/CV training images/pliers/Spitzzange.jpg differ diff --git a/aiml20/CV training images/pliers/Spreizzangen.jpg b/aiml20/CV training images/pliers/Spreizzangen.jpg new file mode 100644 index 0000000..bbaa5ae Binary files /dev/null and b/aiml20/CV training images/pliers/Spreizzangen.jpg differ diff --git a/aiml20/CV training images/pliers/Sprung needle nosed pliers.jpg b/aiml20/CV training images/pliers/Sprung needle nosed pliers.jpg new file mode 100644 index 0000000..2148e9a Binary files /dev/null and b/aiml20/CV training images/pliers/Sprung needle nosed pliers.jpg differ diff --git a/aiml20/CV training images/pliers/Storchschnabelzange.jpg b/aiml20/CV training images/pliers/Storchschnabelzange.jpg new file mode 100644 index 0000000..f2fefa8 Binary files /dev/null and b/aiml20/CV training images/pliers/Storchschnabelzange.jpg differ diff --git a/aiml20/CV training images/pliers/TOOL-05-NN (14151903559).jpg b/aiml20/CV training images/pliers/TOOL-05-NN (14151903559).jpg new file mode 100644 index 0000000..6ca20af Binary files /dev/null and b/aiml20/CV training images/pliers/TOOL-05-NN (14151903559).jpg differ diff --git a/aiml20/CV training images/pliers/Terava otsaga tangid.JPG b/aiml20/CV training images/pliers/Terava otsaga tangid.JPG new file mode 100644 index 0000000..29f3150 Binary files /dev/null and b/aiml20/CV training images/pliers/Terava otsaga tangid.JPG differ diff --git a/aiml20/CV training images/pliers/Z05006200.JPG b/aiml20/CV training images/pliers/Z05006200.JPG new file mode 100644 index 0000000..db0819f Binary files /dev/null and b/aiml20/CV training images/pliers/Z05006200.JPG differ diff --git a/aiml20/CV training images/pliers/Zange 1654.JPG b/aiml20/CV training images/pliers/Zange 1654.JPG new file mode 100644 index 0000000..ec4f1c2 Binary files /dev/null and b/aiml20/CV training images/pliers/Zange 1654.JPG differ diff --git a/aiml20/CV training images/screwdrivers/4 Screwdrivers.jpg b/aiml20/CV training images/screwdrivers/4 Screwdrivers.jpg new file mode 100644 index 0000000..e23facb Binary files /dev/null and b/aiml20/CV training images/screwdrivers/4 Screwdrivers.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Aparafusadores.jpg b/aiml20/CV training images/screwdrivers/Aparafusadores.jpg new file mode 100644 index 0000000..211013b Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Aparafusadores.jpg differ diff --git a/aiml20/CV training images/screwdrivers/BetaEasy Bit-Halter.jpg b/aiml20/CV training images/screwdrivers/BetaEasy Bit-Halter.jpg new file mode 100644 index 0000000..6b4b876 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/BetaEasy Bit-Halter.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Big flat screwdriver.jpg b/aiml20/CV training images/screwdrivers/Big flat screwdriver.jpg new file mode 100644 index 0000000..bca63da Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Big flat screwdriver.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Bit screwdriver.jpg b/aiml20/CV training images/screwdrivers/Bit screwdriver.jpg new file mode 100644 index 0000000..8bbc00d Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Bit screwdriver.jpg differ diff --git a/aiml20/CV training images/screwdrivers/CacciavitePanciaStella.JPG b/aiml20/CV training images/screwdrivers/CacciavitePanciaStella.JPG new file mode 100644 index 0000000..3579584 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/CacciavitePanciaStella.JPG differ diff --git a/aiml20/CV training images/screwdrivers/CacciaviteStellaArancio.JPG b/aiml20/CV training images/screwdrivers/CacciaviteStellaArancio.JPG new file mode 100644 index 0000000..e74558e Binary files /dev/null and b/aiml20/CV training images/screwdrivers/CacciaviteStellaArancio.JPG differ diff --git a/aiml20/CV training images/screwdrivers/CacciaviteTaglioArancio.JPG b/aiml20/CV training images/screwdrivers/CacciaviteTaglioArancio.JPG new file mode 100644 index 0000000..c38b5ad Binary files /dev/null and b/aiml20/CV training images/screwdrivers/CacciaviteTaglioArancio.JPG differ diff --git a/aiml20/CV training images/screwdrivers/CacciaviteTaglioRosso.JPG b/aiml20/CV training images/screwdrivers/CacciaviteTaglioRosso.JPG new file mode 100644 index 0000000..9da5ac6 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/CacciaviteTaglioRosso.JPG differ diff --git a/aiml20/CV training images/screwdrivers/Craftsman cushion grip screwdrivers.jpg b/aiml20/CV training images/screwdrivers/Craftsman cushion grip screwdrivers.jpg new file mode 100644 index 0000000..e549deb Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Craftsman cushion grip screwdrivers.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Destornillador pentalobular P2.jpg b/aiml20/CV training images/screwdrivers/Destornillador pentalobular P2.jpg new file mode 100644 index 0000000..1864ab8 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Destornillador pentalobular P2.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Flat minus screwdriver on table.jpg b/aiml20/CV training images/screwdrivers/Flat minus screwdriver on table.jpg new file mode 100644 index 0000000..ce376c6 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Flat minus screwdriver on table.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Flathead screwdriver.JPG b/aiml20/CV training images/screwdrivers/Flathead screwdriver.JPG new file mode 100644 index 0000000..c3c0cdf Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Flathead screwdriver.JPG differ diff --git a/aiml20/CV training images/screwdrivers/Haupa Schlitzschraubenzieher.jpg b/aiml20/CV training images/screwdrivers/Haupa Schlitzschraubenzieher.jpg new file mode 100644 index 0000000..201ee0b Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Haupa Schlitzschraubenzieher.jpg differ diff --git a/aiml20/CV training images/screwdrivers/IKEA bit screwdriver.jpg b/aiml20/CV training images/screwdrivers/IKEA bit screwdriver.jpg new file mode 100644 index 0000000..ecbc43e Binary files /dev/null and b/aiml20/CV training images/screwdrivers/IKEA bit screwdriver.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Ideal multibit screwdriver and F connector tool.jpg b/aiml20/CV training images/screwdrivers/Ideal multibit screwdriver and F connector tool.jpg new file mode 100644 index 0000000..fe0a025 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Ideal multibit screwdriver and F connector tool.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Ideal speeder screwdrivers.jpg b/aiml20/CV training images/screwdrivers/Ideal speeder screwdrivers.jpg new file mode 100644 index 0000000..4ce3ff6 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Ideal speeder screwdrivers.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Inbusschraubendreher Wera SW 4.jpg b/aiml20/CV training images/screwdrivers/Inbusschraubendreher Wera SW 4.jpg new file mode 100644 index 0000000..5ae5af1 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Inbusschraubendreher Wera SW 4.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Klein Journeyman screwdrivers.jpg b/aiml20/CV training images/screwdrivers/Klein Journeyman screwdrivers.jpg new file mode 100644 index 0000000..43de9e4 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Klein Journeyman screwdrivers.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Klein cushion grip screwdrivers.jpg b/aiml20/CV training images/screwdrivers/Klein cushion grip screwdrivers.jpg new file mode 100644 index 0000000..10c1193 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Klein cushion grip screwdrivers.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Magnetic-Ratchet-Screwdriver-62817-480x360 (4904404407).jpg b/aiml20/CV training images/screwdrivers/Magnetic-Ratchet-Screwdriver-62817-480x360 (4904404407).jpg new file mode 100644 index 0000000..2b31b9c Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Magnetic-Ratchet-Screwdriver-62817-480x360 (4904404407).jpg differ diff --git a/aiml20/CV training images/screwdrivers/Magnetschraubendreher IMGP1940.jpg b/aiml20/CV training images/screwdrivers/Magnetschraubendreher IMGP1940.jpg new file mode 100644 index 0000000..157cb41 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Magnetschraubendreher IMGP1940.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Multi-bit screwdriver.jpg b/aiml20/CV training images/screwdrivers/Multi-bit screwdriver.jpg new file mode 100644 index 0000000..a694ca3 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Multi-bit screwdriver.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Opened bit screwdriver.jpg b/aiml20/CV training images/screwdrivers/Opened bit screwdriver.jpg new file mode 100644 index 0000000..15ed25e Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Opened bit screwdriver.jpg differ diff --git "a/aiml20/CV training images/screwdrivers/Packshot narz\304\231dzi.jpg" "b/aiml20/CV training images/screwdrivers/Packshot narz\304\231dzi.jpg" new file mode 100644 index 0000000..1fc51fd Binary files /dev/null and "b/aiml20/CV training images/screwdrivers/Packshot narz\304\231dzi.jpg" differ diff --git a/aiml20/CV training images/screwdrivers/Philips Screwdriver.JPG b/aiml20/CV training images/screwdrivers/Philips Screwdriver.JPG new file mode 100644 index 0000000..b6a78e7 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Philips Screwdriver.JPG differ diff --git a/aiml20/CV training images/screwdrivers/Philips plus or cross screwdriver on table.jpg b/aiml20/CV training images/screwdrivers/Philips plus or cross screwdriver on table.jpg new file mode 100644 index 0000000..0d2f660 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Philips plus or cross screwdriver on table.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Ratcheting Screwdriver.jpg b/aiml20/CV training images/screwdrivers/Ratcheting Screwdriver.jpg new file mode 100644 index 0000000..ce5e595 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Ratcheting Screwdriver.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Ridgid 6-in-1 screwdriver.jpg b/aiml20/CV training images/screwdrivers/Ridgid 6-in-1 screwdriver.jpg new file mode 100644 index 0000000..b2fa12a Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Ridgid 6-in-1 screwdriver.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Robertson screwdriver set.jpg b/aiml20/CV training images/screwdrivers/Robertson screwdriver set.jpg new file mode 100644 index 0000000..9ab9fdc Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Robertson screwdriver set.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Schraubendreher 1655.JPG b/aiml20/CV training images/screwdrivers/Schraubendreher 1655.JPG new file mode 100644 index 0000000..77392fa Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Schraubendreher 1655.JPG differ diff --git a/aiml20/CV training images/screwdrivers/Schraubenzieher.jpg b/aiml20/CV training images/screwdrivers/Schraubenzieher.jpg new file mode 100644 index 0000000..108bc47 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Schraubenzieher.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Screw Driver display.jpg b/aiml20/CV training images/screwdrivers/Screw Driver display.jpg new file mode 100644 index 0000000..fc05078 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Screw Driver display.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Screw drive.jpg b/aiml20/CV training images/screwdrivers/Screw drive.jpg new file mode 100644 index 0000000..994e6eb Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Screw drive.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Screw driver.jpg b/aiml20/CV training images/screwdrivers/Screw driver.jpg new file mode 100644 index 0000000..45ea430 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Screw driver.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Screwdriver Phillips.jpg b/aiml20/CV training images/screwdrivers/Screwdriver Phillips.jpg new file mode 100644 index 0000000..082fefc Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Screwdriver Phillips.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Screwdriver-wooden-handle.jpg b/aiml20/CV training images/screwdrivers/Screwdriver-wooden-handle.jpg new file mode 100644 index 0000000..67c89f8 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Screwdriver-wooden-handle.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Seke 12.jpg b/aiml20/CV training images/screwdrivers/Seke 12.jpg new file mode 100644 index 0000000..03709b4 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Seke 12.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Serrurier-montpellier-urgence.jpg b/aiml20/CV training images/screwdrivers/Serrurier-montpellier-urgence.jpg new file mode 100644 index 0000000..34f61af Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Serrurier-montpellier-urgence.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Shrauhbturnilo.jpg b/aiml20/CV training images/screwdrivers/Shrauhbturnilo.jpg new file mode 100644 index 0000000..890afb3 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Shrauhbturnilo.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Swisstools Screwdrivers ESD VDE.jpg b/aiml20/CV training images/screwdrivers/Swisstools Screwdrivers ESD VDE.jpg new file mode 100644 index 0000000..202e568 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Swisstools Screwdrivers ESD VDE.jpg differ diff --git a/aiml20/CV training images/screwdrivers/TOOL-12-PSC (14338583935).jpg b/aiml20/CV training images/screwdrivers/TOOL-12-PSC (14338583935).jpg new file mode 100644 index 0000000..ec75c05 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/TOOL-12-PSC (14338583935).jpg differ diff --git a/aiml20/CV training images/screwdrivers/Tornavida.jpg b/aiml20/CV training images/screwdrivers/Tornavida.jpg new file mode 100644 index 0000000..21c7421 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Tornavida.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Torxschraubendreher Wera TX 6.jpg b/aiml20/CV training images/screwdrivers/Torxschraubendreher Wera TX 6.jpg new file mode 100644 index 0000000..2cec958 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Torxschraubendreher Wera TX 6.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Various Electronic Components (14293058787).jpg b/aiml20/CV training images/screwdrivers/Various Electronic Components (14293058787).jpg new file mode 100644 index 0000000..45c2a58 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Various Electronic Components (14293058787).jpg differ diff --git a/aiml20/CV training images/screwdrivers/Wera screwdrivers.jpg b/aiml20/CV training images/screwdrivers/Wera screwdrivers.jpg new file mode 100644 index 0000000..5b9d700 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Wera screwdrivers.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Wiha Softfinish Schraubendreher.png b/aiml20/CV training images/screwdrivers/Wiha Softfinish Schraubendreher.png new file mode 100644 index 0000000..b6a9be7 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Wiha Softfinish Schraubendreher.png differ diff --git a/aiml20/CV training images/screwdrivers/Wiha-liftup-26one.jpg b/aiml20/CV training images/screwdrivers/Wiha-liftup-26one.jpg new file mode 100644 index 0000000..7ab5e54 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Wiha-liftup-26one.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Yellow screwdriver.jpg b/aiml20/CV training images/screwdrivers/Yellow screwdriver.jpg new file mode 100644 index 0000000..32743f8 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Yellow screwdriver.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Yellow-flathead-screwdriver.jpg b/aiml20/CV training images/screwdrivers/Yellow-flathead-screwdriver.jpg new file mode 100644 index 0000000..685f9bc Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Yellow-flathead-screwdriver.jpg differ diff --git a/aiml20/CV training images/screwdrivers/Zwerg.jpg b/aiml20/CV training images/screwdrivers/Zwerg.jpg new file mode 100644 index 0000000..389caf1 Binary files /dev/null and b/aiml20/CV training images/screwdrivers/Zwerg.jpg differ diff --git a/aiml20/DEMO Computer Vision.md b/aiml20/DEMO Computer Vision.md new file mode 100644 index 0000000..8e0d374 --- /dev/null +++ b/aiml20/DEMO Computer Vision.md @@ -0,0 +1,137 @@ +# Using pre-built AI to understand images + +In this demonstration, we will use Azure Computer Vision to detect the type of +object an image represents. + +First, we will use the Computer Vision online web-form to upload an image and +observe the results. + +Then, we will use the Computer Vision API to collect the same information +programatically, using curl. + +## Defining the problem: Shop by Photo doesn't work right + +The problem that motivates this talk is that the Shop by Photo tool in the +Tailwind Traders website isn't correctly identifying products. It's useful to +run this section in [ONNX Deployment](DEMO%20ONNX%20deployment.md#defining-the-problem-shop-by-photo-doesnt-work-right) at this point +to set the scene. + +## Using Computer Vision via the Web interface + +Let's try using computer vision on a picture of a hardware product. If we can +identify a product that Tailwind Traders sells by name, we can search for that +name in the catalog for the "Shop by Photo" app. + +1. Visit the Computer Vision webpage at + [https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/](https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/?WT.mc_id=msignitethetour2019-github-aiml20) + +2. Scroll down to the "Analyze an Image" section. It looks like this: + +!["Computer Vision: Analyze an Image"](img/Computer%20Vision%20Analyze%20an%20Image.png) + +3. Click the "Browse" button, and choose "man in hardhat.jpg" from the "test + images" folder in "CV Training Images". + +4. After a moment, the analysis of your image will appear in the right pane. It + looks like this: + +``` +FEATURE NAME: VALUE + +Objects [ { "rectangle": { "x": 138, "y": 27, "w": 746, "h": 471 }, "object": "headwear", "confidence": 0.616 }, { "rectangle": { "x": 52, "y": 33, "w": 910, "h": 951 }, "object": "person", "confidence": 0.802 } ] + +Tags [ { "name": "man", "confidence": 0.999212 }, { "name": "headdress", "confidence": 0.99731946 }, { "name": "person", "confidence": 0.995057464 }, { "name": "clothing", "confidence": 0.991814733 }, { "name": "wearing", "confidence": 0.9827137 }, { "name": "hat", "confidence": 0.9691986 }, { "name": "helmet", "confidence": 0.9227209 }, { "name": "headgear", "confidence": 0.840476155 }, { "name": "personal protective equipment", "confidence": 0.8358513 }, { "name": "looking", "confidence": 0.832229853 }, { "name": "hard hat", "confidence": 0.8004248 }, { "name": "human face", "confidence": 0.785058737 }, { "name": "green", "confidence": 0.774940848 }, { "name": "fashion accessory", "confidence": 0.706475437 } ] + +Description { "tags": [ "man", "headdress", "person", "clothing", "wearing", "hat", "helmet", "looking", "green", "jacket", "shirt", "standing", "head", "suit", "glasses", "yellow", "white", "large", "phone", "holding" ], "captions": [ { "text": "a man wearing a helmet", "confidence": 0.8976638 } ] } + +Image format "Jpeg" + +Image dimensions 1000 x 1000 + +Clip art type 0 + +Line drawing type 0 + +Black and white false + +Adult content false + +Adult score 0.0126242451 + +Racy false + +Racy score 0.0156497136 + +Categories [ { "name": "people_", "score": 0.69140625 } ] + +Faces [ { "age": 37, "gender": "Male", "faceRectangle": { "top": 419, "left": 363, "width": 398, "height": 398 } } ] + +Dominant color background "White" + +Dominant color foreground "White" + +Accent Color #90A526 +``` + +(Note, the above analysis may change in the future: the Computer Vision model is +updated regularly.) + +Note that in the first "Objects" result, two objects "headwear" and "person" are +detected, and their locations in the image is given. The object we want to +detect is classified "headwear", but for our application we need a more specific +classification: "hard hat". However "hard hat" is not one of the object types +that Computer Vision currently detects. (We'll address this problem with Custom +Vision, later.) Also note that a confidence score is given for each object +classification. + +The second "Tags" result gives a list of labels associated with the entire +image. The tag with the highest confidence (listed first) is "man", which +doesn't help us much. The second tag, "headdress", is not exactly what we are +looking for either. + +The other responses are also interesting, but we won't focus on them for our +demo. But take a look at what's included: + +* A caption for the photo ("a man wearing a helmet") in the Description field. + +* Image features (is it black and white? a line drawing?) + +* Details of any faces detected in the image (identified as a 37-year-old male in this case) + +* A score for the content of the image: is it "Adult" or "Racy"? + +* Color analysis for the image: the dominant foreground, accent, and background colors. + +We're really only interested in the "Tags" field for our purposes, so we'll find +out how to extract that programatically in the next section. + +## Using Computer Vision via the API + +You can [control Computer Vision programatically using its REST +API](https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/vision-api-how-to-topics/howtocallvisionapi?WT.mc_id=msignitethetour2019-github-aiml20). +You can do this from just about any language or application that has access to +the Web, but we will use [curl](https://curl.haxx.se/), a common command-line +application for interfacing with URLs and collecting their outputs. The curl +application comes pre-installed on most Linux distributions and in recent +versions of Windows 10 (1706 and later). + +Run the commands in the file [`vision_demo.sh`](vision_demo.sh). You can use a local Azure CLI or +Azure Cloud Shell, but you must use bash as the shell. + +The commands in this script will: + +1. Log into your Azure subscription (this step is unneccessary if using Cloud Shell) +2. Create an Azure Resource Group +3. Create a Cognitive Service key. (Note: this is an omnibus key that we will also use for Custom Vision, later.) +4. Find the key +5. Use CURL to analyze two images + +## Manually generating Keys for use with Computer Vision + +In the script [vision_demo.sh](vision_demo.sh), run the section "Create a Key" to programatically create a Cognitive Sevices key using the Azure Command Line Interface. +(If you prefer, you can [create keys interactively with the Azure +Portal](https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-apis-create-account?tabs=multiservice%2Clinux&WT.mc_id=msignitethetour2019-github-aiml20).) + +## Next Step + +[Custom Vision](DEMO%20Custom%20Vision.md) \ No newline at end of file diff --git a/aiml20/DEMO Custom Vision.md b/aiml20/DEMO Custom Vision.md new file mode 100644 index 0000000..b2884e8 --- /dev/null +++ b/aiml20/DEMO Custom Vision.md @@ -0,0 +1,80 @@ +# DEMO: Custom Vision + +In this demo, we create a custom vision model using the service at +customvision.ai. + +## Create a custom model project with Custom Vision + +TIP: You can do this section ahead of time, to save time in a live demo. + +1. Sign into [Custom Vision](https://customvision.ai) and create a new project. + [Follow the instructions + here](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=msignitethetour2019-github-aiml20). + +1. Your new project should have the following settings: + + - Name: Tools + - Description: Products sold by Tailwind Traders + - Resource: aiml20-cs-resource + - Project Type: classification + - Classification Types: Multiclass + - Domains: Retail (compact) + - Export capabilities: Basic Platforms + +1. In the "Tags" tool in the left side, use the "+" button to add the following tags: + + - drill + - hammer + - pliers + - screwdriver + +1. We will now add images for each tag from the corresponding folder in "CV Training Images". Here's how to do it for "drill" + + - Click "Add Images" in the top row + - Browse to CV Training Images / drills + - Select all files: click one file, then press Control-A + - Click Open + - In the "Image Upload" dialog that appears next, select "drill" in "My Tags" and then click "Upload 16 Files" + - repeat this process for the tags: hammer, pliers, screwdriver (we will do "hard hat" later) + +## Add images and train a model + +At Ignite Tour, the prior steps were all done ahead of time in preparation. Only +the remaining steps were done live, to save time. + +1. If you haven't already, sign into customvision.ai and open your "tools" project. + +1. This project has already been provided with images of drills, hammers, pliers, and screwdrivers. Let's add some images of hard hats as well. + +- Click "Add Images" in the top row +- Browse to CV Training Images / drills +- Select all files: click one file, then press Control-A +- Click Open +- In the "Image Upload" dialog that appears next, select "hard hat" in "My Tags" and then click "Upload 16 Files" + +1. Click "Performance" in the top menu bar, and then click the green "Train" button. Choose "Quick Training" and then click "Train" + +1. Click on the most recent iteration in the left pane to see the results. You + should have 90.9% Precision (how many of our training images does the model + predict correctly?), 88.2% Recall (when we generate a prediction, is it + correct?), and 98.7% AP (overall measure). Note that these depend on the + probability threshold -- make this low if you want to avoid false positives. + For our retail app, it's safe to make it high. + +1. Test out the model with a new picture. Click "Quick Test" and "Browse Local + Files", and then choose "test images / man in hardhat.jpg". See that it + identifies as a hard hat with 99.9% probability. Try the same with "test images / drill.jpg", which is also identified correctly. + +Now we will save the model in the ONNX format for integration into the Tailwind +Traders app. + +1. Click Export, and choose "ONNX". Note the other platform-specific formats + available as well. + +1. Select the version ONNX 1.2, and then click Export. The TWT app expects a + file called products.onnx, so we'll use the one that's already saved in the + repo. + +## Next Step + +[ONNX Deployment](DEMO%20ONNX%20deployment.md) \ No newline at end of file diff --git a/aiml20/DEMO ONNX deployment.md b/aiml20/DEMO ONNX deployment.md new file mode 100644 index 0000000..ec9c30b --- /dev/null +++ b/aiml20/DEMO ONNX deployment.md @@ -0,0 +1,93 @@ +# DEMO: ONNX Deployment + +In this demo, we take the ONNX file we exported in the [Custom +Vision](DEMO%20Custom%20Vision.md) demo, and deploy it to the Tailwind Traders website. + +The website uses the model in `products.onnx` for the Shop by Photo app. The +uploaded image is processed by the model, which generates one of five labels: +"hammer", "drill", "pliers", "screwdriver" or "hard hat". The website searches +the product list for the generated label, and returns the results of the search. + +## Load the simple ONNX model + +(TIP: You can do this step ahead of time. This step is necessary if you have run +this demo before on the same deployment.) + +We will replace the products.onnx file in the Web app with a version that only recognizes two object categories: "hammer" and "drill". + +1. In the Azure Portal, visit your aiml20-demo resource group + +1. Click the "aiml20" App Service resource + +1. In the left menu under Development Tools, Click Advanced tools, then click "Go" in right pane to launch Kudu. + +1. In the main menu bar, Click Debug Console > PowerShell + +1. Browse to: site / wwwroot / Standalone / Onnxmodels + +1. With Explorer, open the `ONNX / simple model` folder from your AIML20 repo + +1. Drag products.onnx into the LEFT HALF of the Kudu window. (IMPORTANT: Do NOT drag into the box that says "drag here to upload and unzip".) This model only knows how to identify drills and hammers. + +1. Restart the web server. Return to the "aiml20" App Service resource and click "Restart" in the top menu bar. Wait two minutes for the website to restart completely. + +## Defining the problem: Shop by Photo doesn't work right + +(Note: This section was done at the beginning of the AIML20 presentation.) + +1. Visit the Tailwind Traders website you deployed earlier. + +1. Scroll down to the "Shop by Photo" section of the website + +1. Click "Shop by Photo" + +1. In your AIML20 repo, select: test images > drill.jpg + +1. It correctly identifies it as a drill. Yay! + +1. Return to home page and click "Shop by Photo" again + +1. In your AIML20 repo, select: test images > pliers.jpg + +1. Oh no! It identifies it as a hammer. We'll fix that later, but first, let's understand why it failed. + +## Update the ONNX model in the Tailwind Traders website + +First, view the exported model in Netron: + +1. Browse to https://lutzroeder.github.io/netron/, Click Open Model + +2. Open ONNX / Custom Model / products.onnx + +3. Scroll through the neural network and note: + + - it's large + - at the top, is a 224x224 image as input (dirty secret: computer vision models have pretty poor vision) + - add the bottom, it outputs 5 values, these are the confidence scores for our class labels + +Next, drop the ONNX file we exported into TWT filesystem + +1. In the Azure Portal, visit your aiml20-demo resource group + +1. Click the "aiml20" Web App resource + +1. Under Development Tools, Click Advanced tools, then click "Go" in right pane to launch Kudu. + +1. In the main menu bar, Click Debug Console > PowerShell + +1. Browse to: site / wwwroot / Standalone / Onnxmodels + +1. With Explorer, open the `ONNX / custom model` folder from your AIML20 repo + +1. Drag products.onnx into the LEFT HALF of the Kudu window. (IMPORTANT: Do NOT + drag into the box that says "drag here to upload and unzip".) + +1. Restart the web server. Return to the "onnx" Web App resource and click "Restart". + +Rerun Shop by Photo, upload `test images / pliers.jpg`. Now it works! + +## Next Step + +[Personalizer](DEMO%20Personalizer.md) + + diff --git a/aiml20/DEMO Personalizer.md b/aiml20/DEMO Personalizer.md new file mode 100644 index 0000000..c38f0c8 --- /dev/null +++ b/aiml20/DEMO Personalizer.md @@ -0,0 +1,24 @@ +# Personalizer Demo + +In this demo, observe how the layout of a website adapts to visitor actions using reinforcement learning and [Cognitive Services Personalizer](https://docs.microsoft.com/en-us/azure/cognitive-services/personalizer/?WT.mc_id=msignitethetour2019-github-aiml20). + +Personalizer will dynamically reconfigure the interface to optimize the +likelihood of an anonymous visitor clicking on the featured category in the +Recommended section. + +1. Deploy the Tailwind Traders Website app (if you didn't already do so with `DEMO Setup.md`) + +2. Visit the Tailwind Traders homepage + +3. Observe the "Recommended" section and the order of the featured categories + +4. Refresh the page (you may need to do this a couple of times). Observe that + the layout changes. + +The Personalizer service is tracking the anonymous visitors and recording the +time of day, day of week, and browser OS used when clicking on categories. +The "reward" is whether or not the large, featured section was clicked. + +Over time, Personalizer will determine the best category to feature based on +time of day, day of week, and OS. It will also "explore" 20% of the time, to +surface categories that would otherwise not be presented. diff --git a/aiml20/DEMO Setup.md b/aiml20/DEMO Setup.md new file mode 100644 index 0000000..0b110c1 --- /dev/null +++ b/aiml20/DEMO Setup.md @@ -0,0 +1,160 @@ +# Setup for AIML20 demos + +These tasks were performed ahead of time for the AIML20 presentation. Follow +these same steps to prepare for the remaining demo scripts. + +## Clone the repository to your local machine + +You will need the contents of https://github.com/microsoft/ignite-learning-paths/tree/master/aiml/aiml20 on your local machine. The easiest way to do this is to visit the [Ignite Learning Paths repository](https://github.com/microsoft/ignite-learning-paths) and click the "Clone or download" button. We will refer to files relative to the `aiml/aiml20` folder. + +## Sign up for an Azure Subscription + +If you don't already have an Azure subscription, you can [sign up +here](https://azure.microsoft.com/free/?WT.mc_id=msignitethetour2019-github-aiml20) +and also get $200 in free Azure credits to use. + +## Find your Azure Subcription ID + +In the [Azure Portal](https://portal.azure.com), sign in and click on +"Subscriptions" in the left menu bar. Click on the Subscription Name you will be +using, and copy the "Subscription ID" shown there. You'll need it later when you +create resources. + +Alternatively, run `az account show` in the Azure CLI and copy the "id" value +shown. + +## Start fresh. + + If you've run the demos before, delete these resource groups if they exist: + + - `aiml20-demo` + + You can use the Azure Portal, or run this command in the Azure CLI: + + ```sh + az group delete --name aiml20-demo + ``` + +## Deploy the Tailwind Traders website. + +Click the button below. This will deploy +[TailwindTraders-Website](https://github.com/Microsoft/TailwindTraders-Website) +from Github, using an ARM +template +to enable the Personalizer integration and ONNX-based Shop by Photo feature. ([More details about this deployment](https://github.com/microsoft/TailwindTraders-Website/blob/master/Source/Tailwind.Traders.Web/Standalone/README.md).) + +[![Deploy to Azure](https://azuredeploy.net/deploybutton.svg)](https://portal.azure.com/?feature.customportal=false#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FTailwindTraders-Website%2Fmaster%2Fazuredeploy.json) + +In the form that appears, select the following options: + +* Subscription: Select the subscription in which to deploy the resources + +* Resource Group: resources will be created in the resource group you specify. + We recommend choosing "New" and entering the name `aiml20-demo`. When + you're done, you can delete this resource group to shut down the site and + delete all associated resources. + +* Location: The Azure region where the resources will be deployed. You must + be able to deploy SQL Database and App Services in that region. + + Note: Since Personalizer is currently only available in WestUS2 and WestEurope, it will be deployed there regardless of what you choose. + +* Site Name: This will be used in the site's URL and visible publicly, and must + be globally unique. To avoid clashes, choose `aiml20-xy` replacing `xy` with your initials, but we will refer to this name as just `aiml20` in these scripts. (If you + choose a name that is in use, you will get "Conflict" errors during the + deployment.) + +* Site Location: Enter the short version of "Location" above, e.g. `westus2`. + (You can get a list of short names in the Azure CLI with: `az account + list-locations -o table`). + +* Deployment mode: Choose `standalone` + +* SQL Login: Enter `twt` + +* SQL Password: generate and use a secure password (it must include punctuation + and mixed case, but do not use `;`). You won't need it for our demos, so no + need to write it down. + +* Enable Personalizer: choose `true` + +* Repo URL: accept the default, `https://github.com/microsoft/TailwindTraders-Website` + +* Branch: accept the default, `master` + +(As a backup, you can also use the Repo URL +`https://github.com/revodavid/TailwindTraders-Website` with the branch `aiml20`. +This was forked on 2019-10-25 and is known to work.) + +Check "I agree to the terms and condtions" and click "Purchase". + +Allow at least 15 minutes for the site to deploy. + +The deployed website URL will be of the form SITENAME.azurewebsites.net (using the Site Name you provided above), or you can find it as follows: + +* click "Go To Resource" under "Next Steps" + +* Click the "App Service" resource + +* Look at the "URL" value displayed in the right pane + +The website URL will be displayed after the "Setting up Source Control" step, or you can inspect the "App Service" resource. + +### Install the "Simple" ONNX model + +Follow the instructions in [DEMO ONNX deployment.md](DEMO%20ONNX%20deployment.md#load-the-simple-onnx-model) under the heading "Load the Simple ONNX model". This will degrade the "Shop by Photo" tool in the app to only recognize hammers and drills. + +## Configure Visual Studio Code + +Install the extension [Azure +Account](https://marketplace.visualstudio.com/items?itemName=ms-vscode.azure-account). +(On Windows, you will also need to [install node.js](https://nodejs.org/).) In VS Code, log +into Azure with the "Azure: Sign In" command (use Control-Shift-P to open the +Command Palette). To run Azure CLI commands from a script in VS Code, use +"Terminal: Run Selected Text in Azure Terminal" to copy commands.) + +Alternatively you can [install the Azure +CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest&WT.mc_id=https://docs.microsoft.com/cli/azure/install-azure-cli?view=azure-cli-latest&WT.mc_id=msignitethetour2019-github-aiml20) +on your local Windows, MacOS or Linux machine. If you don't have it installed, +you can also launch the [Azure Cloud +Shell](https://docs.microsoft.com/en-us/azure/cloud-shell/overview?WT.mc_id=msignitethetour2019-github-aiml20) +and run these commands from a browser window. + +## Prepare Visual Studio for demo + +- Open `vision_demo.sh` +- launch a Cloud Shell with "Azure: Open Bash In Cloud Shell". (If you prefer, you can use the Azure CLI locally.) + +## Open browser pages ready to demo. + +* The deployed Tailwind Trader app +* https://portal.azure.com (browse to resources) +* https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/ +* https://customvision.ai +* https://lutzroeder.github.io/netron/ + +## Download image files to local machine + +Download "CV Training Images.zip" to your local machine, and expand the zip +file. This will create a folder "CV Training Images" with the following +subfolders: + +* drills +* hammers +* hard hats +* pliers +* screwdrivers + +These images will be used to test the Computer Vision service and create a model +with the Custom Vision service. + +These images were sourced from Wikimedia Commons and used under their respective +Creative Commons licenses. See the file [ATTRIBUTIONS.md](Attributions.md) for +details. + +Also download the folder "test images". These images will not be used in +training, but will be used to test that our models are working. + +## Next Step + +[Computer Vision](DEMO%20Computer%20Vision.md) \ No newline at end of file diff --git a/aiml20/ONNX/custom model/products.onnx b/aiml20/ONNX/custom model/products.onnx new file mode 100644 index 0000000..d946647 Binary files /dev/null and b/aiml20/ONNX/custom model/products.onnx differ diff --git a/aiml20/ONNX/simple model/products.onnx b/aiml20/ONNX/simple model/products.onnx new file mode 100644 index 0000000..572aa0a Binary files /dev/null and b/aiml20/ONNX/simple model/products.onnx differ diff --git a/aiml20/README.md b/aiml20/README.md index 5dc19ee..886a6c1 100644 --- a/aiml20/README.md +++ b/aiml20/README.md @@ -1,12 +1,79 @@ -# AIML20 - Train the trainer +# AIML20: Using Pre-Built AI to Solve Business Challenges + +This is the repository supporting the Microsoft Ignite 2019 and Microsoft Ignite +the Tour 2019-2020 talk, "Using Pre-Built AI to Solve Business Challenges". Here +you will find links to the resources mentioned in the talk, and the code and +scripts you will need to recreate the demos given in the talk. + +Short-link to these resources: [aka.ms/AIML20](https://aka.ms/AIML20) + +## Feedback Loop + +Do you have a comment, feedback, suggestion? The best feedback loop for content changes/suggestions/feedback is to create a new issue on this GitHub repository. To get all the details about how to create an issue please refer to the [Contributing docs](https://github.com/microsoft/ignite-learning-paths/blob/master/contributing.md) ## Session Abstract **Using Pre-Built AI to Solve Business Challenges** -Abstract: As a data-driven company, Tailwind Traders understands the importance of using Artificial Intelligence to improve business processes and delight customers. Before investing in an AI team, their existing developers were able to demonstrate some quick wins using pre-built AI technologies. In this session, we will show how you can use Azure Cognitive Services to extract insights from retail data. We’ll go into the neural networks behind computer vision works, and show how you can augment the pre-built AI with your own images for custom image recognition applications. +Abstract: As a data-driven company, Tailwind Traders understands the importance of using Artificial Intelligence to improve business processes and delight customers. Before investing in an AI team, their existing developers were able to demonstrate some quick wins using pre-built AI technologies. In this session, we will show how you can use Azure Cognitive Services to extract insights from retail data. We’ll go into the neural networks behind computer vision, and show how you can augment the pre-built AI with your own images for custom image recognition applications. + +## Technologies used + +* [Azure Cognitive Services](https://docs.microsoft.com/en-us/azure/cognitive-services/?WT.mc_id=msignitethetour2019-github-aiml20) +* [Azure Cloud Shell](https://docs.microsoft.com/en-us/azure/cloud-shell/overview?WT.mc_id=msignitethetour2019-github-aiml20) +* [Azure Command Line Interface (CLI)](https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest?WT.mc_id=msignitethetour2019-github-aiml20) +* [ONNX](https://github.com/onnx/onnx) +* [Visual Studio Code](https://code.visualstudio.com/) + +## Other resources mentioned in talk + +* How Neural Networks Work, by Brandon Rohrer: http://brohrer.github.io/blog.html +* XKCD "Tasks": https://xkcd.com/1425 + +### Azure Cognitive Services docs and apps + +* Cognitive Services Computer Vision: [https://aka.ms/try-computervision](https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/?WT.mc_id=ignitetour-talk-davidsmi) +* Cognitive Services Custom Vision: [Documentation](https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/?WT.mc_id=ignitethetour-github-davidsmi) and application at [https://customvision.ai](https://www.customvision.ai/?WT.mc_id=ignitethetour-github-davidsmi) +* ONNX Runtime: https://github.com/microsoft/onnxruntime +* Cognitive Services Personalizer: [https://aka.ms/personalizer-intro](https://docs.microsoft.com/en-us/azure/cognitive-services/personalizer/?WT.mc_id=msignitethetour2019-github-aiml20) +* Reinforcement Learning with Personalizer: https://aka.ms/personalizerdemo +* Cognitive Services in containers: https://aka.ms/cs-containers + +### Cognitive Services information + +* Cognitve Services pricing: https://aka.ms/cs-pricing +* Cognitive Services compliance and privacy: https://aka.ms/az-compliance +* Microsoft's approach to ethical AI: [https://microsoft.com/AI/our-approach-to-ai](https://www.microsoft.com/AI/our-approach-to-ai?rtc=1&WT.mc_id=msignitethetour2019-github-aiml20) +* Cognitive Services training courses in Microsoft Learn: https://aka.ms/AIML20MSLearnCollection +* Microsoft Certified Azure Data Scientist Associate: https://aka.ms/DataScientistCert +* Microsoft Certified Azure AI Engineer Associate https://aka.ms/AIEngineerCert + +## Demonstrations + +Follow the links below for details on how to recreate the demos given in the +talk. You will need an Azure Subscription to run these demos; if you don't have +one yet, here is a link for [$200 Free Azure Credits for new +subscribers](https://aka.ms/azure-free-credits). + +1. [Setup](DEMO%20Setup.md): Create accounts and deploy and configure resources + to support the demos below. Follow these instructions before attempting any + of the demos below. + +1. [Computer Vision](DEMO%20Computer%20Vision.md): Use Cognitive Services + Computer Vision to analyze an image, via a web application and via the Azure + CLI. + +1. [Custom Vision](DEMO%20Custom%20Vision.md): Create a custom vision model to + detect only products sold by Tailwind Traders. + +1. [ONNX Deployment](DEMO%20ONNX%20deployment.md): Deploy a custom vision model in + the ONNX format to the Tailwind Traders website "Shop by Photo feature + +1. [Personalizer](DEMO%20Personalizer.md): Dynamically reconfigure the layout of + the "Recommended" section of the Tailwind Traders website, to optimize + likelihood of an anonymous visitor clicking on the "featured" product. -## How To Use +# Notes for Presenters Welcome, Presenter! @@ -22,10 +89,9 @@ code. ## Assets in Train-The-Trainer kit - This guide -- [Attendee Resources in Github](https://github.com/microsoft/ignite-learning-paths/tree/master/aiml/aiml20) - [PowerPoint presentation](presentations.md). Includes embedded demo videos and complete talk track in notes. - [Speaker notes](speaker-notes.md) as a single file (also in PPT notes) -- [Demo Instructions](demo-instructions.md) +- [Demo Instructions](#Demonstrations) - [Full-length recording of presentation](https://youtu.be/jRO-5g-HYuU). ### Older recordings diff --git a/aiml20/img/Computer Vision Analyze an Image.png b/aiml20/img/Computer Vision Analyze an Image.png new file mode 100644 index 0000000..c78f2c0 Binary files /dev/null and b/aiml20/img/Computer Vision Analyze an Image.png differ diff --git a/aiml20/speaker-notes.md b/aiml20/speaker-notes.md index 9d9dffe..a08d89f 100644 --- a/aiml20/speaker-notes.md +++ b/aiml20/speaker-notes.md @@ -789,9 +789,9 @@ on Microsoft Learn that will take you through using them step-by-step. ### SLIDE: Resources To find links to Docs and Learn, and to all the resources I've mentioned in this -talk, check out the Session Resources link on this slide. You can also run of +talk, check out the Session Resources link on this slide. You can also run all of the demos I gave today yourself, using the code and scripts available in this -github repository. And if you'd like to get a Microsoft Certificaion in AI or +github repository. And if you'd like to get a Microsoft Certification in AI or Data Science, theres a special offer for a free certificate for attendees today: check out this link for details. diff --git a/aiml20/test images/drill.jpg b/aiml20/test images/drill.jpg new file mode 100644 index 0000000..5a1f385 Binary files /dev/null and b/aiml20/test images/drill.jpg differ diff --git a/aiml20/test images/man in hardhat.jpg b/aiml20/test images/man in hardhat.jpg new file mode 100644 index 0000000..6ff3d17 Binary files /dev/null and b/aiml20/test images/man in hardhat.jpg differ diff --git a/aiml20/test images/pliers.jpg b/aiml20/test images/pliers.jpg new file mode 100644 index 0000000..635beb6 Binary files /dev/null and b/aiml20/test images/pliers.jpg differ diff --git a/aiml20/vision_demo.sh b/aiml20/vision_demo.sh new file mode 100644 index 0000000..7b7ed9a --- /dev/null +++ b/aiml20/vision_demo.sh @@ -0,0 +1,68 @@ +#!/bin/sh + +### +### Create a Cognitive Services key and use it with Computer Vision +### + +### Create a key + +## Full details here: https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-apis-create-account-cli + +## 1. Log in to the Azure CLI (not needed for Cloud Shell) +az login + +## 2. Create a resource group to hold keys +az group create \ + --name aiml20-demo \ + --location westus2 + +## 3. Create an omnibus CognitiveServices account key +az cognitiveservices account create \ + --name aiml20-cs-resource \ + --resource-group aiml20-demo \ + --kind CognitiveServices \ + --sku S0 \ + --location westus2 \ + --yes + +## 4. Display the key +# This will display two keys. +# Copy the "key1" value to your clipboard, without the quotes. +# It will look something like this: c8e5546e8dab4b7a91590b252a9b16fd +az cognitiveservices account keys list \ + --name aiml20-cs-resource \ + --resource-group aiml20-demo + +### 5. store the key in an environment variable +# paste in the key you copied above +KEY="YOUR-KEY-HERE" + +# If you are not using the westus2 region, check your endpoint in the Azure portal +# by inspecting "aiml20-cs-resource" in the "aiml20-demo" resource group +VISIONENDPOINT="https://westus2.api.cognitive.microsoft.com/vision/v2.0/analyze" + +### 6. Analyze test images via API usinh CURL +# images can be found in "test images" folder +# man in hardhat.jpg -- this will give the same results as via the Web app +IMG="https://raw.githubusercontent.com/microsoft/ignite-learning-paths/master/aiml/aiml20/test%20images/man%20in%20hardhat.jpg" +echo $IMG + +curl -H "Ocp-Apim-Subscription-Key: $KEY" \ + -H "Content-Type: application/json" \ + "$VISIONENDPOINT?visualFeatures=Tags&language=en" \ + -d "{\"url\":\"$IMG\"}" + +# drill.jpg +IMG="https://raw.githubusercontent.com/microsoft/ignite-learning-paths/master/aiml/aiml20/test%20images/drill.jpg" +curl -H "Ocp-Apim-Subscription-Key: $KEY" \ + -H "Content-Type: application/json" \ + "$VISIONENDPOINT?visualFeatures=Tags&language=en" \ + -d "{\"url\":\"$IMG\"}" + +# In the last example, the Vision API is identifying a drill as a camera! General models +# trained on thousands of categories can be less effective than simpler models +# if you know the specific images you want to identify in advance. + +# When you're done, you can delete the resource group and associated resources +# NOTE: we will use this resource group in the Custom Vision demo, as well. +az group delete --name aiml20-demo