heiheiOo

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo  发布于  2016-07-20 11:05:28
采纳率 0%
11个问答
8845

有没有前辈用过HI_MPI_IVE_GMM()吖?有一个小问题咨询一下~

 
API函数原型:
HI_S32 HI_MPI_IVE_GMM(IVE_HANDLE *pIveHandle, IVE_SRC_IMAGE_S *pstSrc,

IVE_DST_IMAGE_S *pstFg, IVE_DST_IMAGE_S *pstBg, IVE_MEM_INFO_S *pstModel,

IVE_GMM_CTRL_S *pstGmmCtrl, HI_BOOL bInstant);

疑惑的地方在于IVE_MEM_INFO_S 类型的*pstModel, 模型参数指针。

typedef struct hiIVE_MEM_INFO_S
{
HI_U32 u32PhyAddr;
HI_U8 *pu8VirAddr;
HI_U32 u32Size;
}IVE_MEM_INFO_S;

所以*pstModel的u32PhyAddr和*pu8VirAddr指向哪里吖?Size又是谁的size?
指向后面的IVE_GMM_CTRL_S *pstGmmCtrl控制参数吗? *pstGmmCtrl本身就会传进来。

不太理解*pstModel的意义,还望前辈解惑!
我来回答
回答32个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-20 11:36:50
认可0
本帖最后由 zhuangweiye 于 2016-7-20 11:40 编辑

看文档

灰度图像 GMM 采用n 个高斯模型,pstModel 的内存排列方式如图2-12 所示
一个像素的单个高斯模型参数weight 用2 字节、mean 用2 字节、var 用3 字节;
因此pstModel 需要分配的内存大小:
pstModel→u32Size = 7 * pstSrc→u16Width * pstSrc→u16Height *pstGmmCtrl→u8ModeNum

也就是说图像大小固定时 pstGmmCtrl→u8ModeNum就决定了model要占内存的大小(一般可以考虑取为3)

size知道了那么剩下就是开MMZ内存了
这个上次说过了HI_MPI_SYS_MmzAlloc_Cached()就得到phyaddr和viraddr了

简单的说, IVE需要一块内存来放GMM模型的实际值(其实就是每个像素点高斯模型的mean和var,以及每个高斯模型的权重)
那么就按规定开一块给IVE就好了

而pstGmmCtrl是设置GMM的一些参数

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-20 13:11:01
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34360&ptid=12019]zhuangweiye 发表于 2016-7-20 11:36[/url]
看文档

灰度图像 GMM 采用n 个高斯模型,pstModel 的内存排列方式如图2-12 所示
[/quote]

原来如此!
原来pstModel开辟的内存是这个作用。
感谢感谢!

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-20 13:17:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34360&ptid=12019]zhuangweiye 发表于 2016-7-20 11:36[/url]
看文档

灰度图像 GMM 采用n 个高斯模型,pstModel 的内存排列方式如图2-12 所示
[/quote]

不好意思还有一个小疑惑,文档中有IVE_GMM_CTRL_S的参考参数,会有<<这个符号,想问一下这个是左移运算的意思吗?还是表示一个范围?

例程里的赋值是这样的:
    pstGmm->stGmmCtrl.u0q16InitWeight = 3276; //0.05
    pstGmm->stGmmCtrl.u0q16BgRatio = 52428;   //0.8
    pstGmm->stGmmCtrl.u22q10MaxVar = (2000 << 10);
    pstGmm->stGmmCtrl.u22q10MinVar = (200 << 10);
    pstGmm->stGmmCtrl.u22q10NoiseVar = (225<<10);
    pstGmm->stGmmCtrl.u8q8VarThr = 1600;
    pstGmm->stGmmCtrl.u8ModelNum = 3;
    pstGmm->stGmmCtrl.u0q16LearnRate = 327;

(2000<<10)数字好大吖……

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-20 13:40:44
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34370&ptid=12019]heiheiOo 发表于 2016-7-20 13:17[/url]
不好意思还有一个小疑惑,文档中有IVE_GMM_CTRL_S的参考参数,会有stGmmCtrl.u0q16BgRatio = 52428;   // ...[/quote]

标准的C代码, 是左移

其实这个就是定点数的表示方法
比如, 16.16格式的定点数

1 << 16 表示 16.16格式的 1

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-20 14:01:41
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34372&ptid=12019]zhuangweiye 发表于 2016-7-20 13:40[/url]
标准的C代码, 是左移

其实这个就是定点数的表示方法
[/quote]

这样吖…学到了~

前辈我想问一下,如果有一个本地的视频文件(如.h264),海思有没有什么API可以读入的吖?

