-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfacepp-client.go
113 lines (104 loc) · 3.06 KB
/
facepp-client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package faceplusplus_client
import (
"encoding/json"
"errors"
"fmt"
"io"
"io/ioutil"
"mime/multipart"
"net/http"
"os"
)
func (self *fppClient) executeRequest(request *http.Request, contentType string, response interface{}) (e error) {
request.Header.Set("Content-Type", contentType)
if httpResponse, err := self.httpClient.Do(request); err == nil {
if httpResponse.StatusCode == 200 {
if responsePayload, err := ioutil.ReadAll(httpResponse.Body); err == nil {
if err := json.Unmarshal(responsePayload, &response); err == nil {
} else {
e = err
}
} else {
e = err
}
} else {
if responsePayload, err := ioutil.ReadAll(httpResponse.Body); err == nil {
e = errors.New(fmt.Sprintf("%s (%s)", httpResponse.Status, string(responsePayload)))
} else {
e = errors.New(httpResponse.Status)
}
}
} else {
e = err
}
return
}
func (self *fppClient) newMultipartWriterWithParameters(parameters map[string]string, writer io.Writer) (mpw *multipart.Writer, e error) {
mpw = multipart.NewWriter(writer)
parameters["api_key"] = self.ApiKey
parameters["api_secret"] = self.ApiSecret
for k, v := range parameters {
if err := mpw.WriteField(k, v); err != nil {
e = err
break
}
}
return
}
func (self *fppClient) newRequestBodyWithInputFile(filename string, bodyWriter io.Writer) (contentType string, e error) {
return self.newRequestBodyWithParametersAndInputFile(map[string]string{}, filename, bodyWriter)
}
func (self *fppClient) newRequestBodyWithParametersAndInputFile(parameters map[string]string, filename string, bodyWriter io.Writer) (contentType string, e error) {
if file, err := os.Open(filename); err == nil {
defer file.Close()
if writer, err := self.newMultipartWriterWithParameters(parameters, bodyWriter); err == nil {
if part, err := writer.CreateFormFile("image_file", "image.jpg"); err == nil {
if _, err = io.Copy(part, file); err == nil {
if err := writer.Close(); err == nil {
contentType = writer.FormDataContentType()
} else {
e = err
}
} else {
e = err
}
} else {
e = err
}
} else {
e = err
}
} else {
e = err
}
return
}
func (self *fppClient) newRequestBodyWithParameters(parameters map[string]string, bodyWriter io.Writer) (contentType string, e error) {
if writer, err := self.newMultipartWriterWithParameters(parameters, bodyWriter); err == nil {
if err := writer.Close(); err == nil {
contentType = writer.FormDataContentType()
} else {
e = err
}
} else {
e = err
}
return
}
type fppClient struct {
ApiKey string
ApiSecret string
httpClient *http.Client
}
func NewClient(apiKey string, apiSecret string) (client *fppClient) {
client = new(fppClient)
client.ApiKey = apiKey
client.ApiSecret = apiSecret
client.httpClient = &http.Client{}
return
}
const (
DETECT_HUMAN_BODY_URL = "https://api-us.faceplusplus.com/humanbodypp/beta/detect"
DETECT_HUMAN_BODY_SKELETON_URL = "https://api-us.faceplusplus.com/humanbodypp/v1/skeleton"
DETECT_HUMAN_BODY_SEGMENT_URL = "https://api-us.faceplusplus.com/humanbodypp/v2/segment"
)