void client_t::inspect_image(rapidjson::Document& result, const std::string& image) { http_response_t resp; m_client->get(resp, make_get(api_version + cocaine::format("/images/%s/json", image))); if(resp.code() >= 200 && resp.code() < 300) { result.SetNull(); result.Parse<0>(resp.body().data()); } else if(resp.code() >= 400 && resp.code() < 500) { result.SetNull(); } else { COCAINE_LOG_WARNING(m_logger, "Unable to inspect an image. Docker replied with code %d and body '%s'.", resp.code(), resp.body()); throw std::runtime_error("Unable to inspect an image."); } }
int ytopen_sdk::FaceCompare(rapidjson::Document &result, const string& imagePathA, const string&imagePathB, int data_type) { result.SetNull(); string imageA, imageB; if(data_type == 0 && (0 != read_image(imagePathA, imageA) || 0 != read_image(imagePathB, imageB))) { cout << "image read failed. " << imagePathA << "," << imagePathB << endl; return -1; } std::stringstream ss; ss<<host<<"/youtu/api/facecompare"; string addr; addr.assign(ss.str()); string req; string rsp; StringBuffer sbuffer; Writer<StringBuffer> writer(sbuffer); writer.StartObject(); writer.String("app_id"); writer.String(app_id.c_str()); if(data_type == 0) { string encode_data = b64_encode(imageA); writer.String("imageA"); writer.String(encode_data.c_str()); encode_data = b64_encode(imageB); writer.String("imageB"); writer.String(encode_data.c_str()); }else { writer.String("urlA"); writer.String(imagePathA.c_str()); writer.String("urlB"); writer.String(imagePathB.c_str()); } writer.EndObject(); req = sbuffer.GetString(); int ret = curl_method(addr, req, rsp); if(ret == 0) { result.Parse<rapidjson::kParseStopWhenDoneFlag>(rsp.c_str()); if(result.HasParseError()) { std::cout << "RapidJson parse error " << result.GetParseError() << endl; return -1; } }else { return -1; } return 0; }
static bool pyobj2doc(PyObject *object, rapidjson::Document& doc) { if (PyBool_Check(object)) { if (Py_True == object) { doc.SetBool(true); } else { doc.SetBool(false); } } else if (Py_None == object) { doc.SetNull(); } else if (PyFloat_Check(object)) { doc.SetDouble(PyFloat_AsDouble(object)); } else if (PyInt_Check(object)) { doc.SetInt64(PyLong_AsLong(object)); } else if (PyString_Check(object)) { doc.SetString(PyString_AsString(object), PyString_GET_SIZE(object)); } else if (PyUnicode_Check(object)) { PyObject *utf8_item; utf8_item = PyUnicode_AsUTF8String(object); if (!utf8_item) { PyErr_SetString(PyExc_RuntimeError, "codec error."); return false; } #ifdef PY3 doc.SetString(PyBytes_AsString(utf8_item), PyBytes_GET_SIZE(utf8_item), doc.GetAllocator()); #else doc.SetString(PyString_AsString(utf8_item), PyString_GET_SIZE(utf8_item), doc.GetAllocator()); #endif Py_XDECREF(utf8_item); } else if (PyTuple_Check(object)) { int len = PyTuple_Size(object), i; doc.SetArray(); rapidjson::Value _v; for (i = 0; i < len; ++i) { PyObject *elm = PyTuple_GetItem(object, i); if (false == pyobj2doc(elm, _v, doc)) { return false; } doc.PushBack(_v, doc.GetAllocator()); } } else if (PyList_Check(object)) { int len = PyList_Size(object), i; doc.SetArray(); rapidjson::Value _v; for (i = 0; i < len; ++i) { PyObject *elm = PyList_GetItem(object, i); if (false == pyobj2doc(elm, _v, doc)) { return false; } doc.PushBack(_v, doc.GetAllocator()); } } else if (PyDict_Check(object)) { doc.SetObject(); PyObject *key, *value; Py_ssize_t pos = 0; while (PyDict_Next(object, &pos, &key, &value)) { if (false == pyobj2doc_pair(key, value, doc)) { return false; } } } else { PyErr_SetString(PyExc_RuntimeError, "invalid python object"); return false; } return true; }
static void pyobj2doc(PyObject *object, rapidjson::Document& doc) { if (PyBool_Check(object)) { if (Py_True == object) { doc.SetBool(true); } else { doc.SetBool(false); } } else if (Py_None == object) { doc.SetNull(); } else if (PyFloat_Check(object)) { doc.SetDouble(PyFloat_AsDouble(object)); } else if (PyInt_Check(object)) { doc.SetInt(PyLong_AsLong(object)); } else if (PyString_Check(object)) { doc.SetString(PyString_AsString(object), PyString_GET_SIZE(object)); } else if (PyUnicode_Check(object)) { #ifdef PY3 PyObject *utf8_item; utf8_item = PyUnicode_AsUTF8String(object); if (!utf8_item) { // TODO: error handling printf("error\n"); } doc.SetString(PyBytes_AsString(utf8_item), PyBytes_Size(utf8_item), doc.GetAllocator()); Py_XDECREF(utf8_item); #else doc.SetString(PyBytes_AsString(object), PyBytes_GET_SIZE(object)); #endif } else if (PyTuple_Check(object)) { int len = PyTuple_Size(object), i; doc.SetArray(); rapidjson::Value _v; for (i = 0; i < len; ++i) { PyObject *elm = PyList_GetItem(object, i); pyobj2doc(elm, _v, doc); doc.PushBack(_v, doc.GetAllocator()); } } else if (PyList_Check(object)) { int len = PyList_Size(object), i; doc.SetArray(); rapidjson::Value _v; for (i = 0; i < len; ++i) { PyObject *elm = PyList_GetItem(object, i); pyobj2doc(elm, _v, doc); doc.PushBack(_v, doc.GetAllocator()); } } else if (PyDict_Check(object)) { doc.SetObject(); PyObject *key, *value; Py_ssize_t pos = 0; while (PyDict_Next(object, &pos, &key, &value)) { pyobj2doc_pair(key, value, doc); } } else { // TODO: error handle } }