google Protocol Buffer 入门

【腹腔镜数据集】Cholec80+CholecSeg8k2020+Endoscapes2024 计算机辅助手术的发展旨在提高手术的正确性和安全性。然而,研究人员和工程师却面临着开发和训练更好算法所需的注释数据有限的问题。因此,同步定位与建图(SLAM)等基础算法的发展受到限制。基于Cholec80数据集,从Cholec80中的17个视频片段中提取了8,080个腹腔镜胆囊切除术图像帧,对图像进行注释并向公众发布。该数据集名为 CholecSeg8K。这些图像中的每一个都以十三个类别的像素级注释,这些类别通常在腹腔镜胆囊切除术中发现。 阅读详情

来源于我的个人博客, 原文用markdown编写,转到csdn格式有些问题。

简介

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

入门

下载安装protobuf后编写hello.proto文件

     
1
2
3
4
5
6
7
     
package lm;
message helloworld
{
required int32 id= 1;
required string str= 2;
optional int32 opt= 3;
}

.proto文件定义需要进行序列化和反序列化数据的格式。具体参考官方文档。其中的required,optional的官方说明如下

Specifying Field Rules

You specify that message fields are one of the following:

required:

a well-formed message must have exactly one of this field.

optional:

a well-formed message can have zero or one of this field (but not more than one).

repeated:

this field can be repeated any number of times (including zero) in a well-formed message. The order of the repeated values will be preserved.

定义中的

     
1
     
required int32 id= 1;

1是id在message helloword中的数字标签,这个标签在一个message中是唯一的,一旦定义后在使用时就不能再改变。

each field in the message definition has a unique numbered tag. These tags are used to identify your fields in the message binary format, and should not be changed once your message type is in use.

编译 .proto 文件

写好 proto 文件之后就可以用 Protobuf 编译器将该文件编译成目标语言了。本例中我们将使用 C++。
假设proto 文件存放在 SRC_DIR 下面,生成的文件放在DST_DIR目录下,则可以使用如下命令:

     
1
     
protoc -I= $SRC_DIR --cpp_out= $DST_DIR $SRC_DIR/hello.proto

编写writer.cpp

     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
     
#include "hello.pb.h"
#include <fstream>
#include <iostream>
#include <string>
#include <google/protobuf/text_format.h>
using namespace google::protobuf;
using std:: string;
using std::fstream;
using std:: cout;
using std::endl;
using std::ios;
int main( int argc, char const *argv[])
{
lm::helloworld msg1;
string hellostring;
string outputstring;
msg1.set_id( 101);
msg1.set_str( "hello");
fstream output( "./log", ios::out | ios::trunc | ios::binary);
if (!msg1.SerializeToOstream(&output)) {
cout << "Failed to write msg." << endl;
return - 1;
}
TextFormat::PrintToString(msg1, &outputstring);
cout << outputstring << endl;
return 0;
}

编译&运行

     
1
2
3
4
5
6
     
[root @localhost protobuf] # g++ hello.pb.cc writer.cpp -lprotobuf -o hello_writer
[root @localhost protobuf] # ./hello_writer
id: 101
str: "hello"
[root @localhost protobuf] #

当前路径下保存了log文件,reader可以从该文件解析出数据原来的内容。

编写reader.cpp

     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     
#include "hello.pb.h"
#include <fstream>
#include <iostream>
using std::fstream;
using std:: cout;
using std::endl;
using std::ios;
void ListMsg( const lm::helloworld & msg) {
cout << msg.id() << endl;
cout << msg.str() << endl;
}
int main( int argc, char* argv[]) {
lm::helloworld msg1;
fstream input( "./log", ios::in | ios::binary);
if (!msg1.ParseFromIstream(&input)) {
cout << "Failed to parse address book." << endl;
return - 1;
}
ListMsg(msg1);
}

编译&运行

     
1
2
3
4
5
     
[root @localhost protobuf] # g++ hello.pb.cc reader.cpp -lprotobuf -o hello_reader
[root @localhost protobuf] # ./hello_reader
101
hello
[root @localhost protobuf] #

可见reader成功从log文件解析出message。

