<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic I had error in my earlier in Intel® Distribution of OpenVINO™ Toolkit</title>
    <link>https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/How-to-load-image-Mat-opencv-obj-directly-to-data-pointer-for/m-p/1131337#M8672</link>
    <description>&lt;P&gt;I had error in my earlier code at&lt;/P&gt;&lt;BLOCKQUOTE&gt;
&lt;PRE class="brush:cpp; class-name:dark;"&gt;for (size_t pid = 0; pid &amp;lt; image_size; ++pid)
{
	for (size_t ch = 0; ch &amp;lt; num_channels; ++ch)
	 {
		data[ch * image_size + pid] = crop.ptr&amp;lt;unsigned char&amp;gt;()[pid*num_channels + ch];
	 }
}&lt;/PRE&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Need to arrange three channel data one after another. Earlier one was not.&lt;/P&gt;
&lt;P&gt;Then my code has Input preparation as&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;PRE class="brush:cpp; class-name:dark;"&gt;InputsDataMap inputsInfo(recNetwork.getInputsInfo());
 if (inputsInfo.size() != 1 &amp;amp;&amp;amp; inputsInfo.size() != 2) throw std::logic_error("Sample supports topologies only with 1 or 2 inputs");
 std::string recimageInputName, recimInfoInputName;
 InputInfo::Ptr recinputInfo = nullptr;
 SizeVector inputImageDims;
 for (auto &amp;amp; item : inputsInfo) {
      if (item.second-&amp;gt;getInputData()-&amp;gt;getTensorDesc().getDims().size() == 4) {
           recimageInputName = item.first;
           recinputInfo = item.second;
           slog::info &amp;lt;&amp;lt; "Batch size is "&amp;lt;&amp;lt;std::to_string(recNetworkReader.getNetwork().getBatchSize()) &amp;lt;&amp;lt; slog::endl;
           Precision inputPrecision = Precision::U8;
           item.second-&amp;gt;setPrecision(inputPrecision);
           if (FLAGS_auto_resize) {
		       recinputInfo-&amp;gt;getPreProcess().setResizeAlgorithm(ResizeAlgorithm::RESIZE_BILINEAR);
		       recinputInfo-&amp;gt;getInputData()-&amp;gt;setLayout(Layout::NHWC);
           } else {
		       recinputInfo-&amp;gt;getInputData()-&amp;gt;setLayout(Layout::NCHW);
           }
     } else if (item.second-&amp;gt;getInputData()-&amp;gt;getTensorDesc().getDims().size() == 2) {
           recimInfoInputName = item.first;
           Precision inputPrecision = Precision::FP32;
           item.second-&amp;gt;setPrecision(inputPrecision);
           if ((item.second-&amp;gt;getTensorDesc().getDims()[1] != 3 &amp;amp;&amp;amp; item.second-&amp;gt;getTensorDesc().getDims()[1] != 6)) {
                    throw std::logic_error("Invalid input info. Should be 3 or 6 values length");
           }
     }
 }
 if (recinputInfo == nullptr) {
        recinputInfo = inputsInfo.begin()-&amp;gt;second;
           
 }&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Then get the input data and do inference as follows&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;PRE class="brush:cpp; class-name:dark;"&gt;cv::Mat crop1 = curr_frame.clone();
 cv::Mat crop(inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[2],inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[3],crop.type());
cv::resize(crop1, crop, crop.size(), 0, 0, cv::INTER_LINEAR);
// --------------------------- Prepare input for Recognition-------------------------
 Blob::Ptr imageInput = rec_infer_request-&amp;gt;GetBlob(recimageInputName);
