Update cmsisnn_demo.c
This commit is contained in:
parent
b8eb636bfd
commit
a5ad91fc1d
|
@ -6,6 +6,7 @@
|
|||
|
||||
const char *cifar10_label[] = {"Plane", "Car", "Bird", "Cat", "Deer", "Dog", "Frog", "Horse", "Ship", "Truck"};
|
||||
|
||||
// 获取最高预测结果的索引
|
||||
int get_top_prediction(q7_t *predictions)
|
||||
{
|
||||
int max_ind = 0;
|
||||
|
@ -21,6 +22,7 @@ int get_top_prediction(q7_t *predictions)
|
|||
return max_ind;
|
||||
}
|
||||
|
||||
// 进行模型推理
|
||||
int cmsisnn_inference(uint8_t *input_data)
|
||||
{
|
||||
q7_t output_data[10];
|
||||
|
@ -38,6 +40,7 @@ typedef struct
|
|||
uint16_t wfbuf;
|
||||
} IODEV;
|
||||
|
||||
// JPEG解码回调函数,用于读取数据
|
||||
unsigned int in_func_cmsisnn(JDEC *jd, uint8_t *buff, unsigned int nbyte)
|
||||
{
|
||||
IODEV *dev = (IODEV *)jd->device;
|
||||
|
@ -52,6 +55,7 @@ unsigned int in_func_cmsisnn(JDEC *jd, uint8_t *buff, unsigned int nbyte)
|
|||
}
|
||||
}
|
||||
|
||||
// JPEG解码回调函数,用于输出解码后的数据
|
||||
int out_func_cmsisnn(JDEC *jd, void *bitmap, JRECT *rect)
|
||||
{
|
||||
IODEV *dev = (IODEV *)jd->device;
|
||||
|
@ -77,12 +81,13 @@ int out_func_cmsisnn(JDEC *jd, void *bitmap, JRECT *rect)
|
|||
return 1;
|
||||
}
|
||||
|
||||
// CIFAR-10图像解码和推理的示例代码
|
||||
int cmsisnn_demo(int argc, char *argv[])
|
||||
{
|
||||
void *work;
|
||||
JDEC jdec;
|
||||
JRESULT res;
|
||||
IODEV devid;
|
||||
JDEC jdec;
|
||||
JRESULT res;
|
||||
IODEV devid;
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
|
@ -90,6 +95,7 @@ int cmsisnn_demo(int argc, char *argv[])
|
|||
return -1;
|
||||
}
|
||||
|
||||
// 打开JPEG文件
|
||||
devid.fp = fopen(argv[1], "r+");
|
||||
if (!devid.fp)
|
||||
{
|
||||
|
@ -97,6 +103,7 @@ int cmsisnn_demo(int argc, char *argv[])
|
|||
return -1;
|
||||
}
|
||||
|
||||
// 分配工作内存
|
||||
work = malloc(WORK_POOL_SIZE);
|
||||
if (work == NULL)
|
||||
{
|
||||
|
@ -105,11 +112,13 @@ int cmsisnn_demo(int argc, char *argv[])
|
|||
goto __exit;
|
||||
}
|
||||
|
||||
// 准备JPEG解码器
|
||||
res = jd_prepare(&jdec, in_func_cmsisnn, work, WORK_POOL_SIZE, &devid);
|
||||
if (res == JDR_OK)
|
||||
{
|
||||
printf("Image dimensions: %u by %u. %u bytes used.\n", jdec.width, jdec.height, 3100 - jdec.sz_pool);
|
||||
|
||||
// 分配解码后的RGB像素数据缓存
|
||||
devid.fbuf = malloc(3 * jdec.width * jdec.height);
|
||||
if (devid.fbuf == NULL)
|
||||
{
|
||||
|
@ -119,6 +128,7 @@ int cmsisnn_demo(int argc, char *argv[])
|
|||
}
|
||||
devid.wfbuf = jdec.width;
|
||||
|
||||
// 解码JPEG并输出到缓存
|
||||
res = jd_decomp(&jdec, out_func_cmsisnn, 0);
|
||||
if (res == JDR_OK)
|
||||
{
|
||||
|
@ -129,6 +139,7 @@ int cmsisnn_demo(int argc, char *argv[])
|
|||
printf("Failed to decompress: rc=%d\n", res);
|
||||
}
|
||||
|
||||
// 进行图像推理
|
||||
cmsisnn_inference(devid.fbuf);
|
||||
|
||||
if (devid.fbuf != NULL)
|
||||
|
@ -154,4 +165,4 @@ __exit:
|
|||
|
||||
#ifdef __RT_THREAD_H__
|
||||
MSH_CMD_EXPORT(cmsisnn_demo, cifar10 demo and filename should be followed);
|
||||
#endif
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue