Tampa wins 21-15 after sticking themselves to a 21-0 lead. Atlanta storms back, it comes up just short. Marcus, talk about that fourth quarter comeback because you guys appeared to be dead and all of a sudden you're back to team. It says a lot about our team. We've got a great group of young players, great group of guys, really. And, you know, it's kind of been the tale of our season. We've found ways to make it close and have a chance to win, and that's what it's about. You know, football is four quarters. It's an imperfect game. It's not going to always be pretty. The Falcons are tough. When you listen to the 49ers' interviews all week, all they said was they're physical. I love that. They're a physical team. We're a physical team, so it should be a really good game in Atlanta on Sunday. Falcons are wearing the throwback jerseys, the red helmets, black jerseys with the white letters and numerals.   Right there, right there. Four quarters of our football. I'm doing what you got to do.  Falcons are three. One, two, three. Falcons! San Francisco is here. They've won two straight, three of their last four. 500 under Kyle Shanahan on the road. So here is Robbie Gold to kick it away. A couple steps in toward Avery Williams, and he will bring it out. Three yards deep, 15, 20. Williams dances 25 in a shoot-top tackle. Third down, Mariota takes a shotgun snap. Going to whip it across the middle. It's caught in strides. The key is 40, 35, 30, and taken down at the 29-yard line. Through the formation goes Damir Burr. Here's Mariota going to make the long throw. There's Pitts to catch. So here's Mariota. He will keep it right side, first down Atlanta as he cracks the 15. Caleb Huntley just crashing. Get center of the line. Play fake Marcus looking right. Loops caught. Touchdown. Into the end zone is Mike. It's a heck of a catch-wisp. Ball perfectly thrown, and Atlanta's on the board. Let's go, Drew!  Let's go, baby, let's go. There's a throw. Garoppolo first down. Debo Samuel slipped out of the first one, and then slides out of bounds. Garoppolo under center. They're going to hand the ball to Wilson. He cracks the line and pushes through. The ball popped out. Tyrell's got it, AJ. Did he step out of bounds or score? They recovered in the end zone. What's going to be the call? It's a touchdown. You've got to be kidding me. Two minutes gone, second period. Garoppolo. Play fake. Now in trouble, going to shovel. Here is Kittle, and he will pick up another first down. Debo Samuel in the backfield with Garoppolo. Play fake. Garoppolo throws on the perimeter. The Uke at the five. Touchdown for the 49ers. A grand NIU. Portland for Atlanta to get back in a rhythm now. Been sitting over on the bench for a while because of the defensive take away touchdown. Been waiting for their opportunity to get the ball back. First down give. Here goes Huntley trying to find the cutback. And get a yard, maybe two. Trying to find an alley in the run game. And, boy, the 49ers swaddle it up at the 28. We'll be third down at seven. Four man rushed by San Francisco. Ferguson trouble. Tries to escape, man. Cannot get beyond the 27 or 28 yard line. And Atlanta will have to punt on a three and out scenario. It's their three for five on third down. Pinion drives it toward Ray Ray McLeod, hanging punt, running catch. McLeod almost taking off his pins. And now he's got Pinion to beat. Cuts to the outside. And he'll be taken down by Anderson in Atlanta territory. San Francisco's got something built here with 9-16 to go. Garoppolo wants to throw. This is Ayuk, again near side. And another touchdown for Brandon Ayuk in San Francisco. Garoppolo goes 14 yards to Brandon Ayuk. In the span of about seven minutes, San Francisco's tied the ball game at 14-off. First in 10, ball at the 41 of Atlanta. Mario are going to be sacked. 49ers bringing pressure. Quick throw. Here's the snap. Mario to pressure coming. Marcus up in the pocket, now going to run with it. 45, 51st down. My goodness. Ufonga, the safety, trying to challenge Mario. He ran right through. Let's go! Out of here. Marcus over there, hash takes the snap. Looks going to throw for London. Makes the catch. Here's a toss. This is Huntley running to the wide side. Follows McGarry's block. Inside the 10, the Duke driving toward the two. First in goal in Atlanta. Snap to Mario. Marcus will keep it right side. Turn to corner. Touchdown in Atlanta. Marcus Mario. Beautifully executed. Pete San Francisco to the corner. Atlanta's got the lead. 21-14, Atlanta in front. 57 seconds in one timeout for Kyle Shanahan. San Francisco may only have one shot. Here's Garoppolo. Looking, going to take the shot for Samuel. And it's intercepted by Isaiah Oliver. And Oliver will work his way back across the 20. 25, half time has expired. Falcons 21, 49ers 14.  Right. Throw looking for IU. Couldn't hang on to it. Good coverage, AJ Terrell. Use check in the backfield. Garoppolo again. Now wants to run. Dances, flips it, and the catch is made. Use check and hit right away with Sean Evans. Fourth down. Avery works his way to the far side. 15, tries to get the corner turned. 20, 25 Williams and tackled out of bounds. Keep running. For Marriota, they're going to hand out Jere. He will run for it and come close to getting the first down. Fred Warner going to take him down just shy. It'll be third and one. Marriota going to keep it. Go to the left side. 30, Marcus 25. Stiff arm at the 20, taken down inside the 15 at the 14. Another terrific run of 20 yards for Marcus Marriota. Marriota looks. Now going to loop. And Kyle Pence caught it. Touchdown. On U.S. soil, number eight has a touchdown. Lana leads 28 to 14. Falcons have outscored opponents 48 to 27 in the fourth quarter this year. Here is Garoppolo. He wants to throw it. Broken up by Darren Hall. Terrific play by Hall, battling Brandon Ayuk. Second down at 10. Play fake Garoppolo wants to line up another one middle of the field. That got broken up and intercepted. Jalen Hawkins off the deflection. There's a flag thrown on the play. There's no foul. For perhaps interference on the play. The result of the play is an interception by the defense. First down and left. Falcons, two touchdown lead here in the fourth. Snap to Marriota. Quick throw to OZ. Makes the grab and reaches out for the first down. Just do your job. One play at a time. Bradley going to hang it high. Cadero Hodge going to go down to the one and play it on a bounce. Should play fake. They're going to sling it on the perimeter. Here's Kittle with Evans. Boy, George Kittle just runs right through two Falcons. Here's Garoppolo dropping back. Pressure coming. Jimmy forces it. Caught. Timo Samuel keeps his feet. Drop the hammer on Grant as he crosses the 45 to the 46 and a first down. Garoppolo drops the throw in the middle of the field. That is Kittle and he will be inside the 30 to the 27 as we come up on four minutes. Ends up being right at a 20 yard throw in the first down. Boy, this has been a true battle of attrition for both teams. Ball at the 18. They need a yard for the first down. Garoppolo going to pitch into Colvin on the perimeter and Timon will get flipped over and I don't think he got it. Jimmy wants to throw on fourth down and it is broken up incomplete. No flags. 16 plays and off the Atlanta 18 yard line. San Francisco comes away empty. Boy, this has been a... Dave, I got to tell you this is a heck of a performance by Arthur Smith's club. Arthur Smith's team commanding victory. They forced three turnovers and win 28 to 14 today. Whether you win or lose, you can't go back tomorrow and say, hey, what do we got to get fixed? Who's possibly going to be up next week? And as you put a plan in him, we're not going to be satisfied. This team, we're going to continue to grow and improve and it's just a fun group of coach. Look across the league, a lot of guys in my situation don't really get a second chance and for them to call me in and give me this opportunity to be a part of a young team means the world to me. As long as we can continue just to stack these days, focus on the present, don't get too far ahead, don't look in the past. This team has got a lot of potential and I'm excited to be a part of it.