unsigned char* data = static_cast&amp;lt;unsigned char*&amp;gt;(imageInput-&amp;gt;buffer());
size_t image_size = imageInput-&amp;gt;getTensorDesc().getDims()[3] * imageInput-&amp;gt;getTensorDesc().getDims()[2];
 for (size_t pid = 0; pid &amp;lt; image_size; ++pid)
{
    for (size_t ch = 0; ch &amp;lt; num_channels; ++ch)
   {
	data[ch * image_size + pid] = crop.ptr&amp;lt;unsigned char&amp;gt;()[pid*num_channels + ch];
   }
}
if (recimInfoInputName != "") {
	Blob::Ptr input2 = rec_infer_request-&amp;gt;GetBlob(recimInfoInputName);
	auto imInfoDim = inputsInfo.find(recimInfoInputName)-&amp;gt;second-&amp;gt;getTensorDesc().getDims()[1];
       float *p = input2-&amp;gt;buffer().as&amp;lt;PrecisionTrait&amp;lt;Precision::FP32&amp;gt;::value_type*&amp;gt;();
 	p[0] = static_cast&amp;lt;float&amp;gt;(inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[2]);
	p[1] = static_cast&amp;lt;float&amp;gt;(inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[3]);
	 for (size_t k = 2; k &amp;lt; imInfoDim; k++) {
		 p&lt;K&gt; = 1.0f;  // all scale factors are set to 1.0
	}
 }
rec_infer_request-&amp;gt;Infer();
 const Blob::Ptr output_blob = rec_infer_request-&amp;gt;GetBlob(recoutputName);
