From d289fd8eb7a6581da0dd9c9963c15b6e7c08d744 Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期二, 27 六月 2017 09:48:34 +0800
Subject: [PATCH] 

---
 FaceServer/PbFaceList.pb.h        |   54 +++++++++++++++++-
 FaceServer/PbFaceList             |   30 +++++++++-
 FaceServer/sample_face_search.cpp |   30 ++++-----
 FaceServer/PbFaceList.pb.cc       |   49 ++++++++++++++-
 4 files changed, 135 insertions(+), 28 deletions(-)

diff --git a/FaceServer/PbFaceList b/FaceServer/PbFaceList
index c2fb55d..aec8661 100644
--- a/FaceServer/PbFaceList
+++ b/FaceServer/PbFaceList
@@ -13,9 +13,33 @@
 	{
 		enum ImageType
 		{
-			MBFT_YUV = 8;
-			MBFT_Y8 = 9;
-			MBFT_RGB = 11;
+            MBFT_SDP            = 1;
+            MBFT_FMTP           = 2;
+
+            MBFT_INDEX			= 3;
+            MBFT_PTR_AVFRAME    = 4;
+
+            MBFT_H264_NALU      = 5;
+            MBFT_H264_NALU_AUX  = 6;
+
+            MBFT_JPEG           = 7;
+
+            MBFT_YUV            = 8;
+            MBFT_Y8             = 9;
+            MBFT_YUV420         = 10;
+            MBFT_NV12           = 11;
+
+            MBFT_RGB            = 12;
+            MBFT_RGB888         = 13;
+            MBFT_RGB565         = 14;
+
+            MBFT_RGBA           = 15;
+
+            MBFT_BGRA           = 16;
+            MBFT_BGRA8888       = 17;
+            MBFT_ABGR8888       = 18;
+
+            MBFT_ARGB8888       = 19;
 		}
 		
 		required uint32 idx = 1;
diff --git a/FaceServer/PbFaceList.pb.cc b/FaceServer/PbFaceList.pb.cc
index 589c7f8..38d9ab6 100644
--- a/FaceServer/PbFaceList.pb.cc
+++ b/FaceServer/PbFaceList.pb.cc
@@ -123,19 +123,26 @@
 void AddDescriptorsImpl() {
   InitDefaults();
   static const char descriptor[] = {
-      "\n\nPbFaceList\"\377\002\n\nPbFaceList\022\027\n\005magic\030\001 \002"
+      "\n\nPbFaceList\"\227\005\n\nPbFaceList\022\027\n\005magic\030\001 \002"
       "(\r:\01011706629\022\023\n\013image_count\030\002 \002(\r\022\021\n\tsrc"
       "_width\030\003 \001(\r\022\022\n\nsrc_height\030\004 \001(\r\022)\n\006imag"
-      "es\030\005 \003(\0132\031.PbFaceList.FaceListImage\032\360\001\n\r"
+      "es\030\005 \003(\0132\031.PbFaceList.FaceListImage\032\210\004\n\r"
       "FaceListImage\022\013\n\003idx\030\001 \002(\r\022\014\n\004size\030\002 \002(\r"
       "\022:\n\004type\030\003 \002(\0162#.PbFaceList.FaceListImag"
       "e.ImageType:\007MBFT_Y8\022\r\n\005width\030\004 \002(\r\022\016\n\006h"
       "eight\030\005 \002(\r\022\022\n\ntop_left_x\030\006 \001(\r\022\022\n\ntop_l"
-      "eft_y\030\007 \001(\r\022\013\n\003img\030\010 \003(\014\"4\n\tImageType\022\014\n"
-      "\010MBFT_YUV\020\010\022\013\n\007MBFT_Y8\020\t\022\014\n\010MBFT_RGB\020\013"
+      "eft_y\030\007 \001(\r\022\013\n\003img\030\010 \003(\014\"\313\002\n\tImageType\022\014"
+      "\n\010MBFT_SDP\020\001\022\r\n\tMBFT_FMTP\020\002\022\016\n\nMBFT_INDE"
+      "X\020\003\022\024\n\020MBFT_PTR_AVFRAME\020\004\022\022\n\016MBFT_H264_N"
+      "ALU\020\005\022\026\n\022MBFT_H264_NALU_AUX\020\006\022\r\n\tMBFT_JP"
+      "EG\020\007\022\014\n\010MBFT_YUV\020\010\022\013\n\007MBFT_Y8\020\t\022\017\n\013MBFT_"
+      "YUV420\020\n\022\r\n\tMBFT_NV12\020\013\022\014\n\010MBFT_RGB\020\014\022\017\n"
+      "\013MBFT_RGB888\020\r\022\017\n\013MBFT_RGB565\020\016\022\r\n\tMBFT_"
+      "RGBA\020\017\022\r\n\tMBFT_BGRA\020\020\022\021\n\rMBFT_BGRA8888\020\021"
+      "\022\021\n\rMBFT_ABGR8888\020\022\022\021\n\rMBFT_ARGB8888\020\023"
   };
   ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-      descriptor, 398);
+      descriptor, 678);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "PbFaceList", &protobuf_RegisterTypes);
   ::google::protobuf::internal::OnShutdown(&TableStruct::Shutdown);