SillyTavern 酒馆在 Mac 和 Linux 上的部署教程(含启动器安装方法) SillyTavern 是一个支持多种大模型聊天接口的本地前端项目,适用于 MacOS 和 Linux 系统。本文提供了两种部署方式:手动安装和使用 SillyTavern Launcher 安装器。手动安装需要先安装 Git 和 NodeJS,然后克隆项目源码并运行启动脚本。使用 Launcher 则更为简便,适合新手用户,能够自动安装依赖和配置环境。部署完成后,用户可以通过浏览器访问本地服务器,加载角色卡片并连接大模型 API,享受二次元角色扮演聊天的乐趣。无论是开发者还是终端用户,都能轻松完成 Sil 阅读详情

相关推荐

go-proto-validators:从.proto批注生成消息验证器

Golang ProtoBuf验证器编译器 一个protoc插件,它基于.proto文件中的字段选项在Go proto struct上生成Validate() error函数。 验证功能是代码生成的,因此不会因对嵌套消息的基于标签的反射而影响性能。 要求 目前已验证使用Protobuf验证程序可与以下各项一起使用: 转到1.11、1.12、1.13 @ v3.8.0 @ v1.3.2 @ v1.3.0 它应该仍然可以使用早期版本的去使用它的项目。 但是,如果您想对该存储库做出贡献,则至少需要1.11才能获得Go模块支持。 给我画一张代码图片 让我们看下面的proto3片段: syntax = "proto3" ; package validator.examples ; import "github.com/mwitkow/go-proto-validators/validator.proto" ; message InnerMessage { // some_integer can only be in range (0, 100). int32 some

go krotos,proto文件引用自定义proto(例如validate.proto)

1、proto文件中引用自定义proto(例如validate.proto) helloworld.proto中引用validate.proto(Goland中,此时"validate/validate.proto"会显示红色),对http请求的入参做校验 syntax = "proto3"; package api.helloworld.v1; import "google/api/annotations.proto"; import "validate/validate.proto"; optio

weixin_39810091的博客 1万+

go-proto-validators, 从. proto 注释生成消息确认器.zip

go-proto-validators, 从. proto 注释生成消息确认器 Golang ProtoBuf验证器编译器 protoc 插件,在 go struct s 基于 .proto 文件内的字段选项生成 Validate() error 函数。 验证函数是生成的代码,因此在深入嵌套的消息中基于标记

protobuf使用总结

protocol buffers使用总结。

weixin_47978762的博客 404

使用protovalidate提升你的Protobuf数据验证体验!

在软件开发中,确保数据的准确性和一致性是至关重要的。为此,我们向您推荐一个强大的开源项目——`protovalidate`,它提供了一种创新的方式,基于Google的Common Expression Language (CEL),帮助你在运行时验证Protobuf消息,确保满足自定义的验证规则。 ## 项目介绍 `protovalidate`是一个针对Protobuf消息进行运行时验证的系列

gitblog_00085的博客 1037

protobuf 生成validate

protobuf 可以通过插件实现请求参数的校验,并通过自定义middleware实现参数自动校验。

qq_37011724的博客 655

手把手教你在 laravel 中使用 protobuf

好久之前做的业务了,网上涉及到 laravel 使用 protobuf 的文章少的可怜,自己看了很多相关的文章,总结出来的用法,应该会有不少人需要 一、protobuf 简单介绍 Protobuf 是 Google 公司内部的混合语言数据标准, 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 二、在 laravel 中封装使用 protobuf PHP.

MClink的博客 1874

Google Protocol Buffer序列化入门实战(附源码)

Google Protocol Buffer入门实战(附源码)Google Protocol Buffer(后面简称PB)是Google开源的一款二进制序列化工具,占用空间小,传输效率高。最近由于项目中使用到了PB,所以特地学习了PB,这篇文章也是自己学习PB的一些小结。根据官方定义,PB是一个语言中立,平台中立的,用于序列化结构化数据的协议。说到序列化,可能大家最容易想到的是JDK自带的序列化协议

rhwayfun专栏 4159

Google Protocol Buffer入门

简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或...

weixin_34122604的博客 248

Google protocol buffer入门(二)

caffe.proto文件涉及到了proto文件,在这里转载了一篇关于Google protobuf的文件格式文章 protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用xml进行...

wonengguwozai的博客 2197

Google Protocol Buffer 使用入门

首先在Linux下安装protobuf,然后开始使用 一、编写相关代码 //my.proto syntax = "proto2"; package my; message helloworld { required int32 id = 1; // ID required string str = 2; // str optional int32 opt = 3; //optional field } //reader.cpp #includ

qq_44272681的博客 853

Google Protocol Buffer 入门&案例

Protocol buffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输

XionAng的专栏 749

Google protocol buffer入门(一)

原文地址:http://blog.csdn.net/majianfei1023/article/details/45112415 Windows下google protobuf开发环境配置:http://blog.csdn.net/majianfei1023/article/details/45371743 一.什么是protobuf protobuf全称Google Protoc...

wonengguwozai的博客 1117

Google Protocol Buffer (PB)简明入门

写在最前:本文以在Windows下C++中使用Protocol Buffer(以下简称PB)为例展示如何安装和使用PB。其他语言和平台也可做为参考。 一.什么是PB PB是Google开发的一种开源数据交换方式。特别适合于在RPC间交换对象及数据结构。与其相似的应用有XML、JSON、THRIFT等。 二.为什么要用PB 相对于其主要同类应用XML,PB的主要优势在于更小的

Lce的专栏 2154

Google protocol buffer入门(三)

本篇主要介绍protobuf如何加载并解析.prototxt文件到proto定义的(或者说由proto编译后的xx_pb.h定义)对象。下面通过模拟caffe的加载过程。 前言:一般来说cafe.proto中有对应的solve,solver中又有Layer,通过prototxt解析生成一个大对象sovler,然后solver底下有一个Layer数组对象,我们所定义的网络就是Layer数组,通过解...

wonengguwozai的博客 386

kortex:机器人控制与交互的强大工具

kortex:机器人控制与交互的强大工具 项目介绍 KINOVA® KORTEX™ API 是一款由 Kinova 公司开发的机器人控制与交互API。这个官方仓库包含了使用 C++ 或 Python 与 KORTEX API 客户端交互的文档和示例。该仓库已经在 Windows 10、Ubuntu 16.04、Ubuntu 18.04 和 Ubuntu 20.04 上进行了测试。 项目技术分析 K...

gitblog_00978的博客 1421

Google Protocol Buffer 的使用和原理

由于业务需要,项目中需要用到google的一种高效的可扩展的结构化数据存储方式protocol buffer(以下简称pb)。很多人可能对这个新东西不熟悉,大家都知道xml,json,确很少听过pb,下面我就粗劣总结一下pb在mac环境下的搭建以及用python解析的简单过程。 首先下载最新pb源码,放到相应的文件夹解压。 安装步骤如下(强调一下:如安装不成功,就以管理员身份安装即在每

liliangchw的专栏 1171

Google Protocol Buffer学习笔记

1.Google Protocol Buffer          通常所说的pb格式,就是指Google Protocol Buffer,简写为protobuf. 它是由Google提出的一个东东。Protocol Buffers是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的

@_囚徒-2018_的家园 932

Logisim 头歌8位可控加减法电路设计图解及代码(计算机组成原理)请txt打开

Logisim 头歌8位可控加减法电路设计图解及代码(计算机组成原理)资源免费提供!!!!!​​实验目的帮助学生掌握一位全加器的实现逻辑,掌握多位可控加减法电路的实现逻辑,熟悉 Logisim 平台基本功能,能在 logisim 中实现多位可控加减法电路。实验内容在 Logisim 模拟器中打开 alu.circ 文件,在对应子电路中利用已经封装好的全加器设计8位串行可控加减法电路,其电路引脚定义如图所示,用户可以直接使用在电路中使用对应的隧道标签,其中 X,Y 为两输入数,Sub 为加减控制信号,S 为运算结果输出,Cout 为进位输出,OF 为有符号运算溢出位。实验步骤处理减法运算,连接电路图。探求溢出判断的方法。由2中得到的方法连接电路图。在实验平台上进行测试。通过异或门给到,为0是加法过程,为1是减法过程!!! 最后,就十分顺利的通过了这一个实验!!!!!!!!!!

上一篇: docker基础工作原理(二)
下一篇: docker与虚拟机性能比较
cbl709
博客等级 码龄16年 38粉丝 33原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值