const float* recdetection = static_cast&amp;lt;PrecisionTrait&amp;lt;Precision::FP32&amp;gt;::value_type*&amp;gt;(output_blob-&amp;gt;buffer());
&lt;/K&gt;&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;But I have very low confidence in detection. My training in Tensorflow is fine and tested with high accuracy and recall.&lt;/P&gt;</description>
    <pubDate>Sat, 20 Apr 2019 10:41:00 GMT</pubDate>
    <dc:creator>nnain1</dc:creator>
    <dc:date>2019-04-20T10:41:00Z</dc:date>
    <item>
      <title>How to load image Mat (opencv obj) directly to data pointer for inference?</title>
      <link>https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/How-to-load-image-Mat-opencv-obj-directly-to-data-pointer-for/m-p/1131336#M8671</link>
      <description>&lt;P&gt;Inside object_detection_sample_ssd, there is loading images from file names.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;FormatReader::ReaderPtr reader(i.c_str());&lt;/P&gt;&lt;P&gt;where i is file name.&lt;/P&gt;&lt;P&gt;std::shared_ptr&amp;lt;unsigned char&amp;gt; data(reader-&amp;gt;getData(inputInfo-&amp;gt;getTensorDesc().getDims()[3], inputInfo-&amp;gt;getTensorDesc().getDims()[2]));&lt;/P&gt;&lt;P&gt;So it is loading from file name.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;I need to load from image Mat after reading image from camera or video. So I did as follows.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;cv::Mat crop = curr_frame.clone();&lt;/P&gt;&lt;P&gt;//Resize&lt;/P&gt;&lt;P&gt;cv::Mat crop_(inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[2],inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[3],crop.type());&lt;/P&gt;&lt;P&gt;cv::resize(crop, crop_, crop_.size(), 0, 0, cv::INTER_LINEAR);&lt;/P&gt;&lt;P&gt;Blob::Ptr imageInput = rec_infer_request-&amp;gt;GetBlob(recimageInputName);&lt;BR /&gt;unsigned char* data = static_cast&amp;lt;unsigned char*&amp;gt;(imageInput-&amp;gt;buffer());&lt;/P&gt;&lt;P&gt;int cnt=0;&lt;/P&gt;&lt;P&gt;int colcnt=crop_.cols*3;//rgb&lt;BR /&gt;&amp;nbsp;for (int y = 0; y &amp;lt; crop_.rows; ++y)&lt;BR /&gt;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; unsigned char* row_ptr = crop_.ptr&amp;lt;unsigned char&amp;gt;(y);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int x = 0; x &amp;lt; colcnt; ++x)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;data[cnt++] = row_ptr&lt;X&gt;;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&amp;nbsp;if (recimInfoInputName != "") {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Blob::Ptr input2 = rec_infer_request-&amp;gt;GetBlob(recimInfoInputName);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; auto imInfoDim = inputsInfo.find(recimInfoInputName)-&amp;gt;second-&amp;gt;getTensorDesc().getDims()[1];&lt;/X&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float *p = input2-&amp;gt;buffer().as&amp;lt;PrecisionTrait&amp;lt;Precision::FP32&amp;gt;::value_type*&amp;gt;();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p[0] = static_cast&amp;lt;float&amp;gt;(inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[2]);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p[1] = static_cast&amp;lt;float&amp;gt;(inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[3]);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (size_t k = 2; k &amp;lt; imInfoDim; k++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p&lt;K&gt; = 1.0f;&amp;nbsp; // all scale factors are set to 1.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&amp;nbsp;rec_infer_request-&amp;gt;Infer();&lt;BR /&gt;&amp;nbsp; const Blob::Ptr output_blob = rec_infer_request-&amp;gt;GetBlob(recoutputName);&lt;BR /&gt;&amp;nbsp;const float* recdetection = static_cast&amp;lt;PrecisionTrait&amp;lt;Precision::FP32&amp;gt;::value_type*&amp;gt;(output_blob-&amp;gt;buffer());&lt;/K&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;Is the way how I load image for inference correct?&lt;/P&gt;&lt;P&gt;Do I still need to swap BGR to RGB? The problem is inference output has no detections. Confidence is very low.&lt;/P&gt;&lt;P&gt;This is how input data is prepared.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;InputsDataMap inputsInfo(recNetwork.getInputsInfo());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (inputsInfo.size() != 1 &amp;amp;&amp;amp; inputsInfo.size() != 2) throw std::logic_error("Sample supports topologies only with 1 or 2 inputs");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::string recimageInputName, recimInfoInputName;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InputInfo::Ptr recinputInfo = nullptr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SizeVector inputImageDims;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (auto &amp;amp; item : inputsInfo) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (item.second-&amp;gt;getInputData()-&amp;gt;getTensorDesc().getDims().size() == 4) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recimageInputName = item.first;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recinputInfo = item.second;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; slog::info &amp;lt;&amp;lt; "Batch size is " &amp;lt;&amp;lt; std::to_string(recNetworkReader.getNetwork().getBatchSize()) &amp;lt;&amp;lt; slog::endl;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Precision inputPrecision = Precision::U8;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.second-&amp;gt;setPrecision(inputPrecision);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FLAGS_auto_resize) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recinputInfo-&amp;gt;getPreProcess().setResizeAlgorithm(ResizeAlgorithm::RESIZE_BILINEAR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recinputInfo-&amp;gt;getInputData()-&amp;gt;setLayout(Layout::NHWC);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recinputInfo-&amp;gt;getInputData()-&amp;gt;setLayout(Layout::NCHW);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (item.second-&amp;gt;getInputData()-&amp;gt;getTensorDesc().getDims().size() == 2) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recimInfoInputName = item.first;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Precision inputPrecision = Precision::FP32;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.second-&amp;gt;setPrecision(inputPrecision);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((item.second-&amp;gt;getTensorDesc().getDims()[1] != 3 &amp;amp;&amp;amp; item.second-&amp;gt;getTensorDesc().getDims()[1] != 6)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw std::logic_error("Invalid input info. Should be 3 or 6 values length");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (recinputInfo == nullptr) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recinputInfo = inputsInfo.begin()-&amp;gt;second;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Alternate Method:&lt;/P&gt;&lt;P&gt;I also tried&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;frameToBlob(crop, rec_infer_request, recimageInputName);&lt;/P&gt;&lt;P&gt;rec_infer_request-&amp;gt;Infer();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;But I have segmentation fault at&amp;nbsp; rec_infer_request-&amp;gt;Infer();&lt;/P&gt;</description>
      <pubDate>Sat, 20 Apr 2019 02:57:47 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/How-to-load-image-Mat-opencv-obj-directly-to-data-pointer-for/m-p/1131336#M8671</guid>
      <dc:creator>nnain1</dc:creator>
      <dc:date>2019-04-20T02:57:47Z</dc:date>
    </item>
    <item>
      <title>I had error in my earlier</title>
      <link>https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/How-to-load-image-Mat-opencv-obj-directly-to-data-pointer-for/m-p/1131337#M8672</link>
      <description>&lt;P&gt;I had error in my earlier code at&lt;/P&gt;&lt;BLOCKQUOTE&gt;