@@ -160,9 +167,25 @@
 }
 bool PbFaceList_FaceListImage_ImageType_IsValid(int value) {
   switch (value) {
+    case 1:
+    case 2:
+    case 3:
+    case 4:
+    case 5:
+    case 6:
+    case 7:
     case 8:
     case 9:
+    case 10:
     case 11:
+    case 12:
+    case 13:
+    case 14:
+    case 15:
+    case 16:
+    case 17:
+    case 18:
+    case 19:
       return true;
     default:
       return false;
@@ -170,9 +193,25 @@
 }
 
 #if !defined(_MSC_VER) || _MSC_VER >= 1900
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_SDP;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_FMTP;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_INDEX;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_PTR_AVFRAME;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_H264_NALU;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_H264_NALU_AUX;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_JPEG;
 const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_YUV;
 const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_Y8;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_YUV420;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_NV12;
 const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_RGB;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_RGB888;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_RGB565;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_RGBA;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_BGRA;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_BGRA8888;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_ABGR8888;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::MBFT_ARGB8888;
 const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::ImageType_MIN;
 const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage::ImageType_MAX;
 const int PbFaceList_FaceListImage::ImageType_ARRAYSIZE;
diff --git a/FaceServer/PbFaceList.pb.h b/FaceServer/PbFaceList.pb.h
index b1d5c42..8085a09 100644
--- a/FaceServer/PbFaceList.pb.h
+++ b/FaceServer/PbFaceList.pb.h
@@ -49,13 +49,29 @@
 }  // namespace protobuf_PbFaceList
 
 enum PbFaceList_FaceListImage_ImageType {
+  PbFaceList_FaceListImage_ImageType_MBFT_SDP = 1,
+  PbFaceList_FaceListImage_ImageType_MBFT_FMTP = 2,
+  PbFaceList_FaceListImage_ImageType_MBFT_INDEX = 3,
+  PbFaceList_FaceListImage_ImageType_MBFT_PTR_AVFRAME = 4,
+  PbFaceList_FaceListImage_ImageType_MBFT_H264_NALU = 5,
+  PbFaceList_FaceListImage_ImageType_MBFT_H264_NALU_AUX = 6,
+  PbFaceList_FaceListImage_ImageType_MBFT_JPEG = 7,
   PbFaceList_FaceListImage_ImageType_MBFT_YUV = 8,
   PbFaceList_FaceListImage_ImageType_MBFT_Y8 = 9,
-  PbFaceList_FaceListImage_ImageType_MBFT_RGB = 11
+  PbFaceList_FaceListImage_ImageType_MBFT_YUV420 = 10,
+  PbFaceList_FaceListImage_ImageType_MBFT_NV12 = 11,
+  PbFaceList_FaceListImage_ImageType_MBFT_RGB = 12,
+  PbFaceList_FaceListImage_ImageType_MBFT_RGB888 = 13,
+  PbFaceList_FaceListImage_ImageType_MBFT_RGB565 = 14,
+  PbFaceList_FaceListImage_ImageType_MBFT_RGBA = 15,
+  PbFaceList_FaceListImage_ImageType_MBFT_BGRA = 16,
+  PbFaceList_FaceListImage_ImageType_MBFT_BGRA8888 = 17,
+  PbFaceList_FaceListImage_ImageType_MBFT_ABGR8888 = 18,
+  PbFaceList_FaceListImage_ImageType_MBFT_ARGB8888 = 19
 };
 bool PbFaceList_FaceListImage_ImageType_IsValid(int value);
