From db268cb5c15d467b77392146e5b3a2d7465692b7 Mon Sep 17 00:00:00 2001
From: pans <pans@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期三, 28 十二月 2016 13:45:16 +0800
Subject: [PATCH] 

---
 RtspFace/demo/src/faceAPI.cpp           |    0 
 RtspFace/demo/src/out.db                |    0 
 RtspFace/demo/src/faceDB.h              |    0 
 RtspFace/demo/src/time_helper.h         |    0 
 RtspFace/demo/models/verify.model       |    0 
 /dev/null                               |    1 
 RtspFace/demo/src/sample_face_track.cpp |    0 
 RtspFace/demo/src/test.cpp              |    0 
 RtspFace/demo/src/faceAPI.h             |    0 
 RtspFace/demo/src/test.sh               |    0 
 RtspFace/demo/include/cv_face.h         |  580 ++++++++++++++++++++++++++++++++++++
 RtspFace/demo/src/Makefile              |    0 
 RtspFace/demo/src/faceDB.cpp            |    0 
 RtspFace/demo/include/cv_common.h       |  285 +++++++++++++++++
 RtspFace/demo/include/cv_utils.h        |   47 ++
 15 files changed, 912 insertions(+), 1 deletions(-)

diff --git a/RtspFace/demo/include/cv_common.h b/RtspFace/demo/include/cv_common.h
new file mode 100644
index 0000000..21ce097
--- /dev/null
+++ b/RtspFace/demo/include/cv_common.h
@@ -0,0 +1,285 @@
+锘�#ifndef CV_COMMON_H_
+#define CV_COMMON_H_
+
+/// @defgroup cv_common cv common
+/// @brief common definitions & API for cv libs
+/// @{
+
+#include <cv_utils.h>
+
+#ifdef __cplusplus
+#	define CV_SDK_API extern "C" CV_SDK_API_
+#else
+#	define CV_SDK_API CV_SDK_API_
+#endif
+
+/// cv handle declearation
+typedef void *cv_handle_t;
+
+/// cv result declearation
+typedef cv_errcode cv_result_t;
+
+/// cv rectangle definition
+typedef struct cv_rect_t {
+	int left;	///< 鐭╁舰鏈�宸﹁竟鐨勫潗鏍�
+	int top;	///< 鐭╁舰鏈�涓婅竟鐨勫潗鏍�
+	int right;	///< 鐭╁舰鏈�鍙宠竟鐨勫潗鏍�
+	int bottom;	///< 鐭╁舰鏈�涓嬭竟鐨勫潗鏍�
+} cv_rect_t;
+
+/// cv float type point definition
+typedef struct cv_pointf_t {
+	float x;	///< 鐐圭殑姘村钩鏂瑰悜鍧愭爣, 涓烘诞鐐规暟
+	float y;	///< 鐐圭殑绔栫洿鏂瑰悜鍧愭爣, 涓烘诞鐐规暟
+} cv_pointf_t;
+
+/// cv integer type point definition
+typedef struct cv_pointi_t {
+	int x;		///< 鐐圭殑姘村钩鏂瑰悜鍧愭爣, 涓烘暣鏁�
+	int y;		///< 鐐圭殑绔栫洿鏂瑰悜鍧愭爣, 涓烘暣鏁�
+} cv_pointi_t;
+
+/// cv object struct
+typedef struct cv_object_t {
+	cv_pointi_t *corner;
+	int corner_count;
+} cv_object_t;
+
+/// cv landmark array struct
+typedef struct cv_landmarks_t {
+	cv_pointf_t *points_array;
+	int points_count;
+} cv_landmarks_t;
+
+/// @brief 鍏抽敭鐐硅窡韪粨鏋滅粨鏋勪綋
+typedef  struct cv_target_t {
+	cv_rect_t rect;			///< 浠h〃闈㈤儴鐨勭煩褰㈠尯鍩�
+	cv_pointf_t *points_array;	///< 鐩爣鍏抽敭鐐瑰潗鏍�
+	int points_count;		///< 鐩爣鍏抽敭鐐归暱搴�
+	float score;			///< 鐩爣缃俊搴�
+	int id;				///< 鐩爣ID, 鐢ㄤ簬琛ㄧず鍦ㄧ洰鏍囪窡韪腑鐨勭浉鍚岀洰鏍囧湪涓嶅悓甯у娆″嚭鐜�
+} cv_target_t;
+
+typedef struct cv_feature_header_t {
+	int ver;		///< 鐗堟湰淇℃伅
+	int idx;		///< 鏁扮粍涓嬫爣绱㈠紩
+	int len;		///< CV_FEATURE鍏ㄩ儴鍐呭鐨勯暱搴�, 鍖呮嫭feature_header鍜岀壒寰佹暟缁�, 鎸夊瓧鑺傝绠�, 涓巗izeof(cv_feature_header_t)瀹氫箟涓嶅悓
+} cv_feature_header_t;
+
+/// @brief 鐗瑰緛鏍煎紡瀹氫箟
+typedef struct cv_feature_t {
+	int ver;	///< 鐗瑰緛鐗堝搴旀ā鍨嬫湰鍙�
+	int idx;	///< 鐗瑰緛绱㈠紩搴忓彿
+	int len;	///< CV_FEATURE鍏ㄩ儴鍐呭鐨勯暱搴�, 鍖呮嫭feature_header鍜岀壒寰佹暟缁�, 鎸夊瓧鑺傝绠�, 涓巗izeof(cv_feature_header_t)瀹氫箟涓嶅悓
+	float feat[0];	///< 鐗瑰緛鏁扮粍
+} cv_feature_t;
+
+#define CV_FEATURE_HEADER(pf) ((cv_feature_header_t*)(pf))
+#define CV_FEATURE_SIZE(pf)   (CV_FEATURE_HEADER(pf)->len)
+#define CV_FEATURE_LENGTH(pf)   ((CV_FEATURE_HEADER(pf)->len-sizeof(cv_feature_header_t))/sizeof(float))
+#define CV_ENCODE_FEATURE_SIZE(pf) ((CV_FEATURE_HEADER(pf)->len+2)/3*4 + 1)
+
+/// cv pixel format definition
+typedef enum {
+	CV_PIX_FMT_GRAY8,	///< Y    1       8bpp ( 鍗曢�氶亾8bit鐏板害鍍忕礌 )
+	CV_PIX_FMT_YUV420P,	///< YUV  4:2:0   12bpp ( 3閫氶亾, 涓�涓寒搴﹂�氶亾, 鍙︿袱涓负U鍒嗛噺鍜孷鍒嗛噺閫氶亾, 鎵�鏈夐�氶亾閮芥槸杩炵画鐨� )
+	CV_PIX_FMT_NV12,	///< YUV  4:2:0   12bpp ( 2閫氶亾, 涓�涓�氶亾鏄繛缁殑浜害閫氶亾, 鍙︿竴閫氶亾涓篣V鍒嗛噺浜ら敊 )
+	CV_PIX_FMT_NV21,	///< YUV  4:2:0   12bpp ( 2閫氶亾, 涓�涓�氶亾鏄繛缁殑浜害閫氶亾, 鍙︿竴閫氶亾涓篤U鍒嗛噺浜ら敊 )
+	CV_PIX_FMT_BGRA8888,	///< BGRA 8:8:8:8 32bpp ( 4閫氶亾32bit BGRA 鍍忕礌 )
+	CV_PIX_FMT_BGR888	///< BGR  8:8:8   24bpp ( 3閫氶亾24bit BGR 鍍忕礌 )
+} cv_pixel_format;
+
+/// @brief 鏃堕棿鎴冲畾涔�
+typedef struct cv_time_t {
+	long int tv_sec;	///< 绉�
+	long int tv_usec;	///< 寰
+}cv_time_t;
+
+/// 鍥惧儚鏍煎紡瀹氫箟
+typedef struct cv_image {
+	unsigned char *data;		///< 鍥惧儚鏁版嵁鎸囬拡
+	cv_pixel_format pixel_format;	///< 鍍忕礌鏍煎紡
+	int width;			///< 瀹藉害(浠ュ儚绱犱负鍗曚綅)
+	int height;			///< 楂樺害(浠ュ儚绱犱负鍗曚綅)
+	int stride;			///< 璺ㄥ害, 鍗虫瘡琛屾墍鍗犵殑瀛楄妭鏁�
+	cv_time_t time_stamp;		///< 鏃堕棿鎴�
+} cv_image;
+
+typedef struct cv_clustering_result_t {
+	unsigned int count;		///< 鐩爣鏁伴噺
+	int *idxs;			///< 鐩爣绱㈠紩鏁扮粍
+	unsigned int group_flags;	///< 淇濈暀鍙傛暟
+} cv_clustering_result_t;
+
+/// @brief 鍥惧儚鍒嗙被鏍囩缁撴灉
+typedef struct cv_classifier_result_t {
+	int id;				///鏍囩
+	float score;			/// 缃俊搴�
+} cv_classifier_result_t;
+
+// ====================== image utilities ========================
+
+/// @brief 鍒涘缓鍥惧儚鎸囬拡骞跺垎閰嶅唴瀛�
+/// @param[in] width 杈撳叆瀹藉害
+/// @param[in] height 杈撳叆楂樺害
+/// @param[in] pixel_format 杈撳叆鍍忕礌鏍煎紡
+/// @param[out] image 杈撳嚭鍥惧儚鎸囬拡鎵�鍦ㄥ湴鍧�
+/// @return 鎴愬姛杩斿洖CV_OK, 鍚﹀垯杩斿洖閿欒鐮�
+CV_SDK_API
+cv_result_t cv_image_allocate(
+	int width,
+	int height,
+	cv_pixel_format pixel_format,
+	cv_image ** image
+);
+
+/// @brief 閲婃斁鍥惧儚鏁版嵁
+/// @param[in] image 鍥惧儚鎸囬拡
+CV_SDK_API void
+cv_image_release(cv_image* image);
+
+/// @brief 杩涜棰滆壊鏍煎紡杞崲
+/// @param[in] image_src 鐢ㄤ簬寰呰浆鎹㈢殑鍥惧儚鏁版嵁
+/// @param[out] image_dst 杞崲鍚庣殑鍥惧儚鏁版嵁, 鐩爣鍥惧儚鐢辩敤鎴峰垎閰嶅唴瀛�, 闇�鎻愬墠瀹氫箟瀹�, 楂�, PixelFormat绛変俊鎭�, 鍍忕礌鍊煎垵濮嬪寲涓�0
+/// @return 姝e父杩斿洖CV_OK, 鍚﹀垯杩斿洖閿欒绫诲瀷
+CV_SDK_API cv_result_t
+cv_common_color_convert(
+	const cv_image* image_src,
+	cv_image* image_dst
+);
+
+/// @brief 杩涜浠垮皠鍙樻崲
+/// @param[in] image_src 鐢ㄤ簬寰呰浆鎹㈢殑鍥惧儚鏁版嵁
+/// @param[in] src_points_array 婧愬浘鐨勪豢灏勭偣鏁扮粍
+/// @param[in] src_points_count 婧愬浘浠垮皠鐐圭殑鏁扮洰
+/// @param[in] dst_points_array 鐩爣鍥剧殑浠垮皠鐐规暟缁�
+/// @param[in] dst_points_count 鐩爣鍥句豢灏勭偣鐨勬暟鐩�
+/// @param[out] image_dst 杞崲鍚庣殑鍥惧儚鏁版嵁, 蹇呴』鏄疊GR鏍煎紡鍥惧儚锛岀洰鏍囧浘鍍忛渶瑕佺敱鐢ㄦ埛鍒嗛厤鍐呭瓨, 闇�鎻愬墠瀹氫箟瀹�, 楂�, PixelFormat绛変俊鎭�
+/// @return 姝e父杩斿洖CV_OK, 鍚﹀垯杩斿洖閿欒绫诲瀷
+CV_SDK_API
+cv_result_t
+cv_common_image_affine_transfer(
+	const cv_image *image_src,
+	const cv_pointf_t *src_points_array,
+	const int src_points_count,
+	const cv_pointf_t *dst_points_array,
+	const int dst_points_count,
+	cv_image *image_dst
+);
+
+/// @brief 鍥剧墖璋冩暣鏂规硶
+typedef enum {
+       CV_IMAGE_RESIZE_BILINEAR,	///< 鍙岀嚎鎬ф彃鍊�
+       CV_IMAGE_RESIZE_AREA		///< 鍖哄煙鎻掑��
+} cv_image_resize_method;
+
+/// @brief 杩涜缂╂斁鍙樻崲
+/// @note 璇ュ嚱鏁扮洰鍓嶄笉鏀寔stride鍙傛暟, 鎵�浠tride鍙傛暟搴旂瓑浜� width * elemSize
+/// @param[in] image_src 鐢ㄤ簬寰呰浆鎹㈢殑鍥惧儚鏁版嵁
+/// @param[out] image_dst 杞崲鍚庣殑鍥惧儚鏁版嵁, 鐩爣鍥惧儚鐢辩敤鎴峰垎閰嶅唴瀛�, 闇�鎻愬墠瀹氫箟瀹�, 楂�, PixelFormat绛変俊鎭�
+/// @param[in] method 缂╂斁杞崲鐨勬柟娉�
+/// @return 姝e父杩斿洖CV_OK, 鍚﹀垯杩斿洖閿欒绫诲瀷
+CV_SDK_API
+cv_result_t
+cv_common_image_resize(
+       const cv_image *image_src,
+       cv_image *image_dst,
+       cv_image_resize_method method
+);
+
+/// @brief 杩涜鍥惧儚瑁佸壀
+/// @param[in] image_src 鐢ㄤ簬寰呰鍓殑鍥惧儚鏁版嵁
+/// @param[in] crop_area 鍥惧儚瑁佸壀鐨勫尯鍩�
+/// @param[out] image_dst 瑁佸壀鍚庣殑鍥惧儚鏁版嵁, 鐩爣鍥惧儚鐢辩敤鎴峰垎閰嶅唴瀛�, 闇�鎻愬墠瀹氫箟瀹�, 楂�, PixelFormat绛変俊鎭�
+/// @return 姝e父杩斿洖CV_OK, 鍚﹀垯杩斿洖閿欒绫诲瀷
+CV_SDK_API
+cv_result_t
+cv_common_image_crop(
+       const cv_image *image_src,
+       const cv_rect_t *crop_area,
+       cv_image *image_dst
+);
+
+/// @brief 杩涜鍥惧儚鏃嬭浆
+/// @note 璇ュ嚱鏁扮洰鍓嶄笉鏀寔stride鍙傛暟, 鎵�浠tride鍙傛暟搴旂瓑浜� width * elemSize
+/// @param[in] image_src 鐢ㄤ簬寰呮棆杞殑鍥惧儚鏁版嵁
+/// @param[out] image_dst 鏃嬭浆鍚庣殑鍥惧儚鏁版嵁, 鐩爣鍥惧儚鐢辩敤鎴峰垎閰嶅唴瀛�, 闇�鎻愬墠瀹氫箟瀹�, 楂�, PixelFormat绛変俊鎭�
+/// @param[in] rotate_degree 鍥惧儚椤烘椂閽堟棆杞殑瑙掑害, 鐜板湪鍙敮鎸�0, 90, 180, 270
+/// @return 姝e父杩斿洖CV_OK, 鍚﹀垯杩斿洖閿欒绫诲瀷
+CV_SDK_API
+cv_result_t
+cv_common_image_rotate(
+       const cv_image *image_src,
+       cv_image *image_dst,
+       unsigned int rotate_degree
+);
+
+
+// ====================== model loader ========================
+
+/// 妯″瀷鎸囬拡
+typedef void * cv_model_t;
+
+/// 缁勫悎妯″瀷鎸囬拡
+typedef void * cv_composite_model_t;
+
+/// @brief 鍔犺浇澶栭儴妯″瀷
+/// @param[in] file 杈撳叆妯″瀷鏂囦欢璺緞
+/// @param[out] model 杈撳嚭宸插垵濮嬪寲鐨勬ā鍨嬫寚閽�
+/// @return 鎴愬姛杩斿洖CV_OK
+CV_SDK_API cv_result_t
+cv_common_load_model(
+	const char *file,
+	cv_model_t *model
+);
+
+/// @brief 閿�姣佸凡鍔犺浇鐨勬ā鍨�
+/// @param[in] model 妯″瀷鎸囬拡
+CV_SDK_API
+void cv_common_unload_model(
+	cv_model_t model
+);
+
+/// @brief 鍔犺浇鍐呴儴妯″瀷
+/// @param[in] model_start 鍐呴儴妯″瀷鎸囬拡澶�
+/// @param[in] model_end 鍐呴儴妯″瀷鎸囬拡灏�
+/// @param[out] model 杈撳嚭宸插垵濮嬪寲鐨勬ā鍨嬫寚閽�
+/// @return 鎴愬姛杩斿洖CV_OK
+CV_SDK_API cv_result_t
+cv_common_load_resource(
+	const unsigned char *model_start,
+	const unsigned char *model_end,
+	cv_model_t *model
+);
+
+
+/// @brief 鍔犺浇缁勫悎妯″瀷
+/// @param[in] file 缁勫悎妯″瀷鏂囦欢璺緞锛� 鏂囦欢鏄敱澶氫釜瀛愭ā鍨嬫枃浠剁粍鎴恡ar鍖�
+/// @param[out] model 杈撳嚭宸插垵濮嬪寲鐨勭粍鍚堟ā鍨嬫寚閽�
+/// @return 鎴愬姛杩斿洖CV_OK
+CV_SDK_API cv_result_t
+cv_common_load_composite_model(
+	const char *file,
+	cv_composite_model_t *model
+);
+
+/// @brief 閿�姣佸凡鍔犺浇鐨勭粍鍚堟ā鍨�
+/// @param[in] model 灏嗛攢姣佺殑妯″瀷
+CV_SDK_API cv_result_t
+cv_common_unload_composite_model(
+       cv_composite_model_t model
+);
+
+/// @brief 鑾峰彇瀛愭ā鍨�
+/// @param[in] model 缁勫悎妯″瀷
+/// @param[in] name 瀛愭ā鍨嬪悕瀛�
+/// @param[in] 鎴愬姛杩斿洖CV_OK
+CV_SDK_API cv_result_t
+cv_common_composite_model_get_submodel(
+       cv_composite_model_t model,
+       const char *name,
+       cv_model_t *submodel
+);
+
+/// @}
+#endif  // INCLUDE_CV_COMMON_H_
diff --git a/RtspFace/demo/include/cv_face.h b/RtspFace/demo/include/cv_face.h
new file mode 100644
index 0000000..f820a93
--- /dev/null
+++ b/RtspFace/demo/include/cv_face.h
@@ -0,0 +1,580 @@
+锘�
+#ifndef INCLUDE_CVFACE_API_CV_FACE_EXTERNAL_H_
+#define INCLUDE_CVFACE_API_CV_FACE_EXTERNAL_H_
+
+
+#include "cv_common.h"
+/// @defgroup cvface_common cvface common
+/// @brief Common definitions for cvface
+/// @{
+
+/// @brief 浜鸿劯淇℃伅缁撴瀯浣�
+typedef struct cv_face_t {
+	cv_rect_t rect;						///< 浠h〃闈㈤儴鐨勭煩褰㈠尯鍩�
+	float score;						///< 缃俊搴︼紝鐢ㄤ簬绛涢櫎璐熶緥锛屼笌浜鸿劯鐓х墖璐ㄩ噺鏃犲叧锛屽�艰秺楂樿〃绀虹疆淇″害瓒婇珮銆�
+	int points_count;					///< 浜鸿劯鍏抽敭鐐规暟缁勭殑闀垮害锛屽鏋滄病鏈夎绠楀叧閿偣锛屽垯涓�0
+	float yaw;							///< 姘村钩杞锛岀湡瀹炲害閲忕殑宸﹁礋鍙虫
+	float pitch;							///< 淇话瑙掞紝鐪熷疄搴﹂噺鐨勪笂璐熶笅姝�
+	float roll;							///< 鏃嬭浆瑙掞紝鐪熷疄搴﹂噺鐨勫乏璐熷彸姝�
+	float eye_dist;						///< 涓ょ溂闂磋窛
+	int ID;								///< faceID锛岀敤浜庤〃绀哄湪瀹炴椂浜鸿劯璺熻釜涓殑鐩稿悓浜鸿劯鍦ㄤ笉鍚屽抚澶氭鍑虹幇锛屽湪浜鸿劯妫�娴嬬殑缁撴灉涓棤瀹為檯鎰忎箟
+	cv_pointf_t points_array[256];		///< 浜鸿劯鍏抽敭鐐圭殑鏁扮粍鏀寔21鐐癸紝106鐐癸紝浠ュ強涓哄皢鏉ラ鐣欑殑绌洪棿
+} cv_face_t;
+
+/// 浜鸿劯妫�娴嬨�佽窡韪厤缃�夐」
+#define CV_FACE_DEFAULT_CONFIG		0x00000000		///< 榛樿閫夐」锛屼笉璁剧疆浠讳綍寮�鍏�
+#define CV_FACE_RESIZE_IMG_320W		0x00000002		///< resize鍥惧儚涓洪暱杈�320鐨勫浘鍍�
+#define CV_FACE_RESIZE_IMG_640W		0x00000004		///< resize鍥惧儚涓洪暱杈�640鐨勫浘鍍�
+#define CV_FACE_RESIZE_IMG_1280W	0x00000008		///< resize鍥惧儚涓洪暱杈�1280鐨勫浘鍍�
+
+/// detect config flags, 0x----00-- ~ 0x----FF--
+#define CV_DETECT_ENABLE_ALIGN_21				0x00000100  ///< 寮�鍚潰閮ㄥ叧閿�21鐐规娴嬮�夐」
+#define CV_DETECT_ENABLE_ALIGN_106				0x00000200  ///< 寮�鍚潰閮ㄥ叧閿�106鐐规娴嬮�夐」
+
+/// 璇ョ増鏈瑂dk鏈紑鍚鍔熻兘(濡傦細闈㈤儴鍏抽敭21鐐规娴嬬増鏈紶鍏ヤ簡闈㈤儴鍏抽敭106鐐规娴嬪弬鏁�)
+#define CV_E_UNSURPPORTED	(-1000)
+/// 鎸囧畾浣嶇疆鏈壘鍒發icense.lic鏂囦欢
+#define CV_E_MISSLICENSE	(-1001)
+/// cv_face_init_license_config 鍑芥暟琚噸澶嶈皟鐢�
+#define  CV_E_MULTI_CALLS	(-1002)
+
+/// @brief  浜鸿劯鏈濆悜
+typedef enum {
+	CV_FACE_UP		= 0x0000001,		///< 浜鸿劯鍚戜笂锛屽嵆浜鸿劯鏈濆悜姝e父
+	CV_FACE_LEFT	= 0x0000002,		///< 浜鸿劯鍚戝乏锛屽嵆浜鸿劯琚�嗘椂閽堟棆杞簡90搴�
+	CV_FACE_DOWN	= 0x0000004,		///< 浜鸿劯鍚戜笅锛屽嵆浜鸿劯琚�嗘椂閽堟棆杞簡180搴�
+	CV_FACE_RIGHT	= 0x0000008,		///< 浜鸿劯鍚戝彸锛屽嵆浜鸿劯琚�嗘椂閽堟棆杞簡270搴�
+	CV_FACE_UNKNOWN = 0xf				///< 浜鸿劯鏈濆悜鏈煡锛孉PI鑷姩鍒ゆ柇浜鸿劯鏈濆悜锛岃�楁椂澧炲姞銆俧ace_track涓嶆敮鎸佹鍙傛暟锛岀瓑鍚屼簬CV_FACE_UP
+} cv_face_orientation;
+
+/// @brief  杈撳嚭褰撳墠SDK鎵�鏀寔鐨勭畻娉曞強鍐呯疆妯″瀷淇℃伅
+CV_SDK_API
+void
+cv_face_algorithm_info();
+
+/// @brief  鎵嬪姩鍔犺浇license鏂囦欢锛岄櫎IOS,Android骞冲彴澶栵紝閮藉彲浠ヤ笉涓诲姩璋冪敤姝ゅ嚱鏁帮紙浣嗛渶瑕佸皢license鏂囦欢鏀惧湪鍙墽琛岀▼搴忓悓涓�鐩綍锛屽悕绉板懡鍚嶄负license.lic锛�,璇ュ嚱鏁板彧鑳借鎴愬姛璋冪敤涓�娆�
+/// param[in]	szLicense 鎺堟潈鏂囦欢涓殑瀛楃涓诧紝license鏂囦欢鐨勫叏閮ㄥ唴瀹�
+CV_SDK_API
+cv_result_t
+cv_face_init_license_config(const char* szLicense);
+
+
+/// @defgroup cvface_detect cvface detect
+/// @brief face position detection interfaces
+///
+/// This set of interfaces processing face position & 21 or 106 points landmark detection routines
+///
+/// @{
+
+/// @brief 鍒涘缓浜鸿劯妫�娴嬪彞鏌�
+/// @param[out] handle鍑芥暟鎴愬姛鏃惰璁剧疆涓烘湁鏁堢殑detector handle
+/// @param[in] model_path 妯″瀷鏂囦欢鐨勭粷瀵硅矾寰勬垨鐩稿璺緞锛岃嫢涓嶆寚瀹氭ā鍨嬪彲涓篘ULL
+/// @param[in] config 閰嶇疆閫夐」锛岄粯璁ら厤缃负CV_DETECT_ENABLE_ALIGN_21(21鍏抽敭鐐规娴�)銆傛敮鎸�106鍏抽敭鐐规娴婥V_DETECT_ENABLE_ALIGN_106鍜岃嚜鍔ㄧ缉鏀綜V_FACE_RESIZE_IMG_XXXX銆�
+/// @return 杩斿洖CV_OK 澶辫触杩斿洖閿欒鐮�
+CV_SDK_API
+cv_result_t
+cv_face_create_detector(
+	cv_handle_t *handle,
+	const char *model_path,
+	unsigned int config
+);
+
+/// @brief 鑾峰彇褰撳墠浜鸿劯妫�娴嬬殑榛樿闃�鍊�
+/// @param[in]	handle 浜鸿劯妫�娴嬪彞鏌�
+/// @param[out]	threshold 浜鸿劯妫�娴嬬殑榛樿闃�鍊�
+CV_SDK_API
+cv_result_t cv_face_detect_get_threshold(
+	cv_handle_t detector_handle,
+	float *threshold
+	);
+
+/// @brief 璁剧疆褰撳墠浜鸿劯妫�娴嬬殑闃�鍊硷紝闇�瑕佸湪璋冪敤cv_face_detect涔嬪墠璋冪敤姝ゅ嚱鏁帮紝闃堝�奸渶澶т簬0锛岃缃悗璋冪敤cv_face_detect_get_threshold涓烘柊璁剧疆鍚庣殑鍊�)
+/// @param[in] handle 浜鸿劯妫�娴嬪彞鏌�
+/// @param[in] threshold 浜鸿劯妫�娴嬫柊闃�鍊�
+CV_SDK_API
+cv_result_t cv_face_detect_set_threshold(
+	cv_handle_t detector_handle,
+	float threshold
+	);
+
+/// @brief 閿�姣佸凡鍒濆鍖栫殑浜鸿劯妫�娴嬪彞鏌�
+/// @param[in] detector_handle 宸插垵濮嬪寲鐨勪汉鑴告娴嬪彞鏌�
+CV_SDK_API
+void cv_face_destroy_detector(
+	cv_handle_t detector_handle
+);
+
+/// @brief 浜鸿劯妫�娴�
+/// @param[in]	detector_handle 宸插垵濮嬪寲鐨勪汉鑴告娴嬪彞鏌�
+/// @param[in]	image 鐢ㄤ簬妫�娴嬬殑鍥惧儚鏁版嵁
+/// @param[in]	piexl_format 鐢ㄤ簬妫�娴嬬殑鍥惧儚鏁版嵁鐨勫儚绱犳牸寮�
+/// @param[in]	image_width 鐢ㄤ簬妫�娴嬬殑鍥惧儚鐨勫搴�(浠ュ儚绱犱负鍗曚綅)
+/// @param[in]	image_height 鐢ㄤ簬妫�娴嬬殑鍥惧儚鐨勯珮搴�(浠ュ儚绱犱负鍗曚綅)
+/// @param[in]	image_stride 鐢ㄤ簬妫�娴嬬殑鍥惧儚涓瘡涓�琛岀殑璺ㄥ害(浠ュ儚绱犱负鍗曚綅) 鍥惧儚璺ㄥ害=鍥惧儚瀹藉害*鍥惧儚缁村害
+/// @param[in]	orientation 鍥剧墖涓汉鑴哥殑鏂瑰悜
+/// @param[out]	p_faces_array 妫�娴嬪埌鐨勪汉鑴镐俊鎭暟缁勶紝api璐熻矗鍒嗛厤鍐呭瓨锛岄渶瑕佽皟鐢╟v_face_release_detector_result鍑芥暟閲婃斁
+/// @param[out]	p_faces_count 妫�娴嬪埌鐨勪汉鑴告暟閲�
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_face_detect(
+	cv_handle_t detector_handle,
+	const unsigned char *image,
+	cv_pixel_format pixel_format,
+	int image_width,
+	int image_height,
+	int image_stride,
+	cv_face_orientation orientation,
+	cv_face_t **p_faces_array,
+	int *p_faces_count
+);
+
+/// @brief 閲婃斁浜鸿劯妫�娴嬭繑鍥炵粨鏋滄椂鍒嗛厤鐨勭┖闂�
+/// @param[in] faces_array 妫�娴嬪埌鐨勪汉鑴镐俊鎭暟缁�
+/// @param[in] faces_count 妫�娴嬪埌鐨勪汉鑴告暟閲�
+CV_SDK_API
+void
+cv_face_release_detector_result(
+	cv_face_t *faces_array,
+	int faces_count
+);
+
+
+/// @}
+
+
+/// @defgroup cvface_track cvface track
+/// @brief face tracking interfaces
+///
+/// This set of interfaces processing face tracking routines
+///
+/// @{
+
+#define CV_FACE_TRACKING_TWO_THREAD		0x00110000	///< 寮�鍚弻绾跨▼浜鸿劯璺熻釜锛屽缓璁綆閰嶇疆鐜寮�鍚閫夐」銆�
+
+/// @brief 鍒涘缓瀹炴椂浜鸿劯璺熻釜鍙ユ焺銆傚彲浠ヨ皟鐢╟v_face_track_set_detect_face_cnt_limit璁剧疆妫�娴嬬殑鏈�澶т汉鑴告暟鐩紝榛樿涓轰笉闄愬埗浜鸿劯妫�娴嬫暟閲忋��
+/// @param[out]	handle鍑芥暟鎴愬姛鏃惰璁剧疆涓烘湁鏁堢殑tracker handle
+/// @param[in]	model_path 妯″瀷鏂囦欢鐨勭粷瀵硅矾寰勬垨鐩稿璺緞锛岃嫢涓嶆寚瀹氭ā鍨嬪彲涓篘ULL
+/// @param[in]	config 榛樿閰嶇疆涓篊V_DETECT_ENABLE_ALIGN_21(21鍏抽敭鐐规娴�)銆傛敮鎸�106鍏抽敭鐐规娴婥V_DETECT_ENABLE_ALIGN_106銆佽嚜鍔ㄧ缉鏀綜V_FACE_RESIZE_IMG_XXXX鍜屽弻绾跨▼璺熻釜CV_FACE_TRACKING_TWO_THREAD銆�
+/// @return 杩斿洖CV_OK 澶辫触杩斿洖閿欒鐮�
+CV_SDK_API
+cv_result_t
+cv_face_create_tracker(
+	cv_handle_t *handle,
+	const char *model_path,
+	unsigned int config
+);
+
+/// @brief 閿�姣佸凡鍒濆鍖栫殑瀹炴椂浜鸿劯璺熻釜鍙ユ焺
+/// @param[in] tracker_handle 宸插垵濮嬪寲鐨勫疄鏃朵汉鑴歌窡韪彞鏌�
+CV_SDK_API
+void
+cv_face_destroy_tracker(
+	cv_handle_t tracker_handle
+);
+
+/// @brief 瀵硅繛缁棰戝抚杩涜瀹炴椂蹇�熶汉鑴歌窡韪�
+/// @param[in]	tracker_handle 宸插垵濮嬪寲鐨勫疄鏃朵汉鑴歌窡韪彞鏌�
+/// @param[in]	image 鐢ㄤ簬妫�娴嬬殑鍥惧儚鏁版嵁
+/// @param[in]	piexl_format 鐢ㄤ簬妫�娴嬬殑鍥惧儚鏁版嵁鐨勫儚绱犳牸寮�
+/// @param[in]	image_width 鐢ㄤ簬妫�娴嬬殑鍥惧儚鐨勫搴�(浠ュ儚绱犱负鍗曚綅)
+/// @param[in]	image_height 鐢ㄤ簬妫�娴嬬殑鍥惧儚鐨勯珮搴�(浠ュ儚绱犱负鍗曚綅)
+/// @param[in]	image_stride 鐢ㄤ簬妫�娴嬬殑鍥惧儚涓瘡涓�琛岀殑璺ㄥ害(浠ュ儚绱犱负鍗曚綅)锛屽浘鍍忚法搴�=鍥惧儚瀹藉害*鍥惧儚缁村害
+/// @param[in]	orientation 瑙嗛涓汉鑴哥殑鏂瑰悜
+/// @param[out]	p_faces_array 妫�娴嬪埌鐨勪汉鑴镐俊鎭暟缁勶紝api璐熻矗鍒嗛厤鍐呭瓨锛岄渶瑕佽皟鐢╟v_facesdk_release_tracker_result鍑芥暟閲婃斁
+/// @param[out]	p_faces_count 妫�娴嬪埌鐨勪汉鑴告暟閲�
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_face_track(
+	cv_handle_t tracker_handle,
+	const unsigned char *image,
+	cv_pixel_format pixel_format,
+	int image_width,
+	int image_height,
+	int image_stride,
+	cv_face_orientation orientation,
+	cv_face_t **p_faces_array,
+	int *p_faces_count
+);
+
+/// @brief 閲嶇疆浜鸿劯璺熻釜妫�娴嬪櫒
+/// @param[in] tracker_handle 宸插垵濮嬪寲鐨勫疄鏃朵汉鑴歌窡韪彞鏌�
+CV_SDK_API
+void
+cv_face_reset_tracker(
+	cv_handle_t tracker_handle
+);
+
+/// @brief 閲婃斁瀹炴椂浜鸿劯璺熻釜杩斿洖缁撴灉鏃跺垎閰嶇殑绌洪棿
+/// @param[in] faces_array 妫�娴嬪埌鐨勪汉鑴镐俊鎭暟缁�
+/// @param[in] faces_count 妫�娴嬪埌鐨勪汉鑴告暟閲�
+CV_SDK_API
+void
+cv_face_release_tracker_result(
+	cv_face_t *faces_array,
+	int faces_count
+);
+
+/// @brief 璁剧疆妫�娴嬪埌鐨勬渶澶т汉鑴告暟鐩甆锛屾寔缁璽rack宸叉娴嬪埌鐨凬涓汉鑴哥洿鍒颁汉鑴告暟灏忎簬N鍐嶇户缁仛detect,濡傛灉鏈皟鐢ㄥ垯涓嶅妫�娴嬩汉鑴告暟閲忓仛闄愬埗
+/// @param[in]	tracker_handle 宸插垵濮嬪寲鐨勫疄鏃朵汉鑴歌窡韪彞鏌�
+/// @param[in]	detect_face_cnt_limit 鏈�澶т汉鑴告暟鐩甆锛�-1琛ㄧず涓嶈涓婇檺
+/// @param[out]	val 濡傛灉涓洪潪绌烘寚閽堬紝鍒欒繑鍥為噰鐢ㄧ殑鏂扮殑鍊硷紝娉ㄦ剰锛岀敱浜庡唴閮ㄧ殑闄愬埗锛� 瀹為檯閲囩敤鐨勫�煎苟涓嶄竴瀹氱瓑浜巇etect_face_cnt_limit
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨� (瀹為檯璁剧疆妫�娴嬪埌鐨勬渶澶х洰鏍囨暟鐩甆鍙兘灏忎簬detect_face_cnt_limit)
+CV_SDK_API
+cv_result_t
+cv_face_track_set_detect_face_cnt_limit(
+	cv_handle_t tracker_handle,
+	int detect_face_cnt_limit,
+	int* val
+);
+
+/// @}
+
+
+/// @defgroup cvface_verify cvface verify
+/// @brief face verification interfaces
+///
+/// This set of interfaces processing face verification routines.
+///
+/// @{
+
+/// @brief 鍒涘缓浜鸿劯楠岃瘉鍙ユ焺
+/// @param[out]	handle鍑芥暟鎴愬姛鏃惰璁剧疆涓烘湁鏁堢殑verify handle
+/// @param[in]	model_path 妯″瀷搴撴墍鍦ㄦ枃浠跺す鐨勭粷瀵硅矾寰勬垨鐩稿璺緞(sdk涓ā鍨嬫枃浠惰矾寰勪负sdk/models/verify.model")锛屼笉鑳戒负NULL
+/// @return 杩斿洖CV_OK 澶辫触杩斿洖閿欒鐮�
+CV_SDK_API
+cv_result_t
+cv_verify_create_handle(
+	cv_handle_t* handle,
+	const char *model_path
+);
+
+/// @brief 鍒涘缓浜鸿劯楠岃瘉鍙ユ焺鐨勫壇鏈紝涓庢棫鐨勫彞鏌勫叡浜唴瀛橈紝鍙敤浜庡绾跨▼璋冪敤
+/// @param[in]	old_handle 鏃х殑浜鸿劯楠岃瘉鍙ユ焺锛屾柊鍙ユ焺閲婃斁鍚庢墠鑳介噴鏀炬棫鍙ユ焺
+/// @param[out]	new_handle 鍑芥暟鎴愬姛杩斿洖浜鸿劯楠岃瘉鍙ユ焺鐨勫壇鏈�
+/// @return 鎴愬姛杩斿洖CV_OK
+CV_SDK_API
+cv_result_t
+cv_verify_duplicate_handle(
+	cv_handle_t old_handle,
+	cv_handle_t* new_handle
+);
+
+/// @brief 閿�姣佸凡鍒濆鍖栫殑浜鸿劯楠岃瘉鍙ユ焺
+/// @param[in] verify_handle 宸插垵濮嬪寲鐨勪汉鑴搁獙璇佸彞鏌�
+CV_SDK_API
+void
+cv_verify_destroy_handle(
+	cv_handle_t verify_handle
+);
+
+/// @brief 鑾峰彇褰撳墠浜鸿劯楠岃瘉浣跨敤鐨勬ā鍨嬬増鏈彿
+/// @param[in] verify_handle 浜鸿劯楠岃瘉鍙ユ焺
+/// @return 鐗堟湰鍙�
+CV_SDK_API
+int
+cv_verify_get_version(
+	cv_handle_t verify_handle
+);
+
+/// @brief 鑾峰彇褰撳墠浜鸿劯楠岃瘉浣跨敤鐨勬ā鍨嬫彁鍙栫殑feature闀垮害锛屼笉鍖呭惈cv_feature_header_t鐨勯暱搴�
+/// @param[in] verify_handle 浜鸿劯楠岃瘉鍙ユ焺
+/// @return 鐗瑰緛闀垮害
+CV_SDK_API
+int
+cv_verify_get_feature_length(
+	cv_handle_t verify_handle
+);
+
+/// @brief 鎻愬彇浜鸿劯鐗瑰緛锛岃繑鍥炵壒寰佹暟鎹暱搴︼紝鍙互鎶婅繑鍥炴暟缁勭紪鐮佹垚瀛楃涓插悗瀛樺偍璧锋潵浠ヤ究浠ュ悗浣跨敤
+/// @param[in]	verify_handle 宸插垵濮嬪寲鐨勪汉鑴搁獙璇佸彞鏌�
+/// @param[in]	image 鐢ㄤ簬妫�娴嬬殑鍥惧儚鏁版嵁
+/// @param[in]	piexl_format 鐢ㄤ簬妫�娴嬬殑鍥惧儚鏁版嵁鐨勫儚绱犳牸寮�
+/// @param[in]	image_width 鐢ㄤ簬妫�娴嬬殑鍥惧儚鐨勫搴�(浠ュ儚绱犱负鍗曚綅)
+/// @param[in]	image_height 鐢ㄤ簬妫�娴嬬殑鍥惧儚鐨勯珮搴�(浠ュ儚绱犱负鍗曚綅)
+/// @param[in]	image_stride 鐢ㄤ簬妫�娴嬬殑鍥惧儚涓瘡涓�琛岀殑璺ㄥ害(浠ュ儚绱犱负鍗曚綅)锛屽浘鍍忚法搴�=鍥惧儚瀹藉害*鍥惧儚缁村害
+/// @param[in]	face 杈撳叆寰呭鐞嗙殑浜鸿劯淇℃伅锛岄渶瑕佸寘鎷叧閿偣淇℃伅锛屽嵆 face.points_array 涓嶄负NULL
+/// @param[out]	p_feature 浜鸿劯鐗瑰緛鏁版嵁锛岄渶瑕佽皟鐢╟v_verify_release_feature鍑芥暟閲婃斁
+/// @param[out]	feature_blob_size 鐗瑰緛鐨勯暱搴︼紝鍖呭惈cv_feature_header_t鐨勯暱搴︼紝涓巆v_feature_header_t->len涓�鑷�
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_get_feature(
+	cv_handle_t verify_handle,
+	const unsigned char *image,
+	cv_pixel_format pixel_format,
+	int image_width,
+	int image_height,
+	int image_stride,
+	const cv_face_t *face,
+	cv_feature_t **p_feature,
+	unsigned int *feature_blob_size
+);
+
+/// @brief 鐗瑰緛淇℃伅缂栫爜鎴愬瓧绗︿覆锛岀紪鐮佸悗鐨勫瓧绗︿覆鐢ㄤ簬淇濆瓨
+/// @param[in]	feature 杈撳叆鐨勭壒寰佷俊鎭�
+/// @param[out]	feature_str 杈撳嚭鐨勭紪鐮佸悗鐨勫瓧绗︿覆,鐢辩敤鎴峰垎閰嶅拰閲婃斁
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_serialize_feature(
+	const cv_feature_t *feature,
+	char *feature_str
+);
+
+
+/// @brief 瑙g爜瀛楃涓叉垚鐗瑰緛淇℃伅
+/// @param[in] feature_str 杈撳叆鐨勫緟瑙g爜鐨勫瓧绗︿覆锛宎pi璐熻矗鍒嗛厤鍐呭瓨锛岄渶瑕佽皟鐢╟v_verify_release_feature閲婃斁
+/// @return 杩斿洖瑙g爜鍚庣殑feature, 闇�瑕佺敤鎴蜂娇鐢� cv_common_feature_release() 閲婃斁
+CV_SDK_API
+cv_feature_t *
+cv_verify_deserialize_feature(
+	const char *feature_str
+);
+
+/// @brief 浜鸿劯楠岃瘉
+/// @param[in]	verify_handle 宸插垵濮嬪寲鐨勪汉鑴搁獙璇佸彞鏌�
+/// @param[in]	feature1 绗竴寮犱汉鑴哥壒寰佷俊鎭�
+/// @param[in]	feature2 绗簩寮犱汉鑴哥壒寰佷俊鎭�
+/// @param[out]	score 浜鸿劯楠岃瘉鐩镐技搴﹀緱鍒嗭紝鑼冨洿0-1锛屽緱鍒嗚秺鎺ヨ繎1瓒婄浉浼�
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_compare_feature(
+	cv_handle_t verify_handle,
+	const cv_feature_t *feature1,
+	const cv_feature_t *feature2,
+	float *score
+);
+
+/// @brief 閲婃斁鎻愬彇浜鸿劯鐗瑰緛鏃跺垎閰嶇殑绌洪棿
+/// @param[in]  feature 鎻愬彇鍒扮殑浜鸿劯鐗瑰緛淇℃伅
+CV_SDK_API
+void
+cv_verify_release_feature(
+	cv_feature_t *feature
+);
+
+/// @}
+
+
+/// @defgroup cvface_search cvface search
+/// @brief face searching interfaces
+///
+/// This set of interfaces processing face search routines.
+///
+/// @{
+
+/// @defgroup cvface_database cvface database for search
+/// @ingroup cvface_search
+/// @brief face database CURD interfaces for face searching
+/// @{
+
+/// @brief	鍒涘缓浜鸿劯鏁版嵁搴撳彞鏌�
+/// @handle[out]	鎴愬姛鏃跺�欒缃负浜鸿劯鏁版嵁搴撳彞鏌�
+/// @return[in]		鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_create_db(cv_handle_t *handle);
+
+/// @brief 閿�姣佸凡鍒濆鍖栫殑浜鸿劯鏁版嵁搴撳彞鏌�
+/// @param[in] db_handle 宸插垵濮嬪寲鐨勪汉鑴告暟鎹簱鍙ユ焺
+CV_SDK_API
+void
+cv_verify_destroy_db(
+	cv_handle_t db_handle
+);
+
+/// @brief 浜鸿劯鏁版嵁搴撳鍔犳暟鎹�
+/// @param[in] db_handle 宸插垵濮嬪寲鐨勪汉鑴告暟鎹簱鍙ユ焺
+/// @param[in] items 鐢ㄤ簬鍒涘缓鏁版嵁搴撶殑浜鸿劯鐗瑰緛淇℃伅鏁扮粍
+/// @param[in] item_count 鐗瑰緛淇℃伅鏁伴噺
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_build_db(
+	cv_handle_t db_handle,
+	cv_feature_t* const *items,
+	unsigned int item_count
+);
+
+/// @brief 浜鸿劯鏁版嵁搴撳鍔犳暟鎹�
+/// @param[in]	db_handle 宸插垵濮嬪寲鐨勪汉鑴告暟鎹簱鍙ユ焺
+/// @param[in]	item 寰呭姞鍏ョ殑浜鸿劯鐗瑰緛淇℃伅
+/// @param[out]	idx 鍔犲叆鍚庣殑浜鸿劯鏁版嵁搴撶储寮曞��
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_add_face(
+	cv_handle_t db_handle,
+	const cv_feature_t *item,
+	int *idx
+);
+
+/// @brief 浜鸿劯鏁版嵁搴撳垹闄ゆ暟鎹�
+/// @param[in]	db_handle 宸插垵濮嬪寲鐨勪汉鑴告暟鎹簱鍙ユ焺
+/// @param[in]	idx 寰呭垹闄ょ殑浜鸿劯鏁版嵁搴撶储寮曞��(涓庡姞鍏ユ椂涓�鑷�)
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_delete_face(
+	cv_handle_t db_handle,
+	int idx
+);
+
+/// @brief 灏嗕汉鑴告暟鎹簱淇℃伅淇濆瓨涓烘暟鎹簱鏂囦欢
+/// @param[in] db_handle 宸插垵濮嬪寲鐨勪汉鑴告暟鎹簱鍙ユ焺
+/// @param[in] db_path 浜鸿劯鏁版嵁搴撲繚瀛樻枃浠剁殑璺緞
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_save_db(
+	cv_handle_t db_handle,
+	const char *db_path
+);
+
+/// @brief 鍔犺浇浜鸿劯鏁版嵁搴撴枃浠�
+/// @param[in] db_handle 宸插垵濮嬪寲鐨勪汉鑴告暟鎹簱鍙ユ焺
+/// @param[in] db_path 浜鸿劯鏁版嵁搴撲繚瀛樻枃浠剁殑璺緞
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_load_db(
+	cv_handle_t db_handle,
+	const char *db_path
+);
+
+/// @}
+
+/// @brief 鎼滅储浜鸿劯鏁版嵁搴�
+/// @param[in]	verify_handle 宸插垵濮嬪寲鐨勪汉鑴搁獙璇佸彞鏌�
+/// @param[in]	db_handle 宸插垵濮嬪寲鐨勪汉鑴告暟鎹簱鍙ユ焺
+/// @param[in]	query 寰呮悳绱㈢殑浜鸿劯鐗瑰緛淇℃伅
+/// @param[in]	top_k 鏈�澶х殑浜鸿劯鎼滅储鏁伴噺
+/// @param[out] top_idxs 鎼滅储鍒扮殑浜鸿劯鏁版嵁搴撶储寮曞�兼暟缁�(鐢辩敤鎴峰垎閰嶅拰閲婃斁)
+/// @param[out]	top_scores 鎼滅储鍒扮殑浜鸿劯鐩镐技搴﹀緱鍒嗘暟缁�(鐢辩敤鎴峰垎閰嶅拰閲婃斁)锛岃寖鍥�0-1锛屽緱鍒嗚秺鎺ヨ繎1瓒婄浉浼�
+/// @param result_length 瀹為檯鎼滅储鍒扮殑浜鸿劯鏁伴噺
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_search_face(
+	cv_handle_t verify_handle,
+	cv_handle_t db_handle,
+	const cv_feature_t *query,
+	unsigned int top_k,
+	int *top_idxs,
+	float *top_scores,
+	unsigned int *result_length
+);
+
+/// @brief 浠庝竴缁勭壒寰佹暟缁勪腑鎼滅储浜鸿劯
+/// @param[in]	verify_handle 宸插垵濮嬪寲鐨勪汉鑴搁獙璇佸彞鏌�
+/// @param[in]	list_feature 浜鸿劯鐗瑰緛淇℃伅鏁扮粍
+/// @param[in]	list_count 浜鸿劯鐗瑰緛淇℃伅鏁伴噺
+/// @param[in]	query 寰呮悳绱㈢殑浜鸿劯鐗瑰緛淇℃伅
+/// @param[in]	top_k 鏈�澶х殑浜鸿劯鎼滅储鏁伴噺
+/// @param[out]	top_idxs 鎼滅储鍒扮殑浜鸿劯鏁版嵁搴撶储寮曞�兼暟缁�(鐢辩敤鎴峰垎閰嶅拰閲婃斁)
+/// @param[out]	top_scores 鎼滅储鍒扮殑浜鸿劯鐩镐技搴﹀緱鍒嗘暟缁�(鐢辩敤鎴峰垎閰嶅拰閲婃斁)锛岃寖鍥�0-1锛屽緱鍒嗚秺鎺ヨ繎1瓒婄浉浼�
+/// @param[out]	result_length 瀹為檯鎼滅储鍒扮殑浜鸿劯鏁伴噺
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_search_face_from_list(
+	cv_handle_t verify_handle,
+	cv_feature_t* const *list_feature,
+	int list_count,
+	const cv_feature_t *query,
+	unsigned int top_k,
+	int *top_idxs,
+	float *top_scores,
+	unsigned int *result_length
+);
+
+/// @}
+
+
+/// @defgroup cvface_group cvface group
+/// @brief face grouping interfaces
+///
+/// This set of interfaces processing face grouping routines.
+///
+/// @{
+
+
+/// @brief 鎵归噺浜鸿劯鍒嗙粍
+/// @param[in]	verify_handle 宸插垵濮嬪寲鐨勪汉鑴搁獙璇佸彞鏌�
+/// @param[in]	features 浜鸿劯鐗瑰緛淇℃伅鏁扮粍
+/// @param[in]	feature_count 浜鸿劯鐗瑰緛淇℃伅鏁伴噺
+/// @param[out]	p_groups_array 鍒嗙粍缁撴灉锛宨ndex瀵瑰簲features鐨刬ndex锛宲_groups_array[0]琛ㄧずindex涓�0鐨刦eature瀵瑰簲鐨勫垎缁勶紝鍐呭瓨鐢辩敤鎴风鐞嗭紝p_groups_array澶у皬涓巉eature_count涓�鑷�
+/// @param[out]	group_count 鍒嗙粍鐨勭粍鏁帮紝闇�鐢ㄦ埛鍒濆鍖栦负0
+/// @return 鎴愬姛杩斿洖CV_OK锛屽惁鍒欒繑鍥為敊璇被鍨�
+CV_SDK_API
+cv_result_t
+cv_verify_grouping(
+	cv_handle_t verify_handle,
+	const cv_feature_t * const *features,
+	unsigned int feature_count,
+	unsigned int *p_groups_array,
+	unsigned int *groups_count
+);
+
+/// @brief 鍒濆鍖栫壒寰佹暟缁勭粨鏋�
+/// @param[in] p_groups_array	鐗瑰緛鍒嗙粍缁撴灉瀛樺偍鍦板潃
+/// @param[in] feature_count	鐗瑰緛鏁扮粍闀垮害
+CV_SDK_API
+void
+cv_verify_initialize_labels(
+	unsigned int *p_groups_array,
+	unsigned int feature_count
+);
+
+/// @}
+
+
+/// @defgroup cvface_group cvface group
+/// @brief face grouping interfaces
+///
+/// This set of interfaces processing face grouping routines.
+///
+/// @{
+
+/// @brief 鍒涘缓鐗瑰緛鑱氱被鍙ユ焺
+/// @param[out] handle 杈撳嚭宸插垵濮嬪寲鐨勭壒寰佽仛绫诲彞鏌勬墍鍦ㄥ湴鍧�
+/// @param[in] model 杞藉叆鐨勬ā鍨嬭矾寰�
+/// @return 鎴愬姛杩斿洖CV_OK, 鍚﹀垯杩斿洖閿欒淇℃伅
+CV_SDK_API
+cv_result_t
+cv_face_create_clustering(
+cv_handle_t *clustering_handle,
+const char* model_path
+);
+
+/// @brief 鐗瑰緛鑱氱被锛堝寘鍚閲忚仛绫伙級
+/// @param[in] handle 宸插垵濮嬪寲鐨勭壒寰佽仛绫诲彞鏌�
+/// @param[in] features 寰呰仛绫荤殑鐗瑰緛鏁扮粍
+/// @param[out] labels 绫诲埆鏁扮粍, 0琛ㄧず闇�瑕侀噸鏂拌仛绫伙紝1琛ㄧず鏄崟寮犱汉鑴革紙褰撲汉鑴告暟閲忓ぇ浜庣瓑浜�2鏄墠浼氬崟鐙垎缁勶級锛�2琛ㄧず鍣煶锛堟ā绯娿�佷晶鑴搞�佷笉鏄汉鑴哥瓑锛夛紝3鍙婂叾浠ヤ笂琛ㄧず瀹為檯鍒嗙被缁撴灉
+/// @param[out] size 鐗瑰緛鍜岀被鍒殑鏁伴噺
+/// @return 鎴愬姛杩斿洖CV_OK, 鍚﹀垯杩斿洖閿欒绫诲瀷
+CV_SDK_API
+cv_result_t
+cv_face_clustering(
+cv_handle_t clustering_handle,
+const cv_feature_t * const *features,
+unsigned int *labels,
+int size
+);
+
+
+/// @brief 閿�姣佸凡鍒濆鍖栫殑鐗瑰緛鑱氱被鍙ユ焺
+/// @param[in] handle 宸插垵濮嬪寲鐨勭壒寰佽仛绫诲彞鏌�
+CV_SDK_API
+void
+cv_face_clustering_destroy(
+cv_handle_t clustering_handle
+);
+
+/// @}
+
+
+#endif  // INCLUDE_CVFACE_API_CV_FACE_H_
diff --git a/RtspFace/demo/include/cv_utils.h b/RtspFace/demo/include/cv_utils.h
new file mode 100644
index 0000000..6277a9f
--- /dev/null
+++ b/RtspFace/demo/include/cv_utils.h
@@ -0,0 +1,47 @@
+锘�#ifndef CV_UTILS_H
+#define CV_UTILS_H
+
+#ifdef _MSC_VER
+#	ifdef CV_STATIC_LIB
+#		define CV_SDK_API_
+#	elif defined SDK_EXPORTS
+#		define CV_SDK_API_ __declspec(dllexport)
+#	else
+#		define CV_SDK_API_ __declspec(dllimport)
+#	endif
+#else /* _MSC_VER */
+#	ifdef SDK_EXPORTS
+#		define CV_SDK_API_ __attribute__((visibility ("default")))
+#	else
+#		define CV_SDK_API_
+#	endif
+#endif
+
+typedef int cv_errcode;
+
+#define	CV_OK 0					///< 姝e父杩愯
+
+#define	CV_E_INVALIDARG -1			///< 鏃犳晥鍙傛暟
+#define	CV_E_HANDLE -2				///< 鍙ユ焺閿欒
+#define	CV_E_OUTOFMEMORY -3			///< 鍐呭瓨涓嶈冻
+#define	CV_E_FAIL -4				///< 杩愯澶辫触锛屽唴閮ㄩ敊璇�
+#define	CV_E_DELNOTFOUND -5			///< 瀹氫箟缂哄け
+#define	CV_E_INVALID_PIXEL_FORMAT -6		///< 涓嶆敮鎸佺殑鍥惧儚鏍煎紡
+#define	CV_E_FILE_NOT_FOUND -7			///< 鏂囦欢涓嶅瓨鍦�
+#define	CV_E_INVALID_FILE_FORMAT -8		///< 妯″瀷鏍煎紡涓嶆纭鑷村姞杞藉け璐�
+#define	CV_E_FILE_EXPIRE -9			///< 妯″瀷鏂囦欢杩囨湡
+
+#define	CV_E_INVALID_AUTH -13			///< license涓嶅悎娉�
+#define	CV_E_INVALID_APPID -14			///< 鍖呭悕閿欒
+#define	CV_E_AUTH_EXPIRE -15			///< SDK杩囨湡
+#define	CV_E_UUID_MISMATCH -16			///< UUID涓嶅尮閰�
+#define	CV_E_ONLINE_AUTH_CONNECT_FAIL -17	///< 鍦ㄧ嚎楠岃瘉杩炴帴澶辫触
+#define	CV_E_ONLINE_AUTH_TIMEOUT -18		///< 鍦ㄧ嚎楠岃瘉瓒呮椂
+#define	CV_E_ONLINE_AUTH_INVALID -19		///< 鍦ㄧ嚎鏍¢獙澶辫触
+#define	CV_E_LICENSE_IS_NOT_ACTIVABLE -20	///< license涓嶅彲婵�娲�
+#define	CV_E_ACTIVE_FAIL -21			///< license婵�娲诲け璐�
+#define	CV_E_ACTIVE_CODE_INVALID -22		///< 婵�娲荤爜鏃犳晥
+
+#define	CV_E_UNSUPPORTED -1000			///< 涓嶆敮鎸佺殑鍑芥暟璋冪敤鏂瑰紡
+
+#endif
diff --git a/RtspFace/demo/models/verify.model b/RtspFace/demo/models/verify.model
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/RtspFace/demo/models/verify.model
diff --git a/RtspFace/demo/Makefile b/RtspFace/demo/src/Makefile
similarity index 100%
rename from RtspFace/demo/Makefile
rename to RtspFace/demo/src/Makefile
diff --git a/RtspFace/demo/faceAPI.cpp b/RtspFace/demo/src/faceAPI.cpp
similarity index 100%
rename from RtspFace/demo/faceAPI.cpp
rename to RtspFace/demo/src/faceAPI.cpp
diff --git a/RtspFace/demo/faceAPI.h b/RtspFace/demo/src/faceAPI.h
similarity index 100%
rename from RtspFace/demo/faceAPI.h
rename to RtspFace/demo/src/faceAPI.h
diff --git a/RtspFace/demo/faceDB.cpp b/RtspFace/demo/src/faceDB.cpp
similarity index 100%
rename from RtspFace/demo/faceDB.cpp
rename to RtspFace/demo/src/faceDB.cpp
diff --git a/RtspFace/demo/faceDB.h b/RtspFace/demo/src/faceDB.h
similarity index 100%
rename from RtspFace/demo/faceDB.h
rename to RtspFace/demo/src/faceDB.h
diff --git a/RtspFace/demo/out.db b/RtspFace/demo/src/out.db
similarity index 100%
rename from RtspFace/demo/out.db
rename to RtspFace/demo/src/out.db
Binary files differ
diff --git a/RtspFace/demo/sample_face_track.cpp b/RtspFace/demo/src/sample_face_track.cpp
similarity index 100%
rename from RtspFace/demo/sample_face_track.cpp
rename to RtspFace/demo/src/sample_face_track.cpp
diff --git a/RtspFace/demo/test.cpp b/RtspFace/demo/src/test.cpp
similarity index 100%
rename from RtspFace/demo/test.cpp
rename to RtspFace/demo/src/test.cpp
diff --git a/RtspFace/demo/test.sh b/RtspFace/demo/src/test.sh
similarity index 100%
rename from RtspFace/demo/test.sh
rename to RtspFace/demo/src/test.sh
diff --git a/RtspFace/demo/time_helper.h b/RtspFace/demo/src/time_helper.h
similarity index 100%
rename from RtspFace/demo/time_helper.h
rename to RtspFace/demo/src/time_helper.h
diff --git "a/RtspFace/demo/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt" "b/RtspFace/demo/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
deleted file mode 100644
index 3f608a3..0000000
--- "a/RtspFace/demo/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
+++ /dev/null
@@ -1 +0,0 @@
-#include "faceAPI.h"?#include "faceDB.h"??faceDB fdb = faceDB::faceDB();?faceAPI::faceAPI(){?	//创建静态人脸识别句柄,同时创建状态标量?	cv_result_t cv_result = 0;?	cv_face_create_detector(&handle_detect, NULL, CV_DETECT_ENABLE_ALIGN_21);?	cv_verify_create_handle(&handle_verify1, "verify.model");?	//faceDB* f_db = faceDB.GetInstance();?}??faceAPI::~faceAPI(){??}??int faceAPI::do_reasch(cv::Mat image){?	if (!image.data) {?		fprintf(stderr, "fail to read img\n");?		return -1;?	}else?		fprintf(stderr, "read img\n");?	p_f = extract_feature(image);?	if (!p_f)?	{?		fprintf(stderr, "p_f is null\n");?		return -2;?	}?	return p_img_search(p_f); ?}??int faceAPI::do_reasch(char* s_feature){?	get_feature(s_feature,p_f);?	return p_img_search(p_f);?}??int faceAPI::do_register(cv::Mat image){?	p_f = extract_feature(image);?	//db add?	int indx = 1;?	return indx;?}???int faceAPI::p_img_search(cv_feature_t *p_feature){?	std::cout<<"p img search"<<std::endl;?	?	return fdb.search_db(p_feature);?}??cv_feature_t* faceAPI::extract_feature(const cv::Mat image_color) {??	if (handle_verify1 != NULL)?	{?		fprintf(stderr, "handle_verify1 is not null!\n");?	} ?	else?	{?		fprintf(stderr, "handle_verify1 is null!\n");?	}??	cv_feature_t *p_feature = NULL;?	cv_face_t *p_face = NULL;?	int face_count = 0;?	cv_result_t st_result = CV_OK;?	st_result = cv_face_detect(handle_detect, image_color.data, CV_PIX_FMT_BGR888,?		image_color.cols, image_color.rows, image_color.step,?		CV_FACE_UP, &p_face, &face_count);?	if (face_count >= 1) {?		st_result = cv_verify_get_feature(handle_verify1,?			(unsigned char *)image_color.data, CV_PIX_FMT_BGR888,?			image_color.cols, image_color.rows, image_color.step,?			p_face, &p_feature, NULL);?		if (st_result != CV_OK) {?			fprintf(stderr, "cv_verify_get_feature failed, error code %d\n", st_result);?		}?	} else {?		fprintf(stderr, "can't find face in ");?	}?	// release the memory of face?	cv_face_release_detector_result(p_face, face_count);?	return p_feature;?}???//@brief 特征值转换为字符串?//@param 特征值?//@return 字符串格式的特征值?int faceAPI::get_char(cv_feature_t *p_feature,char* feature_str){??	return cv_verify_serialize_feature(p_feature,feature_str);?}??//@brief 字符串转换为特征值?//@param 字符串格式的特征值?//@return 特征值?int faceAPI::get_feature(char *feature_str,cv_feature_t *p_feature){??	p_feature = cv_verify_deserialize_feature(feature_str);?	if(p_feature != NULL){?		return 0;?	}else?		return -1;?}
\ No newline at end of file

--
Gitblit v1.8.0