Spaces:
Sleeping
Sleeping
Ticket Name: Integrating Vision Algorithm on Vision SDK TDA3 | |
Query Text: | |
Other Parts Discussed in Thread: TDA2 In our project, we have algorithm for vision algorithm for adas camera monitoring system using in c. Which is already working in TDA2 EVM board. I need to integrated with framework which is based on Vision SDK provided by Texas Intruments. To under stand Vision SDK completely,i would like to do Image Negative. I have attached the image which was generated by VSDK user case generation Using user case generation, i have generated file adasens_issImageNegative_priv.c adasens_issImageNegative_priv.h My image negative input, output structure and function prototype are below. typedef struct { unsigned char *ptImageInput; //Input Image to unsigned int uiNoRows; unsigned int uiNoCols; }stImageNegativeInput; chains_vipSingleCameraEdgeDetection.c /* | |
******************************************************************************* | |
* | |
* Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ | |
* ALL RIGHTS RESERVED | |
* | |
******************************************************************************* | |
*/ | |
/******************************************************************************* | |
* INCLUDE FILES | |
******************************************************************************* | |
*/ | |
#include "chains_vipSingleCameraEdgeDetection_priv.h" | |
#include <tda2xx/include/bios_chains_common.h> | |
#define CAPTURE_SENSOR_WIDTH (1280) | |
#define CAPTURE_SENSOR_HEIGHT (720) | |
/** | |
******************************************************************************* | |
* | |
* \brief SingleCameraEdgeDetectionObject | |
* | |
* This structure contains all the LinksId's and create Params. | |
* The same is passed to all create, start, stop functions. | |
* | |
******************************************************************************* | |
*/ | |
typedef struct { | |
chains_vipSingleCameraEdgeDetectionObj ucObj; | |
UInt32 captureOutWidth; | |
UInt32 captureOutHeight; | |
UInt32 displayWidth; | |
UInt32 displayHeight; | |
Chains_Ctrl *chainsCfg; | |
} Chains_VipSingleCameraEdgeDetectionAppObj; | |
/** | |
******************************************************************************* | |
* | |
* \brief Set Edge Detection Alg parameters | |
* | |
* It is called in Create function. | |
* In this function alg link params are set | |
* The algorithm which is to run on core is set to | |
* baseClassCreate.algId. The input whdth and height to alg are set. | |
* Number of input buffers required by alg are also set here. | |
* | |
* | |
* \param pPrm [IN] AlgorithmLink_EdgeDetectionCreateParams | |
* \param chainsCfg [IN] Chains_Ctrl | |
* | |
******************************************************************************* | |
*/ | |
Void chains_vipSingleCameraEdgeDetection_SetEdgeDetectionAlgPrms( | |
AlgorithmLink_EdgeDetectionCreateParams *pPrm, | |
Chains_Ctrl *chainsCfg) { | |
pPrm->maxWidth = CAPTURE_SENSOR_WIDTH; | |
pPrm->maxHeight = CAPTURE_SENSOR_HEIGHT; | |
pPrm->numOutputFrames = 3; | |
} | |
/** | |
******************************************************************************* | |
* | |
* \brief Set link Parameters | |
* | |
* It is called in Create function of the auto generated use-case file. | |
* | |
* \param pUcObj [IN] Auto-generated usecase object | |
* \param appObj [IN] Application specific object | |
* | |
******************************************************************************* | |
*/ | |
Void chains_vipSingleCameraEdgeDetection_SetAppPrms(chains_vipSingleCameraEdgeDetectionObj *pUcObj, | |
Void *appObj) { | |
Chains_VipSingleCameraEdgeDetectionAppObj *pObj | |
= (Chains_VipSingleCameraEdgeDetectionAppObj *)appObj; | |
pObj->captureOutWidth = CAPTURE_SENSOR_WIDTH; | |
pObj->captureOutHeight = CAPTURE_SENSOR_HEIGHT; | |
ChainsCommon_GetDisplayWidthHeight( | |
pObj->chainsCfg->displayType, | |
&pObj->displayWidth, | |
&pObj->displayHeight | |
); | |
ChainsCommon_SingleCam_SetCapturePrms(&(pUcObj->CapturePrm), | |
CAPTURE_SENSOR_WIDTH, | |
CAPTURE_SENSOR_HEIGHT, | |
pObj->captureOutWidth, | |
pObj->captureOutHeight, | |
pObj->chainsCfg->captureSrc | |
); | |
ChainsCommon_SetGrpxSrcPrms(&pUcObj->GrpxSrcPrm, | |
pObj->displayWidth, | |
pObj->displayHeight | |
); | |
ChainsCommon_SetDisplayPrms(&pUcObj->Display_VideoPrm, | |
&pUcObj->Display_GrpxPrm, | |
pObj->chainsCfg->displayType, | |
pObj->displayWidth, | |
pObj->displayHeight | |
); | |
ChainsCommon_StartDisplayCtrl( | |
pObj->chainsCfg->displayType, | |
pObj->displayWidth, | |
pObj->displayHeight | |
); | |
chains_vipSingleCameraEdgeDetection_SetEdgeDetectionAlgPrms | |
(&pUcObj->Alg_EdgeDetectPrm, | |
pObj->chainsCfg); | |
} | |
/** | |
******************************************************************************* | |
* | |
* \brief Start the capture display Links | |
* | |
* Function sends a control command to capture and display link to | |
* to Start all the required links . Links are started in reverce | |
* order as information of next link is required to connect. | |
* System_linkStart is called with LinkId to start the links. | |
* | |
* \param pObj [IN] Chains_VipSingleCameraEdgeDetectionAppObj | |
* | |
* \return SYSTEM_LINK_STATUS_SOK on success | |
* | |
******************************************************************************* | |
*/ | |
Void chains_vipSingleCameraEdgeDetection_StartApp(Chains_VipSingleCameraEdgeDetectionAppObj *pObj) { | |
Chains_memPrintHeapStatus(); | |
ChainsCommon_StartDisplayDevice(pObj->chainsCfg->displayType); | |
ChainsCommon_StartCaptureDevice( | |
pObj->chainsCfg->captureSrc, | |
pObj->captureOutWidth, | |
pObj->captureOutHeight,1 | |
); | |
chains_vipSingleCameraEdgeDetection_Start(&pObj->ucObj); | |
Chains_prfLoadCalcEnable(TRUE, FALSE, FALSE); | |
} | |
/** | |
******************************************************************************* | |
* | |
* \brief Delete the capture display Links | |
* | |
* Function sends a control command to capture and display link to | |
* to delete all the prior created links | |
* System_linkDelete is called with LinkId to delete the links. | |
* | |
* \param pObj [IN] Chains_VipSingleCameraEdgeDetectionAppObj | |
* | |
******************************************************************************* | |
*/ | |
Void chains_vipSingleCameraEdgeDetection_StopAndDeleteApp(Chains_VipSingleCameraEdgeDetectionAppObj | |
*pObj) { | |
chains_vipSingleCameraEdgeDetection_Stop(&pObj->ucObj); | |
chains_vipSingleCameraEdgeDetection_Delete(&pObj->ucObj); | |
ChainsCommon_StopDisplayCtrl(); | |
ChainsCommon_StopCaptureDevice(pObj->chainsCfg->captureSrc); | |
ChainsCommon_StopDisplayDevice(pObj->chainsCfg->displayType); | |
/* Print the HWI, SWI and all tasks load */ | |
/* Reset the accumulated timer ticks */ | |
Chains_prfLoadCalcEnable(FALSE, TRUE, TRUE); | |
} | |
/** | |
******************************************************************************* | |
* | |
* \brief Single Channel Capture Display usecase function | |
* | |
* This functions executes the create, start functions | |
* | |
* Further in a while loop displays run time menu and waits | |
* for user inputs to print the statistics or to end the demo. | |
* | |
* Once the user inputs end of demo stop and delete | |
* functions are executed. | |
* | |
* \param chainsCfg [IN] Chains_Ctrl | |
* | |
******************************************************************************* | |
*/ | |
Void Chains_vipSingleCameraEdgeDetection(Chains_Ctrl *chainsCfg) { | |
char ch; | |
UInt32 done = FALSE; | |
Chains_VipSingleCameraEdgeDetectionAppObj chainsObj; | |
chainsObj.chainsCfg = chainsCfg; | |
chains_vipSingleCameraEdgeDetection_Create(&chainsObj.ucObj, &chainsObj); | |
chains_vipSingleCameraEdgeDetection_StartApp(&chainsObj); | |
while(!done) { | |
ch = Chains_menuRunTime(); | |
switch(ch) { | |
case '0': | |
done = TRUE; | |
break; | |
case 'p': | |
case 'P': | |
ChainsCommon_PrintStatistics(); | |
chains_vipSingleCameraEdgeDetection_printStatistics(&chainsObj.ucObj); | |
break; | |
default: | |
Vps_printf("\nUnsupported option '%c'. Please try again\n", ch); | |
break; | |
} | |
} | |
chains_vipSingleCameraEdgeDetection_StopAndDeleteApp(&chainsObj); | |
} | |
typedef struct { unsigned char *ptImageOutput; }stImageNegativeOutput; void ImageNegative(&stImageNegatvieInput,&stImageNegativeOutput); Assume that, chains_vipSingleCameraEdgeDetection.c(attched with this) is performing image negative. I have to call the ImageNegative for each frame. Can you please tell me, where i have to exactly call my ImageNegative fuctions and initialize the input and output structures. | |
Responses: | |
Hi, Algorithm is integrated into Algorithm Link in Vision SDK. You have to create an algorithm link plug-in for your algorithm. Please refer to Chapter 4 in Vision SDK Development Guide. For example, you can refer to ~\VISION_SDK_02_xx_xx_xx\vision_sdk\examples\tda2xx\src\alg_plugins\edgedetection. | |