In this tutorial we will run a fresh instance of facebox, and manually teach it who The Beatles are.
To get a fresh facebox container running, head over to your Machine Box Account page click on the facebox tab, copy the code and paste it into a terminal.
The code looks something like this:
MB_KEY="YOUR_KEY_HERE"
docker run -p 8080:8080 -e "MB_KEY=$MB_KEY" machinebox/facebox
After a few moments, a fresh facebox container will be running.
We have prepared a collection of photographs of The Beatles which we will use to teach facebox:
Unzip the file to a place that is easy for you to find later when we come to teach facebox who these guys are.
The images are structured like this:
├── George_Harrison
│ ├── george1.jpg
│ ├── george2.jpg
│ └── george3.jpg
├── John_Lennon
│ ├── john1.jpg
│ ├── john2.jpg
│ └── john3.jpg
├── Paul_McCartney
│ ├── paul1.jpg
│ ├── paul2.jpg
│ ├── paul3.jpg
│ ├── paul4.jpg
│ └── paul5.jpg
└── Ringo_Starr
├── ringo1.jpg
├── ringo2.jpg
├── ringo3.jpg
└── ringo4.jpg
Each folder is the name of the Beatle, and the files are images containing a single example face of each Beatles member.
The Interactive console provides complete and up-to-date documentation for facebox, and is already running on localhost:8080. You can also use it to interact without writing a single line of code.
Click on the Live demo button, or go to http://localhost:8080/demo
Although we haven’t done any teaching, let’s ask facebox to see what it can do with the sample Beatles picture.
In the URL box, paste the link to the Beatles sample picture and click the Check image for faces button.
https://machinebox.io/samples/faces/thebeatles.jpg
Notice that it indeed founds lots of faces, but doesn’t know who they are.
Head back to the main page in the Interactive console and select Teach faces from the sub-menu on the right.
In the /facebox/teach endpoint section, click the POST the file tab, and expand the Try it now section.
This is where we will teach facebox who Paul McCartney is.
Paul McCartney
Paul_McCartney/paul1.jpg
paul1.jpg
All being well, you should see the output:
{
"success": true
}
Repeat the above steps for the paul2.jpg
file being sure to have the name the same (Paul McCartney
) and the ID different (paul2.jpg
).
Let’s see if our teaching has had any effect so far. Head back to the Live demo and in the URL box, paste the link to the Beatles same sample picture and click the Check image for faces button.
https://machinebox.io/samples/faces/thebeatles.jpg
Hover over Paul’s face and notice that facebox has indeed learned him:
For completeness, teach facebox the rest of the teaching data set in the same way you did for Paul, until you have used all the images.
facebox is stateless, which means that if you turn it off and restart it, you’ll lose all your teaching.
Luckily, we can download and upload the state as we wish through the API.
In the Interactive console for facebox, click on the Managing state item in the sub-menu.
Find the Do it now section, and click on the Download state file button.
A .facebox
file will be downloaded to your computer.
This file contains the learning that facebox has done.
In the terminal where you started facebox, press Ctrl+C
to terminate the process. This will
stop facebox.
Restart it (you can usually just press the up arrow key to repeat the last command) in the same way you did before, and go back to the Interactive console.
Use the Live demo again and notice that this facebox instance does not know who The Beatles are. In order
to teach it, we are going to use the .facebox
file we downloaded from the other instance.
Click Managing state item in the sub-menu, and look for the Uploading state section.
Select the POST the file tab and expand the Try it now section.
Use the form to select the .facebox
file you downloaded earlier, and click POST.
Assuming it is successful, you need to wait for a short period while the teaching is configured internally. The amount of time it takes depends on the size and complexity of the .facebox
file, but will probably have to only wait about five seconds with this small .facebox
file.
Now head back to the Live demo and notice that this fresh facebox instance has learned who The Beatles are.
If you were to spin up 1,000 instances of facebox, it would be pretty tiresome to have to go into the console for each one and upload the state. Since we care equally about dev and ops experience, we thought about that.
MB_FACEBOX_STATE_URL
environment variable to point to the fileIf the MB_FACEBOX_STATE_URL
environment variable is set with an absolute URL,
facebox will download the file when it starts up.
Use the main page in the Interactive console to submit the Beatles URL so you can see the actual JSON output returned from the API.
You will see that the id
field contains the name of the file that most closely matched the face.
Navigate around the Interactive console and drop down the various cURL sections to see how you can use the facebox API in the command line, without using the consoles.
Using the language of your choice, build something awesome with facebox, and then let us know about it on Twitter.