Easily Edit Your Face in 3D From a Photo

People’s faces vary significantly from one to another and with time as they age. Some men lose hair, some women pluck and lose their eyebrows or change the shape of their eyebrows, some men change their beard or mustache style, and last but not least, some people have or develop some natural or accidental issue with their nose, whether it’s crooked, asymmetric, bumpy, droopy, too large, or so shallow that they can’t comfortably where glasses.

For men, the most common operation is probably a hair transplant. For women, the most common operation is probably rhinoplasty (nose job) although many women should probably just get an eyebrow transplant instead of drawing their eyebrows on their skin which looks obviously fake.

Interesting fact: Iran has the highest rate of nose surgery in the world, and according to a report in the conservative Etemad newspaper, as many as 200,000 Iranians, mostly women, go to cosmetic surgeons each year for a nose job. Source

This article explains one way to edit a 3D version of your face. It can be helpful if you are just curious about what a change may look like or if you are trying to explain your desired outcome to someone.

The following image shows the photos I started with (left column), the 3D faces generated from the photos (middle column), and the 3D faces after editing (right column).

1. Take a photo of someone’s face

For demonstration purposes, I took a screenshot of a 3D image of a random person on Sketchfab. You can take just a front photo but it’s better to take pictures of both sides as well.

When taking photos, you should look straight and not tilt your head. You should have neutral gestures (no smiling, etc), and you shouldn’t wear glasses.

2. Load the photos into FaceGen 3D Print

Download FaceGen 3D Print. You can download the demo version. You won’t get all of the features but you may not need all the features. The cheapest paid version costs $69. Install the program, click Create > Photo > and upload the photos from step 1.

3. Mark specific points

FaceGen will then instruct you to mark specific points on your photos so that it can better generate a 3D image.

4. Generate 3D image

After you click the “Create from photo(s)” button, FaceGen will take about 30 seconds to analyze the photos and then generate a 3D image. This technique of generating a 3D image from photos is called Photogammetry. If you have a 3D scanner, you can also load a 3D image.

You can drag the 3D image around in any direction. Since I’m using the demo version, there is a blue FG (FaceGen) watermark on the image.

5. Overlay original photo to check accuracy

The generated 3D image may not be perfect. To fix that, we can overlay our still photos on the FaceGen window and tweak the 3D image to match the photos. One overlay utility that works is called Overlay. After installing it, load your still photo, drag the Overlay window over the FaceGen window, scale the overlaid photo so that the face elements of the overlaid photo and the underlying 3D image are almost the same. You can then see whether the generated 3D image is sufficiently accurate or needs tweaking.

6. Edit the 3D image to match the photos

Click the “Float” button in the Overlay controls. Then, in FaceGen, click Modify > Interactive and edit the 3D image as follows:

  • Hold down the ‘Ctrl’ key then left-click and drag any point on the face (symmetric).
  • Hold down the ‘Ctrl’ key then right-click and drag any point on the face (asymmetric).

Symmetric will make changes symmetrically, e.g. if you edit the left eyebrow, then the right eyebrow will get the exact same edits. If you only want to edit one side / location, then use the asymmetric option.

In this step, your goal is to just tweak the 3D image to more closely match the photos.

7. Edit the 3D image to your desired result

After tweaking the 3D image to match the still photos, you can start editing the 3D image to your desired transformation using the same technique as in the previous step. Following are some extreme examples for demonstration purposes.

If you click on Modify > Shape, you can modify preset facial elements, e.g. nose nostril size, etc.

8. Further editing

Though FaceGen has many features, it seems to lack the ability to modify 3D images in certain ways. For example, one complaint many people seem to have is of a hump on their nose.

FaceGen doesn’t seem to have a way to reshape a hump like that. To resolve this, export the 3D image out of FaceGen as an OBJ file.

Then, download AutoDesk MeshMixer. It’s free. Install MeshMixer and import the 3D image you exported from FaceGen. With MeshMixer, you can sculpt your 3D image, e.g. click Sculpt > Brushes > Drag, adjust the strength, size, depth, etc of the brush, and then drag on the 3D image. Since my demo model didn’t have a hump on the nose, I created (an exaggerated) one. Note that all of this editing is in 3D so you can rotate the image around.

