Create an Image Detection App from Scratch using Machine Learning | Kalob Taulien | Skillshare

Create an Image Detection App from Scratch using Machine Learning

Kalob Taulien, Web Development Teacher

Create an Image Detection App from Scratch using Machine Learning

Kalob Taulien, Web Development Teacher

Play Speed
  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x
12 Lessons (29m)
    • 1. Welcome and Course Goals

    • 2. Demonstration

    • 3. Installing Python

    • 4. Using a Safe Python Environment

    • 5. Code Requirements

    • 6. Using a Custom Image Detection Model

    • 7. 20 Lines of Code

    • 8. First Detection

    • 9. Another Example

    • 10. Confidence Levels

    • 11. How to Learn More

    • 12. Course Summary

  • --
  • Beginner level
  • Intermediate level
  • Advanced level
  • All levels
  • Beg/Int level
  • Int/Adv level

Community Generated

The level is determined by a majority opinion of students who have reviewed this class. The teacher's recommendation is shown until at least 5 student responses are collected.





About This Class

Create an Image Detection Application from Scratch! 

In this short course we're going to create an application with Python that will detect objects inside of images. We'll use a busy downtown intersection, a cat, and a bike as examples of multiple object detection, living object detection and how things don't always turn out how you expect. 

You do not need to know math or how to code to take this course!

This course is beginner friendly!

You do not need to know Python or machine learning for this course. I'll walk you through each of the steps to get setup and how to modify the code so you can perform object detection on any image. 

This is just the beginning

This is the beginning of "Machine Learning" and "Artificial Intelligence". It all starts with something as simple as object detection. But don't worry! You don't need to know any math, or how to code. That's what makes this truly amazing! Literally ANYBODY can set this up on their computer and start detecting objects in images. What a time to be alive!!


You'll need to have Python 3.7 installed and a command line program. Python 3.7 is a free download and every computer has a command line program built into it. I'll help you with both of those inside the course. 


Below is an example of our output. We'll feed it a single image of a cat, and get the area of the cat the computer thinks is "all cat" and it's confidence rating (how certain the computer is that this is really a cat). We'll do this 2 more times with a busy downtown intersection and a bicycle. 


Meet Your Teacher

Teacher Profile Image

Kalob Taulien

Web Development Teacher


Hi everybody! I'm Kalob Taulien.


Here's the TL;DR (short) version about me:

I have been coding since 1999 and teaching people how to code since 2013 I have over 350,000 web development students world-wide I'm on the Wagtail CMS core development team (Wagtail is Python's #1 most popular website making system) I try my best to answer EVERY question my students have  I love teaching — it's definitely one of my natural talents  Also I love goats! (Great conversation starter with me if we ever get to meet in person)

Below you can find all my Skillshare courses. The categories go from easiest to hardest, except for the Misc. Coding Courses at the very end. 

If you're brand new to coding, start with BEGINNERS WEB DEV.&nb... See full profile

Class Ratings

Expectations Met?
  • Exceeded!
  • Yes
  • Somewhat
  • Not really
Reviews Archive

In October 2018, we updated our review system to improve the way we collect feedback. Below are the reviews written before that update.

Your creative journey starts here.

  • Unlimited access to every class
  • Supportive online creative community
  • Learn offline with Skillshare’s app

Why Join Skillshare?

Take award-winning Skillshare Original Classes

Each class has short lessons, hands-on projects

Your membership supports Skillshare teachers

Learn From Anywhere

Take classes on the go with the Skillshare app. Stream or download to watch on the plane, the subway, or wherever you learn best.



