Spaces:
Running
Running
int main() { | |
std::string img_path = "../../../datasets/sacre_coeur/mapping_rot/02928139_3448003521_rot45.jpg"; | |
cv::Mat original_img = cv::imread(img_path, cv::IMREAD_GRAYSCALE); | |
if (original_img.empty()) { | |
throw std::runtime_error("Failed to decode image"); | |
} | |
// Convert the image to Base64 | |
std::string base64_img = image_to_base64(original_img); | |
// Convert the Base64 back to an image | |
cv::Mat decoded_img = base64_to_image(base64_img); | |
cv::imwrite("decoded_image.jpg", decoded_img); | |
cv::imwrite("original_img.jpg", original_img); | |
// The images should be identical | |
if (cv::countNonZero(original_img != decoded_img) != 0) { | |
std::cerr << "The images are not identical" << std::endl; | |
return -1; | |
} else { | |
std::cout << "The images are identical!" << std::endl; | |
} | |
// construct params | |
APIParams params{ | |
.data = {base64_img}, | |
.max_keypoints = {100, 100}, | |
.timestamps = {"0", "1"}, | |
.grayscale = {0}, | |
.image_hw = {{480, 640}, {240, 320}}, | |
.feature_type = 0, | |
.rotates = {0.0f, 0.0f}, | |
.scales = {1.0f, 1.0f}, | |
.reference_points = { | |
{1.23e+2f, 1.2e+1f}, | |
{5.0e-1f, 3.0e-1f}, | |
{2.3e+2f, 2.2e+1f}, | |
{6.0e-1f, 4.0e-1f} | |
}, | |
.binarize = {1} | |
}; | |
KeyPointResults kpts_results; | |
// Convert the parameters to JSON | |
Json::Value jsonData = paramsToJson(params); | |
std::string url = "http://127.0.0.1:8001/v1/extract"; | |
Json::StreamWriterBuilder writer; | |
std::string output = Json::writeString(writer, jsonData); | |
CURL* curl; | |
CURLcode res; | |
std::string readBuffer; | |
curl_global_init(CURL_GLOBAL_DEFAULT); | |
curl = curl_easy_init(); | |
if (curl) { | |
struct curl_slist* hs = NULL; | |
hs = curl_slist_append(hs, "Content-Type: application/json"); | |
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, hs); | |
curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); | |
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, output.c_str()); | |
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); | |
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); | |
res = curl_easy_perform(curl); | |
if (res != CURLE_OK) | |
fprintf(stderr, "curl_easy_perform() failed: %s\n", | |
curl_easy_strerror(res)); | |
else { | |
// std::cout << "Response from server: " << readBuffer << std::endl; | |
kpts_results = decode_response(readBuffer); | |
} | |
curl_easy_cleanup(curl); | |
} | |
curl_global_cleanup(); | |
return 0; | |
} | |