The National Economic Council has set up a committee to review recommendations by the National Salaries and Wages Commission to cushion the impact of the removal of the petrol subsidy. At its first meeting presided over by Vice President Kashim Shatema, the next set, the committee should review the 702 billion area recommended as the cost of leaving allowance to civil servants to ease the burden of the subsidy removal. The committee which comprises governors from each geopolitical zone is chaired by Nassir Idris, governor of Kaby. Burchasted governor Bala Mohamed, who briefed state house correspondence after the meeting, said the commission also recommended 23 billion or 25 billion area monthly offer to cushion the effect on workers. On the issue of National Salaries, Income and Wages Commission, NEC had received recommendations on the various ways and means that this in the country can use whatever increases that we have in the revenue to mitigate the impact that is going to make on the lives of our workers and all those people involved. And so they recommended and they gave us a scenario recommending that there should be an adjustment, consequential adjustment estimated at 702 billion to 919 million at Naira as part of the allowances that should be given as petroleum allowance to all workers and as well as 23 out of 45 billion monthly offer to cushion the effect on workers.


So, welcome everyone. My name is Marco and I'm going to present this new library that we started recently. I'm a PhD student in robotics at the University of San Martín, Spain. I work here at ASTAR. I have a research scholarship to finish my PhD there and I'm doing some little bit of language research. But my main topic is computer vision. I do the computer vision for robotics at the robot lab. I wanted to ask first, does any of you have worked with computer vision related stuff? Can I get a hands up? Yeah, anyone, such as old TV, stuff like that, point cloud library, something. Okay, cool. So, because there's a lot of stuff going on here, a lot of background that I'll talk. So, I'll tell you about the story about how it got started. It's pretty new, as I said, it's very in an early stage. But I wanted to talk about it to get an idea of what you guys might think about it or how does it fit people's needs. So, I come from this robotics lab, as I said, in Spain. One very cool thing, and not that cool at the same time, is that we do the whole thing on the robots, like we do everything. For example, with this space, we will be cutting the metal to make the face. That's very cool when you talk about it, but when you have to do it, and you're the computer vision guy, you're like, why the hell am I cutting metal?  So, in the end, for me that I'm doing a PhD, I end up having not that many publications, and I don't feed that well in the system. But anyway, it's cool, you get to touch a little bit of everything. Luckily, I'm not that into the hardware part because we got some people that deal with that, but still, you get to learn a lot. So, my role on the lab was doing the computer vision part, as I said. So, we have our own framework, as I said, we do everything. So, we don't use any other framework like most of the people do. They use cross or any other ones, if we will, or on one from scratch. So, we have to deal with our own tools for the robots. And my main task there is to provide the team with the tools to deal with the vision part of the robots. So, at some point, this is what Robocon, the framework, looks like, like what we have there. For those that don't know how to program robots, it's mainly like component-oriented programming. So, it basically is a component that talks to each other through interfaces, and each component will do a certain task. So, let's say I would have a component to grab images from the camera, and then I have another component that will be processing those images and maybe detecting tables, something like that, through an algorithm like Rensack or something like that. So, that's how it works. We have components, we have the interfaces to talk to the components, and then we have some files, some other stuff, documentation, c-makes, and here we have the classes and libraries. So, we build our own classes and libraries to make it easier to develop components, right? And there was like a lot of libraries by the time, and there was one missing, like a computer vision library for a framework, right? Like, specific for a framework. So, there was this summer that was my computer, and I was like, why don't we make a computer vision library specific for robots? I mean, there's all this out there, but I found it that every time I was coding the same stuff to deal with tables and subjects, and it would take me a fairly amount of time, and I was mainly using the same thresholds and hard-core numbers. So, I was like, I would maybe want a bit of a layer up, so I don't have to deal with this. In the end, I'm mostly like trying to train it up with detecting cups or bottles or something. Same stuff, it's just like, so I can make my robot move, right? So, with this idea, a little bit of half, well, actually a really good help from the program from Google Summer of Code, and this student creep up. It's a really good student that I got for this project. We managed to start a library for this framework, right? So, yeah, the thing is, why am I doing this? Like, why am I doing this reporting library where does it fit? There's a computer vision library already, there's OpenCV, there's ECO, those are the main ones, they're really good, actually. But I want it to be specific for the tasks we do in the robots. So, we want it to be very easy to use, just take a few lines, and then you can start detecting stuff, like just detect something and then go ahead. We found out it was good for beginners that because it was very easy to try out stuff, just a few lines, and then you can just go ahead and try out stuff. And it's good for computer vision researchers because it allows you to use the same different approaches to one goal and try them out very, very fast. So, here's a bit of where it stands. It's a library that goes on top of, as we say, on researchers. It's on the shoulder of Janice, right? We have OpenCV, a local library underneath. We try the main libraries that we use. But the thing is that you don't have to care about having two libraries, two different stuff. So, you can just do it through one common thing and then just have some presets and just go ahead and detect stuff very fast. So, that was the whole point of it. So, if anyone wants to just jump on and try to get that started on it, it's fairly easy like anyone.  So, we try to use the latest versions of everything. So, you probably have to install OpenCV, latest version, PCL 1.8, or trans version. You don't actually need CUDA extensions, but they're highly recommended. You might need the country package from OpenCV. Yeah, so that's mainly getting all that compiled takes especially a lot of time. And then you can start running the, just clone it and make it and install. It's fairly straightforward as any of the libraries. I will talk a bit about the basic structures of the library. So, you can get them in the app. Well, actually this talk was going to be just 30 minutes, but the speaker before dropped out, so I got another extra 30 minutes. So, I'll try to do some code and show you how this works later. I hope it's not too boring and it's kind of cool. So yeah, I'll explain first a bit of the basic structures that we have. So, we divided, mainly we divided the option of detection with two main parts. We have a training and a detection part. So, we have trainers. So, you can train your model with data and then you use that on the detection part. So, you have different trainers and different detections for either for 2D or 3D data or stuff like that. So, here you can see the detectors.  A trainer will implement the train effect. And then, they all inherit from the trainer. It's a virtual class and yeah, you can initiate the trainers and give them the data you want to use for the training and go ahead and train it. Then, you will use a detector. There's a bunch of detectors, not many yet, because this is really new stuff. But then, once you train with a proper trainer, you can go ahead and use that detector. Over a scene, that's a data structure that represents a scene that you want to detect. There's two kinds of detections. There's one that you have the regular one that runs over an object and the one that it will run over as a whole scene. So, it's like kind of like pre-segmented or after or not cemented, right? Yeah, so those are the detectors. And then, what you get out of that detector will give you a detection, right? So, that's what you get out of that act of detecting something. You get what is called a detection. And then, this is a structure, again, that will contain image, that will contain the pose, label. It will contain everything that is, even the confidence. You can get the confidence for, not for all the other detection algorithms, but some of them you get a level of confidence of the detection that just happens, right? So, here's a few of the detectors that we have already implemented. We have 2D detectors, hall, cascade, face recognizer, 2D for local features, local features like SIFT, SERV, those kind of features. And then, we have 3D detectors for global features. I'll show you the demo later on this. Also, another basic structure that we have is the frame generator. So, you can input data onto the detectors and trainers, but you might just want to generate the data from an input source. So, an input source can be either image from a camera, can be point clouds from our GBD sensors, like the Kinect, or we can use image files or point cloud data from files. So, I don't know if it's here or it will be later. Yeah, I'll show you how this is implemented, but this is basically to grab the image or point cloud from either a device or from data on the art drive. So, how does it look on code? This is the frame generator. This is an example of a frame generator that will generate frames from the point cloud, a point cloud from the Kinect or any other GBD device. Basically, we are using a frame, we declare a frame, then we declare the generator and then we get the frame from the generator. Pretty straightforward. This is the type of generators that we can use. So, it's also plate based, so once you create a frame generator, you have to set up the kind of scene that you want to take, either image or point cloud, and the input that you want to take, either files or devices, right? So, with those two things, you can start grabbing stuff to process. Then you have the trainer. How do you train? You declare a trainer, you set up, if you need them like this, this is like the whole, not all the trainers need everything, but you set up positive samples, you set up negative samples. You set the numbers of features, and then you have this flag that you can set up, and then, again, you go ahead and train. That will generate the training that will be used on the detection, and then once you create the train, the detection, you declare your detector of the kind of detection that you want to use. Just use the train app, you give them the train data location, and go ahead and detect. To obtain the detection, you create a detection, and once you do the detection, you can just get it on the detection, and then you can access. This is accessing the detection, so you get the information, and what we're doing here is getting the openCV image from that detection, and then you can show it. Sorry, is the example code, is it also findable in GitHub? These samples are part of documentation on opendetection.com.  There's actually examples of everything inside the library, so you can just go through the code. I'll go through the few examples later, and there are actually examples from the library, so you can find them there. Actually, now, I'm going to show you how to build a friend generator. It's going to be fairly easy, and I hope it's not too boring for you. I want to see this. It's all switched now here, and I'm going to build an example. It's going to be a friend generator. Get this. So, can you see it from the back? It's good. Let's start. One thing we don't have yet on the library are visualizers. For visualizing stuff, what we need to use is either ECL visualizers for the point cloud, or OpenCV for the images. This year, we got this project, luckily, to Google Summer of Code, and hopefully, one of the tasks will be building our own visualization tool. So, we wouldn't have to do this anymore. This is going to be our visualizer. Then, I'm going to create a frame that is going to be off point A. That is going to be a frame. If I'm going to save this, I will get some syntax. I'm going to make it as an example of the library. So, it's going to be maybe here. For Stasia, frame... We have the frame here. Now, I'm going to create the frame generator that is going to be... It's going to grab this type of scene and just go ahead, past here. All this scene. And, it's going to get it from the device. I'm going to use a Kinect device for this. You remember, as I said, when you create a frame generator, you need the type of data and the source. The source now is going to be device. This is just a generator type device. Now, I'm going to just check frame generator is valid. So, while it's working, I'm going to go ahead and grab a frame. And, I'm just going to show this frame. So, with the visualizer that we created from PCL, I'm just going to go ahead and use it. I'm going to remove the last point cloud, make sure it's clean, and I'm going to add anyone type point s y r g p a. And, it's going to be the frame that we got. And, I'm going to get the point cloud out of the frame. Because these frames have some information, not only the point cloud. We're going to have to get the point cloud out of it to show it. Hopefully, when we get our own visualizers, we don't have to do that. Probably, the visualizer will take care of everything. So, it's easier for everybody. Then, we're going to do the skin. We can move around and update. Then, I'm going to delete the frame. So, that's basically it. Maybe it's too big, but I hope you can see it. That's the main thing when getting in the frame and everything. I'm going to add it now to the examples. So, I can... Wait, okay. On this scene, I'm going to add it to the examples. Probably, there's actually a frame. Yeah, there's one here. So, I'm just going to copy it and add it. I'm going to add an example that it's called... Oh, we missed it. At least it worked. Hopefully, it might compile and check. No, it didn't. Yeah, I forgot to include it. I have it somewhere. Right. It's a frame generator from the library. Let's see how it goes now. So, for those of you that don't know what this is, this is just a Kinect device, same as the one on the Xbox. It will give you the 3D and the color. So, it's got a camera on it. It's got a projector. And it's got the receiver for that projector. The projector will project a point cloud that has a certain pattern. And then the receiver will receive that pattern. And because of the deformation in the space of that pattern, it will calculate the distance to those points. And, therefore, it will get the 3D and then match it with the color. So, hopefully, we're able with the tool that we just created, should be able to... I suppose something, yeah, right? So, that should be... If it, hopefully, is crossed, it works. And, yeah, that's it. I don't know if you can see it properly. It's down side, because it's always down side. That's how... It's good in it. But this is the... I don't know if it's... Yeah, this is you guys. So, this is the point cloud that we're getting. So, this is how we grab the information here. That's how the grabbers work. It's fairly easy to change it to the camera. We would only have to... I don't know how much time we have. I'll try to make it quick. To grab the camera... I think we'll just go to the next example, because the next example will use the camera. Anyway, I'm just going to show you how to grab from the camera. So, the next example is...  That's actually a fairly easy, very common application. But, it's very cool to see how easy it is with the new... This new library. Even though you might not have too much options yet to tune it. So, I'm going to go ahead and add the plugs here. Save it as easy as that. I need the training... I need the training for the cascade detector. So, I'm just going to grab it from the input. The first part is just the training location. So, I'm going to build the detector first. We have the training already. One thing very cool that we do is that we provide the training data for these examples. So, we can just go ahead and start using them. This is a 2D detector. So, it's under the namespace GQD. And G also means global because it's using global features. This is going to be a cascade detector. And I'm going to just name it detector. I'm going to set the detector, the location of the training data. Go ahead and start the detection. That's it. We're detecting... Up to now, we're detecting faces already. Just give the detector the data. The same way that we did with the frame generator. I'm going to generate frames from the camera and pass them to the detector. And go ahead and detect. It will start detecting faces as they get the frames. So, let's get the scenes from the generator. This time, it's not going to be a point cloud, but it's going to be the same image. Which is the thing that we... The images that we get from the camera. So, we're going to go ahead and have the same input. It's going to be generator type. It's going to be device. Because we're going to use the camera. It's going to be a frame generator. And we're going to use the first camera device. The first device that it's going to live after the camera. Because we don't have any other. And as we said, we don't have the visualization part yet. So, we're going to create one using OpenCV. This is OpenCV. Here. I'm going to call it color lake. I'm going to go ahead and do the same way as I did. The frame generator. While it's valid.  That you're always doing OpenCV. I actually don't know why. But if I don't add this, it doesn't work properly. And they do always. So, I just add it. I'll be happy. Someone has an explanation for this. Okay. So, while the generator is valid. We're going to get a scene. Then we're going to pass it to the detector. The scene image. Okay. The scene image. Yeah, thank you. Scene image. Call it scene. So, we're going to go ahead, frame generator. Get next frame. Get next frame. Now, we're going to pass that frame to the detector. The detector is the detector. We're detecting over the whole image. So, it's going to take only the function that we want to use. We're going to pass the scene there.  Detections to D. So, we get detection. So, now, if size of the detection is more than 1, than 0, we're going to show on the image, we're going to show what we detected. Right? The name of the window. Detections. Getting the information from the detection. If not, we're going to go ahead and show the image from the scene. So, there's no detection to show. We just don't show it. Just the regular image coming out of the frame generator. It's going to be scene. And, we're going to get a CV image for this visualizer. Again, we're going to delete the scene, because we don't want it anymore. We can drag it. And, that's it. The full line should contain the image function. Is it? It may. Oh. Who you mean? Here? Yeah. Yeah. That's misspelled, right? I think that should be it. We're going to go ahead and add it to the examples again. Copy this one. The name is K. This depends on the ODE common library and ODE global image detector. So, that should be enough. I'm not run. So, this is all we need to do. Frame detection. Detector. We show it, we show it. Because we had the training data already. So, let's see if that compiles. And, hopefully, that should be working. Wait. Wait. Okay. So, let me just do the long space. Be that way. So, this is the code. And, we're going to check if that works. So, my example should be under object detector. That's K. As we said before, I'm going to pass in the training data that I downloaded from the repository on the website. And, this is training data. And, it will take care of grabbing that and passing it to the detector so it should work. Wait. So, it didn't fail. Oh, right. That's something wrong with the camera grabbing probably. There should be some typo somewhere. So, this is the detector working. Just detecting my face with those lines. So, the basic thing, the thing is that in robotics, that happens a lot of times. Like, we need these kind of applications very often. So, what we do is, we have to code everything from, not everything from scratch, because these libraries that are there are very nice. But, still, it takes a lot of time to develop. I'll actually show you. So, this is the cascade that we just made. And, if I actually purposely downloaded somewhere, if I can find, I think I did. I did download the version from OpenCV. This is really on the website. I just want to compare how it looks. We have internet, right? With this thing. Is it on? Yes. The details are on the paper. Oh, right. The speaker details are on the top. Okay. So, I'll just go ahead and try it. Try it, I suppose, please. So, the funny thing is that this was actually made by another student that I had on the Google Summer of Code. But, if you have a look at the code, the amount of code that you need for a classifier to work is much more. So, you need much more lines than we do here. So, our art is here, right? It is like 20 lines, and it's like maybe 200 here. So, it's a bit more messy, and it takes a bit more of a time to do that. So, yeah, I'm going to go ahead now and start with the final demo. I don't know if I have time to write it all. Yeah, I don't think I would. So, I'll just go through the code a bit and show you how it works. Basically, what we're going to do here is we're going to do a 3D detection. I'm sure you guys can't see this properly. Probably at the back, right? So, basically, again, we get a trainer. We get a trainer, a different trainer. This time, we get an input data directory and we start training. Then we have a detector. We create the detector here. We give them the input location, the train data location, and we initiate the detector. We grab the frame, fairly easy, this time from the Kinect, as we did at the beginning. Again, same thing, frame generator, if it's valid, we grab the frame. We clean up the visualizer, visualizer, and we have the point cloud. We get the detections that are going on the frame. For this, we pass the frame to the detector. This is like a global feature detection. So, it will try to detect every object on the scene based on some CAD models that we train. What we do is that we go through every detection. There can be multiple detections at the same time. So, we will go through every detection there and just go... This is called under, this is PCL, as I said. We don't have visualization here. We will go through every detection. We give the detection color and give them a name, which is... Here, we grab the position, and the name is here. The name of the detection, position, and these are some visualization stuff that is not very important. The name of the cluster, and this is just some addictic detection, and it will show up fairly easy. Basically, the idea is that you can already detect stuff with the same way we did before. Same structure, you don't have to learn pretty much anything new. For us, if you're working, not for me, because I'm mainly focused on computer vision, but my colleagues can just use the same stuff and go ahead and run it on the robot. So, it's very easy for them to detect a bunch of stuff. So, I'm just going to go ahead and try to run this version that I have already compiled. I'm going to try to put this somewhere here. This is like a robot. That right thing should be a robot. I'm going to check how it looks. For that, I can actually use the visualizer that we created before. Examples, detection, which is easier, frame generator. I'm going to just check how it looks. What this does is I'm going to get that image here. I'm going to look for the domino plane. That's what this detector is doing, which is going to be probably this one. I'm going to put some stuff there. It's not going to be correct because I'm using CAD models as training data. I'll show you how it looks very fast. So, it's getting the training data. It's a great training because I tried it before. It should show up some cool CAD things. But I don't actually think I have time to show that. FunCAD should be somewhere. I don't know what it is now. Sometimes it gets lost. Yeah, there it is. So, the other way, as before, we can just turn it up. It's getting a bit confused, as you can see with the labels. It's saying all them, energy drink, because those are the models that I have. I don't have the model of this thing. But we can keep on adding stuff and then probably, I don't know if it will solve. Also, this is something different, is it? No, it depends. If it matches the model or not, if we have a cup, it will detect a cup or stuff like that. So, this is actually a lot of code, if you have to do it by yourself. But just doing it here, it's a very common task in robotics to get the position and the label of the object. And it's very easy to do it with this library. So, that's the main goal of the whole thing. Let's go back for the last part. This is a bit of an idea. Yeah, this is what we have. It's not very much more. There's a few other detectors that you can try out and play with. But, as we said, it's very new and then we have much stuff. So, we have a few ideas that we want to implement. We want to have CNN-based algorithms that's pretty new now. It's very in the state of the art. So, they work pretty well and that's something that we want to implement. We want to improve the framework. We want to do some other stuff. We might want to add some semantics, some language, add to the library. We will see. So, for those of you that are interested in this, we are on Google time of code, both projects, open detection and Robocop. You can go ahead and apply for the ideas. Very cool. You can get paid and you get the opportunity to work in real code and do very amazing stuff. And that's pretty much it. I just want to get your feedback, guys, possibly during the pub crawl or something. If you guys are wrong, just talk to me. I'll be happy to chat with you. Tell me if this is a crazy idea, if it works, if it doesn't, what your thoughts are, whether you need it, and everything. So, thank you very much and I hope I wasn't that boring.


