python数学建模算法,python数据模型和算法
想实现一个图片数据的输入,然后输出一个特征结结果,一下写法对吗?
(同Internationalorganizations)国际组织处理模型(简历:Mat img,向量V1)
{
const int img _ width=96/*图像尺寸*/
const int img _ height=112
const int img _ channels=3;/*图像量化通道*/
const int input _ index=0;//节点名预处理器/sub
if (img.cols!=img_width img.rows!=img_height) /*如果图像的大小和定义的不一样,则进行重新设置大小*/
{
cv:resize(img,img,cv:Size(img_width,img_height),(0,0),(0,0),cv:INTER _ LINEAR);
}
FILE* fp=fopen(model_path, Rb );/*加载模型*/
if (fp==NULL)
{
printf(fopen %s失败!\n ,型号_路径);
return-1;
}
fseek(fp,0,SEEK _ END);/*标记复调钢琴从文件头开始到文件末尾*/
int model _ len=ftell(FP);/*获取复调钢琴从头到尾的文件长度*/
void * model=malloc(model _ len);/*动态申请内存*/
fseek(fp,0,SEEK _ SET);/*把文件指针指向文件的开始*/
if (model_len!=fread(model,1,model_len,fp)) /*读取的长度不等于模型长度,则释放*/
{
printf(fread %s失败!\n ,型号_路径);
免费(模特);
return-1;
}
/*开始推理*/
rknn _输入输入[1];/*模型的一个输入,用来作为参数传入给rknn_inputs_set函数*/
rknn _输出输出[1];/*模型的一个输出,用来作为参数传入给rknn_outputs_get函数*/
rknn _ tensor _ attr outputs _ attr[1];/*模型的辩论歌属性*/
int ret=0;/*返回值*/
rknn _ context CTX=0;/* rknn _上下文对象(无符号龙龙类型)*/
printf(rknn_init .\ n’);
ret=rknn_init(ctx,model,model_len,RKNN _ FLAG _ PRIOR _ MEDIUM);/*1、初始化rknn _上下文对象,优先级中*/
if (ret 0)
{
printf(rknn_init失败!ret=%d\n ,ret);
转到错误;
}
printf(rknn查询输入输出编号. \ n );
rknn _ input _ output _ num io _ num/*2、获取投入和输出的个数*/
ret=rknn_query(ctx,RKNN_QUERY_IN_OUT_NUM,io_num,sizeof(io _ NUM));
printf(输入号:%d输出号:%d\n ,io_num.n _输入,io _ num。n _ output);
if (ret 0)
{
printf(rknn查询输入输出失败!ret=%d\n ,ret);
转到错误;
}
printf(rknn查询输入属性. \ n );
rknn _ tensor _ attr input _ attrs[1];/*3、获取输入属性,输入输出数量n输入为输入个数*/
memset(input_attrs,0,sizeof(input_attrs)).
int I;
for(I=0;I 1;我)
{
输入属性.index=I;
ret=rknn_query(ctx,RKNN_QUERY_INPUT_ATTR,(input_attrs[0]),sizeof(RKNN _ tensor _ attr);
printf(输入数据类型:%d \n ,input_attrs[0].类型);
printf(输入数据fmt :%d \n ,input_attrs[0].fmt);
if (ret 0)
{
printf(rknn_query失败!ret=%d\n ,ret);
转到错误;
}
}
printf(rknn查询输出属性. \ n );
rknn _ tensor _ attr output _ attrs[1];/*4、获取输出属性,io _编号。n _输出为输出个数*/
memset(output_attrs,0,sizeof(output _ attrs));
for(I=0;I 1;我)
{
输出_属性[我].index=I;
ret=rknn_query(ctx,RKNN_QUERY_OUTPUT_ATTR,(output_attrs[0]),sizeof(RKNN _ tensor _ attr);
printf(输出数据类型:%d \n ,output_attrs[0].类型);
if (ret 0)
{
printf(rknn_query失败!ret=%d\n ,ret);
转到错误;
}
}
printf(rknn输入集. \ n );
rknn _ input inputs _ set[1];/*5、对输入进行设置*/
输入_设置[0]。索引=输入_索引;/*rknn模型的输入节点的索引*/
输入_设置[0]。img.data/*cpu可以访问的缓冲器指针,一般是指向由照相机产生的图像数据*/
输入_设置[0]。size=img _ width * img _ height * img _ channels;/*为缓冲器的大小*/
输入_设置[0]。pass _ through=false/*输入数据直通模式选择,假的是输入属性于rknn _查询查询得到的投入属性不一致
图雷是输入属性于rknn _查询查询得到的投入属性一致*/
输入_设置[0]。type=RKNN _ TENSOR _ UINT8/*为缓冲器的数据类型*/
输入_设置[0]。fmt=RKNN _张量_ NHWC;/*数据格式*/
ret=rknn_inputs_set(ctx,1,inputs _ set);
if (ret 0)
{
printf(rknn_input_set失败!ret=%d\n ,ret);
转到错误;
}
printf(rknn运行. \ n );
ret=rknn_run(ctx,NULL);/*6、进行推理操作*/
if (ret 0)
{
printf(rknn_run失败!ret=%d\n ,ret);
转到错误;
}
printf(rknn获取输出. \ n );
rknn _ output outputs _ get[1];/*7、获取输出结果*/
memset(outputs_get,0,sizeof(outputs _ get));
for(I=0;I 1;我)
{
outputs_get[i].want _ float=true/*输出数据格式,真的为浮点32,假为原始格式*/
outputs_get[i].is _ prealloc=false/*内存分配,真的为程序员分配,假的为近邻自动分配*/
}
ret=rknn_outputs_get(ctx,io_num.n_output,outputs_get,NULL);
float * ftype
char * sprintfBuf
ftype=static _ cast(outputs _ get-buf);
char stringBuf[128];
文件* fpout
fpout=fopen(outputResult.txt , w );
for(I=0;I(outputs _ get-size/4);我)
{
v1。push _ back(ftype[I]);
sprintf(sprintfBuf, %f\n ,ftype[I]);
fwrite(sprintfBuf,strlen(sprintfBuf),1,FP out);
}
rknn_outputs_release(ctx,1,outputs _ get);/*8、释放由rknn_outputs_get获取的产出*/
免费(模特);
错误:
如果(ctx)
{
rknn _ destroy(CTX);
}
如果(型号)
{
免费(模特);
}
中频(fp)
{
fclose(FP);
}
返回0;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。