-const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage_ImageType_ImageType_MIN = PbFaceList_FaceListImage_ImageType_MBFT_YUV;
-const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage_ImageType_ImageType_MAX = PbFaceList_FaceListImage_ImageType_MBFT_RGB;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage_ImageType_ImageType_MIN = PbFaceList_FaceListImage_ImageType_MBFT_SDP;
+const PbFaceList_FaceListImage_ImageType PbFaceList_FaceListImage_ImageType_ImageType_MAX = PbFaceList_FaceListImage_ImageType_MBFT_ARGB8888;
 const int PbFaceList_FaceListImage_ImageType_ImageType_ARRAYSIZE = PbFaceList_FaceListImage_ImageType_ImageType_MAX + 1;
 
 const ::google::protobuf::EnumDescriptor* PbFaceList_FaceListImage_ImageType_descriptor();
@@ -144,12 +160,44 @@
   // nested types ----------------------------------------------------
 
   typedef PbFaceList_FaceListImage_ImageType ImageType;
+  static const ImageType MBFT_SDP =
+    PbFaceList_FaceListImage_ImageType_MBFT_SDP;
+  static const ImageType MBFT_FMTP =
+    PbFaceList_FaceListImage_ImageType_MBFT_FMTP;
+  static const ImageType MBFT_INDEX =
+    PbFaceList_FaceListImage_ImageType_MBFT_INDEX;
+  static const ImageType MBFT_PTR_AVFRAME =
+    PbFaceList_FaceListImage_ImageType_MBFT_PTR_AVFRAME;
+  static const ImageType MBFT_H264_NALU =
+    PbFaceList_FaceListImage_ImageType_MBFT_H264_NALU;
+  static const ImageType MBFT_H264_NALU_AUX =
+    PbFaceList_FaceListImage_ImageType_MBFT_H264_NALU_AUX;
+  static const ImageType MBFT_JPEG =
+    PbFaceList_FaceListImage_ImageType_MBFT_JPEG;
   static const ImageType MBFT_YUV =
     PbFaceList_FaceListImage_ImageType_MBFT_YUV;
   static const ImageType MBFT_Y8 =
     PbFaceList_FaceListImage_ImageType_MBFT_Y8;
+  static const ImageType MBFT_YUV420 =
+    PbFaceList_FaceListImage_ImageType_MBFT_YUV420;
+  static const ImageType MBFT_NV12 =
+    PbFaceList_FaceListImage_ImageType_MBFT_NV12;
   static const ImageType MBFT_RGB =
     PbFaceList_FaceListImage_ImageType_MBFT_RGB;
+  static const ImageType MBFT_RGB888 =
+    PbFaceList_FaceListImage_ImageType_MBFT_RGB888;
+  static const ImageType MBFT_RGB565 =
+    PbFaceList_FaceListImage_ImageType_MBFT_RGB565;
+  static const ImageType MBFT_RGBA =
+    PbFaceList_FaceListImage_ImageType_MBFT_RGBA;
+  static const ImageType MBFT_BGRA =
+    PbFaceList_FaceListImage_ImageType_MBFT_BGRA;
+  static const ImageType MBFT_BGRA8888 =
+    PbFaceList_FaceListImage_ImageType_MBFT_BGRA8888;
+  static const ImageType MBFT_ABGR8888 =
+    PbFaceList_FaceListImage_ImageType_MBFT_ABGR8888;
+  static const ImageType MBFT_ARGB8888 =
+    PbFaceList_FaceListImage_ImageType_MBFT_ARGB8888;
   static inline bool ImageType_IsValid(int value) {
     return PbFaceList_FaceListImage_ImageType_IsValid(value);
   }
