My Daily Gist | Ferdinand Silva


Google Cloud Vision (Golang)

 
package main
import (
"fmt"
"os"
"bufio"
"encoding/base64"
"encoding/json"
"net/http"
"bytes"
"io/ioutil"
)
//Request
type MainRequest struct {
Request []RequestArray `json:"requests"`
}
type RequestArray struct {
Image ImageRequest `json:"image"`
Feature []FeatureArray `json:"features"`
}
type ImageRequest struct {
Content string `json:"content"`
}
type FeatureArray struct {
Type string `json:"type"`
MaxResult int `json:"maxResults"`
}
//Response
type MainResponse struct {
Response []ResponseArray `json:"responses"`
}
type ResponseArray struct {
LabelAnnotation []LabelAnnotationArray `json:"labelAnnotations"`
}
type LabelAnnotationArray struct {
Mid string `json:"mid"`
Description string `json:"description"`
Score float64 `json:"score"`
Topicality float64 `json:"topicality"`
}
func main() {
GOOGLE_API_KEY := "<GOOGLE API KEY>"
GOOGLE_CLOUD_VISION_URL := "https://vision.googleapis.com/v1/images:annotate"
if len(os.Args) == 2 {
img, err := os.Open(os.Args[1])
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer img.Close()
info, _ := img.Stat()
size := info.Size()
buffer := make([]byte, size)
reader := bufio.NewReader(img)
reader.Read(buffer)
imgb64 := base64.StdEncoding.EncodeToString(buffer)
jsonRequest := MainRequest{
Request: []RequestArray{
{
Image: ImageRequest {
Content: imgb64,
},
Feature: []FeatureArray {
{
Type: "LABEL_DETECTION",
MaxResult: 5,
},
},
},
},
}
request, _ := json.Marshal(&jsonRequest)
response, err := http.Post(GOOGLE_CLOUD_VISION_URL + "?key=" + GOOGLE_API_KEY, "application/json", bytes.NewBuffer(request))
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer response.Body.Close()
jsonResponse, _ := ioutil.ReadAll(response.Body)
var data MainResponse
json.Unmarshal(jsonResponse, &data)
//fmt.Printf("The image is detected as: " + data.Response[0].LabelAnnotation[0].Description)
fmt.Println("========================================")
for _, annotation := range data.Response[0].LabelAnnotation {
fmt.Println("The image is detected as: " + annotation.Description)
}
fmt.Println("========================================")
}
}
view raw test.go hosted with ❤ by GitHub