AI_DL_Assignment / 5. OpenCV Tutorial - Learn Classic Computer Vision & Face Detection (OPTIONAL) /24. Mini Project 1 - Live Sketch App - Turn your Webcam Feed Into A Pencil Drawing.srt
| 1 | |
| 00:00:00,660 --> 00:00:01,060 | |
| High. | |
| 2 | |
| 00:00:01,110 --> 00:00:03,450 | |
| OK so you've made it to a first mini project. | |
| 3 | |
| 00:00:03,570 --> 00:00:07,060 | |
| This is using a webcam to create a Live sketch of yourself. | |
| 4 | |
| 00:00:07,110 --> 00:00:10,190 | |
| So let's quickly run this app and see what it does. | |
| 5 | |
| 00:00:10,200 --> 00:00:12,860 | |
| So this is me here talking in my bedroom here. | |
| 6 | |
| 00:00:13,570 --> 00:00:20,400 | |
| This is me weaving around and this is me here with my cell phone being charged at the moments you can | |
| 7 | |
| 00:00:20,400 --> 00:00:21,290 | |
| actually see the corner. | |
| 8 | |
| 00:00:21,300 --> 00:00:22,850 | |
| It's quite cool. | |
| 9 | |
| 00:00:22,910 --> 00:00:24,200 | |
| This is a sketch. | |
| 10 | |
| 00:00:24,840 --> 00:00:26,490 | |
| It works pretty well generally. | |
| 11 | |
| 00:00:26,520 --> 00:00:31,550 | |
| I mean you can play with the problem is in a app to get it better coding or better to do with this. | |
| 12 | |
| 00:00:31,560 --> 00:00:34,260 | |
| So let's see exactly how this is implemented. | |
| 13 | |
| 00:00:34,920 --> 00:00:35,280 | |
| OK. | |
| 14 | |
| 00:00:35,310 --> 00:00:36,390 | |
| So here's a code. | |
| 15 | |
| 00:00:36,480 --> 00:00:37,970 | |
| Well let's get you up. | |
| 16 | |
| 00:00:38,040 --> 00:00:43,140 | |
| It's fairly basic although we do introduce some new concepts here and the first thing we introduce is | |
| 17 | |
| 00:00:43,140 --> 00:00:48,220 | |
| creating a function that will open C-v all image processing function called sketchier. | |
| 18 | |
| 00:00:48,660 --> 00:00:54,720 | |
| If you're unfamiliar with functions imagine a function being basically a group of commands here that | |
| 19 | |
| 00:00:54,720 --> 00:00:58,410 | |
| we call we and we run the sketch commander over here. | |
| 20 | |
| 00:00:58,440 --> 00:01:03,270 | |
| So a sketch actually does a bunch of processes here and returns an image for us. | |
| 21 | |
| 00:01:03,270 --> 00:01:07,660 | |
| So it actually combines multiple layers of image processing and this Rutins a final output. | |
| 22 | |
| 00:01:07,660 --> 00:01:08,570 | |
| So it's pretty cool. | |
| 23 | |
| 00:01:11,210 --> 00:01:15,680 | |
| The second thing I want to introduce you to is actually using the webcam now using a webcam and you | |
| 24 | |
| 00:01:15,680 --> 00:01:17,590 | |
| can see these is actually quite simple. | |
| 25 | |
| 00:01:17,840 --> 00:01:24,230 | |
| What we do here we actually run this initialising video capture function here and it basically creates | |
| 26 | |
| 00:01:24,230 --> 00:01:30,800 | |
| an object called a cap cap here can be read now which is a cap that read here and what it does it pulls | |
| 27 | |
| 00:01:30,800 --> 00:01:32,710 | |
| an image from the webcam. | |
| 28 | |
| 00:01:32,720 --> 00:01:38,210 | |
| However if you run it out of a loop it just pulls the image at a time and nothing else. | |
| 29 | |
| 00:01:38,210 --> 00:01:43,880 | |
| So what you want to do is have cap dot reader running in a loop and this loop runs continuously pulling | |
| 30 | |
| 00:01:43,880 --> 00:01:45,480 | |
| images from the webcam. | |
| 31 | |
| 00:01:45,500 --> 00:01:52,760 | |
| It should be pulling a film right off your webcam which is usually Tuti freedoms a second sometimes | |
| 32 | |
| 00:01:52,760 --> 00:01:54,400 | |
| it's more than VMS's it's less. | |
| 33 | |
| 00:01:54,420 --> 00:02:02,510 | |
| But generally it's either between 24 and 60 and kept it read it was written Regt read is basically just | |
| 34 | |
| 00:02:02,510 --> 00:02:04,370 | |
| a boolean that defines true or false. | |
| 35 | |
| 00:02:04,370 --> 00:02:06,440 | |
| What it does was run successfully. | |
| 36 | |
| 00:02:06,440 --> 00:02:12,530 | |
| However the real meat of this captain read function is frame Freemans the actual image captured from | |
| 37 | |
| 00:02:12,530 --> 00:02:20,450 | |
| the webcam and Freemans what we pass to a sketch function here and lastly just two lines of code here | |
| 38 | |
| 00:02:21,020 --> 00:02:27,500 | |
| basically tells us that it would be loop only breaks when we pressed Enter key so CB2 that we had previously | |
| 39 | |
| 00:02:27,500 --> 00:02:33,950 | |
| was a zero before took any key in I'm just introducing No we can actually define we'll wait for special | |
| 40 | |
| 00:02:33,950 --> 00:02:35,040 | |
| commands. | |
| 41 | |
| 00:02:35,060 --> 00:02:40,560 | |
| So in this case when you press the Enter key a routine key it breaks this loop. | |
| 42 | |
| 00:02:40,610 --> 00:02:45,710 | |
| One important thing to remember when using a webcam is that we need to do captive release Ottaway is | |
| 43 | |
| 00:02:45,720 --> 00:02:51,740 | |
| again what happens in open Sivy is that it hangs and actually locks up your terminal and you have to | |
| 44 | |
| 00:02:51,740 --> 00:02:53,990 | |
| go to Kunaal restart Suranne it again. | |
| 45 | |
| 00:02:55,760 --> 00:02:56,010 | |
| OK. | |
| 46 | |
| 00:02:56,020 --> 00:02:59,240 | |
| So let's take a look at a function here we'd find a sketch. | |
| 47 | |
| 00:02:59,320 --> 00:03:04,330 | |
| This is actually doing to both have to work and where we keep all the image processing open CV stuff | |
| 48 | |
| 00:03:04,330 --> 00:03:05,220 | |
| here. | |
| 49 | |
| 00:03:05,230 --> 00:03:06,910 | |
| And it's actually a very simple function. | |
| 50 | |
| 00:03:06,910 --> 00:03:08,150 | |
| So let's take a look here. | |
| 51 | |
| 00:03:08,440 --> 00:03:12,560 | |
| So what it does we tear the frame from a webcam here. | |
| 52 | |
| 00:03:12,640 --> 00:03:19,100 | |
| It's a sketch we didn't convert it into grayscale image and then we apply a glossy and blue to that | |
| 53 | |
| 00:03:19,150 --> 00:03:20,260 | |
| image here. | |
| 54 | |
| 00:03:20,260 --> 00:03:27,250 | |
| The gospel is basically to just smooth and clean up any noise in the image because webcams aren't very | |
| 55 | |
| 00:03:27,700 --> 00:03:29,500 | |
| high quality in most cases. | |
| 56 | |
| 00:03:29,500 --> 00:03:31,430 | |
| So they do produce a lot of noise. | |
| 57 | |
| 00:03:31,510 --> 00:03:37,920 | |
| So once that image is blurred we passed that to a county as your member canny edge direction algorithm | |
| 58 | |
| 00:03:38,720 --> 00:03:40,690 | |
| and is it a Tressel's we set here. | |
| 59 | |
| 00:03:40,890 --> 00:03:41,760 | |
| These truffles. | |
| 60 | |
| 00:03:41,850 --> 00:03:45,320 | |
| Please feel free to edit and play with them as you as you see fit. | |
| 61 | |
| 00:03:45,450 --> 00:03:49,150 | |
| They can they can give you different results in different lighting conditions. | |
| 62 | |
| 00:03:49,230 --> 00:03:52,560 | |
| These are what I found optimal to my TS and my lighting conditions. | |
| 63 | |
| 00:03:52,560 --> 00:03:55,380 | |
| But you may find something different. | |
| 64 | |
| 00:03:55,380 --> 00:04:01,290 | |
| And once we have county you remember County was a black background with white edges. | |
| 65 | |
| 00:04:01,590 --> 00:04:05,500 | |
| However I was trying to illustrate more like a pencil and people type thing. | |
| 66 | |
| 00:04:05,780 --> 00:04:12,230 | |
| So which is why I use fresh binary invis to invert and Threshold the county edges. | |
| 67 | |
| 00:04:12,360 --> 00:04:16,240 | |
| Now we could have to use some other inverse functions here. | |
| 68 | |
| 00:04:16,260 --> 00:04:20,970 | |
| And you will remember we could have used a bitwise NOT doing it. | |
| 69 | |
| 00:04:20,970 --> 00:04:25,940 | |
| However the reason I use the Trishul function here is that we can actually play with this here. | |
| 70 | |
| 00:04:25,980 --> 00:04:27,760 | |
| This was a Trishul parameter. | |
| 71 | |
| 00:04:28,080 --> 00:04:30,220 | |
| So it gives you some more flexibility here. | |
| 72 | |
| 00:04:30,600 --> 00:04:37,190 | |
| And what this does here this creates a mask and then this function returns mass back to back here. | |
| 73 | |
| 00:04:37,500 --> 00:04:44,230 | |
| So it does actually block of code here actually is a variable itself that's true to and from and from | |
| 74 | |
| 00:04:44,230 --> 00:04:48,790 | |
| the sketch function which is how it's we can show it to him Show function. | |
| 75 | |
| 00:04:49,590 --> 00:04:55,980 | |
| So that's basically our lives sketching up something very simple and so you can actually play with it | |
| 76 | |
| 00:04:55,980 --> 00:04:56,760 | |
| on your own. | |
| 77 | |
| 00:04:56,970 --> 00:05:02,050 | |
| Feel free to actually add more effects as you see fit. | |
| 78 | |
| 00:05:02,060 --> 00:05:02,510 | |
| Thanks. | |