我现在用的方式是一组图像序列,PC上处理好之后将每帧像素值存为一个txt,得到了一系列的txt文件,然后MmzAlloc之后用虚拟地址一个个赋值,计算好之后得到IVE_IMAGE_S Desimg,再将Desimg数据输出到txt文件,再在PC上逆向转成图。这好麻烦啊……

希望能指导一下本地视频文件的打开方式,以及IVE计算之后得到的IVE_DES_IMAGE_S应该怎么存储出来~

不胜感激!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-20 14:41:55
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34375&ptid=12019]heiheiOo 发表于 2016-7-20 14:01[/url]
这样吖…学到了~

前辈我想问一下,如果有一个本地的视频文件(如.h264),海思有没有什么API可以读入 ...[/quote]

文件一般都有头要处理, 这个和海思API没有关系, 在pc上做的工作可以放在海思上做, 都是一样的

如果是H.264的裸码流那么海思更容易了, 开个解码器就解成图像了, 而且图像就在MMZ里,用IVE处理很方便

不太明白楼主这样用IVE的目的, 是测试IVE算子的效果还是正确性? 这个不用去测,都是测过的, 放心大胆地用, 没有问题

只要在PC上搞完算法, 用IVE算子代替算法中耗时的部分即可


heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-20 16:33:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34379&ptid=12019]zhuangweiye 发表于 2016-7-20 14:41[/url]
文件一般都有头要处理, 这个和海思API没有关系, 在pc上做的工作可以放在海思上做, 都是一样的

如果是H ...[/quote]

我是刚刚接触这方面的内容,想着如何构建一个IVE_IMAGE_S来供API使用,就想到这样绕圈的方式……

能不能详细讲解一下如何把文件夹里的h264文件每次取出一帧来,存为IVE_IMAGE_S,送到IVE_GMM中,然后得到的前景、背景结果再存为h264    0.0

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-20 17:13:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34405&ptid=12019]heiheiOo 发表于 2016-7-20 16:33[/url]
我是刚刚接触这方面的内容,想着如何构建一个IVE_IMAGE_S来供API使用,就想到这样绕圈的方式……

能不 ...[/quote]

不管是什么文件,都要知道文件格式

如果是图像原始数据, 那么PC上怎么读出来的同样的代码放到海思上一样读,
只是内存是MMZ, 使用virAddr, 前面讲过, 楼主应该熟悉了

如果是码流,那么就要了解Vdec了,这个一句两句也讲不清楚,建议先看文档和sample

一句话, 图像处理PC上能做的海思上都应该能做, 只是处理能力不同而已

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-20 17:35:37
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34413&ptid=12019]zhuangweiye 发表于 2016-7-20 17:13[/url]
不管是什么文件,都要知道文件格式

如果是图像原始数据, 那么PC上怎么读出来的同样的代码放到海思上一 ...[/quote]

好的好的,我也的确刚刚在Sample上看到了VDEC的东西,sample里的GMM要设置VDEC,VO好多东西,那一块我还不了解,要再去学习。

我的Sample直接make的话会有问题。
1、直接make会提示libjpeg.a 不能识别。我打开看过libjpeg.a里面就一句libjpeg6b.a。

2、我把makefilepara里的libjpeg.a都改成了libjpeg6b.a,编译器是arm-hisiv400-linux-gcc. 能够编译通过,但无法在3531a上运行
mpp/sample/ive # ./sample_ive_main
-sh: ./sample_ive_main: not found

3.这边硬件组说3531a平台是arm-hisiv300(我之前的工作也都是在hisiv300上进行的),将编译器改为arm-hisiv300-linux-gcc,则会提示多个VDEC函数中 undefined reference to `__xstat'

所以都无法运行sample。如果VDEC相关函数arm-hisiv300-linux-gcc编译都提示undefined reference to `__xstat'的话,那之后工作也完成不了了……

前辈请问一下这是什么原因?如何能够解决这个问题?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-21 08:19:19
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34418&ptid=12019]heiheiOo 发表于 2016-7-20 17:35[/url]
好的好的,我也的确刚刚在Sample上看到了VDEC的东西,sample里的GMM要设置VDEC,VO好多东西,那一块我还 ...[/quote]

这个还真没见过

SDK 编译过程是很顺利的没有任何问题, 当然我用的是uclibc

按理, 31A缺省就是uclibc, 不会有什么问题

实在不行就换个目录重新安装一次SDK, 反正也很快, 不修改再编译一次, 看看有没有问题

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-21 14:07:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34456&ptid=12019]zhuangweiye 发表于 2016-7-21 08:19[/url]
这个还真没见过