Another tool you can use is FaceTouchUp. But, it only works with 2D flat images, which, depending on your needs / goals, may be sufficient.

8. Upload 3D image for sharing

After you export your 3D image as an OBJ file, you can upload it to Sketchfab where you can share it with others. For example, below is an embed of the 3D image I took for this demo.

9. Morph the before and after images

If you took a screenshot of the 3D image before and after you made edits, you can use a morphing program to show the transformation from the before state to the after one.

3D Scanner

Generating a 3D image from still photos works pretty well. But, you can also create a 3D image of your face (or any object) using a 3D scanner. Revopoint POP 3D Scanner ($500) is one such scanner. It’s supposed to generate a more accurate 3D model by using infrared light to calculate depth. However, it doesn’t capture anything in black so if you have black hair or a black beard, it will not pick those up.

Other Examples

Click to enlarge

Some Ninja Foodi Grill Recipes

Steak

Follow this recipe or the simpler recipe below.

Ingredients

  • NY steak from Costco
  • Canola oil
  • Coarse salt
  • Black pepper

Instructions

  1. Push Grill button
  2. Set doneness to “Medium Rare”
  3. While unit is preheating, pat steaks with paper towel to remove oils, rub canola oil over steaks and sprinkle on salt and pepper
  4. Insert thermometer from the side into thickest part of steak
  5. When unit beeps, add the steaks
  6. When unit beeps again, flip steaks
  7. When unit beeps again, remove steaks and allow to rest for 5 minutes

Grilled Barbecue Chicken Legs

Ingredients

  • Chicken legs or breast
  • Kinders Mild BBQ Sauce
  • Canola oil
  • Salt
  • Black pepper

Instructions

  1. Push Grill button
  2. Set temperature to “MED”
  3. Set time to 25 minutes
  4. While unit is preheating, rub canola oil over chicken and sprinkle on salt and pepper
  5. When unit beeps, add chicken and set timer for 10 minutes
  6. After 10 minutes, flip chicken and set timer for 5 minutes
  7. After 5 minutes, liberally baste both sides of chicken with bbq sauce then set timer for 5 minutes
  8. After 5 minutes, repeat previous step and cook for another 2 minutes.
  9. If internal temperature is below 160 F, keep cooking until it reaches 160 F.
  10. When internal temperature reaches 160 F, remove chicken and let rest for 5 minutes

Air Fried Chicken Legs

Ingredients

  • 6 chicken legs
  • 1.5 tsp salt
  • 1 tsp ground black pepper
  • 1 tsp ground mustard
  • 1 tsp smoked paprika
  • ¼ tsp cayenne pepper
  • 1 tbs vegetable oil

Instructions

  1. Add all dry ingredients to a large zip top bag and shake to mix well.
  2. Massage oil on each chicken leg
  3. Add all chicken to bag and shake until all chicken is coated
  4. Let chicken marinate in refrigerator for at least 1 hour. The longer the better. Overnight is best!
  5. Preheat air fryer for 5 minutes at 380 degrees (F). Add chicken to air fryer and use “air fry” setting at 380 degrees (F) for 18-20 minutes, turning chicken halfway through. Internal temperature of chicken should be at least 165 degrees (F).

Grilled Corn

Follow this recipe.

Grilled Vegetables

Ingredients

  • Zucchini
  • Tomatoes (from Costco)
  • Onions
  • Bell pepper
  • Jalapeno peppers
  • Tomatillo peppers
  • Broccoli
  • Baby corn
  • Coarse salt
  • Black pepper

To save time, you can also buy prepackaged cut vegetables

Instructions

  1. Cut vegetables in half or in slices.
  2. Remove spicy seeds from peppers.
  3. Spray olive oil over vegetables
  4. Sprinkle coarse salt and pepper.
  5. Turn on Ninja grill
  6. Push grill button
  7. Push right up/down to set the time to 8 minutes
  8. Put veggies in grill
  9. The grill will beep when done.

French Fries

