/*
* linkuang.cpp
*
* Created on: 2020年4月20日
* Author: root
*/
#include "linkuang.h"
using namespace std;
using namespace cv;
linkuang::linkuang(int imgsize,float lesswaste_prob,float morewaste_prob) {
// TODO Auto-generated constructor stub
standard_rows=imgsize;
standard_cols=imgsize;
lesswastethresh=lesswaste_prob;
morewastethresh=morewaste_prob;
getimgsindex=0;
showtestindex=0;
std::string graphpath="/home/jumper/xrt/reference/model/cnnmodel/my_unet_shitou_youhua5.pb";
///////CNN initiation--
tensorflow::Status status = NewSession(tensorflow::SessionOptions(), &session);
if (!status.ok())
{
throw std::runtime_error("ERROR: linkuang CNN NewSession() init failed...");
}
tensorflow::GraphDef graphdef;
tensorflow::Status status_load = ReadBinaryProto(tensorflow::Env::Default(), graphpath, &graphdef);
if (!status_load.ok())
{
std::cout << status_load.ToString() <<std::endl;
throw std::runtime_error("ERROR: Loading model failed...");
}
tensorflow::Status status_create = session->Create(graphdef);
if (!status_create.ok())
{
std::cerr <<status_create.ToString() << std::endl;
throw std::runtime_error("ERROR: Creating graph in session failed...");
}
}
int linkuang::linkuangSingleInference(cv::Mat &cnncolorimg,cv::Mat &outputimg)
{
Mat standardinput(standard_rows, standard_cols, CV_8UC1);
resize(cnncolorimg,standardinput,Size(standard_cols,standard_rows),0,0,1);
//CNN start...和训练做相同的预处理
tensorflow::Tensor resized_tensor(tensorflow::DT_FLOAT, tensorflow::TensorShape({1,standard_rows,standard_cols,1}));
auto outputMap =resized_tensor.tensor<float,4>();
for(int r=0;r<standard_rows;r++)
{
for(int c=0;c<standard_cols;c++)
{
outputMap(0,r,c,0)=float(standardinput.ptr<uchar>(r)[c])/255;
}
}
//CNN input
std::vector<std::pair<std::string, tensorflow::Tensor> > inputs;
std::string Input1Name = "input_1_1";
inputs.push_back(std::make_pair(Input1Name, resized_tensor));
//CNN predict
std::vector<tensorflow::Tensor> outputs;
std::string output="output_1";
// double timeStart = (double)cv::getTickCount();
tensorflow::Status status_run = session->Run({{Input1Name,resized_tensor}}, {output}, {}, &outputs);
if (!status_run.ok()) {
std::cout <<"ERROR: RUN failed in real inference()..."<< status_run.ToString() << "\n";
return -1;
}
// double nTime = ((double)cv::getTickCount() - timeStart) / cv::getTickFrequency()*1000;
// cout<<"~~~~~~~~~~~~~~~~~~~~~~~~image "<<showtestindex<<" time: "<<nTime<<" ms!"<<endl;
int flag=getOutputImg(outputs[0],outputimg);
if(flag!=0)
{
std::cout <<"ERROR: RUN failed in getCnnRealLabel()..."<<std::endl;
return -2;
}
showtestindex++;
return 0;
}
//直接从tensor得到分割后的图像,输出二维图像,原来直接copy就行,天哪摸索了太久,这方面资料太少了!!!
int linkuang::getOutputImg(tensorflow::Tensor &output,cv::Mat &outputimg)
{
//112 get output,fast
memcpy(outputimg.data, output.tensor_data().data(), output.tensor_data().size());
return 0;
}
//得到标签,以前用于图像分类中,就是这样从预测后的tensor得到概率
int linkuang::getCnnRealLabel(tensorflow::Tensor &probabilities,int &output_class_id,float &output_prob)
{
int ndim2 = probabilities.shape().dims();
auto tmap = probabilities.tensor<float, 2>();
int output_dim = probabilities.shape().dim_size(1);
output_class_id=0;
float primerprob=tmap(0, 0);
if(tmap(0, 1)>primerprob)
{
primerprob=tmap(0, 1);
output_class_id=1;
}
output_prob=primerprob;
return 0;
}
linkuang::~linkuang() {
// TODO Auto-generated destructor stub
tensorflow::Status freestatus=session->Close();
if (!freestatus.ok())
{
throw std::runtime_error("ERROR: close session...");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
tensorflow c++图像分割
共53个文件
png:48个
cpp:2个
tiff:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 98 浏览量
2023-03-01
17:52:36
上传
评论
收藏 29.05MB ZIP 举报
温馨提示
使用编译好的tensorflow C++第三方库,调用库中的函数进行图像分割,注意调用方法与众所周知的图像分类不同。经过查找很久才知道,效果如博文https://blog.csdn.net/wd1603926823/article/details/45080651中所示。
资源推荐
资源详情
资源评论
收起资源包目录
TF_C _segmentation.zip (53个子文件)
TF_C++_segmentation
source_code
src-simple
testTF-gpu.cpp 3KB
linkuang.h 2KB
linkuang.cpp 4KB
testimgs
resultimg
112
34_17_low_c++.png 833B
34_21_low.png 2KB
34_6_low.png 2KB
34_21_low_c++.png 2KB
34_16_low_c++.png 716B
34_6_low_c++.png 2KB
34_10_low_c++.png 2KB
34_20_low.png 2KB
34_20_low_c++.png 2KB
34_19_low.png 2KB
34_4_low_c++.png 3KB
34_1_low_c++.png 1001B
34_14_low.png 2KB
34_22_low_c++.png 1KB
34_7_low.png 977B
34_17_low.png 833B
34_14_low_c++.png 2KB
34_18_low.png 1KB
34_5_low_c++.png 1KB
34_11_low.png 1KB
34_13_low_c++.png 2KB
34_4_low.png 3KB
34_9_low.png 731B
34_22_low.png 1KB
34_1_low.png 1001B
34_18_low_c++.png 1KB
34_8_low.png 679B
34_12_low.png 2KB
34_8_low_c++.png 679B
34_2_low.png 2KB
34_0_low_c++.png 738B
34_10_low.png 2KB
34_15_low.png 577B
34_5_low.png 1KB
34_13_low.png 2KB
34_11_low_c++.png 1KB
34_7_low_c++.png 977B
34_0_low.png 738B
34_15_low_c++.png 577B
34_3_low.png 2KB
34_2_low_c++.png 2KB
34_19_low_c++.png 2KB
34_9_low_c++.png 731B
34_3_low_c++.png 2KB
34_23_low_c++.png 405B
34_23_low.png 405B
34_12_low_c++.png 2KB
34_16_low.png 716B
srcimg
34_low.tiff 1.85MB
cnnmodel
my_unet_shitou_youhua5.pb 29.38MB
共 53 条
- 1
资源评论
元气少女缘结神
- 粉丝: 6065
- 资源: 65
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功