初衷:grpc可以很好的作为跨语言,跨机器的服务模式。但是对于大量数据的传输,进程之间还是共享内存要快一些,所以这里将grpc与共享内存混合使用。
功能实现:
客户端:从摄像头不断的读取图片,并传输给服务端,并呈现从服务端返回的处理结果。
服务端:读取客户端的请求,并从中读取共享内存中的图片,在图片上写入”ok“,并将结果传回给客户端。
创建文件:image_processing.proto
syntax = "proto3";
package image_processing;
import "google/protobuf/empty.proto";
// 定义一个请求消息,包含共享内存的名称
message ImageRequest {
string input_shm_name = 1;
string output_shm_name = 2;
}
// 定义一个响应消息,包含处理后的图像的共享内存地址
message ImageResponse {
string output_shm_name = 1;
}
// 定义清理共享内存的请求消息
message CleanupRequest {
string output_shm_name = 1;
}
// 定义服务接口
service ImageProcessingService {
rpc ProcessImage (ImageRequest) returns (ImageResponse);
rpc CleanupSharedMemory (CleanupRequest) returns (google.protobuf.Empty);
}
安装python库:
pip install grpcio grpcio-tools opencv-python-headle