#include<grpcpp/ext/proto_server_reflection_plugin.h>#include<grpcpp/grpcpp.h>#include<grpcpp/health_check_service_interface.h>#include<iostream>#include<memory>#include<string>#include"absl/flags/flag.h"#include"absl/flags/parse.h"#include"absl/strings/str_format.h"#include"cmake/build/baidu_face_proto_c.grpc.pb.h"#include"opencv2/opencv.hpp"#include"baidu_face_api.h"using grpc::Server;using grpc::ServerBuilder;using grpc::ServerContext;using grpc::Status;using pb_service::FaceService;using pb_service::FaceIsLiveness;using pb_service::FaceBase64Img;using pb_service::FaceEmployeeId;using pb_service::FaceUserInfo;using pb_service::FaceUserAddReturn;using pb_service::FaceUserDelReturn;ABSL_FLAG(uint16_t, port,50051,"Server port for the service");// Logic and data behind the server's behavior.classFaceServiceServiceImplfinal:public FaceService::Service {// GetFaceIsLiveness 获取照片活体的阈值
Status GetFaceIsLiveness(::grpc::ServerContext* context,const::pb_service::FaceBase64Img* request,::pb_service::FaceIsLiveness* response)override{return Status::OK;}// GetFaceUser 获取识别到的人
Status GetFaceUser(::grpc::ServerContext* context,const::pb_service::FaceBase64Img* request,::pb_service::FaceEmployeeId* response)override{//response->set_employeeid(3);return Status::OK;}// FaceManagerUserAdd 人脸注册示例
Status FaceManagerUserAdd(::grpc::ServerContext* context,const::pb_service::FaceUserInfo* request,::pb_service::FaceUserAddReturn* response)override{//response->set_res("true");return Status::OK;}// FaceManagerUserUpdate 人脸更新示例
Status FaceManagerUserUpdate(::grpc::ServerContext* context,const FaceUserInfo* request, FaceUserAddReturn* response)override{//response->set_res("true");return Status::OK;}// FaceManagerUserDelete 用户删除示例
Status FaceManagerUserDelete(::grpc::ServerContext* context,const FaceEmployeeId* request, FaceUserDelReturn* response)override{//response->set_res("true");return Status::OK;}// FaceManagerGetUserImage 获取用户图片示例
Status FaceManagerGetUserImage(::grpc::ServerContext* context,const FaceEmployeeId* request, FaceUserInfo* response)override{//response->set_userinfo("true");return Status::OK;}};voidRunServer(uint16_t port){
std::string server_address = absl::StrFormat("0.0.0.0:%d", port);
FaceServiceServiceImpl service;
grpc::EnableDefaultHealthCheckService(true);
grpc::reflection::InitProtoReflectionServerBuilderPlugin();
ServerBuilder builder;// Listen on the given address without any authentication mechanism.
builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());// Register "service" as the instance through which we'll communicate with// clients. In this case it corresponds to an *synchronous* service.
builder.RegisterService(&service);// Finally assemble the server.
std::unique_ptr<Server>server(builder.BuildAndStart());
std::cout <<"Server listening on "<< server_address << std::endl;// Wait for the server to shutdown. Note that some other thread must be// responsible for shutting down the server for this call to ever return.
server->Wait();}
BaiduFaceApi* baiduFaceapi;intmain(int argc,char** argv){// api实例指针,可作为您项目中的全局变量,项目初始化实例化该指针,项目结束再释放
baiduFaceapi =newBaiduFaceApi();
std::string device_id;//// 获取设备指纹
baiduFaceapi->get_device_id(device_id);
std::cout <<"device id is:"<< device_id << std::endl;//// 获取sdk版本号
std::string version;
baiduFaceapi->sdk_version(version);
std::cout <<"sdk version:"<< version << std::endl;//// 初始化sdkint res = baiduFaceapi->sdk_init(nullptr);
std::cout <<"sdk init res:"<< res << std::endl;if(res !=0){
std::cout <<"初始化百度人脸识别失败:sdk init res:"<< res << std::endl;return0;}
std::cout <<"初始化百度人脸识别成功"<< std::endl;
absl::ParseCommandLine(argc, argv);RunServer(absl::GetFlag(FLAGS_port));return0;}