&lt;PRE class="brush:cpp; class-name:dark;"&gt;for (size_t pid = 0; pid &amp;lt; image_size; ++pid)
{
	for (size_t ch = 0; ch &amp;lt; num_channels; ++ch)
	 {
		data[ch * image_size + pid] = crop.ptr&amp;lt;unsigned char&amp;gt;()[pid*num_channels + ch];
	 }
}&lt;/PRE&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Need to arrange three channel data one after another. Earlier one was not.&lt;/P&gt;
&lt;P&gt;Then my code has Input preparation as&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;PRE class="brush:cpp; class-name:dark;"&gt;InputsDataMap inputsInfo(recNetwork.getInputsInfo());
 if (inputsInfo.size() != 1 &amp;amp;&amp;amp; inputsInfo.size() != 2) throw std::logic_error("Sample supports topologies only with 1 or 2 inputs");
 std::string recimageInputName, recimInfoInputName;
 InputInfo::Ptr recinputInfo = nullptr;
 SizeVector inputImageDims;
 for (auto &amp;amp; item : inputsInfo) {
      if (item.second-&amp;gt;getInputData()-&amp;gt;getTensorDesc().getDims().size() == 4) {
           recimageInputName = item.first;
           recinputInfo = item.second;
           slog::info &amp;lt;&amp;lt; "Batch size is "&amp;lt;&amp;lt;std::to_string(recNetworkReader.getNetwork().getBatchSize()) &amp;lt;&amp;lt; slog::endl;
           Precision inputPrecision = Precision::U8;
           item.second-&amp;gt;setPrecision(inputPrecision);
           if (FLAGS_auto_resize) {
		       recinputInfo-&amp;gt;getPreProcess().setResizeAlgorithm(ResizeAlgorithm::RESIZE_BILINEAR);
		       recinputInfo-&amp;gt;getInputData()-&amp;gt;setLayout(Layout::NHWC);
           } else {
		       recinputInfo-&amp;gt;getInputData()-&amp;gt;setLayout(Layout::NCHW);
           }
     } else if (item.second-&amp;gt;getInputData()-&amp;gt;getTensorDesc().getDims().size() == 2) {
           recimInfoInputName = item.first;
           Precision inputPrecision = Precision::FP32;
           item.second-&amp;gt;setPrecision(inputPrecision);
           if ((item.second-&amp;gt;getTensorDesc().getDims()[1] != 3 &amp;amp;&amp;amp; item.second-&amp;gt;getTensorDesc().getDims()[1] != 6)) {
                    throw std::logic_error("Invalid input info. Should be 3 or 6 values length");
           }
     }
 }
 if (recinputInfo == nullptr) {
        recinputInfo = inputsInfo.begin()-&amp;gt;second;
           
 }&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Then get the input data and do inference as follows&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;PRE class="brush:cpp; class-name:dark;"&gt;cv::Mat crop1 = curr_frame.clone();
 cv::Mat crop(inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[2],inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[3],crop.type());
cv::resize(crop1, crop, crop.size(), 0, 0, cv::INTER_LINEAR);
// --------------------------- Prepare input for Recognition-------------------------
 Blob::Ptr imageInput = rec_infer_request-&amp;gt;GetBlob(recimageInputName);
unsigned char* data = static_cast&amp;lt;unsigned char*&amp;gt;(imageInput-&amp;gt;buffer());
size_t image_size = imageInput-&amp;gt;getTensorDesc().getDims()[3] * imageInput-&amp;gt;getTensorDesc().getDims()[2];
 for (size_t pid = 0; pid &amp;lt; image_size; ++pid)
{
    for (size_t ch = 0; ch &amp;lt; num_channels; ++ch)
   {
	data[ch * image_size + pid] = crop.ptr&amp;lt;unsigned char&amp;gt;()[pid*num_channels + ch];
   }
}
if (recimInfoInputName != "") {
	Blob::Ptr input2 = rec_infer_request-&amp;gt;GetBlob(recimInfoInputName);
	auto imInfoDim = inputsInfo.find(recimInfoInputName)-&amp;gt;second-&amp;gt;getTensorDesc().getDims()[1];
       float *p = input2-&amp;gt;buffer().as&amp;lt;PrecisionTrait&amp;lt;Precision::FP32&amp;gt;::value_type*&amp;gt;();
 	p[0] = static_cast&amp;lt;float&amp;gt;(inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[2]);
	p[1] = static_cast&amp;lt;float&amp;gt;(inputsInfo[recimageInputName]-&amp;gt;getTensorDesc().getDims()[3]);
	 for (size_t k = 2; k &amp;lt; imInfoDim; k++) {
		 p&lt;K&gt; = 1.0f;  // all scale factors are set to 1.0
	}
 }