Cardinal State Independent Electrical Commission has presented certificate of return to the newly elected candidate of 4th September elections in 19 local government councils and the state. Presenting the certificates to the 15 local government chairmen and their councillors at Arawa House, Cardinal, was the chaplain in Katsecom, Dr. Saratu Jiko Audu. His size elections were conducted using electronic voting machines in 19 local government areas and 4 local government areas elections were incooculative. Take a listen. The new innovation, especially, comes with its own challenges. But these challenges give us an opportunity to review the system and make corrections to improve it. This we did after the 2018 election. And we will do the same after the conclusion of the 2021 election. Furthermore, let me congratulate all of you who have won the various positions and encourage you to be magnanimous in victory and ensure that your people enjoy the dividends of democracy. To walk officially, if our structure to put it in order, the health department to make sure that there is broad, proper treatment, good health. And I will make the local government conducive for living security-wise by the will of God. I will sit with the communities, we study the environment, we discuss with them. Then we join hands together to see how we are going to dialogue and stay together with them this course so that the local government is going to believe in peaceful. An attestation that this has been the freest and fairest election in the most recent history in Nigeria, not just by INEC or SICOM, this election has proven time and time again that the state government is bound to give a level playing ground to every player here. So I think it is in the best interest of civility for everybody that has lost out to accept the will of God and the will of the people to join hands together to move the local government forward. So that's my call to everybody that has participated so far, both victorious and otherwise. The election was conducted by voting through what? Electronical way. And sincerely speaking, without modeling, without anything, I got my victory by the decision of my people. Service to the people. And a sincere service, loyalty, and make sure that the dividend of democracy comes to Jama'a by what liaising to the appropriate quarters. Don't forget to hit the notification button so you get notified about fresh news updates.