Crinkle-cut fries and hummus

Turns out baking french fries in the Ninja Foodi produces good results.

Ingredients

  • Frozen pre-cut french fries (I like the crinkle cut fries from Smart n Final)
  • Olive oil
  • Coarse salt
  • Black pepper

Instructions

  1. Push the Air Crisp button and allow unit to preheat
  2. For 1 lb of fries, set the temperature to 350 F and time to 20 minutes
  3. For 2 lbs of fries, set the temperature to 360 F and time to 27minutes
  4. Spray olive oil over fries and sprinkle with salt and pepper

As a healthier alternative to ketchup, eat fries with hummus.

Remove Rust and Paint Easily Using a Polycarbide Abrasive Wheel

You’re probably thinking you should buy some chemicals to remove rust or even soak rusty items in Coca Cola, if they’ll fit in your container. These methods only partially work and take forever. Instead, just pick up a polycarbide abrasive wheel at Harbor Freight ($5) and attach it to an angle grinder ($15 at Harbor Freight) and get rid of dust with ease. You might be able to use it to clean your barbecue grill grates.

It’s also good for removing paint.

Web Paint: Simple Chrome Extension to Annotate on Screen

Have you ever needed to make notes on screen like a web page to then share with others. You might first take a screenshot and then edit it in some program or buy an app like TechSmith SnagIt. A simpler option would be to install the Web Paint extension in Chrome. When you click on the extension, it opens this panel

Then, you can type, draw, add arrows, and so on then take a screen capture and share with others, e.g.

Quick JSON-based Web Forms

Many, if not most, web forms are backed by a database. But what if you just need a simple data store, like a JSON file, and you want to quickly and easily provide users with a user-friendly web form to make updates to the JSON data. JSON Editor takes a JSON Schema and uses it to generate an HTML form.

The generated JSON output can then be used by a templating language like Handlebars for building a web page.

JSON Editor supports many options including the ability to quickly style a form using CSS frameworks like Bootstrap.

For example, the following JSON schema

{
  "type": "object",
  "title": "Car",
  "properties": {
    "make": {
      "type": "string",
      "enum": [
        "Toyota",
        "BMW",
        "Honda",
        "Ford",
        "Chevy",
        "VW"
      ]
    },
    "model": {
      "type": "string"
    },
    "year": {
      "type": "integer",
      "enum": [
        1995,
        1996,
        1997,
        1998,
        1999,
      ],
      "default": 2008
    },
    "safety": {
      "type": "integer",
      "format": "rating",
      "maximum": "5",
      "exclusiveMaximum": false,
      "readonly": false
    }
  }
}

using the Bootstrap 4 CSS framework produces the following web form.

You can see a live demo in the JSON Editor interactive playground.

JSON Schema also supports validation so you can ensure your users are not submitting invalid data. For security reasons, this solution may not be good in a production environment by non-trustworthy people but it could work well in a secure, internal environment among coworkers.

Create an inline website editor using contenteditable

Let’s say you have a website and you’re tired of making constant updates to some portion of oft-changing content, e.g. a conference agenda. It would be nice to offload this tedious work to a content owner who so often makes typos. But this content owner is non-technical and is a visual person. They need a WYSIWYG editor that would allow them to make changes directly on what it is that they want to edit, not directly in a database or something cryptic like a JSON file.

HTML5 supports the contenteditable attribute which makes any element editable. In the screenshot below, on a part of the byline is made editable.

Simple add the attribute “contenteditable=true” to the tag that wraps the text you want to make editable.

<p>Last Edited by <span id="author" contenteditable="true">Monty Shokeen</span>
</p>

When the content owner clicks on the text to editor, a black outline appears making it look like a form field.

The contenteditable attribute can be added to as many HTML elements as you want. Here is a live example showing three different editable fields with changes saved to local storage. Here’s an example showing how you can save the changes in JSON format and post it to a URL endpoint using AJAX or Fetch.

editor.js – a web-based WYSIWYG editor that outputs JSON

Many web developers are familiar with online editors like TinyCME. If you’ve edited a blog post in WordPress using the classic editor, then you know what I mean.

