Skip to content

Instantly share code, notes, and snippets.

@tanksuzuki
Created March 19, 2018 15:12
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save tanksuzuki/8e9deb7a302e47408af066d6f1aba8d5 to your computer and use it in GitHub Desktop.
plot.go
package main
import (
"bytes"
"context"
"fmt"
"image"
"image/color"
"image/draw"
"image/png"
"io/ioutil"
"os"
"cloud.google.com/go/vision/apiv1"
"github.com/pbnjay/pixfont"
"google.golang.org/api/option"
)
func main() {
ctx := context.Background()
client, err := vision.NewImageAnnotatorClient(ctx, option.WithCredentialsFile("./service_account.json"))
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
imgBytes, err := ioutil.ReadFile("lenna.png")
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
visionImg, err := vision.NewImageFromReader(bytes.NewBuffer(imgBytes))
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
faces, err := client.DetectFaces(ctx, visionImg, nil, 0)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
img, err := png.Decode(bytes.NewBuffer(imgBytes))
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
imgRectangle := image.Rectangle{
image.Point{0, 0},
img.Bounds().Size(),
}
rgba := image.NewRGBA(imgRectangle)
draw.Draw(rgba, imgRectangle, img, image.Point{0, 0}, draw.Src)
m := map[string]string{
"LEFT_EYE": "a",
"LEFT_EYE_RIGHT_CORNER": "b",
"LEFT_EYE_LEFT_CORNER": "c",
"LEFT_EYE_BOTTOM_BOUNDARY": "d",
"LEFT_EYE_TOP_BOUNDARY": "e",
"LEFT_EYE_PUPIL": "f",
"LEFT_OF_LEFT_EYEBROW": "g",
"LEFT_OF_RIGHT_EYEBROW": "h",
"LEFT_EYEBROW_UPPER_MIDPOINT": "i",
"RIGHT_EYE": "j",
"RIGHT_EYE_TOP_BOUNDARY": "k",
"RIGHT_EYE_RIGHT_CORNER": "l",
"RIGHT_EYE_BOTTOM_BOUNDARY": "m",
"RIGHT_EYE_LEFT_CORNER": "n",
"RIGHT_EYE_PUPIL": "o",
"RIGHT_OF_LEFT_EYEBROW": "p",
"RIGHT_OF_RIGHT_EYEBROW": "q",
"RIGHT_EYEBROW_UPPER_MIDPOINT": "r",
"MIDPOINT_BETWEEN_EYES": "s",
"NOSE_TIP": "t",
"NOSE_BOTTOM_RIGHT": "u",
"NOSE_BOTTOM_LEFT": "v",
"NOSE_BOTTOM_CENTER": "w",
"UPPER_LIP": "x",
"LOWER_LIP": "y",
"MOUTH_LEFT": "z",
"MOUTH_RIGHT": "A",
"MOUTH_CENTER": "B",
"LEFT_EAR_TRAGION": "C",
"RIGHT_EAR_TRAGION": "D",
"FOREHEAD_GLABELLA": "E",
"CHIN_GNATHION": "F",
"CHIN_LEFT_GONION": "G",
"CHIN_RIGHT_GONION": "H",
}
green := color.RGBA{
R: uint8(0),
G: uint8(255),
B: uint8(64),
A: uint8(255),
}
for _, face := range faces {
for _, landmark := range face.Landmarks {
if marker := m[landmark.Type.String()]; marker != "" {
pixfont.DrawString(rgba, int(landmark.Position.GetX()), int(landmark.Position.GetY()), marker, green)
}
}
}
file, err := os.OpenFile("out.png", os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
defer file.Close()
if err := png.Encode(file, rgba); err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment