@@ -70,3 +70,58 @@ func (c *Client) parseCompareFacesResponse(r io.Reader) ([]float64, error) {
7070 }
7171 return compareFaceprintsResponse .Confidences , nil
7272}
73+
74+ type checkFaceprintRequest struct {
75+ Faceprints []string `json:"faceprints"`
76+ }
77+
78+ func (c * Client ) CheckFaceprints (faceprints []string ) ([]Face , error ) {
79+ if len (faceprints ) == 0 {
80+ return nil , errors .New ("faceprints can not be empty" )
81+ }
82+ u , err := url .Parse (c .addr + "/facebox/faceprint/check" )
83+ if err != nil {
84+ return nil , err
85+ }
86+ if ! u .IsAbs () {
87+ return nil , errors .New ("box address must be absolute" )
88+ }
89+ request := checkFaceprintRequest {
90+ Faceprints : faceprints ,
91+ }
92+ var buf bytes.Buffer
93+ if err := json .NewEncoder (& buf ).Encode (request ); err != nil {
94+ return nil , errors .Wrap (err , "encoding request body" )
95+ }
96+ req , err := http .NewRequest (http .MethodPost , u .String (), & buf )
97+ if err != nil {
98+ return nil , err
99+ }
100+ req .Header .Set ("Accept" , "application/json; charset=utf-8" )
101+ req .Header .Set ("Content-Type" , "application/json; charset=utf-8" )
102+
103+ resp , err := c .HTTPClient .Do (req )
104+ if err != nil {
105+ return nil , err
106+ }
107+ defer resp .Body .Close ()
108+ if resp .StatusCode < 200 || resp .StatusCode >= 300 {
109+ return nil , errors .New (resp .Status )
110+ }
111+ return c .parseCheckFaceprintResponse (resp .Body )
112+ }
113+
114+ func (c * Client ) parseCheckFaceprintResponse (r io.Reader ) ([]Face , error ) {
115+ var checkResponse struct {
116+ Success bool
117+ Error string
118+ Faceprints []Face
119+ }
120+ if err := json .NewDecoder (r ).Decode (& checkResponse ); err != nil {
121+ return nil , errors .Wrap (err , "decoding response" )
122+ }
123+ if ! checkResponse .Success {
124+ return nil , ErrFacebox (checkResponse .Error )
125+ }
126+ return checkResponse .Faceprints , nil
127+ }
0 commit comments