SDK 编译过程是很顺利的没有任何问题, 当然我用的是uclibc
[/quote]

我都是在服务器上交叉编译的,SDK没权限去重装,也是挺无奈的T T

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-21 14:08:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34456&ptid=12019]zhuangweiye 发表于 2016-7-21 08:19[/url]
这个还真没见过

SDK 编译过程是很顺利的没有任何问题, 当然我用的是uclibc
[/quote]

谢谢前辈耐心的指导!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-21 14:30:34
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34494&ptid=12019]heiheiOo 发表于 2016-7-21 14:07[/url]
我都是在服务器上交叉编译的,SDK没权限去重装,也是挺无奈的T T[/quote]

这个.....

有权限修改编译, 没有权限重装, 晕了, 改得面目全非咋办

那总会有人有权限吧, 沟通一下

自己装个虚拟机, 在虚拟机上装SDK总可以吧, 不会是SDK也保密吧, 如果是这样就难搞了, 这些已经不是技术问题, 帮不上忙了

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-21 16:53:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34498&ptid=12019]zhuangweiye 发表于 2016-7-21 14:30[/url]
这个.....

有权限修改编译, 没有权限重装, 晕了, 改得面目全非咋办
[/quote]

哈哈哈,那倒是呢~

于是我跑不了sample看不到具体IVE任务的效果就只是参照sample了……

现在还是测试算子性能阶段,暂时还是用txt传数据的方式,还没牵涉到VDEC~

今天已经能够顺利看到txt转出来的前景图像了,但是背景的还有一些问题,还在解决中~

感谢前辈指导!:loveliness:

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-22 19:13:53
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34498&ptid=12019]zhuangweiye 发表于 2016-7-21 14:30[/url]
这个.....

有权限修改编译, 没有权限重装, 晕了, 改得面目全非咋办
[/quote]

前辈你有没有做过IVE_GMM或者其他函数的运算性能测试吖?

就是运行一次多少多少分辨率的图像要多长时间?

以及在海思上做开发,一般计算函数运行时间要用什么方式?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-25 08:01:27
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34648&ptid=12019]heiheiOo 发表于 2016-7-22 19:13[/url]
前辈你有没有做过IVE_GMM或者其他函数的运算性能测试吖?

就是运行一次多少多少分辨率的图像要多长时 ...[/quote]

IVE是硬件实现, IVE在工作时, CPU是处于空闲状态

要想计算时间, 可以调用100--1000次 IVE算子然后计算平均使用时间. 一般可以用gettimeofday()来得时间

如果没有特别耗性能的算法, 单个IVE算子可以认为基本不耗时

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-11-19 10:28:04
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34372&ptid=12019]zhuangweiye 发表于 2016-7-20 13:40[/url]
标准的C代码, 是左移

其实这个就是定点数的表示方法
[/quote]

在海思给的GMM例程中IVE_GMM_CTRL_S控制参数,参数值大部分参照Opencv中的MOG和MOG2的默认值设置的,但是都会加上(1<<10)和(1<<16),(1<<8)这样的值,看到您帖子上是说这是定点数的格式,这些参数设置值能改动吗

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-11-19 10:28:48
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34372&ptid=12019]zhuangweiye 发表于 2016-7-20 13:40[/url]
标准的C代码, 是左移

其实这个就是定点数的表示方法
[/quote]

在海思给的GMM例程中IVE_GMM_CTRL_S控制参数,参数值大部分参照Opencv中的MOG和MOG2的默认值设置的,但是都会加上(1<<10)和(1<<16),(1<<8)这样的值,看到您帖子上是说这是定点数的格式,这些参数设置值能改动吗

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-21 08:17:46
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41507&ptid=12019]hiNewer 发表于 2016-11-19 10:28[/url]
在海思给的GMM例程中IVE_GMM_CTRL_S控制参数,参数值大部分参照Opencv中的MOG和MOG2的默认值设置的,但是 ...[/quote]

可以改, 这里都是定点值

hiNewer

0个粉丝

38

问答

0

专栏

0

资料

hiNewer 2016-11-21 09:17:03
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41540&ptid=12019]zhuangweiye 发表于 2016-11-21 08:17[/url]
可以改, 这里都是定点值[/quote]

一般例程给的参数值设置都是优化好的,但是现在在调用GMM算子检测灰度图像时耗时比较大,仅仅GMM模块1帧就达到0.082s,这样1s时间最多才能处理12帧图像,尝试修改参数影响检测结果,但是对检测时间影响不大。不知道您使用时候遇到过耗时大的问题吗
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区