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