The problem with this type of editor is it’s too easy to accidentally output garbage HTML. WordPress has switched to offering a block style editor.

If you need to create a similar editor for your web project, editor.js offers inline block-style editing and it outputs clean data in json format.

Here’s a screenshot of example JSON output which can then be used with

This JSON data can then be used with a templating language like Handlebars to build web pages.

Need Icons For a Website? Use FontAwesome!

Icons make a big difference in the look of a website. When placed beside text links, they make the links stand out. They can be used to replace text links, especially on mobile. They accompany text to make boring, text heavy pages easier to read. But, finding icons or creating them can be difficult. FontAwesome solves this by offering thousands of icons that are easily searchable. If I search for car, here’s what I see.

To use an icon, e.g. of a car, just paste this HTML code.

<script src="https://kit.fontawesome.com/8758af3809.js" crossorigin="anonymous"></script>

<i class="fas fa-car"></i>

Here’s a demo.

Grilled Corn Using Ninja Foodi Grill

So, I tried making grilled corn using the Ninja Foodi Grill and surprisingly, it came out really good!

Here’s the recipe.

Ingredients

  • Corn ears (make sure the kernels are big so you’ve got some meat to bite in to)
  • Salt
  • Pepper
  • Canola oil
  • Butter

Instructions

  1. Remove the husk (outer layers of the corn)
  2. Massage the kernels with canola oil
  3. Sprinkle salt and pepper
  4. Turn on Ninja Foodi Grill, click Grill button to Max setting, set time to 12 minutes, let preheat, wait till it says “Add food”, then put in the corn
  5. Set a timer for 6 minutes then turn the corn over
  6. When done, massage butter over the corn or melt butter in the microwave and baste the corn with the liquid butter

Prevent weeds from growing anywhere in your yard

As I’ve said before, weeds are notorious for finding ways of growing through weed fabric and along yard edges.

Middle of yard

To combat weeds from popping up in the middle of your landscape, lay cement board everywhere. Cement board is porous so water can still drain through it. For the areas between the cement boards, weeds will grow. To prevent this from happening, cut pond liner and place it where the cement board gaps are. Pond liner is very strong, UV-resistant, and almost impossible to tear. Traditional weed fabric may be marketed with the claim that it can prevent weeds but it can’t. Weeds still manage to come through. Plus, if you use weed fabric along edges where it’s exposed, it can degrade and easily tear as shown in the picture below.

Now I have to replace that weed fabric with pond liner like I did along a different fence.

Edges of yard

For edges, you can screw pressure-treated 2x4s to the cement edges using special screws and a drill bit for concrete. Just make sure to drill using the hammer drill mode.

If there is no room to drill a screw into the concrete, e.g. if the edge is near a fence, then you can drill 1/2-inch holes in the 2×4 using a 1/2″ spade bit and drive 12-inch long, 3/8-inch galvanized nails through the holes into the ground.

Cut some pond liner and staple it to the 2x4s. Don’t use traditional weed fabric. It will eventually fail and rip and weeds will come through it.

Hammer the large nails through the 2x4s and the pond liner into the ground along the edge of the concrete as shown below.

Allow some of the pond liner to extend beyond the end of the 2×4 so the next 2×4’s pond liner will overlap the first one and prevent weeds from growing in between the 2x4s.

Since 2x4s may not be perfectly straight, you can push them against the concrete edge using a clamp.

If the other side is a wood fence, you can simply staple some pond liner to the fence. In the picture below, the space between the concrete and the fence was narrow. I left a gap between the pond liner for drainage.

Easily cut cement board using a reciprocating saw. You can also use a utility knife or the WEN Electric Fiber Cement and Siding Shear, Variable Speed (3670).

In this case, I placed the cement board over the gaps between the pond liner to prevent weeds from growing along the gap.

You can then put rocks like I did pictured below.

There will still be a small gap between the concrete edge and the 2x4s. Fill that cap with concrete control joint sealant. I like Sikaflex Self-Leveling Sealant. Learn more.

For the rocks, I used ¾-inch ginger rocks / Sonoma gold rocks.