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 –