C++의 응용 프로그램에서 Microsoft Face API를 사용하고 싶습니다. cpprest SDK를 사용하면 이미지 또는 이미지의 이진 데이터 URL을 보낼 수 있습니다. 문제는 내 이미지가 디스크에있는 파일이 아니라 메모리에있는 cv :: Mat입니다. stringstream을 통해 직렬화하려고 시도했지만 요청 메소드가 일부 문자열과 istream 만 허용하기 때문에 불평합니다. 여기C++ REST SDK를 사용하여 OpenCV 3에서 Cognitive Face API로 이미지 보내기
file_stream<unsigned char>::open_istream(filename)
.then([=](pplx::task<basic_istream<unsigned char>> previousTask)
{
try
{
auto fileStream = previousTask.get();
auto client = http_client{U("https://api.projectoxford.ai/face/v0/detections")};
auto query = uri_builder()
.append_query(U("analyzesFaceLandmarks"), analyzesFaceLandmarks ? "true" : "false")
.append_query(U("analyzesAge"), analyzesAge ? "true" : "false")
.append_query(U("analyzesGender"), analyzesGender ? "true" : "false")
.append_query(U("analyzesHeadPose"), analyzesHeadPose ? "true" : "false")
.append_query(U("subscription-key"), subscriptionKey)
.to_string();
client
.request(methods::POST, query, fileStream)
...
}
}
file_stream 파일을 여는 데 이용된다 : 파일로부터 이미지를 열면
다음 코드 좋다. 내가 만약 후 디코딩하고 이미지를 재 구축 할 수 있습니다로
// img is the cv::Mat
std::vector<uchar> buff;
cv::imencode(".jpg", img, buff);
std::stringstream ssbuff;
copy(buff.begin(), buff.end(), std::ostream_iterator<unsigned char>(ssbuff,""));
이 직렬화가 작동합니다 내가 이렇게 내 매트를 직렬화했습니다.
¿ 어떻게 클라이언트를 통해 opencv Mat 이미지를 서버에 보낼 수 있습니까?
fileStream 개체를 API에서 지정한 [이진 데이터] (그렇지 않은)로 바꾸어야합니다. https://westus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236 –