图片格式比较

比较文件存为二进制流的大小与在opencv下的ndarray格式 发现 二进制的大小小很多 

因为用到grpc 因此用grpc测试的,

server

from concurrent import futures
import logging

import grpc
import media_img_pb2
import media_img_pb2_grpc

rec_file = '20210611.rec'
def save2record(img, encoder) : #'media_img_pb2.MediaImage'''
    with open(str(encoder) + '_' + rec_file,'wb') as fout:
        fout.write(img)

class ImageStore (media_img_pb2_grpc.ImageStoreServicer):
    def SaveVideo(self, request, context):
        return media_img_pb2.SaveResult(msg="get person info done")

    def SaveImage(self, request, context):
        media_encoder = request.encoder
        media_data = request.data
        # media_img_pb2.MediaImage(encoder=media_encoder, data=media_data)

        save2record(media_data, media_encoder)
        return media_img_pb2.SaveResult(msg="image saved to file" + rec_file)

    def GetImage(self, request, context):
        with open(rec_file,'rb') as fread:
            content = fread.read()
        return media_img_pb2.MediaImage(encoder=0, data=content)


def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    media_img_pb2_grpc.add_ImageStoreServicer_to_server(ImageStore(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

if __name__ == '__main__':
    logging.basicConfig()
    serve()

 

from __future__ import print_function
import logging

import grpc
import media_img_pb2
import media_img_pb2_grpc

img_file = "E:/source_code/media/2.jpg"

def gen_img (path, encoder): # encoder = 0: binary  1 -- ndarray
    if encoder == 0:
        with open(path, 'rb') as fin:
            img_data = fin.read()
        media_img_binary = media_img_pb2.MediaImage(encoder=0, data=img_data)
        return media_img_binary

    if encoder ==1:
        import cv2
        cv2_img = cv2.imread(path)
        media_img_ndarry = media_img_pb2.MediaImage(encoder=1, data=cv2_img.tobytes())
        return media_img_ndarry
    return None



def genimg_byresponse(response):
    data = response.data
    with open('test.jpg','wb') as fout:
        fout.write(data)

def run():
    with grpc.insecure_channel('localhost:50051') as channel:
        stub = media_img_pb2_grpc.ImageStoreStub(channel)
        response_binary = stub.SaveImage(gen_img(img_file, 0))
        response_ndarray = stub.SaveImage(gen_img(img_file, 1))
        # response = stub.GetImage(media_img_pb2.Empty())
        # genimg_byresponse(response)


    # print("Greeter client received: " + response.msg )

if __name__ == '__main__':
    logging.basicConfig()
    run()


proto 文件:

syntax = 'proto3';
//import 'google.protobuf.empty.proto'; google.protobuf.Empty

message Empty {}

service ImageStore {
  rpc SaveImage (MediaImage) returns (SaveResult);
  rpc SaveVideo(stream MediaImage) returns (SaveResult);
  rpc GetImage(Empty) returns (MediaImage);
}


message MediaImage {
  int32 encoder = 1; // 0 -binary ; 1 - ndarray
  bytes data = 2;
}

message SaveResult {
  bool result =1;
  int32 result_code = 2;
  int32 event_id = 3;
  string msg = 4;
}

结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值