FaceServer/face_daemon_proto.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FaceServer/main_face_daemon.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FaceServer/make.sh | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FaceServer/proto_hton_ntoh.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FaceServer/test_client_compare.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
FaceServer/face_daemon_proto.h
@@ -19,6 +19,7 @@ FDC_SENSETIMEFACEDETECT_PB, FDC_SENSETIMEFACEDETECT_RESULT_JSON, FDC_SENSETIMEFACEDETECT_SAVE, FDC_SENSETIMEFACEDETECT_COMPARE, FDC__LAST, }; }; @@ -29,6 +30,7 @@ int16_t mb_type; // MB_Frame::MBFType int16_t width; int16_t height; int16_t size; uint8_t buff[0]; void hton(); @@ -51,8 +53,9 @@ { int32_t db_id; int32_t st_id; // sensetime id int16_t confidence; // 1000 times of float confidence FDP_FaceDetectResult(int32_t _db_id, int32_t _st_id) : db_id(_db_id), st_id(_st_id) FDP_FaceDetectResult(int32_t _db_id, int32_t _st_id) : db_id(_db_id), st_id(_st_id), confidence(0) {} void hton(); FaceServer/main_face_daemon.cpp
@@ -34,7 +34,7 @@ ss << "\"result\":["; for(fdr_vec_t::const_iterator iter = result.begin(); iter != result.end(); ++iter) { ss << "[" << WRAPPER_TEXT(iter->db_id) << "," << WRAPPER_TEXT(iter->st_id) << "]"; ss << "[" << WRAPPER_TEXT(iter->db_id) << "," << WRAPPER_TEXT(iter->st_id) << "," << WRAPPER_TEXT(iter->confidence) << "]"; if (iter != std::prev(result.end())) ss << ","; } @@ -137,6 +137,43 @@ return send_SensetimeFaceDetectResultJson(client, result, ret); } bool ev_proc_SensetimeFaceDetectCompare(EVClientStub& client) { EVPHeader* evpHeader = (EVPHeader*)client.recvBuff; FDP_Image* fdpImage1 = (FDP_Image*)(client.recvBuff + sizeof(EVPHeader)); fdpImage1->ntoh(); STFaceImage stfaceImg1; stfaceImg1.db_id = fdpImage1->db_id; stfaceImg1.mb_type = fdpImage1->mb_type; stfaceImg1.width = fdpImage1->width; stfaceImg1.height = fdpImage1->height; stfaceImg1.size = fdpImage1->size; stfaceImg1.buff = fdpImage1->buff; FDP_Image* fdpImage2 = (FDP_Image*)(client.recvBuff + sizeof(EVPHeader) + sizeof(FDP_Image) + fdpImage1->size); fdpImage2->ntoh(); STFaceImage stfaceImg2; stfaceImg2.db_id = fdpImage2->db_id; stfaceImg2.mb_type = fdpImage2->mb_type; stfaceImg2.width = fdpImage2->width; stfaceImg2.height = fdpImage2->height; stfaceImg2.size = fdpImage2->size; stfaceImg2.buff = fdpImage2->buff; LOGP(DEBUG, "stfaceImg2 db_id=%d, mb_type=%d, width=%d, height=%d, size=%d", (int)stfaceImg2.db_id, (int)stfaceImg2.mb_type, (int)stfaceImg2.width, (int)stfaceImg2.height, (int)stfaceImg2.size); char imgfn[100 * 1024]; static int i = 0; sprintf(imgfn, "IMG_%d_%d_w%d_h%d.rgb565", stfaceImg1.db_id, ++i, stfaceImg1.width, stfaceImg1.height); FILE * pFile = fopen(imgfn, "wb"); fwrite(stfaceImg1.buff, sizeof(char), stfaceImg1.size, pFile); fclose(pFile); pFile = nullptr; } bool ev_dispatcher_proto_pb(EVClientStub& client) { LOG_DEBUG << "ev_dispatcher_proto_pb" << LOG_ENDL; @@ -181,6 +218,9 @@ case FaceDaemonCommand::FDC_SENSETIMEFACEDETECT_SAVE: return ev_proc_SensetimeFaceDetectSave(client); break; case FaceDaemonCommand::FDC_SENSETIMEFACEDETECT_COMPARE: return ev_proc_SensetimeFaceDetectCompare(client); break; default: LOG_WARN << "Unknown command" << LOG_ENDL; ev_send_status_packet(client, EVPStatus::EVPS_COMMAND_ERROR); FaceServer/make.sh
@@ -37,6 +37,7 @@ g++ test_client_detect.cpp $CFLAGS $CPPFLAGS g++ test_client_add.cpp $CFLAGS $CPPFLAGS g++ test_client_compare.cpp $CFLAGS $CPPFLAGS g++ -g -std=c++11 \ logger.o \ @@ -59,4 +60,9 @@ $LDFLAGS -o test_client_add # g++ -g -std=c++11 \ test_client_compare.o proto_hton_ntoh.o logger.o \ $LDFLAGS -o test_client_compare # #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/protobuf/inst/lib:/opt/opencv/inst/lib:/opt/st_face/libs/linux-x86_64 FaceServer/proto_hton_ntoh.cpp
@@ -40,6 +40,7 @@ mb_type = htons(mb_type); width = htons(width); height = htons(height); size = htons(size); } void FDP_Image::ntoh() @@ -48,6 +49,7 @@ mb_type = ntohs(mb_type); width = ntohs(width); height = ntohs(height); size = ntohs(size); } void FDP_FaceDetectPB::hton() FaceServer/test_client_compare.cpp
New file @@ -0,0 +1,155 @@ /************************************ * For msmr * server.c * tesing the speed of bufferevent_write * 2015-02-03 * author@tom ************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <event2/event.h> #include <event2/bufferevent.h> #include <event2/buffer.h> #include <netinet/tcp.h> #include <arpa/inet.h> #include <unistd.h> #include "ev_proto.h" #include "face_daemon_proto.h" #include <iostream> #include <logger.h> #include <MaterialBuffer.h> Logger g_logger(std::cout); /* void make_msg(char* mesg, int& length) { EVPHeader* evpHeader = new (mesg) EVPHeader; evpHeader->proto = EVPProto::EVPP_PROTOBUF; evpHeader->cmd = FaceDaemonCommand::FDC_SENSETIMEFACEDETECT_PB; evpHeader->size = length; FILE* pFile = fopen("facelist-3.pb", "rb"); size_t fsize = fread(mesg + sizeof(EVPHeader), 1, length - sizeof(EVPHeader), pFile); fclose(pFile); } */ void make_msg(char* mesg, int& length) { EVPHeader* evpHeader = new (mesg) EVPHeader; evpHeader->proto = EVPProto::EVPP_RAW_BIN; // 1 evpHeader->cmd = FaceDaemonCommand::FDC_SENSETIMEFACEDETECT_COMPARE; // 133 evpHeader->size = sizeof(EVPHeader); FDP_Image* fdpImage1 = nullptr; { fdpImage1 = new (mesg + evpHeader->size) FDP_Image; fdpImage1->db_id = 0; // -1 fdpImage1->mb_type = MB_Frame::MBFT_JPEG; // 7 fdpImage1->width = 291; fdpImage1->height = 194; FILE* pFile = fopen("compare1.jpg", "rb"); fdpImage1->size = fread(fdpImage1->buff, 1, length, pFile); fclose(pFile); pFile = nullptr; fdpImage1->hton(); evpHeader->size += sizeof(FDP_Image) + fdpImage1->size; } FDP_Image* fdpImage2 = nullptr; { fdpImage2 = new (mesg + evpHeader->size) FDP_Image; fdpImage2->db_id = 0; // -1 fdpImage2->mb_type = MB_Frame::MBFT_RGB565; // 14 fdpImage2->width = 52; fdpImage2->height = 52; FILE* pFile = fopen("face-13-w52-h52.rgb565", "rb"); fdpImage2->size = fread(fdpImage2->buff, 1, length, pFile); fclose(pFile); pFile = nullptr; fdpImage1->hton(); evpHeader->size += sizeof(FDP_Image) + fdpImage2->size; } length = evpHeader->size; evpHeader->hton(); } int main() { // build the message to be sent int length = 1024 * 1024; // the size of message char* mesg = (char*)malloc((length+1)*sizeof(char)); // Look out the end mark '/0' of a C string if (mesg == NULL) exit(1); int i; //for (i=0; i<length; i++) // strcat(mesg, "a"); make_msg(mesg, length); printf("%s\n", mesg); printf("%d\n", (int)strlen(mesg)); // build socket int port = 15436; struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); server_addr.sin_port = htons(port); // build event base struct event_base* base = event_base_new(); // set TCP_NODELAY to let data arrive at the server side quickly evutil_socket_t fd; fd = socket(AF_INET, SOCK_STREAM, 0); struct bufferevent* conn = bufferevent_socket_new(base,fd,BEV_OPT_CLOSE_ON_FREE); int enable = 1; if(setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void*)&enable, sizeof(enable)) < 0) printf("ERROR: TCP_NODELAY SETTING ERROR!\n"); //bufferevent_setcb(conn, NULL, NULL, NULL, NULL); // For client, we don't need callback function bufferevent_enable(conn, EV_WRITE); if(bufferevent_socket_connect(conn,(struct sockaddr*)&server_addr,sizeof(server_addr)) == 0) printf("connect success\n"); // start to send data bufferevent_write(conn,mesg,length); // check the output evbuffer struct evbuffer* output = bufferevent_get_output(conn); event_base_dispatch(base); char readbuf[10]; int readbufsize = read(fd, readbuf, sizeof(readbuf)); while(readbufsize>0) { readbuf[readbufsize] = '\0'; printf("%s", readbuf); readbufsize = read(fd, readbuf, sizeof(readbuf)); } printf("\n"); free(mesg); mesg = NULL; bufferevent_free(conn); event_base_free(base); printf("Client program is over\n"); return 0; }