Have you ever wanted to install Arch Linux, but maybe you were a little afraid because you've heard these horror stories You know a lot of people like to overblow Arch Linux as far as the difficulty of the installation process It's really quite easy to install some people. I think mistakenly think it takes a long time to install Arch Linux It's actually very quick to install Arch Linux. So today. I'm gonna run through an arch installation Installation I'm gonna do this inside a virtual machine I'm gonna install Arch Linux inside virtual box and if you're new to installing Arch Linux or new to installing any Linux using a Command line installer. I would suggest you also do it in a virtual machine before trying it on physical hardware What I want you to do is install virtual box and follow along with me And I promise you at the end of this video both you and I will have working Arch Installations inside virtual box for the first thing we need to do of course is create a virtual machine inside virtual box I'm gonna go to the menu here that says machine I'm gonna click on new and I'm gonna title this virtual machine Arch Linux and by the title it's already figured out that the OS type is Linux and the version is Arch Linux 64 bit If I needed to I could go through the drop-down menu and select something else But this is correct in my case. So I'm gonna click next now. Let's give it some RAM I'm gonna give my VM four gigs of RAM the amount of RAM you give your VM Well, of course, depend on how much RAM your host machine has how much RAM you can spare I've got 64 gigs of RAM on my host machine So I can give this VM as much RAM as I want but four gigs is more than enough for what we're doing Then create a virtual hard disk now. Just leave it on default VDI as the disk image is fine. Just click next Dynamically allocated for the hard disk that is fine click next and then let's choose a virtual hard disk size I'm gonna give this virtual machine a 20 gigabyte disk and I'm gonna create and Create one more time. All right, and we have created that VM now click on the new VM that we just created go to settings and In settings what I want to do is I want to go to system. I want to give the processor More than one CPU. I'm gonna give it two CPUs You say I have up to 24 available on my machine your machine may have a different number of CPUs available But I want to beef it up just a little bit. So I'm gonna give it a little more power I'm also going to enable EFI because the last time I did a arch installation video I did BIOS and a lot of people wanted a EFI installation. So today, let's run through a EFI Installation of arch and I'm gonna go to display video memory the max you can give virtual box at least in the GUI is 128 megs give it 128 megs max it out and then I'm gonna enable 3d acceleration even though I don't think we're ever gonna boot into a graphical environment for this video then I'm gonna go to storage and I'm going to click on the little optical disc here and We are gonna add our arch Linux ISO. So I downloaded the latest ISO and It appears there. I'm not gonna change anything with audio or network I matter of fact the only other thing I'm gonna do is I'm gonna go down to user interface And this is just for me not for you guys I'm gonna click off the menus and the bottom sys tray that the windows have just because I'm recording these windows And I want them to be as clutter-free as possible and I'll click okay. I'm gonna go ahead and launch my new VM All right, and we get to a command prompt and we need to read the installation guide especially if you've never done this what you need to do is go to the arch wiki and On the main page of the arch wiki. There will be a link to the installation guide This installation guide is not very long. You could page down two or three times and be at the end of the installation guide It's not a very lengthy process matter of fact more than half the guide is probably stuff that won't even apply to us So really it's a very short and quick installation So the very first thing we need to do is set our key map now by default the key map is set for us But if you were unsure about the key map What you would do is you would go in here and you will run this command LS Meaning list all the contents of this directory and what do we want to run LS on? We want to run it on this directory slash user slash share slash KBD slash key maps and then slash two asterix slash one more asterix dot map dot GZ and If you run that it will list out all the available key maps that are Possible for you to choose matter of fact what I would do is I would actually Pipe that through less So I would run that same command and then at the end add a pipe symbol and then the list command so that you can Just hit enter and scroll the entire list Makes it a lot easier to to find what you need for me though Like I said the US key map is the default So I actually don't need to set anything but those of you that do you would then run this command load keys Space and then the key map that you found so if you were German for example, you would load D e dash Latin one for the German key map. Let me clear the screen the next thing we need to do is make sure we have Working internet because we don't have internet then nothing's gonna work. So let's go ahead and do a ping Google.com and Let's see if we actually have a ping It doesn't look like we do oh there it goes.  All right, it took a second, but now it's working as expected All right control C kills the ping so we do have network next We need to make sure our system clock is accurate So we need to run the following command time date CTL all one word time date CTL space Set dash NTP space true run that command and if everything worked right you can verify it with time date CTL space status and Yeah, it's active everything worked just fine with that The next thing we need to do is we need to partition our disk now. This is Probably the most critical part of the installation So this is the part where you can mess some stuff up But the arch wiki suggests that we use f disk to partition our drives I'm not very familiar with f disk. I've used it a little bit in the past Typically I do CF disk when I do my partitioning but for purposes of this video I'll actually do the f disk so I'm going to run f disk space dash L and This will list all of our drives that are available for us to use here now There are two drives here instead of just one even though I Created one drive for the VM the second drive here is just the loopback device It's really just associated for the live environment that we booted into but really our device is that top one the 20 gig Hard disk that I created at slash dev slash sda. So now let's run f disk slash dev slash sda and Now it's asking for more commands. We have a prompt I don't know a lot of the commands, but you can type M for help So I'm going to type M for help and the first thing we need to do is create a new label And we need to either do oh on the keyboard for a doll's partition table or G for a GPT partition table So since I'm doing EFI what we should do GPT So I'm going to type G to create a GPT partition table. All right now that we've done that again I'm not sure what command I want to type next. I'm going to do M for the help again And I think what we need to do at this point is we need to add a partition to that disk and to add a new partition We need to do in so type in hit enter It's going to ask us partition number one through 128 because using EFI you can have up to 128 partitions on a disk That's insane. You'd have to be a complete nutter to have 128 partitions on a disk But all right, what's the partition we're doing here and we'll do partition one Then it's asking. What is the first sector by default? It's at 2048 I would just go with the default and then the last sector what you need to do here is give it a bite size For the last sector or just give it the plus symbol plus a size and I'm going to do plus 550 m 550 megabytes because that is going to be our EFI partition and it needs to be 550 megabytes All right created new partition one and it created it as a type Linux file system That's not the correct type for that partition, but we will change it later for now Let's keep going because we need three partitions. We just created the EFI partition I'm also going to create a swap. So in on the keyboard for add new partition partition number This will be partition two First sector just leave it as default. It's going to be the end of the last sector And then the last sector for this partition again, we'll give it a size I'm going to do plus and since it's swapped that I'm creating here. I'm going to do two gigs in this vm So plus two g All right, and it created new partition two and it also created it as type Linux file system That's not correct. We'll change it in a minute. But let's add that third partition. So in for add another partition partition three First sector just hit enter and then the last sector I'm just going to hit enter and it's going to by default give it the remaining space And it created partition three of Linux file system That's will be the correct type for this one size 17.5 gigabytes because that was all the remaining space After the 550 megabyte efi partition and the 2 gigabyte swap partition So i'm going to hit m on the keyboard again And to change a partition type you need to hit t on the keyboard. So t Which partition do we need to change the type of well, let's start with partition one and Partition type or alias. I'm not sure what we want to choose out of list It says type capital l to list everything. So Let's do l and it looks like the very first one. You see number one is efi system. That's what we want So q to quit out of that and then i'm going to type one for efi system And it changed that partition to from linux file system over to efi system Perfect. Now i'm going to type t on the keyboard again for change partition type and now we need to do partition two And partition two Let me do l to get the list partition two needs to be linux swap Which linux swap is number 19 in the list q to get out of that and then type 19 And it changed partition two from linux file system to linux swap And then partition three is also set to linux file system. I don't need to change that because that's going to be our System file system, right? That's going to be the big partition and it needs to be linux file system So I think we're done here. I think what we need to do now is write the table to the disc So let me hit m here and it looks like we need to type w To actually write the table and then it automatically exits out of f disk for us Now we need to go ahead and make our file system So we need to make three different file systems on those three different partitions that we did Now we did the efi partition. It needs to be fat 32. So we need to do mkfs dot fat space dash F 32 capital f 32 actually space slash dev slash sda one All right, so we made the fat 32 file system on sda one now sda two is the swap So let's do mk swap all one word make swap space slash dev slash sda two We just made the swap. We need to turn the swap on so do swap on all one word space slash dev slash sda two All right, and finally we need to make the file system on the big partition on sda three So let's do a make file system mkfs dot extend for ext four space slash dev slash sda three And we have made our file systems now. We need to mount The big partition sda three. So let's do a mount space slash dev slash sda three space slash mnt And now that that is mounted over onto the live image What we need to do is run the packstrap command. This actually installs the base system for arch So run packstrap all one word space slash mnt because that's where we're mounted to space And then what we are installing we're going to install base Which is the base arch system. We also are going to install linux, which is the kernel and also install linux dash firmware hit enter And this is installing The base package this usually takes just a couple of minutes. I'll pause the recording And then according to the wiki we need to go ahead and generate our file system table our fstab or our fstab However, you want to pronounce it. So let me clear the screen here and then i'm going to run this command gen fstab space dash capital u space slash mnt space and then two greater than signs So two of the right pointing chevrons space and then slash mnt slash at c Slash fstab and hit enter and that should have generated our file system table Then the next thing we need to do is go ahead and run arch Dash charoot. So a charoot is changing into the root directory of our new installation is basically what that is And of course, I messed that up because I didn't tell it where we were charooting to I want to do arch dash charoot space slash mnt because that's the mount point. All right And you see the prompt changed. We are now logged in as root You know over at slash mnt on sda3 because that's where we're going to be installing everything on the sda3 partition Now we need to go ahead and set our time zone and how you do that is you run this command l in for link dash sf space and then this path slash user slash share slash zone info Slash region And this is not actually region, but it is the name of your region slash City again, that's the name of your city And then space and then slash etsy slash local time Now I actually know my region and city because I've done these installs so many times My region is america slash and then the city is chicago. I don't actually live in chicago I'm nowhere near chicago, but we're in the same time zone. So that's what I would need to run I'm going to go ahead and run that now you may not know exactly what your region or city is So what I would do is I would run this command here ls for listing the contents of a directory Slash user slash share slash zone info and what you see in this directory Those are the regions and once you find your region for example europe What I would do is then ls user slash share slash zone info slash europe And those are the cities And then hopefully you you know your region and city So you just go back and you know plug in what you needed to do for that ln command the link command And I control c to cancel that clear the screen The next thing we want to do is set our hardware clock you run this command hw clock space dash dash s y s t o h c run that command That sets our system clock Then the next thing we need to do is set the locale now. This is a little tricky You can mess this up and the arch wiki and on this if you guys are following along in the arch wiki It is a little confusing here. What you need to do It says you need to edit the locale dot gen and uncomment your particular locale So what they're saying is whatever editor you use for example nano space slash etsy slash locale Dot gen let's hit enter nano is not found because it's not part of the base packages that were installed earlier So let's do a pacman space dash s space nano Let's go ahead and install that neither nano or vim. We're going to be installed by default You have to install those the only thing I think that's here by default is vi Nobody really cares to use vi most of you guys probably are not vim users either I think nano is be a little easier. So I'm going to use that throughout this tutorial Oh now, let me run the nano space slash etsy slash locale dot gen All right, and you see this file it has a whole bunch of lines and every line is commented go find Your locale and uncomment that line for me. I need to find the line en underscore us english us So i'm going to go through the list and I want this line right here En underscore us dot utf dash eight space utf dash eight. Okay Now i'm going to do control x and nano to exit y for yes to write it hit enter and then the next thing you need to do after editing that file Is run this command locale dash gen It's generating locale's generation complete now you can uncomment more than one locale if needed for me English us is all I need the next thing we need to do is set the host name So what i'm going to do is i'm going to do nano again space slash etsy slash host name We need to create this config file And then we just need to type the host name the host name is the host name of the computer and in this case I'm going to call this vm arch vbox makes sense to me. So control x to exit y to save That set the host name and then we need to create a host file So I need to once again nano space slash etsy space slash host And this file is not empty. There are two lines, but they're commented out But we need to add some lines ourselves the arch wiki actually tells you exactly which lines to add these three lines here that i've highlighted And just copy it exactly the way you read it from the wiki So it says to do <IP_ADDRESS> and then tab over or space over a few times and then do local host And then the second line needs to be colon colon one and then the same thing tab over or space over And then once again local host and then on the third and final line <IP_ADDRESS> Tab over or space over and then do my host name And this needs to be your actual host name that you just created and the host name file. So in my case arch vbox dot local domain And then tab over or space over and then do your host name again, which is arch vbox for me And of course, it'll be different for you control x y to save and clear the screen The next thing we need to do is create some users and some passwords because by default There's only going to be one user on the system the root user unless you create other users also You need to set a password for your root user if you forget that Then at the end of the installation, you're going to have to just cheroop back into this thing and do this later You might as well do it now. So run the command as root pass wd That's going to ask for your new root password Create it confirm it. All right. Now. Let's add a normal user a non-root user So i'm going to run the command user add all one word and then dash m And then space and then the name of that user i'm adding i'm going to call this new user dt Then we need to create a password for the dt user pass wd space dt Then create that password Then confirm that password All right, and then the last thing we need to do here really is to make sure that dt is a member of some groups Especially the wheel group which would give him sudo privileges that way you don't have to log in as root to do things as root You know you can do sudo, you know as the dt user in my case or whatever username you created So i'm going to do this command user mod space dash lowercase a capital g space And then i'm going to list out some groups. I'm going to do the wheel group comma audio comma Video comma those are the most important, but you can keep adding groups. Some of the other groups that are available would be optical Storage as a virtual box user I'll eventually add dt to the vbox users group if I use vert manager I'm going to need to add dt to the lib vert group, you know But for now i'm just going to stick with these so i'm going to hit enter It complained because I wasn't through with that command. You need to do user mod Dash lowercase a capital g all those groups with no spaces between the commas And then space and then the user you're adding to all these groups In my case dt now hit enter again Okay, no errors now. We wanted to add dt to the wheel group So he had sudo privileges, but sudo is not installed unless we install it Let's go ahead and do a pacman dash capital s sudo And install sudo and now that we've installed sudo We can run the command vi sudo to edit the sudo or spile and make sure dt has those privileges And now vi sudo is going to edit that file as vi If you don't want to edit in vi and I don't want to edit in vi do this editor all caps Equals nano or whatever editor you want to use here in the command line, but editor equals nano space vi sudo And now we can edit this sudo or spile We need to find one line in here. We need to find a line about the wheel group And it's right there Uncomment that you see that it says wheel all equals all equals all means the wheel group has all privileges They can do anything and by my dt user being a member of the wheel group He has super user privileges so he can do anything so control x to exit y to save Next let's go ahead and install grub. So let's do a pacman dash capital s grub And why for yes Now that we have grub installed Um, since we're doing efi other than grub. There's some things we need alongside grub We also should do a pacman dash capital s efi boot manager mgr So efi boot mgr all one word. We also need dos fs tools We also need os dash prober and then we need m tools Hit enter install all of those packages and then we need to make a efi directory and our boot directory So we need to run this command mk dir make directory space Slash boot slash and this is the directory we're creating efi all caps hit enter Then we need to mount our efi partition. So mount space slash dev slash sda one remember was the efi partition Space and then where are we mounting it to we're going to mount it to of course boot slash efi All right, that is mounted now. Let's run the grub install command because just sudo pacman dash s grub It installs grub, but it doesn't really install grub to a proper partition because it doesn't know where to Put it you actually have to then run this command grub dash install And since we did efi, we're going to have to add some flags here So do grub dash install space dash dash target equals x86 underscore 64 dash efi space and then dash dash boot loader dash id equals grub underscore u efi space dash dash recheck Hit enter it says installing installation finish no error reported. Okay, so it installed grub We still need to make a grub configuration file now. This is easy. We don't have to edit anything by hand Just run this command here grub dash mk config space dash o space slash boot slash grub slash grub dot cfg It generates the grub configuration file and that is it at this point We've really installed arch Linux the base system. We could actually Reboot the system right now, but before you do you may want to install some other stuff while you're already here and mounted onto sda3 What I would do is for networking Usually people install network manager before you reboot because chances are you'll most likely have internet If you install network manager now then waiting till later So we could do a pacman dash capital s network manager Space and then is there anything else I want to install For me. I use vim as my editor. I could go ahead and install that that way I don't have to keep using nano you could go ahead and install You know window manager and all that stuff x or all that stuff will take some time You're going to have to configure some stuff too. I'm not going to take the trouble of getting into the graphical environment stuff Let's just stick with this for now. So I'm going to just install network manager and install vim I don't think git is installed by default. I would like to have git too So I'm going to go ahead and pacman dash capital s git just to make sure I have git installed on the system Really, I think that's enough for a base install Since we installed network manager. We probably should enable it with a system d So let's go ahead and run a system ctl space enable space network With a capital n network with a capital n manager with a capital m It created that sim link and really let's go ahead and exit out of the charoot And reboot. So let's exit type exit. All right And then we're still mounted here.  We're going to force it to unmount. So target is busy Maybe f wasn't the right flag. I think there is a l flag for a lazy flag. Let's see. Okay The l flag you mount space dash l space slash mnt will force The unmount. All right now that we have got out of the charoot and we've unmounted Now we could type reboot and reboot into our freshly installed arch since I'm in a vm don't reboot I actually am going to do shutdown Run shut down now pseudo shut down now or halt now or whatever Command you want to run to shut down the system The reason we need to shut down instead of reboot is because I need to go back Into the settings of the vm Because remember the iso is still attached.  Yeah click. Okay Now that we've detached that iso now restart All right, we've gotten to a command prompt. You see it says arch vbox login So that's the hoose name of the computer And we created The dt user of course we could log in as root as well, but I'm going to log in as dt Let's see if we have networking So if I do a ping google.com We have networking we have internet we can do anything So that's really it. I mean we just did a base arch install I don't know how long that took I rushed through a lot of that from here You just pacman dash capital s all of your stuff xor your login manager Your desktop environment your window managers and your various applications your graphical applications And some of that stuff can take a while Especially if you're not exactly sure what you want to install what most people do That run things like arch linux or gen 2 and things like that. They keep an install script They just keep a list of programs. They always need that way when they reinstall They can just plug that script in and it just installs all that stuff for you So that is it for this arch linux installation guide again, you know practice in a vm Follow along with me in a vm Maybe install it in a vm half a dozen times to really get comfortable using the command line and editing things Using things like nano and reading the wiki and if you run into some errors reading the wiki figuring out the solutions Once you've done it half a dozen times You know install it on physical hardware if you have a spare machine that would be best But if you don't have a spare machine after you've played around with it a little bit in a vm And then maybe go ahead and roll the dice and install it on your main production machine arch linux is not That advanced right if you know a little bit about linux If you use linux a few months Then I think you can get through an arch linux installation and I think you can maintain the system now before I go I need to think a few special people I need to thank the producers of the show michael gabe corbinian michael devin fran chuck claudio donnie dillan george kelev devils Lewis paul scott and willy they are my highest tiered patrons over on patreon without these guys This 2020 version of the arch linux installation guide wouldn't be possible The show is also brought to you by each and every one of these ladies and gentlemen These are all my supporters over on patreon because this channel is supported by you guys the community There are no corporate sponsors here at distro tube. It's just me and you You want to support my work look for distro tube over on patreon peace