人脸识别主程序执行流程求助 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3692|回复: 4
打印 上一主题 下一主题

[已解决] 人脸识别主程序执行流程求助

[复制链接]

3

主题

10

帖子

111

积分

注册会员

Rank: 2

积分
111
跳转到指定楼层
楼主
发表于 2017-3-31 14:45:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
人脸识别主程序:
void main(void)
{
     ......

       while (1)
       {
              /* 等待复制捕获图像到image_buffer */
              captured = 1;
              while(captured);

              GreyTran(image_buffer, gray_buffer);
              image->imageData = (char*)gray_buffer;

              storage = cvCreateMemStorage(0);

              /* 使用OpenCVhaardetect算法*/
              dsp_sequence =cvHaarDetectObjects(image, cascade, storage, 2.5, 2, 0, cvSize(30, 30));

              /* 复制人脸位置数据缓冲区,用于画人脸位置到每一帧图像 */
              for (i = 0; i < 2; i++)
                     *(dsp_sequence2 + i) = *(dsp_sequence +i);

              cvReleaseMemStorage(&storage);

              if (error_flag)
              {
                     UARTprintf("Unexpected erroroccured during VPIF loopback\n");
                     error_flag = 0;
              }
       }
}
在主循环while (1)中,当执行到while(captured);的时候程序执行死循环,等待VPIF中断服务程序。VPIF中断服务程序如下:
char k=0;
static void VPIFIsr(void)
{
    unsigned int temp;

    IntEventClear(SYS_INT_VPIF_INT);

    temp = VPIFInterruptStatus(SOC_VPIF_0_REGS,VPIF_ERROR_INT | \
                                                              VPIF_FRAMEINT_CH3 | \
                                                              VPIF_FRAMEINT_CH2 | \
                                                              VPIF_FRAMEINT_CH1 | \
                                                              VPIF_FRAMEINT_CH0);

    if(k>=2)
       {
              VPIFCaptureChanenDisable(SOC_VPIF_0_REGS,VPIF_CHANNEL_1);
              VPIFCaptureChanenDisable(SOC_VPIF_0_REGS,VPIF_CHANNEL_0);

              CvRect                  *r;
              CvPoint         c1, c2;
              unsigned int Blue = 0x001f;
              int i;

              if(captured == 1)
              {
                     CacheWB((unsigned int)ov2640image,sizeof(ov2640image));
                     srcBuff = (char *)(ov2640image);
                     dstBuff = (char *)image_buffer;
                     EDMA3Test();
                     captured = 0;
              }
              else
              {
                     for (i = 0; i < (dsp_sequence2 ?dsp_sequence2->total : 0); i++)
                     {
                            r = (CvRect *)cvGetSeqElem(dsp_sequence2, i);
                            // mark with thick white rectangle
                            c1.x = r->x;
                            c1.y = r->y;
                            c2.x = r->x + r->width;
                            c2.y = r->y + r->height;
                            RectDraw(ov2640image, c1.x, c1.y, c2.x,c2.y, Blue);
                     }
                     CacheWB((unsigned int)ov2640image,sizeof(ov2640image));
                     CacheInv((unsigned int)g_pucBuffer,sizeof(g_pucBuffer));
                     srcBuff = (char *)(ov2640image);
                     dstBuff = (char*)(g_pucBuffer+PALETTE_OFFSET+PALETTE_SIZE);
                     EDMA3Test();
              }


              Reinitov2640();
              k=0;

              /* 使能捕获 */
              VPIFCaptureChanenEnable(SOC_VPIF_0_REGS,VPIF_CHANNEL_0);
              VPIFCaptureChanenEnable(SOC_VPIF_0_REGS,VPIF_CHANNEL_1);
       }

       k++;

       /* 中断错误 */
    if ((temp & VPIF_ERROR_INT))
    {
        error_flag = 1;
    }
}
在VPIF中断服务程序中当程序执行完:
if(captured == 1)
              {
                     CacheWB((unsigned int)ov2640image,sizeof(ov2640image));
                     srcBuff = (char *)(ov2640image);
                     dstBuff = (char *)image_buffer;
                     EDMA3Test();
                     captured = 0;
              }
后captured = 0;主程序while(captured);死循环解除,主程序向下执行 进行灰度转换和人脸识别区域的处理。
我的问题是,在主程序向下执行 进行灰度转换和人脸识别区域的处理的时候,VPIF中断会不会发生,如果不会发生那么主程序在执行完之后又会执行
captured = 1;
while(captured);
然后等待VPIF中断,在进入VPIF中断后因为captured= 1,所以是不是还是执行
if(captured == 1)
              {
                     CacheWB((unsigned int)ov2640image,sizeof(ov2640image));
                     srcBuff = (char *)(ov2640image);
                     dstBuff = (char *)image_buffer;
                     EDMA3Test();
                     captured = 0;
              }
那么什么时候执行
else
              {
                     for (i = 0; i < (dsp_sequence2 ?dsp_sequence2->total : 0); i++)
                     {
                            r = (CvRect *)cvGetSeqElem(dsp_sequence2, i);
                            // mark with thick white rectangle
                            c1.x = r->x;
                            c1.y = r->y;
                            c2.x = r->x + r->width;
                            c2.y = r->y + r->height;
                            RectDraw(ov2640image, c1.x, c1.y, c2.x,c2.y, Blue);
                     }
                     CacheWB((unsigned int)ov2640image,sizeof(ov2640image));
                     CacheInv((unsigned int)g_pucBuffer,sizeof(g_pucBuffer));
                     srcBuff = (char *)(ov2640image);
                     dstBuff = (char*)(g_pucBuffer+PALETTE_OFFSET+PALETTE_SIZE);
                     EDMA3Test();
              }
这个语句,不执行这个语句怎么能在LCD上显示图像呢?
请帮忙解答,谢谢!!!!!!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2017-4-1 22:45:52 | 只看该作者
VPIF中断会不断的产生,当capture=1的时候,将图像数据复制给DSP做算法处理,当capture=0时,复制到LCD显示
回复 支持 反对

使用道具 举报

3

主题

10

帖子

111

积分

注册会员

Rank: 2

积分
111
板凳
 楼主| 发表于 2017-4-2 13:55:39 | 只看该作者
这样会不会出现算法处理的图像,和要显示的图像不一致呢?再有能不能将算法放到VFIP中断中处理?
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
地板
发表于 2017-4-2 17:31:19 | 只看该作者
数据处理完capture=0
中断服务函数一般不做复杂的处理
回复 支持 反对

使用道具 举报

3

主题

10

帖子

111

积分

注册会员

Rank: 2

积分
111
5#
 楼主| 发表于 2017-4-2 20:50:35 | 只看该作者
以前感觉自己dsp编程还行,也能完成一些比较复杂的项目,可是这次一遇到算法就蒙了,主程序和中断程序的乒乓操作一时间还是不能适应。不理解。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-18 15:35 , Processed in 0.038132 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表