Object Tracking from scratch with OpenCV and Python

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] hi welcome to this new video my name is sergio i'm a computer vision developer and consultant and i help company students and freelancers to ease and efficiently build visual recognition projects today we will be building object tracking from scratch so if you try to beat object tracking by yourself and you're not you are not able to do that or if you have an idea what is object tracking so after object detection you are stuck with your project or if you tried the algorithms of the tracking algorithms offered by opencv and you are not satisfied with them today you will understand from xero from scratch how you can build your own tracker for your own custom detector so if you're ready let's start before we start let me tell you the requirements just to follow along you need only one library which is open cv python if you work with computer vision and if you already follow me i guess that you already have that if you don't have don't worry just open the command prompt on windows cmd command prompt of course if you have ubuntu linux or mac it's really similar you just open the terminal on windows we type pip install opencv python of course you need at least to have python installed and then you press enter if you have ubuntu and you're using python 3 you need to type pip 3 install open cv python on the mac it should be good to go with pip install python opencv python then this is the first requirement regarding the library then you need to download the files that i'm going to give you you will find a link down in the description of this video where there is blog post and source code and inside that link you will find these four files to download at least three files plus a folder with a video which is the demo video that i'm going to use for this project where we have traffic in los angeles and we're tracking that so we have this view then we have audrey detection dot pi object tracking dot pi dnn model we're going to use deep learning model which will do the detection so that later we can focus on the tracking and you will see everything from scratch of this so don't worry and now after you downloaded this file we will be ready to start so let's start with object detection we're going to first of all import the c with two library the opencv library import cv2 which is opencv then we're going to import numpy snp now let's load the video footage we need to load a cap object cap equals cv dot video capture and then we need to put the path of the video considering i have the video on the same folder where is the python file it's called laws underscore angelus dot mp4 we just put the name laws angelus dot mp4 now let's get the frames from the video underscore frame equals cap dot read so with this we take one frame from the video let's show the frame cv2 dot in show frame frame and then cv2 dot weight key 0 so that once we display the frame we want a function which keeps the window open if we don't have anything the code will finish and it closes so this will is waiting that we press a key so let's now just run this one as a test this is just the first test to make sure that everything that we're going we're doing so far is correct now we have a simple frame that we extracted from the video file so it's a good start that we get the frame that we're not getting any error now that we have the frame we can go on what is a video a video is nothing more than a lot of images one after the other so for example if you check the specs of the camera it's written for example the camera can record at 30 fps it means that it can record 30 frames per second it means that in one second there are 30 images so right now we're going to get the frames one after the other in a loop so we put everything after the cup object in a loop while true while true we take the frame let's run out this one i know that if you have some experience with opencv this might seem too basic but i think it's good to start from the basics but we will get soon to object tracking so don't worry about that now we have a frame it's waiting for us to press a key if i press a key we go to the next frame next frame and so on now i'm pressing the space bar or any key and we're moving so now we with just these few lines we loaded the video on opencv now if we want to change something to make this in real time we can just say instead of weight key 0 which is freezing the frame we say key equal cv2.weight key one so one is going to wait one millisecond between each frame then of course we want to be able to quit if we want so we can say if the key is 27 which is the s key on the keyboard we're going to break so we're out of the of the loop we release the uh the video file cap.release and we make sure that we close everything so cv2.destroy all windows and that's fine and let's run this one okay we have the video now as our first goal is object detection let's do object detection to simplify everything as explained quite a lot already object actually in other videos i'm going to just import one video one file the one that you can download that i showed before so it's the same file that i have here on the same folder it's object action dot pi and the file will do everything that we need so from object detection we're going to import object detection and now we're going to load the object detection so load object detection instead of load it's maybe more correct to say initialize object action we call this od you can call this whatever you want i just use od for standard version for shorter version of object detection od is object detection and that's it now we're loading object detection with just this one single line and we can now that we have object detection we can detect the objects on the frame so detect objects on frame how do we do that we use the function od dot detect we want to detect where on the frame of course when we detect the objects we want some information in return we want and this is going to give us some information one is for sure class id ids class ids scores and boxes so the class id what object is that if it's a card it's a track it's a person and so on the scores how confident is about the detection and boxes the bounding box of the location of each object now we're going to we want to to make this as quick as possible we don't want to lose no time on object detection let's just draw the boxes we don't really care to make the distinction between car truck motorbike and so on we just want any all the boxes of the objects detected so we do for box in boxes okay let's print box and let's run this one i'm just printing this to make sure that we're extracting the information correctly so a box is a rectangle so we should have at least two points so we should have coordinate x and y of the top left point and then of the bottom right point and that's what we get we get an array i mean multiple arrays we've uh two coordinates we have x and y of the first point and then we have width and height so we can say x y width and height equals box and now we can use this to draw a rectangle save it so dot rectangle we're going to draw the rectangle where on the frame now to draw a rectangle we need two points we need the top left point and bottom right point so we have the rectangle top left bottom right the top left is the x and y the bottom right so top left x and y bottom right will be x x plus width high y plus plus height x plus width and then y plus height uh now a color for the rectangle is uh we need three primary colors how much of blue do we want we don't want any blue let's make this green we want the maximum of blue from 0 to 20 55 nor red and then thickness let's say to the thickness of the rectangle now if everything is working correctly we should see a green rectangle surrounding the cars the tracks and motorbikes all the objects that the yolo can detect we're using the yolo version 4 pro train so it can detect up to 80 categories and that's what i was expecting of course we see the detection on these objects right here at the beginning it cannot detect such small objects like that really far but we care only about the detection of the objects at the beginning i will not improve any further the object action because that's that's enough that's a pretty great just uh for starting right now with object detection instead okay we got an error right away so that it's good that we got the error right now because we can solve it in real time we got an error on line 14 right here when we detect we on object detection i know already what is this error it says that the frame is empty size empty you need to know that when you when we have a video a video is made of a total number of frames at some point the video is going to end if the video ends there will be no more frame so when we are trying to detect the cars on a frame that doesn't exist so we need to make sure that if there are no more frames we quit so let's make a small change red frame when we get the frames from cup we have frame which is the frame that's easy to understand then red is saying true or false true if we have the frame false if there are no more frames and so if red is false or better if not red we break so if there are number frames we quit easy now we are done with audio detection let's now move to object tracking we are going to first of all understand the principle of the object tracking and why it's somehow complex and not so intuitive if you are not familiar with computer vision to understand object tracking i'm going to do two things one i'm going to print the boxes for each for each frame so let's print box and then let's print the coordinates box we're going to bring x y width and height and then we're also going to show the frame numbers to show the frame numbers we need to start the count so we initialize our count zero come zeros initialize count and each time we get a frame we say plus one i'm going to get this information so that later we can make a stadium it will make more sense later while we're getting the frame number for the moment just follow along with what i am doing so frame once we get the frame we say count plus equal one and then let's also show okay box frame okay let's say just say frame number frame frame frame number like this and then we put the count and then we display the coordinates i know there are better ways to print this but then just to make this as intuitive as possible so don't focus too much on this instead let's now run this one so we should see now everything as before we should see the the rectangle surrounding the cars and vehicles plus we should see printing all the coordinates as we see right here on the terminal for each frame that's what we get now that's not all i wanted to make now to make things even more simple let's only uh freeze the frames and so that we can focus frame after frame and let's now run this one so i put weight key 0 when you put 0 on the red key it always freezes the frame so that we can stop and focus on determine on what's what we're getting now this is object detection object action is nothing more than having bounding boxes in this case around the objects in this case our goal is detecting the vehicle so we have bounding boxes surrounding cars trucks motorbikes and so on when we print the results the results this is what we have on the on our output we have frame number one so for the first frame we have box we've coordinated five zero five eight zero two with 133 178 and then we have a lot of other boxes this is the detection on the first frame now let's go on the next next frame on frame number two we have the coordinates we have 497 the first one 810 140 and 190 but there is no connection between the first frame and the second frame so there is no connection between the coordinates that we have here with the coordinates that we had on the previous frame so if we need to check what box uh if this box that we have for this specific car this uh black car on the left side what was on the previous previous frame we have no clue the code doesn't give anything that can match the same car so we cannot we are now just detecting a box random boxes of the car stream after frame but there is no connection over time between them so we cannot say that this box that it's now here now we go on the next frame we cannot say that it's the same one that it's here now how can we solve the problem of course there are simple ways to solve the problem the simplest that you that i can think of probably if you try you can think of the same one is to take the center point of the frame and we can do i mean on another of the frame of the of the bounding box let's take note the center point of each bounding box how do we take the center point we can do center x equals in geometry the center point is x x one plus x two divided by two we have x one which is the x we can calculate x two x two will be x plus with so we have x plus plus x plus with and we're going to divide everything by two by so and let's make sure that this is an integer because the coordinate m must be always integer number either for example 50 or 51 it cannot be 50.5 then center y is the same concept y plus y plus height divided by two now for this let's draw a circle so i can prove you that we're getting correctly the center point see if it's two dot c call uh we're going to draw a sequel on the frame let's make this the position of the circle center x center y the size of the circle let's make this uh five of radius the color of the circle let's make this red so it's well visible so zero of blue zero of green in 2055 of grand which red which is the maximum of the red and now we can say -1 which is going to fill the circle with all the color and after this we can run the object detection and let's check how this works now we have a circle for each card as you see so the idea is we're going to store all the circles right away on the next frame we compare the new circle with the previous circles let's do that and then i will explain this further i don't want to put a lot of information let's go step by step with a practical approach okay let's store all the information so we can say center points center points we create a dictionary and we are going to uh now it gets a bit tricky to to work on this so let's let's think about this we're going to add the center point and we're now going to store the point position in real time so that when we go to new frames we don't lose the position of the previous points but we keep them and later thanks to this we can do the tracking so we have we can create before the loop center points we create an empty array and on each loop we're going to fill the array with the new points so just here once we get center x and center y we can say center point dot append and we're going to append center x and center y then instead of displaying the circle just in real time we display all of the circles that we have stored over time for pt in center points and now we display the circle showing all the points that we loop through center points and let's run this one uh here we have the points this is just the first frame now when we go to the next frame consider we are displaying all the points that we saved over time we can see that we have new points but also we have the previous ones so we have this point which was the white car on the previous frame now where the point of the white car on the next frame and so on and now checking this it would be easy to understand what can be a tracking solution an object tracking will be for example assigning a univocal id to each single box by comparing the position of the point of the previous frame and the point on the on this current frame when the points are really close we can consider that that one is the same object and that's an approach that we can easily use and it will work uh it will work well in this scenario because this is very simple of the tracking on the highway of course object tracking is a quite complex subject because if you consider there might be some time occlusion so the object might be hidden by something else for a few frames uh also like the when we are tracking people in a very crowded area it's easy to lose the tracking or like that if there is some occlusion the id get exchanged between other closed objects so this is a good example for you to to learn apply this principle to study object tracking but if you want to use this for commercial projects or like real life scenario projects unless it's a simple scenario this wouldn't work well and i recommend in that case to use pre-ready existent object tracking algorithms like for example sort or deep sort i have them on my video course object detection with opencv and deep learning so if you want to get more advanced stuff at a professional level i recommend to check that one now let's keep going with this lesson right here we have saved the points over time now it's the moment to compare the position of the points from the previous frame with the next frame and associate as an id to make the object tracking so let's uh let's do this operation right now instead of pulling center points and making the array always bigger let's just check one one frame and the second frame then another frame so we don't we don't have to we don't need the history of if the video has 100 frames we don't want to save 100 frames for one of the frames all the points but we want to check on the current frame new frame and compare them like this way because it doesn't matter where the object was at the beginning of the video if at the end of the video it's on a completely different position so we need just to check like the closest frame so we need to follow the object step by step so for this reason we're going to take center points from this one we can inside the loop center points we can make the array empty each time and so like get center points of current frame we can say send a port center points send that pds current frame points current frame [Music] let's let's use points i didn't want to make the variable name too long let's just keep the center points car frame and let's change we've what we have center points now what is a solution to keep this on the next frame so that we can compare them an idea will be before ending the loop we can make a copy so just right here before the wait key event make a copy of the points so we can call this center point instead of current frame we can say previous frame and say center frame points copy now we made a copy of center points previous frame so that later we can make a comparison between them and we can check the distance the close points are going to form an object tracking id when the points are too far it means that probably we have a new object so let's let's do something with this we can make a comparison so we can check for point in center point current frame then we we want to compare two arrays the new points and the previous points but how do we do that let's first print them because i'm putting too many things together and it might be confusing to follow so what i want to do will be count okay we have center points current frame let's print them car frame let's print center points current frame we want also to print center points previous frame print previous frame third points previous frame now it it will happen that we get an error because we are trying to print center points preview frames before that we generate them so an idea will just be when we start the call let's make an empty array so that for the first frame we don't have any problem because we need yet to generate that same point previous frame it's empty and after the first frame we'll feel it and that is no problem at the beginning we need to just create an empty frame empty array to store them okay we have them we have current frame and is these these are the center points of this frame okay i don't have the sequel to display them but we have them let's go up we have current frame we have all the points previous frame it's empty because it's the first frame so we have just a current frame we don't have a previous frame but if we check now current framework for example position of the first point is 571 891 so when we go on frame number two we have now current frame of course we have new position and then where the previous frame is exactly what on frame number one was current frame so 571 and so on now on the loop we can loop through the current position through the previous position compare the distance when the points are really close we say that's the same object we assign an id and we start the tracking of that one so let's check slowly four let's loop through them four point is center for pt instead of points current frame four pt2 in center points previous frame we need to check the distance we have a mathematic a geometrical format to check the distance between two points or we are also the python solution really simple by importing the math module having that already important math and then we can say distance equals math.hypot and it's x2 minus x1 so we need to take the x pt2 the x we take the first coordinate x minus minus point x so we take point zero and then p t two one the second value is the y minus pt just pt one and we have the distance now what we can say if the distance distance is less than distance less than we can say let's say just 10 pixels then it's the same object so if this is the same object we're going to add the object we create a new id for the specific object so we can create a dictionary we can say for example uh tracking objects and we're going to add now a new id if um [Music] well it gets tricky because there are a lot of things i ideally this will be done with multiple files uh multiple functions be to have a code well organized but i'm doing this all compressed in one lesson you need to understand that it might be a bit more complex for some reason to follow but it's good anyway if distance is less than 10 then we are going to add tracking objects tracking objects we're going to add a new object of course we don't want to say to have the same id for different objects so we need to have a track id so if we have car one would be truck cars if we have the first car would be car zero then if we have the second one we cannot say that's car zero it must be car one the new car will must be car 2 and so on so we can say track id we start the count from zero tracking objects we start with track id and we are going to put what we're going to put the center point the center point right now that it's point of the car of the previous frame it's of course the point of the new frame because we want the current position of the object we don't want the the last one the the the second last one we want the current one so we add the point and then of course we want to increase track id once we're at the point so we say track d plus equal one and now to make sure that we're doing everything correctly let's display the circle let's look through the tracking objects for first i'm going to print them tracking objects um let's print tracking objects to see what we have right now print print print tracking objects and let's run this one oh now we have tracking object of course at the beginning it's empty because we don't have anything then we go on the next frame and we get now an id and then a position of the object so we need now to show the center point and the idea for this specific object so let's do that see we can we can look through that for try for let's say uh object id and then point in tracking objects dot items and we display let's show the point cv2 i'm going to copy the circle see if it's silicon also let's display a text showing the id cv2.txt we want to put the text where on the frame okay here it's not cx and y but it's pt we want to put the next on the frame then what is the text we want to show the id so the string of object id then there will be the position of the text let's put this on this exactly where is the point where a bit up so we said the same x of the point of the center point but we don't put the same wire otherwise the the text is covering the center points let's put a bit up let's say seven minus seven pixels then font uh font type zero we don't really care about making the font nice we just take the first font size one and let's make the text red as the circle and then -2 for the thickness of the text and let's see what we get and now you can see that something interesting is happening right here because on some cars we have an id associated in this one we have zero we have four three two one and so on you can see that some of them don't have the id for example this one and this one you might wonder why is this happening why some have the id and some they don't have the id if you follow carefully and if you are focused on what i was doing you should already spot why you're not getting the idea the reason is that when we get the distance of the points on the previous frame and the current frame we're only adding the idea if the distance is shorter than 10 pixels some cars especially the one at the bottom consider that the camera is closer so the movement is faster so it's likely that the distance is greater than 10 it might be most likely less than 20. so if we put less than 20 it should take them all together without any problem so we should see also them of course we don't want to put a very big distance because otherwise we might include also objects that are carded are not the same one okay interesting enough now on the second frame we got also these cars at the bottom just changing the distance let's now keep distance 20 and let's move on what is now our goal our goal is to keep the same id for the same cars so this car is now id 0 on the next frame we don't want the new number we want same ideas id0 so a univocality associated with each single object the same is for the car on the left with it one this one would be id5 and for all the cars that we detect the better we are able to keep the id on each card the better will be the tracking because that's after all it's the tracking associating a universal id for each object if the id gets lost if the object changes the id it means that we are not doing well our task of object tracking for example now if we go on new frames we're just adding ids of course now we need to improve this function and there is something to to fix right here what happens now is we did that at the beginning we were comparing previous frame with current frame to check the ids when we already have some objects some id is saved we want to change a bit the things and instead of comparing the previous frame with the current frame we want to compare the current frame with the objects that we are already tracking if that makes sense plus we might have also current frame is previous framed for adding new ids um of course there are many things that we can work on but for the moment let's start step by step and of course this will work only if we are starting so if it's only at the first frame we do this comparison so if if the frame so if count is greater than zero so if it's the first frame we compare previous and current frame so only only at the beginning we compare previous and current frame else else oh sorry if count is less or equal one so let's say if count is one less equal one we do this otherwise we're going to compare for pt to in center points current frame with what we're going to compare with the objects that we already have with the ids four p t so no not uh current current frames or four point two in tracking objects.items so of course we have also the object id object id and we say if the object is the same so if the distance is less than 20 then we want to okay we need to first of all calculate the distance and we do this if the distance is less than 20 we want to update the position so we keep the same tracking track tracking objects tracking objects the dictionary we want to update object id equals um equals well the new position okay equals equals pt and let's try this one there might be some improvement to make also the code is not the best because we are repeating the code so ideally we will do functions for this but so far let's see how how it works and once we are sure of course it can be improved and there is something that i'm not happy with about this because it's not working as i expected so for some reason we have always am tracking objects is always empty so if the count is less or equal one okay i guess that probably we need to go for at least two frames uh that that was my mistake we need to go for at least a couple of frames to get the first tracking object so we were going only on the first frame of course on the first frame we don't have the tracking object so if count is less or equal to then okay now it's the moment of the truth if i press spacebar we should see the same id by changing position ah and we have them so we have id 0 id 1 so now with this simple trick our tracking is working of course this needs to be improved but there is only one problem that when we lose the id the id stays there and we don't want that to happen so now we're adding the new ideas but we also want to delete them when they're not there anymore so when we loop through them if the ob so if the object was not updated we want to remove that so in this case we have update object position object position and so i'm thinking what is the best way so first we can look through the dictionary and we can check if we don't have the updated position so let's let's invert that instead of looping first through the array of the new points and then the dictionary with the tracking will look through the dictionary of the tracking and then through the array so that we know is object id one if we got a new position for object id one if we have a new position we update one we make the update if we don't have the position we are going to remove that so we know right away we have it or we don't have it for point okay so for object id and point to like this then for point in center point's current frame now how do we know if we found the update or if we haven't found it here we can create a variable is object id uh or let's say object is it exists object exists equals false so when we check when we're looping through the tracking objects before we compare them with the new positions we don't know if that object is still on the frame or a new position or if it's out of the frame so at the beginning we assume that we don't have the object so we say object exist is false when we loop through this if the distance is less than 20 in this case object id exists so we can say object exists is true and of course once we find the object there is no reason to keep looking looping on the same arrays so we say continue it it won't change much but we are losing resources so once we find the uh once we find the association with the idea let's go to the next id we don't need to see all the possible associations if we have that already no okay uh i by mistake i cancelled everything object exists exists is false distance is less than 20. if at the end so here we update the object position then we want to remove that if objects if not object exists so if object exists is still false we want to remove the id remove the id so we can say tracking objects dot pop and we remove the this specific object id and let's run this one uh okay uh i got an error i expected expected this but i want to make sure that uh it didn't work so i tried anyway you cannot remove all elements from a dictionary when you are looping on the dictionary so we should make a copy of the dictionary loop through that and then remove the elements and so we can do now the code is getting a bit long tracking objects items so tracking objects copy equals tracking objects dot copy so we look on tracking objects copy dot i actually we can just loop in tracking objects dot copy dot items so that we're looping through a copy that looks interesting better this way so we're looking through a copy of tracking objects i'm not sure let's just go with the safest option tracking objects copy like this and now it should be interesting i'm almost sure that it should work right away that then that we easily remove the ideas so let's let's have okay now we are going to the new frames let's see let's focus on this id 0 now we oh nice so we have id 0 we are we lost the tracking of that car so we remove id 0 and we do for each kind car that we we lose the tracking we do that now of course there is another problem and the problem is that when we have a new cars we don't have new ideas so we should find a way also to add new ids let's now find a way to add the new objects for the points of the current frame that don't have any connection with the previous frame now we're not just considering them at all there is a simple way to do this once we loop through tracking objects so we update the tracking objects but also we're look we're looping through center points current frame what is going to happen that if there is a match between the center points current frame and the tracking objects then we make the update if there is no match we're not doing anything and we should add a new point but the problem is how do we know if there is no match because we have a lot of looping it's it's a bit confusing now on how to proceed on this a simple way will be each time this is an update we're going to remove the point from the list so all the points that are left that don't have anything to do with the list would be the new points that we want to add and as for the dictionary of the tracking objects uh points we need to make a copy of center point's current frame so let's do this copy so that we can remove them in real time and we have only the left points center points current frame copy equals to center points current frame dot copy wow this is a very long variable right here center points current frame dot copy and now tracking objects copy so once we loop in center points cutting frame we loop on the current frame copy and from the original one if the object doesn't exist and it's the opposite one once we update the position we want to remove this with this object from release because it was already updated so object exists also we want to say center points current frame dot remove and we want to remove the specific point we want to remove pt we remove pt so the points that are left will be the new points probably it's we can even uh we can even print them so we have a clue of what's app panning tracking objects okay we're printing them we're printing the current frame current frame left points i know it's a lot of things that we are doing right now and if you don't have experience with this you might be lost but the concept that you are that i'm bringing here very simple so it's mostly matter of practice to understand uh all the points that we're extracting on the loops and what we're doing with them okay i'm now checking for example now i went to the next frame you can see that we have tracking objects now current frame left points we have only two new points so i'm just checking that with this variable we have only the left points when we have new detection detection so in this case for example we we have how many boxes we have one two three four five six boxes without the center point so we should have six points and we have one two three four five six so it means that uh we're on the right track and now things should be quite easy we can loop through four center points current frame so for pt in center point's current frame what do we do we do tracking objects id so we say uh um okay i'm thinking how i can how can we increase the ideas how can we increase the ideas okay to increase the ideas of the dictionary we can get the length of the dictionary so if there are 10 objects id if we get the length this would be 10 if we have 11 it would be 11. so we can say uh track id okay we have track id okay let's not over complicate things we have track id which we were using before let's use that right now also so we just simply use track id equals pt and then we increase track id each time and let's let's run this one so while it's running so this is add new ids found remove id so we'll remove ids which were lost lost lost id update ids position okay we have uh now we have all the ideas now we want to make sure first that id is lost get delete removed oh i did some mess probably yeah something is not working as expected line 62 okay i need to pause and figure out what what happened okay i believe it was matter of wrong indentation so here we are doing everything after elsewhere doing everything related the tracking and add new ideas found must be right here so wrong indentation i haven't tested this yet but that should be most likely the error so now you know you should probably know how important is indentation in python okay so we should now lose the ids and get new ideas and that is what is happening plus some some error sometimes we are trying to remove the x in the list twice okay because here we're looping multiple times through it's double looping so if we remove the ob the element once we are trying to remove the element again then it's a problem so we can say if pt in the center points current frame then all in that case we'll remove it so let's now test our final version of the code so i'm going to run this one and let's wait a few seconds that this starts running and if we check carefully we can see that the tracking so the ids stay with the cars so the id don't change unless we have in some specific position where probably we lose the detection so we lose also the id but generally around the middle of the road the tracking seem quite good of course this can be improved we could implement other algorithms like for example kanban filter which i can do that right now because it will take a lot of time or i recommend also specifically for commercial projects to use a pre-built algorithm so there is no point to build something from scratch when there are algorithms made by researcher which were tested on different environments which already work well and i recommend the most useful that i've tried and user commercial projects are sort and deep sort all the code that i wrote today you will find on the link down below in the description you can download the code and you can use this one even though i always recommend to write every frame everything by yourself just following the video so that you can learn more easily than just running pre made code by me now before concluding i want to let you know that i have premium courses where i teach all of these plus more advanced things regarding object detection object tracking and where i build commercial projects from scratch you can find the link of my course audio detection with opencv and deep learning where you can get all of these things this is all for this video and see you on the next video
Info
Channel: Pysource
Views: 2,064
Rating: 5 out of 5
Keywords:
Id: GgGro5IV-cs
Channel Id: undefined
Length: 60min 13sec (3613 seconds)
Published: Tue Oct 05 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.