diff --git a/FaceServer/sample_face_search.cpp b/FaceServer/sample_face_search.cpp
index 25da1ac..93a6bdc 100644
--- a/FaceServer/sample_face_search.cpp
+++ b/FaceServer/sample_face_search.cpp
@@ -56,7 +56,6 @@
 cv_feature_t *stface_extract_feature(stface_handles& handles, const STFaceImage& image)
 {
 	cv_pixel_format stimgfmt = CV_PIX_FMT_GRAY8;
-	int matType = 0;
 	
 	if (image.width > MAX_FACE_IMAGE_WIDTH || image.height > MAX_FACE_IMAGE_HEIGHT)
 	{
@@ -73,7 +72,13 @@
 		
 		imgbufSize = image.height * image.width;
 		stimgfmt = CV_PIX_FMT_GRAY8;
-		matType = CV_8UC1;
+	}
+	else if (image.mb_type == MB_Frame::MBFT_NV12)
+	{
+		memcpy(imgbuf, image.buff, image.size);//#todo avoid mem cpy
+		
+		imgbufSize = image.height * image.width * 1.5;
+		stimgfmt = CV_PIX_FMT_NV12;
 	}
 	else if (image.mb_type == MB_Frame::MBFT_RGB565)
 	{
@@ -90,11 +95,10 @@
 			image.width, image.height
 			);
 		
-		imgbufSize = image.height * image.width;
-		stimgfmt = CV_PIX_FMT_GRAY8;
-		matType = CV_8UC1;
+		imgbufSize = image.height * image.width * 1.5;
+		stimgfmt = CV_PIX_FMT_YUV420P;
 	}
-	else if (image.mb_type == MB_Frame::MBFT_ABGR8888)
+	else if (image.mb_type == MB_Frame::MBFT_RGB888)
 	{
 		//int ret = libyuv::ARGBToBGRA(
 		//	image.buff, image.width * 4,
@@ -106,7 +110,6 @@
 		//
 		//imgbufSize = image.height * image.width * 4;
 		//stimgfmt = CV_PIX_FMT_BGRA8888;
-		//matType = CV_8UC4;
 
 		int ret = libyuv::ABGRToI400(
 				image.buff, image.width * 4,
@@ -118,7 +121,6 @@
 		
 		imgbufSize = image.height * image.width;
 		stimgfmt = CV_PIX_FMT_GRAY8;
-		matType = CV_8UC1;
 		
 		//{
 		//	static int f = 0;
@@ -152,21 +154,15 @@
     //    fwrite(imgbuf, 1, imgbufSize, pFile);
     //    fclose(pFile);
     //}
-	
-	Mat matImg(cv::Size(image.width, image.height), matType, imgbuf);
-	if (!matImg.data)
-	{
-		return nullptr;
-	}
-	
+
 	cv_feature_t *p_feature = nullptr;
 	cv_face_t *p_face = nullptr;
 	int face_count = 0;
 	cv_result_t result = CV_OK;
-	result = cv_face_detect(handles.handle_detect, matImg.data, stimgfmt, matImg.cols, matImg.rows, matImg.step, CV_FACE_UP, &p_face, &face_count);
+	result = cv_face_detect(handles.handle_detect, (unsigned char *)imgbuf, stimgfmt, image.width, image.height, image.width, CV_FACE_UP, &p_face, &face_count);
 	if (face_count >= 1)
 	{
-		result = cv_verify_get_feature(handles.handle_verify, (unsigned char *)matImg.data, stimgfmt, matImg.cols, matImg.rows, matImg.step, p_face, &p_feature, nullptr);
+		result = cv_verify_get_feature(handles.handle_verify, (unsigned char *)imgbuf, stimgfmt, image.width, image.height, image.width, p_face, &p_feature, nullptr);
 		if (result != CV_OK)
 		{
 			LOGP(DEBUG, "cv_verify_get_feature failed, error code %d", result);

--
Gitblit v1.8.0