1 #include <iostream>
2 #include "alibabacloud/core/AlibabaCloud.h"
3 #include "alibabacloud/imageseg/ImagesegClient.h"
4 #include "alibabacloud/core/CommonClient.h"
5 #include "model/common.h"
6 
7 extern "C" {
8 using namespace std;
9 using namespace AlibabaCloud;
10 using namespace AlibabaCloud::Imageseg;
11 
segmentCommonImage(char * url,AIModelCBFunc cb)12 int segmentCommonImage(char *url, AIModelCBFunc cb)
13 {
14     InitializeSdk();
15     string key = getAccessKey();
16     string secret = getAccessSecret();
17     ClientConfiguration configuration;
18     configuration.setRegionId(CLOUD_AI_REGION_ID);
19     configuration.setEndpoint(CLOUD_AI_IMAGESEG_ENDPOINT);
20     ImagesegClient client(key, secret, configuration);
21     Model::SegmentCommonImageRequest request;
22     string inImageURL;
23     ImageSegResultStruct result;
24     string outImageUrl;
25     int ret = 0;
26 
27     inImageURL = url;
28     request.setScheme("http");
29     request.setMethod(HttpRequest::Method::Post);
30     request.setImageURL(inImageURL);
31     request.setReturnForm("whiteBK"); // set png format, mask or whiteBK, please refer to parameters of vision platform
32 
33     auto outcome = client.segmentCommonImage(request);
34     cout << endl << "imageseg describeInstances returned:" << endl;
35     cout << "error code: " << outcome.error().errorCode() << endl;
36     cout << "requestId: " << outcome.result().requestId() << endl << endl;
37     cout << "image url: " << outcome.result().getData().imageURL << endl;
38 
39     outImageUrl = outcome.result().getData().imageURL;
40     if (outImageUrl.size() > 0) {
41         result.common.url = (char *)outImageUrl.c_str();
42         result.common.imageLen = getResponseBodyByUrl(outcome.result().getData().imageURL.c_str(), &result.common.image);
43         if (result.common.image && cb) {
44             ret = cb((void *)&result);
45         }
46     }
47     ShutdownSdk();
48     return ret;
49 }
50 
segmentFace(char * url,AIModelCBFunc cb)51 int segmentFace(char *url, AIModelCBFunc cb)
52 {
53     InitializeSdk();
54     string key = getAccessKey();
55     string secret = getAccessSecret();
56     ClientConfiguration configuration;
57     configuration.setRegionId(CLOUD_AI_REGION_ID);
58     configuration.setEndpoint(CLOUD_AI_IMAGESEG_ENDPOINT);
59     ImagesegClient client(key, secret, configuration);
60     Model::SegmentFaceRequest request;
61     string inImageURL;
62     ImageSegResultStruct result;
63     string outImageUrl;
64     int ret = 0, i = 0;
65 
66     inImageURL = url;
67     request.setScheme("http");
68     request.setMethod(HttpRequest::Method::Post);
69     request.setImageURL(inImageURL);
70 
71     auto outcome = client.segmentFace(request);
72     cout << endl << "imageseg describeInstances returned:" << endl;
73     cout << "error code: " << outcome.error().errorCode() << endl;
74     cout << "requestId: " << outcome.result().requestId() << endl << endl;
75 
76     if (outcome.result().getData().elements.size() == 0)
77         return -1;
78     // for (i = 0; i < outcome.result().getData().elements.size(); i++)
79     {
80         cout << i << "image url: " << outcome.result().getData().elements[i].imageURL << endl;
81         cout << i << "width: " << outcome.result().getData().elements[i].width << endl;
82         cout << i << "height: " << outcome.result().getData().elements[i].height << endl;
83         cout << i << "x: " << outcome.result().getData().elements[i].x << endl;
84         cout << i << "y: " << outcome.result().getData().elements[i].y << endl;
85 
86         outImageUrl = outcome.result().getData().elements[i].imageURL;
87         if (outImageUrl.size() > 0) {
88             result.face.url = (char *)outImageUrl.c_str();
89             result.face.imageLen = getResponseBodyByUrl(result.face.url, &result.face.image);
90             if (result.face.image && cb) {
91                 result.face.location.x = outcome.result().getData().elements[i].x;
92                 result.face.location.y = outcome.result().getData().elements[i].y;
93                 result.face.location.w = outcome.result().getData().elements[i].width;
94                 result.face.location.h = outcome.result().getData().elements[i].height;
95                 ret = cb((void *)&result);
96             }
97         }
98     }
99     ShutdownSdk();
100     return ret;
101 }
102 
103 }
104