rec_infer_request-&amp;gt;Infer();
 const Blob::Ptr output_blob = rec_infer_request-&amp;gt;GetBlob(recoutputName);
const float* recdetection = static_cast&amp;lt;PrecisionTrait&amp;lt;Precision::FP32&amp;gt;::value_type*&amp;gt;(output_blob-&amp;gt;buffer());
&lt;/K&gt;&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;But I have very low confidence in detection. My training in Tensorflow is fine and tested with high accuracy and recall.&lt;/P&gt;</description>
      <pubDate>Sat, 20 Apr 2019 10:41:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/How-to-load-image-Mat-opencv-obj-directly-to-data-pointer-for/m-p/1131337#M8672</guid>
      <dc:creator>nnain1</dc:creator>
      <dc:date>2019-04-20T10:41:00Z</dc:date>
    </item>
    <item>
      <title>What I did was correct. Just</title>
      <link>https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/How-to-load-image-Mat-opencv-obj-directly-to-data-pointer-for/m-p/1131338#M8673</link>
      <description>&lt;P&gt;What I did was correct. Just that I thought, the highest confidences are on top of the array. Actually they are not in order from highest to lowest.&lt;/P&gt;&lt;P&gt;By the way, do I need to convert BGR to RGB in inference?&lt;/P&gt;&lt;P&gt;Do I need to normalize the image to be between -1 and 1?&lt;/P&gt;&lt;P&gt;Because the accuracy and recall are much lower than tensorflow model.&lt;/P&gt;</description>
      <pubDate>Sat, 20 Apr 2019 15:07:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/How-to-load-image-Mat-opencv-obj-directly-to-data-pointer-for/m-p/1131338#M8673</guid>
      <dc:creator>nnain1</dc:creator>
      <dc:date>2019-04-20T15:07:00Z</dc:date>
    </item>
    <item>
      <title>Dearest naing, nyan,</title>
      <link>https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/How-to-load-image-Mat-opencv-obj-directly-to-data-pointer-for/m-p/1131339#M8674</link>
      <description>&lt;P&gt;Dearest&amp;nbsp;naing, nyan,&lt;/P&gt;&lt;P&gt;OpenVino samples usually use&amp;nbsp;OpenCV to read in images and yes, OpenCV returns BGR. So if you trained your model on RGB layout then you definitely need to specify&amp;nbsp;&amp;nbsp;--reverse_input_channels to model optimizer.&lt;/P&gt;&lt;P&gt;Also please study the OpenVino sample hello_autoresize_classification. It does exactly what you want :&lt;/P&gt;
&lt;PRE class="brush:cpp; class-name:dark;"&gt;// --------------------------- 6. Prepare input --------------------------------------------------------
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Read input image to a blob and set it to an infer request without resize and layout conversions. */
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cv::Mat image = cv::imread(input_image_path);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Blob::Ptr imgBlob = wrapMat2Blob(image); &amp;nbsp;// just wrap Mat data by Blob::Ptr without allocating of new memory
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; infer_request.SetBlob(input_name, imgBlob); &amp;nbsp;//&amp;nbsp;&lt;/PRE&gt;

&lt;P&gt;Thanks,&lt;/P&gt;
&lt;P&gt;Shubha&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Apr 2019 15:59:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/How-to-load-image-Mat-opencv-obj-directly-to-data-pointer-for/m-p/1131339#M8674</guid>
      <dc:creator>Shubha_R_Intel</dc:creator>
      <dc:date>2019-04-23T15:59:00Z</dc:date>
    </item>
  </channel>
</rss>

