License Plate Detection Demo Using Raspberry Pi Camera

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
would it be possible to use a raspberry pi and a camera module to detect and read license plates of moving vehicles in real time i just had to know the answer to this question so i set out to find out and then this happened oh uh it's for a youtube video i'm going to show you how to use a raspberry pi with a camera v2 module to detect read and store vehicle license plates without using any sort of remote cloud services instead we're going to use a deep learning model running inferences locally on board our raspberry pi 4 because i like to run my models the same way i like to live my life on the edge but really this is one of those videos where you're just going to get a massive download on how to spin up and generate your own custom deep learning models using state-of-the-art technology so sit back strap in and enjoy the ride and if you're unsure about the utility of some of the topics we're going to cover in this video then allow me to share a quick anecdote see back in 2019 i was personally contracted by the largest parking services company in the world to help them prototype some license plate detection software in some of their testing facilities now we're talking about a nasdaq publicly traded company that was interested in better understanding how some of this emerging tech could be leveraged within their business and because i was positioned as an authority on the topic i was able to be that consultant for them and that's why i like to classify tutorials like this as knowledge assets because if you really internalize them and understand the key concepts it can later be monetized when you deploy this knowledge against business opportunities now the easiest way to achieve this would be to outsource the computer vision component using a cloud service such as open alpr where we could just send them the images they can analyze them and send us the results but i think that deploying a custom model on the edge is going to give you a much better fundamental understanding of how all this works also open alpr isn't free anymore so maybe they should name their company closed alpr just a thought but you know it is free hitting the like button for the youtube algorithm and with that let's get started these are the technologies that we're going to be using to creepily track people's license plates and invade their personal privacy i mean build out our license plate detection system strictly for academic research purposes first we're going to use our raspberry pi as our compute to capture images and run the machine learning inference on the edge next we're going to use google's automl to train a custom machine learning model to detect license plates we will then deploy this deep learning model on the edge and call it using tensorflow.js once we localize the license plate will use tesseract to perform optimal character recognition to determine the alphanumeric content of the license plate finally we'll use visual studio code and node.js to stand up a basic web app to tie it all together and deploy our application and of course we'll also reveal if i get attacked by an uber driver and this becomes my last video ever so for those of you who don't know this is a raspberry pi single board computer about the size of a credit card today i'm working with a raspberry pi 4 model b but this tutorial should work on all the major models including the zero i'm going to be assuming people are coming in cold so we're going to start at the very beginning by configuring the raspberry pi so the first thing we want to do is set up our hardware so i'm going to use a special case that houses both the pi and the camera this chassis ran me about 11 so i'm going to insert the raspberry pi into this housing next we need to add the camera ribbon so let's locate the camera module port next we're going to gently pull up the edges of the ports plastic clip next we're going to insert the camera ribbon ensuring that the connectors are facing the contacts in the port finally we're going to push the plastic clip back in to secure the ribbon next we're going to mount this on a tripod as we qa and debug our program also quick shout out to wandering bear coffee for hooking me up with some cold brew without that i'm pretty sure i'd still be in bed right now next we're gonna format the operating system onto our micro sd card there's a few ways to do this but we're going to use the express method so we can just breeze right through this we need to use an adapter to insert our micro sd card into our computer okay so we're just going to come over to raspberrypi.com and then we're going to navigate over to software and then we're going to download an application called imager and the purpose of this application is to allow us to flash the raspbian operating system to a micro sd card we're going to go ahead and install this drag it over here open up applications select raspberry pi imager open okay so we want to open the advanced option menu in raspberry pi imager so we do that on mac by selecting control shift x and that will bring this guy open here and what this lets us do is as we flash the raspbian operating system to our micro sd card we can pre-configure it with things like our wi-fi network and things like that so when we first start our raspberry pi it's immediately going to connect to our network which is going to allow us to connect to it over ssh and things like that so i'm going to enable ssh and we're going to set a password and we're going to configure the wireless network okay we're going to go ahead and save this so we're going to choose our operating system and we're just gonna use the recommended 32-bit raspbian image okay we're going to choose our storage device be careful here because you do not want to format the wrong drive i have a 32 gigabyte micro sd card it's that guy right there then we're going to go ahead and just select right okay so the card is finished formatting that process took about two minutes now let's take our sd card out of our computer and insert it into our raspberry pi and get this show on the road or rather get the raspberry pi onto the road so we can detect some license plates [Music] oh yeah [Music] okay now our raspberry pi is booting up so i could directly connect my device to a keyboard and mouse but personally i'm a bit more fluent using the command line on my mac computer so i'm going to remotely connect to the raspberry pi over ssh to determine if our raspberry pi is in fact connected to our network and by network i just mean our wi-fi network we're going to ping it so i'm going to do ping and then the default hostname is raspberry pi dot local so it's returning icmp traffic that means it's on the network which means we can connect to it so we're going to connect using ssh secure shell so ssh the username is pi and then the host is raspberry pi dot local and then okay so i have some um anytime you connect to a new remote device it creates a host in the hosts file and it's saying that there's some conflicting hosts so i'm going to do is i'm going to take the hosts file and i'm going to clear it out so i'm just going to do vim which will open the file and i'm just going to delete these guys save that and we're going to reconnect now it's saying do you want to establish a fingerprint we do so we're going to say yes and then the password is the password that we defined in the advanced configuration so i'm going to go ahead and type that if you didn't define one the default is raspberry okay so now i'm in my raspberry pi one thing i like to do is elevate myself to root so you do that by doing sudo suit dash so now i'm a root user let's go over to the desktop home pi desktop there it is alright and just to prove that we are in fact connected to our device i'm gonna go ahead and create a file so i'm just gonna do touch test and now we can see that on the desktop on the monitor and i can go ahead and remove it as well and we can see it go away so we're now programming our raspberry pi over the air using the wi-fi network and this is just the way i like to do it you could always connect a keyboard directly to the raspberry pi but i find it a little cumbersome now we can start updating the operating system don't ask me why but i've found that you still need to manually set the date otherwise things like chrome will reject the ssl handshake because the certificates don't match up doesn't need to be perfect um so the time is set now let's update the packages and operating system so i'm going to do apt update this will read the packages and update them and then we're going to do apt full hyphen upgrade just so we're going to install node.js node.js is going to be used to support our web app and then we're going to install tensorflow.js and pip is a python package manager python comes pre-installed on raspberry pi python is pre-installed on pretty much every operating system these days all right let's install vim vim's a text editor apt-get installment and then let's also install nginx all right so let's test the camera we're going to use lib camera which is the newer package and yeah we'll just call this test okay so if we want to see um this image on our computer here we have to have a way to pull that up okay so there's a couple different ways we could get this image to show up on our computer but i'm thinking when when we downloaded nginx it stood up a basic web server like if i curl um localhost if i do curl logo host it's returning a website this is a very basic website um and so what we could do is we could actually insert the image into that so and then i think we could pull it up on our computer so actually let's let's try that first so in theory we can do raspberry pi dot local and it should pull up that website okay yep it's so it's pulling up the website from our raspberry pi and i could prove that by if i go ahead and change um or i can just go ahead and delete the title right and then okay so why don't we just reference the image here so i'm going to do we should be able to just do img src uh okay and then i think what you can just do is local and that's just test.jpg i think yeah let's try that okay so there it is but let's go ahead and resize it a little bit so we should just better do oops height equals 700. okay and that's the picture because i was holding the raspberry pi and i was shutting my eyes so all right cool so the the camera does work okay so we are halfway there and if you've made it this far then congratulations and feel free to give yourself a pat on the back okay break over get back to work okay so our hardware is working well let's go ahead and create our deep learning computer vision model to detect license plates okay so i'm going to create a directory here called data where we can store some of the test data and keep our files so i'm gonna do make their data and um this directory here again is available in the description below but this directory is going to be the application itself that um you know takes the images and and uh returns the results of the machine learning model and stuff like that um we don't need to get into that quite yet let's start by just creating our uh our tensorflow.js machine learning model so we now have a directory called data and what i'm going to do is download a directory of license plates again link in the description below okay so you can download the data set from kaggle or the link is in the description below i've also stood it up on google cloud platform but what the data set consists of is just a bunch of license plate images right and so we can use this to train our model and as you can see they're not just um american license plates there's all different kinds um actually these are mostly european it looks like but that one's um so it's all different kinds of license plates um okay so that's what the data set consists of uh and now we want to use auto ml so i would recommend um setting up a google cloud platform account and um let me just show you real quick so this is a google cloud platform gives you access to um their entire suite of products uh and we want to use the computer vision product right so we're gonna go to the navigator here and there should be let's see compute serverless storage database where is a i when you need it all right artificial intelligence um we want vision go ahead and click vision and let's see here we want auto ml vision so we're going to get started and we're going to do new data set let's call this license plate detection so there's different kinds of models right um you could have a single classifier like a binary does it does the image contain something or does it represent some sort of pattern or something you could have a multi-classification so say for instance you wanted to be able to classify a plant by a picture of a leaf you could get oak tree or fern or what have you and then there's localization so can you take an image and then draw a bounding box elastic band around a particular entity concept so people dogs cars what have you so that's what we're going to do so we're going to do object detection and then it's telling me i should use underscores instead of hyphens so i'll do that and where do you create data set all right so this is where auto ml is is not as intuitive as i wish it was but basically the way it works is we need to upload our license plate files to cloud storage which is just a hosting provider for static assets so we're going to upload the images to a directory and then what automl wants you to do is create a file that says for every particular image for every url for an image can you tell us if it should be used for training validation or testing right you don't want to use the same image for training and testing because a model can easily [Music] tune to an image and then it'll test 100 on that particular image you want to train on a randomized sample of the data and then you want to test on a mutually exclusive other randomized samples so that you can see what it learned from the training set is that is that broad and able to generalize across new data right because because when we take this out on the road and start scanning license plates that's new data hasn't seen those before and it needs to be able to perform let's get the first part out of the way the first part is we want to upload our images to google cloud storage so i'm just going to go over here and we're going to go ahead and do that and what we're doing is we're just uploading the data the directory that we downloaded from kaggle right um okay cloud storage and we want to create a directory that is public right so we're going to call this demo license plate we're going to continue region shouldn't matter storage class doesn't matter for what we're doing here all right and then they're going to come to configuration and we we want this directory to be public all right license demo license plate permissions add user all users and then we're gonna do view um cloud storage object viewer because we just we want folks to be able to we want automl to be able to download these images essentially that's basically what we're doing here they're two different products they connect over probably like some sort of service account um so we're going to do save and see now it's saying okay you want to make it public yes allow public access okay cool so now see how it will say oh it still says not public let's reload this all right now it says public cool so let's upload our images i'm going to do upload files and again we don't want to upload the zip we actually want to upload the all the images so i'm just going to select them all and these will inherit that public permissions level okay so i want to show you one more thing is so if i wanted to pull up one of these images or in this case automl wants to pull up one of these images they have a public url so the public url it follows this pattern here storage google apis and then demo license plate um and so you could actually just throw this in here and you'll get the image but how you reference an image uh when you're using something called gsutil which is it's basically google's tool for um uh google cloud platform commands there's just another uri and it's just gs colon forward slash forward slash and then it just follows the structure uh the hierarchy um so that'll just be uh relevant when we um when we indicate this information to automl so okay so it wants us so all it wants us to do here is upload a csv file that looks like this now see how for the for this um uh in this example uh csv you can see the annotations right we're not going to upload the annotations you don't have to upload the annotations but you do have to denote if a particular image should be training validation or test now i've already set up a file that will do this for us so we have a file here called training.csv yeah we set some of the data for validation we set some of the data for test and then a lot of the data we put unassigned and when you put unassigned automl will do a random sample of that data and we did this specifically because we wanted to make sure that we got enough test and validation data in there and if you do honest if you do unassigned it does a percentage that wasn't adequate for what i wanted um but the only thing here is that we need to change out is this path is not relevant right because i'm not using this alexa translation the path that we have for our gsutil urls is um this guy right here now i think the file names are the same so all we want to do is go ahead and you're going to want to do the same thing based on how you named this directory um or even you could probably reference my directory if you really wanted but anyways we're just gonna do a search and replace right so we're gonna say alexa translation replace that with this replace all and then that should do that uh i should do the trick on that that looks good we're gonna go ahead and click save and then this is gonna be the um the file that we upload to automl so you don't have to actually upload the file the files to automl you upload them into cloud storage and then you just reference them in this weird csv file that they want you to use um funny enough they want the csv file to also be on cloud storage so let's actually go back to this directory here and let's upload the csv file let's do it should be under data there it is right here okay so they want you to upload the training file let's see okay and well actually i think you can just select it over here right so we're going to do browse we're going to do demo license plate and then the training file should be at the very bottom that's really annoying let's search for it here okay okay all right and let's see if that doesn't take it should take but again what is this file doing this file is just adding a row for each image and the images have this name here and then it adds a bunch of commas because we're not we're we're not adding the um these signify the coordinates but we're not going to add the coordinates we're just doing the um the data type should it be test validation or training the location based on the file that we uh the the location of the cloud storage that we're using and then just a bunch of commas since we're not adding the um the labeling so you could do it yourself or you could reference the file that i just created and let's see if this doesn't take here should pull in all the images and then it should mark them properly based on the designation that we set okay so it's still importing the images and we'll just give it a second here okay so that took a couple minutes but it looks like it took so um we can see all the images here that looks pretty good and so none of them are labeled uh yet and so that's what um we need to do and that's where automl is really nice so basically automl has the data set but it doesn't know where to target that localization because we haven't um we haven't provided any uh any um coordinates right all right let's set up our label first so it doesn't matter what we call license plate doesn't like that oh gcp is all about the underscores all right license plate all right so let's come back in here now uh we should be able to do this right okay license plate and technically there's another one too so we can get both of them and we're just going to do save so so what's happening is automl is finding the coordinates here and it's adding that metadata to this image it's adding that annotation and we can just keep flipping through here we certainly don't need to do this for every um every image but we should give it like probably 30 at least automl is very good it doesn't need a lot of data um but we should give it you know the more we give it the better so okay so now that we've labeled a bunch of the images if you come over to train it'll give you information about what you have so we have 26 train images that are annotated and had the training label we have nine that have the validation label and six that have the test label that were annotated so we just we just annotated 41 images okay so let's go ahead and train our model based on the labels that we've provided so i'm going to call this demo license 7 30. okay so we want our model to be deployed to the edge download your model for offline mobile usage continue uh let's see here i don't think the latency matters that much let me think about this for a sec yeah let's do higher accuracy i don't think these are perceptible and we're gonna just do one one budget hour all right and i mean it says it'll take several hours but it should just take you know one hour ideally all right so if we click data sets we can see that this is still loading and the status is it's running training model so we'll just wait for that to finish okay so this directory right here is our application that's gonna tie it all together um but currently this is on my mac computer we want this quote-unquote application into web applications there's html images and there's going to be the tensorflow model and some javascript and stuff like that we want this to run actually locally on the raspberry pi so i'm going to turn this into a zip file and i'm going to download it to the raspberry pi and then we're going to open it and run it on the raspberry pi so let's go ahead and do that real quick so i'm just going to open a finder here and i should be able to just navigate to um that directory so it's going to be under here license plate detection all right so again this is the application right so let's go ahead and compress it and then what i think i'll do is i'll just upload it to google cloud storage and then download it to the raspberry pi from google cloud storage right so i'm going to go over to it's probably an easier way to do this but i don't want to fiddle with that right now so um yeah we want one of these public directories and we're going to upload a file we want to upload the file that we just created this guy here all right let's take it a second there it is all right so we want the public url so i'm going to copy this and then all right so this terminal is actually in our raspberry pi right so in theory i can do w get on this zip file and i should be able to download it to the raspberry pi decompress it or extract it and then run it and wget by the way just downloads any public url all right so now we want to extract this file um it's going to extract with the same name let me rename it so to something easier uh let's just call it files oh actually am i overthinking this okay so we now have this directory here okay everything's there that looks good again though i don't like the directory is too long so let's get rid of actually let's get rid of files and then let's rename this to just um app okay cool all right so um technically the application is on the raspberry pi um let's try this all right you know how we went to so we still have a server that's serving up these files right and so we now have app technically we have app html and then index right so so we should be able to do this app html okay i think it i think it technically worked even though it didn't show anything here um yeah this is the application so this is good okay cool so so so we are so we're viewing the application that exists on the raspberry pi but we're just viewing it with our uh remote chrome instance here because it's easier to do that um but the question is now like how can we easily edit these files right and make changes and stuff so the way we're gonna do that is using vs code all right there's an app there's an extension called remote ssh i'm going to use that to connect to to pull up that dir that app directory that's actually on the raspberry pi hence remote okay we're going to do connect to host dude raspberry pi it's asking for the password okay it's saying we're connected so let's try this um we want to go to var dub dub right we're going to the location [Music] that we stored this right app yep okay so now we are connected like check this out okay so yeah i could i could put in here test right and then theory see so now we are developing you know from the mac computer we're developing um remotely on the raspberry pi which is exactly what we wanted exactly what we wanted okay so it looks like our model has successfully finished training so let's go take a look at it here all right let's take a look at the evaluation okay so recall precision this is a hard one to um try to evaluate the the efficacy because it's not just a simple categorization right we're actually um creating the bounding boxes uh and so like it's hard to determine determine what the exact right answer would be um because you can draw a bounding box that's like a little bit off and that's actually still okay so anyways let's not dwell on this too much let's go over to test and use what i'd like to do is i'd like to run a novel prediction and see um how the bounding box works see how it works so let's go ahead and do this we're gonna do deploy model and we're just what this is doing is this is just going to stand up the model is an api that we can hopefully send an image too and get a response from fairly quickly because i just want to see how accurate this model is okay and so now the model's deployed and what's nice about deploying it right here is we can upload an image and it's going to run the model against the image and it's going to take care of interfacing and labeling and all that stuff so we can basically just test the accuracy of our model very easily in the ui here and then i'll go ahead and remove the deployment but um let's actually go through that exercise so i need to download an image of a license plate that it hasn't seen before right so i'm going to do us car license plate i'm just going to grab something off of google here um i'd like to get it like on the car right um [Music] let's see let's get more granular let's do florida [Music] and again i want it on the car all right let's just let's just do this let's not make it more difficult than it needs to be all right open image a new tab and um all right let's just go ahead and save this image so south carolina and just throw on my desktop okay and let's just give this a shot so we're going to come back over to here and let's just run it against that so oh look at that not bad it's funny it got the uh blinker um but this this is great look at that um so i mean you know we could download we could train it on more hmm i'm thinking we should train it on more data um or see how it's more confident that this is a license plate than it is with this we could add a threshold and we could say the threshold must be greater than like 75 or something right um so there's different ways to tackle it i mean if you want to do this the right way we should probably train more than like whatever it was the 50 images that we labeled that's not 50 images it's incredible it can even make that work with 50 images um you know usually do thousands and stuff like that so um why don't we let's see here um let's try one more to get a better feel so let's no kids nice all right let's do license three give us a shot so it's pretty good it's pretty good um 96 percent here so i don't think we need to guild the lily on this one let's go ahead and use this model we don't want to keep our deployment up here because keeping an ai model deployed is a little pricey so i'm just going to go ahead and do a remove deployment and we're gonna download um the flat file that represents this model it's typically called a uh a dot pb file or a dot uh i think it's like a a graph file essentially so we're going to go ahead and do that all right and it wants us to drop it into um into cloud storage then we can download it from there so that's fine so let's go find our folder that we set up here here it is because this this folder is public we'll just drop it right in here it wants us to put it into a bucket in us1 central so let me just check real quick and see if i don't have one where are you cloud storage um am i using us1 central anywhere i am not okay that's kind of annoying so anyways it wants us to put it into us1 central where the where the ml vision model is so let's just go ahead and do that so [Music] i don't know um continue um nope us one central very good okay none of that should matter all right so now we got one in us1 central again we want to make it publicly available so we're gonna do all users permission is for cloud storage um cloud storage review access allow public access all right and now we should be able to make this work all right so it exported let's go take a look oh because i have a filter on there derp okay so there it is um okay so that is our model let's see what it actually consists of um all right so it's a json file okay we don't really need to uh concern ourselves with that much with all that let's go ahead and do download actually you know what we don't even we want to download it to the raspberry pi so all right so it looks like there's a couple different models um i'm gonna create a new directory right uh it's gonna be called crap um okay new directory and then we'll just do call it new model um perfect um and then what we can do is we can go into it so new model all right and then we can just grab these files these four files i don't have to make it more complicated than it needs to be um we're gonna use wget okay there's one of the files but we need the others right so we should we'll just change the name so now two of three three of three and then what were the other file names um dict.tx and model.json so we should be able to just do dict.txt and model.json okay so now we have everything uh model.json okay perfect and we have our new model here so now this is the information that um tensorflow.js needs to to run the inference so when i said that we have an application this is the application and what it does is it we we define an image here and i have a bunch of test images so the images of one of the license plates so this is the test image cars1.png so we put that into an html element these javascript files are just dependencies and we're doing the inference inference is when you run the machine learning model against a new piece of information and you log the output it's called inference we're running the inference using the javascript runtime tensorflow.js as it's called but in order to like depict the image we are using canvas canvas is the way you can manipulate images and stuff like that so it's perfect for that um and we're also loading up our model um now we're loading up the old model here so it's the app model mod.json so let's actually do uh the new model and so we're grabbing the image and then let's see here all right so let me run you through how the application works um okay so there's a very basic html page here and on the left side here you have the base image which is going to be the image that our raspberry pi camera snaps when we're presenting a license plate in front of it it's just going to continually keep taking pictures and it's going to stuff the image into here and then tensorflow.js runs client-side and this page is also set up to um use something called live.js so anytime the markup of this page changes like any time a new image comes in the entire page reloads and then tensorflow.js will evaluate this image find the license plate and then use canvas javascript canvas to crop out the license plate so that's that's the model that's the automl model that's the license plate localization that we created the second part is taking this and converting it to alphanumeric which is uh ocr and i began using tesseract js because it seemed like it would fit the bill for what i'm trying to do but what i found is it's not very accurate tesseract.js wants you to run filters and like contrast and do a bunch of pre-processing before it can become accurate and frankly i just don't want to do that so i also recruited google cloud vision ocr and i found that that is like a million times more accurate so you can see it's all running here so we took the base image we cropped the license and then tesseract js ran against this and you can see how it didn't quite get it right it thinks this little symbol is an o and then it thinks the m is a w it got the n but then it thinks the ones are l's and then the y the two so it's all it's just not quite right but you can see the um google cloud vision gets it perfect and so um so we use both of them just so we can like compare but basically the google cloud vision is infinitely more accurate and okay so that's how the front end of the application works now how do we take pictures and push them into the html here so we have a um that's where node.js comes in so we have a single node.js file called image capture that what i'll do is i would just run it from the command line and it's recursive so it just as long as you're running it it keeps taking image images so it'll snap an image and then when that image is ready and everything's been uh determined like it's run the models and stuff it'll snap another image and it just keeps doing that repeatedly and you could if you wanted to go crazy with this you could have it take like more frequent images and all that stuff but um just for the basics of this it just keeps taking images so we have a function here called take still and it leverages the raspberry pi command line utility called lib camera which is what we were using before and then it just writes the image locally with certain uh resolution parameters and then once that is done once that that function finishes we run another function to run the google cloud vision component and then we reference that here we send it the local image and we say hey um find the text essentially give us the text and then once we have the text we there's a little bit of pre-processing here like was anything detected no then don't do anything and then a little bit of formatting of the data but that's not no heavy lifting here just very basic so once we have the license plate from google cloud vision the node.js goes to the index file and it writes it into the html so it rewrites the html it goes into here and it puts it right here and so it rewrites the file using fs file sync and it replaces and and then and then because the um this file is listening for changes it will reload it writes the cloud vision results into the file and then the file reloads and because it's always writing the same image here this realtime.jpg the index file always just references the realtime.jpg right here so this is always going to be named realtime.jpg and it just gets overwritten each time and each time it gets overwritten the page reloads and then tesseract reloads and tensorflow.js reloads and it reprocesses when we run the node.js script it just keeps taking images and it keeps and then in turn the client-side application keeps running inference and you can just hold the camera in front of a license plate and it'll eventually run the inference on that license plate so that's how the script works you can see it's just this is the logging the output right here okay so i just want to outline what we got going on here so um my phone is creating a hotspot that my computer is connected to and the raspberry pi is connected to and then it's physically connected to this touch screen here so these are all in the same network this vs code um workspace is actually control it's connected over ssh to the um to the raspberry pi and those files that i'm editing are actually being edited right on board there so what i'm thinking is that we can we can run our program and i'm going to output the app to the monitor there so we can see in real time so check it out and we can also control the the screen using uh vnc here so so check it out we're gonna open up the app here and see you can see it's opening over there too and let's go ahead and restore all right so we got the app at the app all right i'm going to try to do this with one hand so we're going to start the script this is the app all right see working trying working again working again see and if you like this video then you're going to love my video covering how i mined monero for 24 hours on a raspberry pi check that out here and as always thanks for watching
Info
Channel: Data Slayer
Views: 76,506
Rating: undefined out of 5
Keywords: raspberry pi, raspberry pi 3 b+, raspberry pi 3, raspberry pi zero w, internet of things, raspberry pi tutorial, arm cpu, install raspbian on micro sd card, install raspbian, camera module, ip camera, setup camera raspberrypi, setup camera security system, setup camera hikvision for computer, raspivid, raspi-config, raspberry pi camera, alpr, license plate detection, opencv python, computer vision, openalpr, openalpr raspberry pi, vehicle recognition, nvidia, opencv (software)
Id: qRFR0_FvkSs
Channel Id: undefined
Length: 52min 13sec (3133 seconds)
Published: Thu Aug 11 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.