123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- /**********************************************************************************
- *
- * Copyright (c) 2019-2022 Beijing AXera Technology Co., Ltd. All Rights Reserved.
- *
- * This source file is the property of Beijing AXera Technology Co., Ltd. and
- * may not be copied or distributed in any isomorphic form without the prior
- * written consent of Beijing AXera Technology Co., Ltd.
- *
- **********************************************************************************/
- #ifndef _AX_IVES_AP_H_80DEC0DA_BDEB_419F_85AD_3371389435C3_
- #define _AX_IVES_AP_H_80DEC0DA_BDEB_419F_85AD_3371389435C3_
- #include "ax_global_type.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define AX_IVES_MAX_IMAGE_WIDTH (4096)
- #define AX_IVES_MAX_IMAGE_HEIGHT (3072)
- #define AX_IVES_MAX_REGION_NUM (254)
- typedef enum {
- IVES_CCL_MODE_4C = 0x0, /* 4-connectivity */
- IVES_CCL_MODE_8C = 0x1, /* 8-connectivity */
- IVES_CCL_MODE_BUTT
- } AX_IVES_CCL_MODE_E;
- typedef struct axIVES_RECT_S {
- AX_U32 u32X;
- AX_U32 u32Y;
- AX_U32 u32W;
- AX_U32 u32H;
- } AX_IVES_RECT_S;
- typedef struct axIVES_MB_SIZE_S {
- AX_U32 u32W; /* x pixels */
- AX_U32 u32H; /* y pixels */
- } AX_IVES_MB_SIZE_S;
- typedef struct axIVES_BLK_SIZE_S {
- AX_U32 u32W;
- AX_U32 u32H;
- } AX_IVES_BLK_SIZE_S;
- typedef struct axIVES_REGION_S {
- AX_U32 u32Area; /* Represented by the pixel number */
- AX_U16 u16Left; /* Circumscribed rectangle left border */
- AX_U16 u16Top; /* Circumscribed rectangle top border */
- AX_U16 u16Right; /* Circumscribed rectangle right border */
- AX_U16 u16Bottom; /* Circumscribed rectangle bottom border */
- } AX_IVES_REGION_S;
- typedef struct axIVES_CCBLOB_S {
- AX_IVES_CCL_MODE_E enMode; /* [IN ]: CCL mode */
- AX_U32 u32AreaThrs; /* [IN ]: threshold of area pixels */
- AX_U32 u32RegionNum; /* [OUT]: Number of valid region */
- AX_IVES_REGION_S arrRegion[AX_IVES_MAX_REGION_NUM]; /* [OUT]: Valid regions with 'u32Area>0' */
- } AX_IVES_CCBLOB_S;
- typedef AX_VIDEO_FRAME_S AX_IVES_IMAGE_S;
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Initialize or uninitialize IVES device
- ///
- /// @param N/A
- ///
- /// @return 0 if success, otherwise failure
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_Init(AX_VOID);
- AX_S32 AX_IVES_DeInit(AX_VOID);
- //////////////////////////////////////////////////////////////////////////////////////
- /// MD
- //////////////////////////////////////////////////////////////////////////////////////
- typedef AX_S32 MD_CHN;
- typedef enum axMD_ALG_MODE_E { AX_MD_MODE_REF = 0x0, AX_MD_MODE_BUTT } AX_MD_ALG_MODE_E;
- typedef struct axMD_CHN_ATTR_S {
- MD_CHN mdChn;
- AX_MD_ALG_MODE_E enAlgMode;
- AX_IVES_MB_SIZE_S stMbSize;
- AX_IVES_RECT_S stArea;
- AX_U8 u8ThrY; /* threshold of Y */
- } AX_MD_CHN_ATTR_S;
- typedef struct axMD_MB_THR_S {
- AX_U32 u32Count; /* MB count */
- AX_U8 *pMbThrs; /* 1 or 0 thresold of each MB */
- } AX_MD_MB_THR_S;
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Initialize or uninitialize MD module
- ///
- /// @param NA
- ///
- /// @return 0 if success, otherwise failure
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_MD_Init(AX_VOID);
- AX_S32 AX_IVES_MD_DeInit(AX_VOID);
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Create or destory MD channel
- ///
- /// @param mdChn [I]: specifies the MD channel to create
- /// @param pstAttr [I]: specifies channel attribute.
- ///
- /// @return 0 if success, otherwise failure
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_MD_CreateChn(MD_CHN mdChn, AX_MD_CHN_ATTR_S *pstAttr);
- AX_S32 AX_IVES_MD_DestoryChn(MD_CHN mdChn);
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Set or get channel attribute
- ///
- /// @param mdChn [I ]: specifies the MD channel created.
- /// @param pstAttr [IO]: specifies the channel attribute to set [I] or get [O].
- /// <NOTE>
- /// - enAlgMode: static parameter, cannot be changed.
- /// - stMbSize : static parameter, cannot be changed.
- /// - stMbSize : static parameter, cannot be changed.
- /// - stArea : static parameter, cannot be changed.
- ///
- /// @return 0 if success, otherwise failure
- /// If static parametes are changed, AX_ERR_ILLEGAL_PARAM error will be returned.
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_MD_SetChnAttr(MD_CHN mdChn, AX_MD_CHN_ATTR_S *pstAttr);
- AX_S32 AX_IVES_MD_GetChnAttr(MD_CHN mdChn, AX_MD_CHN_ATTR_S *pstAttr);
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Process image
- /// The 1st input image is reference image, mb thresholds will return all 0.
- ///
- /// @param mdChn [I]: specifies the MD channel created.
- /// @param pstCur [I]: specifies the image to process
- /// @param pstMbThr [O]: return the detected result.
- ///
- /// @return 0 if success, otherwise failure
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_MD_Process(MD_CHN mdChn, AX_IVES_IMAGE_S *pstCur, AX_MD_MB_THR_S *pstMbThr);
- AX_S32 AX_IVES_MD_ProcessV2(MD_CHN mdChn, AX_IVES_IMAGE_S *pstCur, AX_MD_MB_THR_S *pstMbThr, AX_IVES_CCBLOB_S *pstBlob);
- //////////////////////////////////////////////////////////////////////////////////////
- /// MD
- //////////////////////////////////////////////////////////////////////////////////////
- typedef AX_S32 OD_CHN;
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Initialize or uninitialize OD module
- ///
- /// @param NA
- ///
- /// @return 0 if success, otherwise failure
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_OD_Init(AX_VOID);
- AX_S32 AX_IVES_OD_DeInit(AX_VOID);
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Create or destory OD channel
- ///
- /// @param odChn [I]: specifies the OD channel
- /// @param pstAttr [I]: specifies the channel attribute.
- ///
- /// @return 0 if success, otherwise failure
- //////////////////////////////////////////////////////////////////////////////////////
- typedef struct axOD_CHN_ATTR_S {
- OD_CHN odChn;
- AX_IVES_RECT_S stArea; /* area of OD */
- AX_U32 u32FrameRate; /* frame rate: 25/30/60 */
- AX_U8 u8ThrdY; /* threshold of Y, range [0 - 255] */
- AX_U8 u8ConfidenceY; /* threshold confidence percent, range [0 - 100] */
- /*
- @param u32LuxThrd: specifies the lux threshold. U22.10
- - u32LuxThrd >= 1024, means if current lux < u32LuxThrd, mark od = 1
- - u32LuxThrd = 0, skip the beginning 3 seconds frames to estimate the scene lux.
- @param u32LuxDiff: specifies the lux changed threshold.
- - if u32LuxThrd >= 1024, u32LuxDiff is the absolute changed lux threshold, U22.10
- it means:
- if abs(current lux - last lux) > u32LuxDiff, then mark od = 1
- - if u32LuxThrd = 0, u32LuxDiff is the confidence of lux changed, range [0 - 100]
- it means:
- if (current lux < scene lux * u32LuxDiff/100.0), then mark od = 1
- Recommended to set:
- when lux is descended to 40% of scense lux, then mark od = 1
- u32LuxThrd = 0 // use scene lux to reference lux
- u32LuxDiff = 60 // lux descend confidenece is 40%
- */
- AX_U32 u32LuxThrd;
- AX_U32 u32LuxDiff;
- } AX_OD_CHN_ATTR_S;
- AX_S32 AX_IVES_OD_CreateChn(OD_CHN odChn, AX_OD_CHN_ATTR_S *pstAttr);
- AX_S32 AX_IVES_OD_DestoryChn(OD_CHN odChn);
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Set or get channel attribute
- ///
- /// @param odChn [I ]: specifies the OD channel created.
- /// @param pstAttr [IO]: specifies the channel attribute to set [I] or get [O]
- ///
- /// @return 0 if success, otherwise failure
- /// If static parametes are changed, AX_ERR_ILLEGAL_PARAM error will be returned.
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_OD_SetChnAttr(OD_CHN odChn, AX_OD_CHN_ATTR_S *pstAttr);
- AX_S32 AX_IVES_OD_GetChnAttr(OD_CHN odChn, AX_OD_CHN_ATTR_S *pstAttr);
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Process image
- ///
- /// @param odChn [I]: specifies the OD channel created.
- /// @param pstCur [I]: specifies the image to process
- /// @param pResult [O]: return the detection result, 0: not occlusion, 1: occlusion
- ///
- /// @return 0 if success, otherwise failure
- //////////////////////////////////////////////////////////////////////////////////////
- typedef struct axIVES_OD_IMAGE_S {
- AX_IVES_IMAGE_S *pstImg;
- AX_U32 u32Lux; /* current lux returned by AE, U22.10 */
- } AX_IVES_OD_IMAGE_S;
- AX_S32 AX_IVES_OD_Process(OD_CHN odChn, const AX_IVES_OD_IMAGE_S *pstCur, AX_U8 *pResult);
- //////////////////////////////////////////////////////////////////////////////////////
- /// SCD (Scene Change Detection)
- //////////////////////////////////////////////////////////////////////////////////////
- typedef AX_S32 SCD_CHN;
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Initialize or uninitialize SCD module
- ///
- /// @param NA
- ///
- /// @return 0 if success, otherwise failure
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_SCD_Init(AX_VOID);
- AX_S32 AX_IVES_SCD_DeInit(AX_VOID);
- //////////////////////////////////////////////////////////////////////////////////////
- typedef struct axSCD_CHN_ATTR_S {
- SCD_CHN chn;
- AX_IVES_RECT_S stArea;
- AX_U8 u8Thrd; /* range: [1 - 100], recommend: 60 */
- AX_U8 u8Confidence; /* range: [1 - 100], recommend: 60 */
- } AX_SCD_CHN_ATTR_S;
- AX_S32 AX_IVES_SCD_CreateChn(SCD_CHN scdChn, const AX_SCD_CHN_ATTR_S *pstAttr);
- AX_S32 AX_IVES_SCD_DestoryChn(SCD_CHN scdChn);
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Set or get channel attribute
- ///
- /// @param scdChn [I ]: specifies the SCD channel created.
- /// @param pstAttr [IO]: specifies the channel attribute to set [I] or get [O]
- ///
- /// @return 0 if success, otherwise failure
- /// If static parametes are changed, AX_ERR_ILLEGAL_PARAM error will be returned.
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_SCD_SetChnAttr(SCD_CHN scdChn, const AX_SCD_CHN_ATTR_S *pstAttr);
- AX_S32 AX_IVES_SCD_GetChnAttr(SCD_CHN scdChn, AX_SCD_CHN_ATTR_S *pstAttr);
- //////////////////////////////////////////////////////////////////////////////////////
- /// @brief Process image
- ///
- /// @param scdChn [I]: specifies the SCD channel created.
- /// @param pstImg [I]: specifies the image to process
- /// @param pResult [O]: return the detection result, 0: not change, 1: changed
- ///
- /// @return 0 if success, otherwise failure
- //////////////////////////////////////////////////////////////////////////////////////
- AX_S32 AX_IVES_SCD_Process(SCD_CHN scdChn, const AX_IVES_IMAGE_S *pstImg, AX_U8 *pResult);
- #ifdef __cplusplus
- }
- #endif
- #endif /* _AX_IVES_AP_H_80DEC0DA_BDEB_419F_85AD_3371389435C3_ */
|