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