Image classification WEB APP with Python and Streamlit | Pneumonia classifier | Computer vision

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
so this is exactly the web application in which  we are going to be working today on today's   tutorial this is a pneumonia classifier and let me  show you exactly how it works so I'm just going to   drag and drop an image from my computer and now  let's see what happens and you can see that we   are classifying pneumonia with a 99.9% confidence  so this is exactly the project in which we are   going to be working today on today's tutorial and  I'm going to show you every single step of this   process from how to set up this web application  up and running using Python and Streamlit how   to use the image classifier and how to analyze  its confusion Matrix in order to validate its   performance and most importantly I'm going to  share some super amazingly Pro tips in order to   improve the performance of your model if something  is not working as expected if you are expecting   everything to be super super smooth and super  straightforward then think again because when you   are training an image classifier in real life or  any type of machine learning model things happen   and whatever thing happens whatever problem  it arises with your model with your classifier you   need to provide a solution you need to fix the  problem and in order to fix the problem you need   to be creative you need to think outside the box  exactly as we are doing over here so this is what   I want you to take from this video this is by far  the most important part of this tutorial my name   is Felipe welcome to my channel welcome  to this video and now let's get started and   now let's get started with this tutorial this  exactly the data that we are going to be using   today we are going to work with a pneumonia  dataset and we will be classifying chest x-ray   images into one of these two categories we are  going to be classifying absolutely every single   image either as pneumonia or normal these are the  two categories of today's tutorial and now let   me show you a few examples of each one of these  categories so you see exactly how they look like   these are a few examples of the normal category  and you can see that we are looking at some chest   x-ray images and this is exactly these are a few  examples of the normal category now let me show   you a few examples of the pneumonia category you  can see that in this case we are also looking at   some chest x-ray images and I don't know about you  but in my case I have to be honest and these two   categories they look pretty much the same right I  am not a doctor and I have absolutely no medical   background whatsoever so these two categories  and all of these images they look pretty much   the same for me and that's exactly why we are  going to be using an image classifier in order   to classify all of our images into one of these  two categories that's exactly why we're going to   be using an image classifier to tell these two  categories apart so this is exactly a date that   we are going to be using in today's tutorial and  I'm not going to show you the process of building   this image classifier because this is something  I have already built before star starting with   this tutorial I built the Evers classifier using  teachable machine using this website and if you're   curious to know the process of building an image  classifier using digital machine then I invite you   to take a look at all of my previous videos where  I show you the entire process of building this   image classifier so if you're curious to know how  exactly I built the image classifier we are going   to use today please take a look at that video I'm  going to be posting somewhere over there now let's   continue this is a classifier we are going to use  today this is a classifier I have already trained   pneumonia classifier.h5 it's already trained it's  ready and we're just going to use it today and now   let's continue let's go to pycharm because let  me show you the python project we are going to   work on to this tutorial so you can see that  they have three files over here one of them is   requirements.txt the other one is main.pa and the  other one is udl.pi so these are the three files   we are going to use today requirements.txt is the  list of requirements you need for this project and   you can see we have numpy streamlit Pillow colors  and tensorflow so please remember to install these   requirements before starting with this tutorial  otherwise nothing is going to work and then if   we move to main.pi you can see that this is  the entire process we are going to be cooling   onto this tutorial and this is exactly everything  we're going to be doing today this is exactly what   it takes to make this image classifier available  through a web application using streamlit so the   first step will be setting up the title then this  the header then we are going to create a widget   in order to upload a file then we're going to load  the classifier and so on right the entire process   is described as a sequence of steps right it's one  two three four five six seven eight steps that's   all it takes to complete this tutorial right  that's how Sim simple this will be so this is   main.pi and now let's move to udil.pi you can see  that here we have two functions one of them is set   background and the other one is classified for set  background this is a function we are going to use   in order to change the background of the website  we are going to be building today so this function   is only a detail like a very meaningless detail in  order to make everything look much nicer and much   prettier but it's not really that important  because it's not going to affect the entire   functionality we are going to be defining here  in this process so that's why I thought it was   a much better idea to just use this function from  a utils file so we don't really lose time code in   this function and we can just use it at the end  of this tutorial at the end of this process now   let me show you this or function which is classify  and this is a very very important function and you   can see we have a very comprehensive description  here in this doc string you can see we have the   this function exactly what it does and we have  all the description for all these parameters but   then if I scroll down you can see this function  is completely and absolutely empty right the only   thing we have is these comments over here these  inline comments and this is also like a sequence   of steps the same way we had over here so the idea  is that we are going to be good in this function   together on this tutorial but we are going to do  it at the end of everything else we're going to   focus on the entire Pipeline and once everything  is ready and once we are happy with this pipeline   then we're going to get back here to the util.pi  file and then we are going to call this function   and we're going to make the real classification  the actual classification right but that's the   process we are going to follow in this tutorial  we are going to start here with this process and   then we are going to classify an animals we're  going to build the code for this classification   and then at the end we're just going to change  the background because that's going to be like   the least important of all the details we are  going to be doing today so that's exactly what   we are going to cover on this tutorial and now  let's get started with the main.pi file okay   and the first thing we need to do is to import  streamlit as St that's very very important because   this is a python package we are going to use in  order to make this process available through a   web application using streamlit so streamlit is  definitely important and then the first step is   to set up the title and this is exactly how we're  going to do we're going to call St dot title and   we're just going to set whatever title we want  I'm just going to write something like pneumonia classification right pneumonia classification  everything is okay yeah so this is going to be   the title of our web application and now let's  set the header and this is something we're going   to do call in St dot header and here is going to  be something like please upload a picture please   upload an image of a chest x-ray something like  that or maybe we can rephrase it on something   like please upload a chest x-ray right this is  going to be the header of our web application   so we're just instructing the user to upload a  chest x-ray image in order to continue in order   to classify this image right now let's continue  now we are going to create the widget we need in   order to upload a file and this is something  we are going to do call in St file uploader   we're going to input two parameters one of them  is going to be an empty string completely empty   and then we are going to specify what are the  types we are going to accept in this widget which   I'm just going to do something like jpeg jpg and  PNG right which are some very very popular formats   for images so I think we're going to be just fine  with these three formats then we need to load the   classifier we're going to use in order to make  our predictions and remember I already show you   the classifier we're going to use today which  is this one I already show you the model the   weights of the classifier we're going to be using  today which is pneumoniaclassifier.h5 and this is   where it's located within this small directory so  that's exactly what we are going to load now but   first we need to make an import we're going to  save from keras.models import load model and now   I'm just going to call load model and I'm going  to specify the location of my model which is model   and then um pneumonia classifier.h5 and this  is my model and that's it that's how simple   it is and now let's load the class names and in  order to do so we are going to use this file we   have over here within the moles directory which  is called labels.txt and if you're curious to   know where this file comes from please remember  to watch my previous video on how to train an   image classifier using digital machine because  in that video I explained the entire process I   explained the output I explained absolutely  everything so by watching that video you're   going to understand where these labels.txt  file comes from now going back to pycharm   this is exactly how we're going to load this  file we're going to do something like with open   and this is going to be model  labels.txt we're going to open this as r   as if and then we're going to  say something like class names is equal to then we're going to do something  like we're going to for a for a in F read lines   and obviously we are not going to mine the last  character because that's a new line character   and that's basically all but if I show you this  file again you can see that this is exactly how   or how this file looks like we have a zero and  pneumonia and we have a one a normal right so   now the only thing we care about are the class  names so now the only thing we care about are   pneumonia and normal so the way I'm going to do  it I'm going to do it in a very very generic way   so I'm going to do like this this value dot split   the space right remember we have a space between  the number and the word on the class name and then   I'm just going to keep the first value right so  this is exactly how we are going to get all the   class names from this file it doesn't matter how  many they are this is exactly how we're going to   get all the class names and that's going to be  pretty much all in order to make sure everything   works properly I'm just going to print class  names and let's see what happens I'm going to   execute this file and you can see that these are  the two categories we are printing pneumonia and   normal so everything seems to be just fine and now  something we could do to start working on this web   application to see how it looks like we can just  run this file and we should be looking at these   two Fields right the title the header and also the  file uploader so let's see how everything looks   like so far I'm going to my terminal I'm going to  clear this and I'm just going to call streamlit   and then I'm going to call Ron main.pi this  is exactly how we are going to execute the   code we have here and exactly how we're going to  launch this web application this exactly the text   we have so far which is so please upload a chest  x-ray image and then this widget we have defined   over here as the file uploader so so far so good  so far everything looks just fine and now let's   continue and now you can see that the next step  in this process is to display the image the user   has selected right so this is how we are going  to do it you can see that we are calling this   value and we need to say this is equal to file  and then we're going to say if file is not known   we are going to do something like this we  are going to find image as image dot open   file right an image we are going to import  them from peel from peel import image this   is a function we're going to use in order to  read the image the user has selected and this   is very important we need to convert this image  into RGB now let's continue now the next step is   to visualize this image is to display this image  to the user and we're going to call St dot emerge   we're going to input this image and then we are  going to call this parameter which is use column   width equal to True right this is exactly what  we need to do in order to visualize this image in   order to display this image I in order to move one  step by time let's see how everything looks like   so far and if we go back to the browser you can  see that if I refresh we are going to see exactly   the same pneumonia classification please upload  a chest x-ray image and instead of selecting a   file over there I'm just going to drop I'm just  going to select and drag one of the images in my   computer so this is exactly what I'm going to do  and it is going to take a few seconds now it's   reading the image it's processing everything and  now we are displaying this image in the browser   and the user is now super super happy because  it's visualizing the image it has just chosen   from its file system so everything is okay so far  now let's go back to pycharm because now we need   to follow additional steps now is the time we are  going to make our classification we are not going   to make the real classification but we are just  going to call this very empty function in order to   get these dummy values and in order to just move  on right so what I'm going to do is from YouTube   import classify and I'm just going to call this  function I'm going to call classify I'm going to   input the image I'm going to input the model  and then I'm going to input the class names   and this is going to be equal to if I go back here  this is going to return a tuple of the predicted   class name and the confidence score for that  prediction so this is going to be equal to I had   an S missing over here this is going to be class  name and then conf score equal to classify image   model class names exactly what we need to specify  according to this documentation we have over here   and remember we are doing nothing everything is  fully and absolutely empty we're just going to   get these two zeros but it doesn't matter let's  just take these two zeros and let's move on now   I'm going back here to main.pi and now let's just  write the classification back to the user so let's   continue on something that's very important  we need to make this within this if always we   are going to have issues and now we are going to  call St grind and we're going to do something like   we are going to control the size of the text  we are going to print by adding some um these   values right these characters by adding these  characters we are going to control the size of   the text we are going to write here this is a very  similar syntax I think it have if I'm not mistaken   as in the readme file of a GitHub repository so  this is where we are going to say something like   uh we're just going to print the class name so  this is going to be format class name this is   where we're going to write the category we are  classifying and then we're we're also going to   write the confidence value right so we are going  to make this a little smaller so we are going to   add an additional character and then we are just  going to say something like score and this is   going to be the conf score right so this is this  exactly what we need to do in order to write the   classification and so far we are returning a zero  zero but actually if this is a class name maybe it   makes more sense to return something which looks  like a class name we're just going to return dummy class name and a zero right so we are detecting  the class name called dummy class name and with   a confidence value of zero right it doesn't make  any sense whatsoever this is only for debugging   and in order to make sure everything is working  properly so now let's go back to the browser and   let's see what happens so I'm going to refresh  I'm going to load the same image again and now   we should be getting no we should be displaying  the image and we should also be visualizing this   new output which is dummy class name score zero  so everything works properly so far and if you   know this we have completed the web application  the web application is completed I mean the the   entire structure of the web application is just  completed and the only thing we need to do now is   to code the classify function we have over here  but this process is done it's completed we have   completed this web application this is exactly why  I split I divided the process into these two files   because this way is going to be much simpler to  just focus on everything in the main.pi file and   then just make the classify function right we are  just organizing the code this is a very very good   practice and I don't know about you but I'm super  happy because this is done this is completed I do   notice how C simple this is right so now let's  continue now we are going to code this function   which is the classify function and you can see  that we also have a sequence of one two three four   five steps the first one is to convert the image  we are getting over here to this size to a 224   times 224 so this is exactly how we're going to  do it we need to make an import which is from peel   import image Ops because this is the function  we're going to use in order to convert the   image we're getting into this size so we're  going to call Image Ops and we are going to   input sorry we are going to call Image Ops  dot fit and we are going to input the image   we are getting and we are also going to input  the size which is 224 times 224 and then we   are going to input a constant which is image dot  resampling dot Lan c c the OS right this is only   a constant a parameter we need to input into this  function but the long story short remember we are   just converting the size we're resizing the  image we are getting into this size 224 times   224 and obviously we need to make another import  which is image otherwise it is not going to work   and that's pretty much all this is how we  are converting the image and the output is   also called image we're just going to overgrade  the image we are getting and now let's continue   now the next step is to convert image as to an  ampere right so I'm just going to Define your   variable which is image RI and this is going  to be numpy dot as Ry e mesh right so we are   getting the image which currently is a preload  object right it's an image but in the pillow   format and we're just converting this image into  an ampere right right and we are using the numpy   library which obviously I need to import important  MP SMP okay and this is pretty much all in order   to complete the second step in this process which  is convert the image to one on PRI and now we need   to normalize this image so what we need to do I'm  going to define a new variable which is normalize and this is equal to we are going to take  the immature right we are going to cast it   us type MP dot float32 we're going to cast it  first into this into this value we are going   to take the image and we are going to convert it  as floats flow 32 and then we're going to divide   it by 127.5 right remember so far the image goes  from every single Pixel goes from 0 to 255 so if   we divide it we are making absolutely every single  Pixel goes from 0 to 2 right so far every single   Pixel goes from 0 to 2 but if we lose this if  we subtract one now every single Pixel goes from   -1 to 1 right we have normalized or image all  right and now let's continue now we are going   to set the model input and in order to do so  we are going to define a new variable which is   called data and this is going to be MP ndri and  this is going to be a shape equal to 1 because we   are going to input one image at a time then the  size will be to 24 to 224 224 and then we will   have three channels for every single image right  so this is exactly a size we need an image only   one image 224 times 224 and three channels and  the type this is very important is numpy float32 okay the same type we have  converter image over here   and that's pretty much all and now the only thing  we need to do is to Define that the first element   and the only element of data is the normalized  image array we have over here and that's pretty   much all we need to do in order to set the model  input the data we are going to input the model and   now we have only one step left which is making  our prediction let's see how we can do that   we take the more less input is one of our  parameters the model so the only thing   we're going to do is calling model and we're just  going to input we're going to call mole.predict   and we're going to input the data we have defined  over here and this is our prediction right but now   we need to unwrap all the information we need from  this prediction right we need to make we need to   get the class number we are predicting and also  the class name and also the confidence value and   so on now let's define a new variable which is  index and this is going to be the index of the   class we are detecting and we are going to make  it like this and later on on this tutorial I'm   going to show you another way to get the index of  the class we are detecting I'm going to show you   a very Pro way to do it I'm going to show you a  much better way to do it as what we're going to   do now right from now let's just do it in a  very very classical way which is ARG Max and   we are just going to input prediction right this  way we are just going to get the argument of the   maximum value of prediction prediction is going  to be a vector two values and we're just going to   get the argument the index of the maximum number  and that's going to be the index of the class we   are detecting so from now on class name is going  to be class names and we are going to input the   index remember class names is an old parameter  we take as input here and then confuse core is just getting the prediction zero because we  only have one element and then e Index right   so this is exactly what we need to do in  order to get a class name and in order   to get the confidence score of the prediction we  are getting over here and that's pretty much all   and now the only thing we need to do is to replace  this value and to replace this or value and that's   all and that's it so you can see how simple  making this classify function is and now you   can see why I have divided the entire code into  these two files right because the first step is   to complete the process in main.pi which was very  very very simple very straightforward and then   it's just to code these few lines in the classify  function of the util.pi file right and in only a   few minutes we have a an entire pipeline which  is up and running and we are just serving this   image classifier into a web application using  streamlit and that's it right so now let's test   how everything works let's see what happens and  now let's go back to the browser I am going to   refresh and I'm going to choose a couple of images  open the set to see how it performs so I'm going   back to my file system and I am going back until  my test said because obviously I'm going to choose   a couple of images which are completely unseen  data from my model so we know exactly how the   mole performs I'm just going to drag and drop  an image in the pneumonia Theory and let's see   what happens so we can see that we are detecting  pneumonia we are classifying ammonia with a 99.9   confidence so this is a an amazing performance  this is amazing so so far the model is performing   super super super well now let's see what happens  with an image in the normal category so let's go   back here I'm going to normal and I'm just going  to select an image from the normal theory of my   test set I am going to drag and drop the image  here and I'm going to wait a couple of seconds   and you can see that now we are also detecting  pneumonia we are classifying pneumonia too and   with a super amazingly high confidence you can see  that the confidence value of this classification   of this prediction is 99.4 percent which is  amazingly high so something is going on obviously   something is going on and now let me show you  something I'm going to show you the confusion   Matrix of this classifier this is the confusion  Matrix I am sure you are familiar with the   confusion Matrix remember how it works in the why  the axis we have the true labels and in the x-axis   we have the predicted labels and for example this  number over here 384 means that 384 images in the   pneumonia category were classified correctly as  pneumonia and only six images in the pneumonia   category were classified incorrectly as normal  but if we look at the normal category you can see   that we have these numbers over here and it means  that only 70 mm images of the normal category were   classified correctly as normal and 164 images of  their normal category were classified incorrectly   as pneumonia so something is going on with  this classifier and I have been expecting many   many different images and I have been inspecting  this a confusion Matrix and so on and I realized   I noticed that this image classifier is super  super biased to the pneumonia category so long   story short it's most likely for for a given  image is most likely to predict pneumonia than   normal so pretty much is classifying pretty much  all images or most of the images as pneumonia and   is not very it's not performing very well for the  normal category right if we look at one category   at the time you can see that the accuracy in the  pneumonia category is something like a 98 right   something like a 98 percent but if we look at the  normal category it's only a 30 something percent   or around a 30 percent so that's what's going on  right and I think this is very interesting because   this is something that sometimes happens in real  life when you are training them all sometimes it   happens that you have a bias and the classifier  it's classifying one of the categories which are   much more likelihood that the other category and  this is something that sometimes happens when you   are building a mold is something that sometimes  happens in the industry and sometimes it's not   very clear why this is going on sometimes it's not  clear why this is happening remember that we are   predicting images which are chest x-rays and as I  mentioned when I was starting with this tutorial   when I look at these images they all look pretty  much the same because I have absolutely no medical   background whatsoever so it's very challenging  for me to know what's going on with these images   to know what's going on with this data maybe if  I will have some medical training or something I   that maybe it will be a little more clearer for  me but it doesn't matter what I want you to take   from here is that this is something that sometimes  happens when you are training a mall and sometimes   it may not be very clear the reason why it is  going on if you ask me I'm from the top of my head   I will say that one of the issues or something  that may be going on with this data with this   classifier is that the pneumonia category maybe  all the images are more similar between them maybe   don't we don't really have a lot of diversity and  all the images which were classified as pneumonia   they are like very similar between them but for  the normal category the normal category I guess   that maybe we have a lot of diversity in this  category because Normal in this context means   that it's not pneumonia but the patient could be  completely and absolutely healthy or it could be   sick but with a different condition right so I  guess we have a lot of diversity in this category   and maybe that's the reason why the classifier is  not learning this class properly maybe that's the   reason I know that's from the top of my head but  remember this is something that sometimes happens   when your training mode and sometimes it may not  be very clear the reason why this is going on   but we are going to see how we can fix this issue  obviously we are going to fix this issue I'm not   going to give you a bias classifier I will never  do something like that so I'm going to give you   a solution it may not be the best solution ever  but it's a good solution I would say it's an okay   solution I'm going to show you exactly what we are  going to do the way we are getting the prediction   we are currently getting the prediction is the  way it usually goes right the way we usually do   it which is just getting the maximum number from  the predictions Vector right we are getting two   numbers one of the numbers is the confidence value  in the pneumonia category and the order number is   the confidence value in the normal category and  we are just getting the index of the maximum of   these two numbers right this is what we are doing  over here and this is the way it usually goes when   we are we are getting a prediction but this is  not going to work in this case because this is   going to give us a very very biased classifier  what we are going to do instead is this we are   going to classify as pneumonia which is the  index 0 if the confidence value is greater   then 0.95 and in any other case we are going to  classify as one this is going to be for index   equal to 0 right so we're going to classify as  pneumonia if the confidence value of getting   pneumonia is greater than 0.95 and in any other  case we are going to classify as normal and the   reason for this is that I have been inspecting  many many many classifications many many many   predictions and I noticed that for all of those  cases or for most of those cases for which we   are classifying pneumonia we are getting a super  super high confidence value we are classifying   pneumonia with a super super high confidence but  I noticed that in many of the cases in which we   are classifying as pneumonia an image which  was labeled as normal in many of those cases   the confidence value for classifier is not really  that high it's not as super super convenient value   as it usually happens when we are classifying as  pneumonia something that it's pneumonia you see   what I mean and you notice that in many cases for  the misclassifications over here for many of these   Miss classifications many of these 164 images the  confidence value of our classifier wasn't really   that high right not in all cases because we also  have cases like this where we are classifying as   pneumonia something that's normal and with a very  very high confidence value this this is happening   too but in many other cases the confidence value  is not really that high so if we make this change   we are going to be classifying as pneumonia only  those cases those images for which the classifier   is super super comfy in this pneumonia and  in any other case we are just going to say   is normal this is a very very a typical way to  make a prediction this is a very a typical way   to make a classification right the way it usually  goes you should take the maximum number of this   prediction vector and that's it but now we are  doing something that's very very very atypical   but let me show you what happens if we make this  change let me show you the new confusion Matrix   if we do this change and this is how it looks  like you can see that for the pneumonia category   we are getting a very very very high accuracy is  not really that high as it used to be right now   we are getting more mistakes we are getting more  misclassifications but nevertheless this is a very   good accuracy in total we have something like 390  images which were labeled as pneumonia and 353 of   those images are classified as pneumonia are still  classified as pneumonia so this is something like   90 percent of the entire data of the entire data  which was labeled as pneumonia this is Allah this   is a very very high accuracy but now if we look at  the normal category you can see it's not perfect   this is not as good as the pneumonica theory we  are still getting many many misclassifications   but nevertheless this looks much much better  than before in the older confusion Matrix in the   other one I showed you a few minutes ago we had  something like a 30 percent accuracy in the normal   category right and now you can see we are getting  something like a 60 percent if we make this   sum 162 plus 72 and now I divide 162 divided  234 we are getting a 69 accuracy so this is   much higher this is almost a 70 accuracy so it's  not as high as the accuracy we get here from the   for the pneumonica theory but it's very high and  effortless so this is a much better Improvement   and you can see that by doing this very very  small change and now we are getting a much much   better classifier and we're getting a much much  more robust classifier so this is definitely a   very good Improvement and this is what I want you  to take from this video this is by far the most   important part of this tutorial sometimes when  you are training an image classifier when you   are training a machine learning model sometimes  things happen and the way usually goes things   happen if you're expecting everything to be super  super smooth and super straightforward then think   again because when you are training an English  classifier in real life or any type of machine   learning model things happen and whatever thing  happens whatever problem it arises with your   model with your classifier you need to provide  a solution you need to fix the problem and in   order to fix the problem you need to be creative  you need to think outside the box exactly as we   are doing over here so this is what I want you  to take from this video this is by far the most   important part of this tutorial so this is the  change we are going to make in order to improve   this classifier in order to make this classifier  way more robust and that's pretty much all and   that's speed that's that's all so the only thing  we need to do now before I forget is to change   the background right we are going to change the  background for something a little more nicer for   something prettier and let's do it before I  forget because this is such a detail and this   is such a meaningless detail that I almost forget  so let's just import set background and now let   me show you the images I have in my local computer  which we are going to use in order to change this   background I have a directory which is called  bgs and if I open this directory you can see I   have many different many different images these  are some images I have been testing When I Was   preparing this tutorial and let's just use this  one which is bg5.png so let's go back to pycharm   and I'm just going to say set background  and I'm going to specify the path to this   image which is bg5.png and that's pretty  much all now I'm just going to refresh and you can see that now it looks much much better  it looks much nicer it looks much much prettier   I'm just going to test it again let's try with  another normal image maybe some something like   this we should be getting something like a 70  accuracy so we should be getting this image   classify correctly as normal with a 93 percent  accuracy so you can see that everything looks   pretty pretty well and that's going to be all for  this tutorial my name is Felipe I'm a computer   vision engineer and these are exactly the type  of videos and the type of tutorials I make in   this channel so if you enjoyed this video I invite  you to click delay button and I also invite you to   subscribe to my channel this is going to be all  for today and see you on my next video [Music]
Info
Channel: Computer vision engineer
Views: 11,694
Rating: undefined out of 5
Keywords:
Id: n_eMARPqBZI
Channel Id: undefined
Length: 41min 8sec (2468 seconds)
Published: Mon May 15 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.