1. Welcome and Course Goals: welcome to creating an image recognition app from scratch in this course will be creating an image recognition app using the programming language called Python. But if you're brand new to Python, we haven't used it before. You actually don't really need to know it in order to create an image recognition application. Hi, I'm Caleb Tallinn. I have taught tens of thousands of students here on skill share, and in this course, we're going to create an image recognition app. So as a demonstration, we're going to take this image here where we can see a bunch of people and cars and stuff like that, and we're going to turn it into this image where we can identify people, all the different cars and all that stuff. And I'm going to show you how to do this in about 20 lines of code. No, I promise you, this is actually going to be a lot easier than you expect. And we're going to go over several different examples here where we have, for example, this cat. And then we're going to use image detection for a computer to recognize that this is in fact, a cat with an 82% confidence rating. We're going to get all of this set up from scratch using a custom machine learning algorithm. We're going to go through all the code. I'll walk you through what all of it means. We're going to go through a few different examples, and then we're going to talk about things like confidence levels. For example, I mention that this cat has an 82% confidence level, will toe a human that looks like 100%. That's definitely a cat. But to a computer, it may or may not be a cat, and I'll show you another example of this, where a bicycle actually looks like a fire hydrant. So if you are interested in doing image detection on a computer with machine, and this can run on basically any laptop, this is definitely the course for you. This is a bite sized coarseness is a really good introduction into machine learning, image detection and artificial intelligence 2. Demonstration: Okay, First things first. Let's take a look at a demonstration here. So we have this image and it's got skyscrapers and lights and cars. Truck, uh, signs. People across Walk has got all sorts of things in here. So there's a lot toe look at in here, and what we're going to end up doing is I'll show you the output. The output looks like this now. Thesis small. But if I zoom in, we can see that there's a traffic light. We can see that there's cars, people. We can see that there's a truck over here. We can see all sorts of stuff, and that is what we're going to be doing. We're going to be creating an object recognition application. So if that excites you, let's head on over the next lesson because we're going to learn how to do all of this from scratch. No prior experience is needed whatsoever. 3. Installing Python: hello and welcome Teoh Image recognition. We're going to create an image recognition app, basically from scratch. And actually, these days it's really easy to do. 5 10 years ago, it was really hard to do. But now it is really, really easy. So we're going to be working with a coding language, a programming language called Python, and you can see if I do Python Dash V that I'm using python 3.7 point two. So for the duration of this course, you should be somewhat familiar with python. But honestly, if you're not as long as you have python 3.7 or newer installed on your computer, this is going to work for you. So first things first. If you don't have python, make sure you head on over to python dot or go and download the latest version of Python. Once you have that up and running on your computer, you're also going to need a command line program on the Mac. It's called Terminal on Lennox is called Bash on Windows. There's also bash or power shell or really anything that you can type python into. You just need some sort of command line tool. Once you have those up and running, let's have an overtime next lesson where we actually create a python environment. 4. Using a Safe Python Environment: all right. Hello. Welcome to the Python environment Lesson. We're going to create a python environment. And if you're familiar with Python, there are so many different ways to do this. We could use pip end. We use virtual, and we use all these other ways. But we're going to use the one that just comes with Python. So it's going to be called a V envy of virtual end. So first of all, I'm going to just CD into a directory here. It's a brand new directory. I just made this. There's literally nothing in it. And I'm going to write Python dash M v e n v dot v E N v. And you'll see in just a moment if I do ls Dash L. A. We've got a little folder, and there it's hard to see because that's blue. But it says dot VN V. That's our virtual environments. Now to get inside. If you're all we have to do this type source dot Venn been activated, and now you can see if I clear this off, you can see it says dot vendor on the left, and really all that is is a virtual environment that means my computer can have different python packages that won't conflict with the python packages that were going to use in here . So on one project, I might use a python package that was made two years ago. And on this project, I might use one that was made today. And so this way they don't conflict. If that's all sort of above and over your head. Don't worry. All you need to know is that this is a layer of separation and it is important. So once you have that up and running again, that command is python death dash m ven dot ven for the spaces in there like that. Once you have that up and running and you have sourced into your virtual end seed you source dot ven if that's the folder name been slash Activate. Once you have done that and your terminal sort of looks like mine head on over that next lesson and we will install the packages that we need to install 5. Code Requirements: Okay, let's look at installing some packages here. Honestly, we don't really need very much. We need tensorflow open CV and caress. So here's what we're going to dio Pip Because if you do Pip Dash V, you should see that it's coming from do to do its terminals. Actually, it looks cool, but the highlighting isn't quite right. Now it's coming from Python 3.7. So that's what you want is just a more modern version of Pip. I'm using Pip 18.1 pip 20 point. Something just came out. So I guess I'm technically using an older version of pit. But that's still okay. So Sue Pip, install tensor flow, and we need to tensorflow 1.4 or newer but less than two. Let's do one point star, and we're also going to pip install open CV, dash python and caress. And so this is just going to go off and fetch a bunch of stuff for us. All right, so that's all done installing. We need to install one more thing here. We probably could have done this in the last line as well, but let's just do it for funds. He's here is that's clear that and make that a little bigger. And so let's do let's actually move that into the middle. It's to Pip Install Image, ai Dash, Dash upgrade. And so this is going to go and download. Basically, the main thing that's going to put all those other packages that we downloaded is going to bring them all together for us. And there it is. There's the complaint about my PIP version now, lastly, Weaken Do Pip freeze, and this is going to show us all of our packages, and it doesn't really matter what they are at this point. We just know that these are all required. So let's go ahead and put these into a new file. So if we do ls Dash L. A. We can say we don't have any new files yet, but we can dio pip freeze. And then that's the greater than sign. And let's type requirements dot txt and last dash l. A. And we can see we've got a new requirements dot txt file in there 6. Using a Custom Image Detection Model: Okay, let's go ahead and get started using a model. A model is basically an intelligent mathematical system to determine exactly what kind of image or what kind of object is inside of an image. And so we need that by downloading a specific model here. Now there's tons of different mathematical models around the world, and we're just going to use this one from olefin. Wow, Moses. I apologize if you're watching, and I butchered your name slash ai releases yada yada, yada. I'll leave this link in the description down below so you can access us at any time. This is just going to download a dot h five file for us. And I would like to save this file. And when I go ahead and open up finder or if you're in Windows, use Explorer. Really any program? This is just looking at my my downloaded files. Really? So I've got this filing here, and I'm going to just copy this into my new project. So what I'm going to do is I just have this project's filing. You can see that dot VN V folder doesn't actually show up, but I'm just gonna copy this over so copy paste. And in my command line, if I do ls Dash L. A. You can see that that file is now in there. Now, that's cool. But currently were working off the command line. And in real life, you're not going to be working with command lines. Let's make this a little more real. I'm going to open up V s code. That's my That's my text editor. But you can use sublime Adam. Really? Anything else and here we can see, I've got my requirements file and I have this dot h five file that I'm not even gonna try to open, cause it's like 100 and 50 megs or something like that. So it's a pretty big file and honestly, you know, let's see yeah, can't even read it. So that's fine. So just make sure that you have that resonate 50 dot h five file downloaded and beside your requirements on txt file. They're not technically related, but we're gonna make sure that everything is in the same folder. So once all your files are in the same folder, I don't know for certain next lesson, and we're actually going to get started with some code 7. 20 Lines of Code: Okay. Welcome back. We are going to get started with some code here, so I'm going to write a bunch of python, and it might not actually look very intuitive at first. You might not know what's going on, but I'm gonna write it out, and then I'm going to explain what's going on. Actually. Know what? I've just decided that I'm not going to write it. I don't think you need to watch me type for for 10 minutes if I'm going to explain all the code anyway. So I'm gonna create a new filing here called detection dot pie. And it's a dot python file, so it has been done high. Okay, so I just slap some code in here, and what we're going to do is sort of walk through this. Now, if you're an existing python developer, this is probably pretty familiar code to you. But if you're not an existing python developer, or maybe maybe you're a newer or intermediate python. Devon, you don't really know what's going on. I'm gonna walk through this, So technically we have ah, something like 2120 1918 17 lines of code. And that's literally all it takes. And honestly, that could be summed up into one line, and this could be summed up into one line as well. So we have some around out of No. 10 15 lines of code, and that's all we need for image detection these days, which is really cool. So let's jump into what this is So at the top here, all I'm saying is from the image dot ai library, remember when we did Pip Install Image ai Dash dash upgrade? That's where that image AI is coming from. You can see that there's actually highlight at the same time there. And then there's an object called detection or file called detection on then, inside of that, there is a class called object detection. So we're importing that, and we're also importing our operating system, and that's all we're importing behind the scenes image area is going to use tensorflow and caress and all the other things that it needs. Next, we're going to set an execution path now, really, all this is is the operating system getting the current working directory. So wherever this is in my computer, in fact, I can even show you where that is if I do p W. D I'm in users, Caleb telling projects If you're on a Windows computer, that's going to look a little different for you. But that's my execution path. That's that. The folder that I mean, that's the exact folder from the root of my computer to exactly where this file is, and we're going to use that so that we can get the exact path to like a new image that we're going to add or the resonant dot h five file. We're going to use that a little bit. Then we have a detector, and we're saying that Detector is going to be an instance of this Python object detection class. Then we're going to set the model type as a retina net. Then we're going to set the model path, and all this is doing This whole thing here is basically saying this resonant cocoa 50 best to 0.0 point one dot H five. That's this file here. It's really just saying, Hey, wherever it is in this project, just look for it here. So is looking for so this, and you can see it's used to more time. So three in total This is really just saying in a very python IQ code way. Go to users killed telling projects, and that's where the file is going to be. That's the folder were working out of, and then the file. So that's all that's doing. And then we're saying, Hey, actually load this model So once this model is is sort of ready to be set loaded up and get it ready for use, then we're going to create a detections Variable here or detections object. And with the detector, we're going to detect all over objects from an image. Now we don't have an image about in the next lesson. We're going to go and find an image on, and then it's going to analyze that image. And as an output image is going to be called Image New Dodge a peg, you could rename that anything you want. But the input image is going to be called Image JPEG and eventually will put it beside the rest of our files as well. And then once that's done, processing is literally just going to loop through. Whatever it finds is going to tell us the object name, whatever it thinks it is with a little colon, and they're just so it looks a little nicer. And then it's going to give us the percentage probability. Now that's really all there is to this, and I'm going to give you the source code so you don't have to write all this out by hand either. Because, honestly, you're not learning anything by writing dot load model. You're learning how to use that load model, but your brain just isn't going to learn too much from writing this out. So you might as well just copy my source code. Now, in the next lesson, we're going to get started with our first detection, we're going to try to detect an image. 8. First Detection: All right, let's go ahead and get our first image sort of detected. Now. I'm just on unspool ash dot com, where you can get a bunch of free photos in here. This one is by Joshua. True, I hope I said his name properly and it has a bunch of stuff in here. So it's got, like, these large buildings and it's got a bunch of people walking by, and it's actually really hard to stay. There we go. We can see that a little better here. We've got people walking by and cars and street lights and signs and all sorts of stuff. So let's use this as an initial object detection lesson. So I'm gonna download this Say thanks. Yep, Thank you, Joshua and unspool Ash. And so I just downloaded into my files here. I'm just gonna rename this to image dot jpeg And let's put that in our project files beside detection dot pie and requirements on txt. If we go back into their code, we can see that the image that J Peg is in there and its fairly large image and the only reason I called it image Dajae pegs because that's what's in the code. If your images called something else, you can either rename the image or rename this particular piece of code right here. Now what I'm going to do is in my terminal. All I'm going to do is type python detection dot pie. But before I do that just as a reminder of using python 3.7 point two s So you're going to want to use Python 3.7 or later? Python 3.6 actually will probably work as well. I just haven't tested it because I've been using Python 3.7 for a while. So if we do python detection dot pie, it's going to do a bunch of stuff in here. And we don't really need to know what any of this is. We're just waiting for that last print statement to come through and should ideally show us a bunch of things. People, cars, lights. Yeah, look at this. Traffic, light, car, person, car, car, car, person, car. Okay, so there's quite a bit going on here. Now if we look at our code, we said prints, the object name and the percent probability that this machine learning algorithm thinks it is. So there's a traffic light. There's actually two of them. There's traffic light, one of them as about 76% confidence that it is a traffic light and the other one is 74. So you could say with a relatively high confidence level, that there is in fact to traffic lights and that exactly where it thinks they are is where they are, and we'll take a look at the image in just a second. There is a car. It thinks that there's a 51% so he could be a car. Might not be a car we don't really know. But there are other cars in your like there's one here that has a 92% confidence probability. It's probably a car. There's people in there as well. People are. Usually we come in different shapes, depending on what we're wearing, depending on what we're doing, so humans are hard to detect. Ah, but there's Hey, there's a person here with 94% probability. Now that's cool, but what's cooler is what it did with our image. So let's go ahead and we now have image New Dodge a bag, which is a terrible name, but we've got this new image. I'm going to open this just with Firefox and we can see here. We scroll on down. Look, that traffic light, there's the 75%. Is there another one? Where is that other one? No, it's over here yet. 74%. Okay, cool. If we zoom in. Hey, look at this. There's a person here here. I mean, there's a person over here. Didn't quite detect another one there. I would detected quite a few people, quite a few cars in here. It didn't quite detect these ones. And there's actually a way to figure out how to detect those ones. We'll get into that in a little bit. There's a car here, here and here. So this one thinks that's 51%. And actually, that's the back of a car. So, technically, that one's wrong. That's, you know, a lower confidence rating, 51% and rightfully so. That's actually a car. It's a back of a truck. Back of the car is what we see over here. There's a car here in a car here. So you know what? This did really, really well. And now in our python. If you wanted to build this into an application, you could loop through each one of these detections. You say the back of that truck that had a 51% confidence rating. Well, this will show up to be about 51 point whatever that number was. You could actually figure out exactly where that is in the image now. You probably wouldn't use it that way. You'd probably use a higher confidence rating like you want to see that this is a 91.135 percent chance of this is, in fact, a car. It is, in fact, a car. We can see that and inter Python code. We might want to say, Hey, there's a high probability that there's a car in here or use image detection or image tagging in a content management system or something like that. All right, my skill share fans. Don't forget that you can update your skill share project, run this code and use any image you want. So goto on splash dot com, grab an image that you like and throw it into your image detection script. Run that script and you know how we saw that nice little box around, Well, several boxes around the people in the cars and lights and things like that. Make sure that you have an image open like that. So it's probably going to be called image new Dodge a peg and then uploaded to your skill share project. Once you've done that, well, head on over to that next lesson where we're going to explore another example. 9. Another Example: Okay. Welcome back in this example, we're going to use a different image now. I just know of one that I like to use. I've used this one before and it's just a cat by Ramiz. I'm not going to try to say his last name because I apologize. If I'm saying that wrong and I'm just gonna download this image. It's just a image of a nice little cat. So my little kitty. And so I'm going to just rename this one to just cat Dodge a peg. And this is just in my downloads. Eso I'm gonna go over here and paste it into my project and you can see in here I've got a new file called Cat Dodge Apex. Let's go ahead and change and input file to Cat Dodge a peg. Let's change that output file too. Can't detection, Dajae Peg and let's go ahead and rerun this script. So all we have to do again is type Python and then the name of our script. So python detection dot pine is going to go off and do its thing. Okay, so for me, that took, I don't know, maybe two seconds or so, but Let's go ahead. And first of all, we can see that there's a cat and there's an 81 82% chance of this as a cast now, albeit living things are harder to detect because we do all sorts of weird movements and shapes and faces and things like that. But, you know, 82% is still pretty good. And if we open up our project, it made a new file in here called cat detection dot jp. Let's go ahead, and I'm gonna open that up in Firefox and look at that cat 82% and it's gonna box around him. So there you go. There's another example, and that's just a random cat. And you could do this with pretty much any image, not just as a heads up. It's not going to be able detect literally. Any image in the world of the image detection library is just not big enough for that. But I believe of the image AI package that we're using is going to try to to detect the most common 100 objects in the world. Something like that. So I cat is obviously a very common object and As always, you can taken image from unspool ash. It doesn't need to be a cat. It could be a dog. A be a bird. It could be a computer. It could be a family. Eating dinner could be really anything. Go ahead and grab an image from unspool ash, something that has clear objects that you can detect as a human and throw it into your script here and then run that script. And then when you're done that you should have an image with a bunch of boxes or one big box, like what we saw with our cat and upload that to your skill share project. 10. Confidence Levels: all right, let's talk about confidence. Confidence is very, very important, and I actually had to go through quite a few images to find one like this. But this is a really, really good example of why confidence matters now. This is just a picture of a bike, and any human can look at this and go. Yes, that's a bike, But bikes come in different shapes and sizes. They come in different colors, and it can be hard to detect what a bike is now. First things first. Tiffany nut. Thank you for this image and putting it on unspool ash for us. I'm gonna go ahead and download this image, and I'm just going to rename this to bike and put that into my project over here. So it's with cat in the original image, and there's going to be a bite now. Why am saying confidence matters is because just because we know what the bike doesn't necessarily mean that the algorithm knows that it's a bike. Let's go ahead and changes to look for bike. Dajae Paige. That's us file here, and it's going to output bike detection, dodge a bag now be by default. The image. Ai Library is only going to show you things that has, ah, confidence rating of 50% or higher. And so let's see what this bike image turns out. So it's a rerun, this file again, and it's going to rerun it with the bike image, and it's going to do a bunch of stuff in here and look at that. It has a bicycle with almost ah, 100% confidence. And let's take a look at that bike detection dot jpeg. Let's open this up, and I will make this a little smaller here. So we have this bike image and literally the only thing that found in it was the bike at almost 100% confidence rating. Now that's really, really cool. And again, it only showed that because there is a confidence rating of 50% or higher, that's that's the default threshold. Now, if I wanted to change that and look for everything else, I could add a minimum percentage probability, and this is your percentage. So by default, this is at 50 but I don't want it at 50. I want to change is to 10. So many changes a 10 and I'm going to re run this script. So let's rerun this and we're going to see something very interesting that's going to happen here now, While we're waiting also for funds, you can also set that minimum threshold to say 10 or something like that and then use it on the original images Well, where we had lots of objects to detect. Now here we can see that there is a bicycle again, almost 100% rating and a fire hydrant at an 11% rating. Okay, well, that's interesting, because if we look at this image here, do you see a fire hydrant? I don't I mean, it might think that this is it might think that the water leakage is we're not really sure . So let's go ahead and open up that image and see exactly what's going on here. So again, we just named it bike detection. So it just overrode the old file, and when I open it at first it looks like there's nothing that's been changed. But when I zoom in here when I zoom in, it says fire hydrant and bicycle, and they're almost the exact same rectangle here. So our program for some reason thinks that this bicycle is also maybe a fire hydrant like it thinks there's an 11% chance of this is a fire hydrant now is a human. You're looking at this you're going. Mm, There's no way. But this is a fire hydrant. But our machine learning algorithm doesn't know that it has. Similar shapes may be similar colors, similar patterns into it. And even if the human doesn't see it, the machine did see it that way. So this is where confidence comes in now, just because this has a confidence rating of 100. This obviously is a bike would also has a confidence rating. That's a fire hydrant of 11. So in a program, in an app that you'd be making, you would totally just disregard this. You'd say confidence rating of 11 is basically nothing that's not even worth looking at. So the lesson here is that image recognition can actually be really, really hard. And when you're working with images, especially in certain applications like artificial intelligence, you're going to want to use a high confidence level. So what we have written here, with the minimum percentage probability of 10 honestly, that default of 50 is pretty good. But if you need to work with something where you need to be ultra confident, you could crank that up to, like, 80% or 90% and it will only ever detect things that has a confidence rating rating of 80 or 90%. 11. How to Learn More: Okay, Dokey, we are done this nice little course, But before we get into goodbyes and all that, I actually want to show you this whole repository, this whole project. So if you're not familiar with get hub dot com, get home dot Com is a way to store all of your your source code and basically open source it so that other people around the world can contribute to it. Now, this one is actually a relatively new one. And it only has 277 pieces of data committed to it. 277 different pieces of work went into this. That's actually very, very low. And it's producing really high results. Now the u R l here is olefin. What? Moses again? I apologize if I'm saying your name wrong eso Moses here is the creator of this, and it is actually really, really cool and used in so many different places. If you want to learn more about this project, come onto the get hub repository here. He also has documentation. Where is the documentation link? Table of contents. We've got all sorts of different stuff in here. There's lots to read through. If I just type in ducks. There it is documentation. And let's go to, um I'm an English reader. So I'm gonna going to go to the English version of the docks, actually really cool today. Provide multi languages like that and you could get into prediction classes, detection classes, video and life free detection, all that stuff. So if this course really intrigued you and you want to go further into it, this is a really, really good entry point into machine learning, object detection, image detection and, eventually, artificial intelligence. 12. Course Summary: alrighty. We have done it in, like 10 to 15 lines of code. We made an image recognition application using python. Now it was all through the command line. It's not on your phone. It's not on a website or anything like that, and that's up to you to integrate it that way. My goal for this course was to show you that we could take an image of this. You know this cute little cat here And we could say that there is an 82% chance that this was in fact a cat and likewise to show you that this is almost 100% of bicycle and possibly something else. And we can do all of this very easily these days with literally less than 20 lines of code . How cool is that now? I hope you enjoyed this whole project. Don't forget, you can access the source code at any point in time. I'm not going to give you the resident source code. I'm going to leave that as a separate download for you just because that's like 150 megs and there might be updates to it in the future that you might want to download instead of using the old one that I might possibly provide. So feel free to have some fun with this. Totally take this source code and apply it in any way you like. My name is Caleb telling I'm the voice behind this video. If you have questions about this, you can always leave them down below. Or you can come to our Facebook group called Learning to Code. Last but not least, if you like my teaching style, I have several other courses out there. Feel free to look me up on the Google. You can find me on pretty much any other major learning platform these days. Or you could just follow me over at Twitter at Caleb telling.