spot-sdk-ts
Version:
TypeScript bindings based on protobufs (proto3) provided by Boston Dynamics
529 lines (489 loc) • 15.7 kB
text/typescript
/* eslint-disable */
import { Vec2 } from "./geometry";
import _m0 from "protobufjs/minimal";
export const protobufPackage = "bosdyn.api";
/** A point of interest in an image expressed as a pixel coordinate with associated metadata. */
export interface Keypoint {
/** The image pixel coordinates of the keypoint. */
coordinates: Vec2 | undefined;
/** A binary descriptor representing the keypoint. */
binaryDescriptor: Uint8Array;
/** The score of this keypoint from the underlying keypoint detector, if applicable. */
score: number;
/** The diameter in pixels of the local neighborhood used to construct the descriptor. */
size: number;
/** The orientation of the keypoint, if applicable. */
angle: number;
}
/** A set of keypoints detected in a single image. */
export interface KeypointSet {
/** A set of detected keypoints and associated metadata. */
keypoints: Keypoint[];
/** The algorithm used to compute this keypoint and its descriptor. */
type: KeypointSet_KeypointType;
}
export enum KeypointSet_KeypointType {
KEYPOINT_UNKNOWN = 0,
/**
* KEYPOINT_SIMPLE - Keypoints that consist only of image coordinates. Simple keypoints do not have
* descriptors.
*/
KEYPOINT_SIMPLE = 1,
/**
* KEYPOINT_ORB - Keypoints detected by the ORB feature extraction algorithm (Oriented FAST and Rotated
* BRIEF.)
*/
KEYPOINT_ORB = 2,
UNRECOGNIZED = -1,
}
export function keypointSet_KeypointTypeFromJSON(
object: any
): KeypointSet_KeypointType {
switch (object) {
case 0:
case "KEYPOINT_UNKNOWN":
return KeypointSet_KeypointType.KEYPOINT_UNKNOWN;
case 1:
case "KEYPOINT_SIMPLE":
return KeypointSet_KeypointType.KEYPOINT_SIMPLE;
case 2:
case "KEYPOINT_ORB":
return KeypointSet_KeypointType.KEYPOINT_ORB;
case -1:
case "UNRECOGNIZED":
default:
return KeypointSet_KeypointType.UNRECOGNIZED;
}
}
export function keypointSet_KeypointTypeToJSON(
object: KeypointSet_KeypointType
): string {
switch (object) {
case KeypointSet_KeypointType.KEYPOINT_UNKNOWN:
return "KEYPOINT_UNKNOWN";
case KeypointSet_KeypointType.KEYPOINT_SIMPLE:
return "KEYPOINT_SIMPLE";
case KeypointSet_KeypointType.KEYPOINT_ORB:
return "KEYPOINT_ORB";
case KeypointSet_KeypointType.UNRECOGNIZED:
default:
return "UNRECOGNIZED";
}
}
export interface Match {
/** The index in the reference KeypointSet of the keypoint in the matching pair. */
referenceIndex: number;
/** The index in the live KeypointSet of the keypoint in the matching pair. */
liveIndex: number;
/** The distance in descriptor space between the two keypoints. */
distance: number;
}
/** A pair of keypoint sets containing only features in common that have been matched. */
export interface KeypointMatches {
/** The set of common keypoints in a first ("reference") image. */
referenceKeypoints: KeypointSet | undefined;
/** The set of common keypoints in a second ("live") image. */
liveKeypoints: KeypointSet | undefined;
/** Indices of pairs of matches in the two KeypointSets and their distance measure. */
matches: Match[];
}
function createBaseKeypoint(): Keypoint {
return {
coordinates: undefined,
binaryDescriptor: new Uint8Array(),
score: 0,
size: 0,
angle: 0,
};
}
export const Keypoint = {
encode(
message: Keypoint,
writer: _m0.Writer = _m0.Writer.create()
): _m0.Writer {
if (message.coordinates !== undefined) {
Vec2.encode(message.coordinates, writer.uint32(18).fork()).ldelim();
}
if (message.binaryDescriptor.length !== 0) {
writer.uint32(26).bytes(message.binaryDescriptor);
}
if (message.score !== 0) {
writer.uint32(37).float(message.score);
}
if (message.size !== 0) {
writer.uint32(45).float(message.size);
}
if (message.angle !== 0) {
writer.uint32(53).float(message.angle);
}
return writer;
},
decode(input: _m0.Reader | Uint8Array, length?: number): Keypoint {
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
let end = length === undefined ? reader.len : reader.pos + length;
const message = createBaseKeypoint();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2:
message.coordinates = Vec2.decode(reader, reader.uint32());
break;
case 3:
message.binaryDescriptor = reader.bytes();
break;
case 4:
message.score = reader.float();
break;
case 5:
message.size = reader.float();
break;
case 6:
message.angle = reader.float();
break;
default:
reader.skipType(tag & 7);
break;
}
}
return message;
},
fromJSON(object: any): Keypoint {
return {
coordinates: isSet(object.coordinates)
? Vec2.fromJSON(object.coordinates)
: undefined,
binaryDescriptor: isSet(object.binaryDescriptor)
? bytesFromBase64(object.binaryDescriptor)
: new Uint8Array(),
score: isSet(object.score) ? Number(object.score) : 0,
size: isSet(object.size) ? Number(object.size) : 0,
angle: isSet(object.angle) ? Number(object.angle) : 0,
};
},
toJSON(message: Keypoint): unknown {
const obj: any = {};
message.coordinates !== undefined &&
(obj.coordinates = message.coordinates
? Vec2.toJSON(message.coordinates)
: undefined);
message.binaryDescriptor !== undefined &&
(obj.binaryDescriptor = base64FromBytes(
message.binaryDescriptor !== undefined
? message.binaryDescriptor
: new Uint8Array()
));
message.score !== undefined && (obj.score = message.score);
message.size !== undefined && (obj.size = message.size);
message.angle !== undefined && (obj.angle = message.angle);
return obj;
},
fromPartial<I extends Exact<DeepPartial<Keypoint>, I>>(object: I): Keypoint {
const message = createBaseKeypoint();
message.coordinates =
object.coordinates !== undefined && object.coordinates !== null
? Vec2.fromPartial(object.coordinates)
: undefined;
message.binaryDescriptor = object.binaryDescriptor ?? new Uint8Array();
message.score = object.score ?? 0;
message.size = object.size ?? 0;
message.angle = object.angle ?? 0;
return message;
},
};
function createBaseKeypointSet(): KeypointSet {
return { keypoints: [], type: 0 };
}
export const KeypointSet = {
encode(
message: KeypointSet,
writer: _m0.Writer = _m0.Writer.create()
): _m0.Writer {
for (const v of message.keypoints) {
Keypoint.encode(v!, writer.uint32(18).fork()).ldelim();
}
if (message.type !== 0) {
writer.uint32(24).int32(message.type);
}
return writer;
},
decode(input: _m0.Reader | Uint8Array, length?: number): KeypointSet {
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
let end = length === undefined ? reader.len : reader.pos + length;
const message = createBaseKeypointSet();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2:
message.keypoints.push(Keypoint.decode(reader, reader.uint32()));
break;
case 3:
message.type = reader.int32() as any;
break;
default:
reader.skipType(tag & 7);
break;
}
}
return message;
},
fromJSON(object: any): KeypointSet {
return {
keypoints: Array.isArray(object?.keypoints)
? object.keypoints.map((e: any) => Keypoint.fromJSON(e))
: [],
type: isSet(object.type)
? keypointSet_KeypointTypeFromJSON(object.type)
: 0,
};
},
toJSON(message: KeypointSet): unknown {
const obj: any = {};
if (message.keypoints) {
obj.keypoints = message.keypoints.map((e) =>
e ? Keypoint.toJSON(e) : undefined
);
} else {
obj.keypoints = [];
}
message.type !== undefined &&
(obj.type = keypointSet_KeypointTypeToJSON(message.type));
return obj;
},
fromPartial<I extends Exact<DeepPartial<KeypointSet>, I>>(
object: I
): KeypointSet {
const message = createBaseKeypointSet();
message.keypoints =
object.keypoints?.map((e) => Keypoint.fromPartial(e)) || [];
message.type = object.type ?? 0;
return message;
},
};
function createBaseMatch(): Match {
return { referenceIndex: 0, liveIndex: 0, distance: 0 };
}
export const Match = {
encode(message: Match, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
if (message.referenceIndex !== 0) {
writer.uint32(16).int32(message.referenceIndex);
}
if (message.liveIndex !== 0) {
writer.uint32(24).int32(message.liveIndex);
}
if (message.distance !== 0) {
writer.uint32(37).float(message.distance);
}
return writer;
},
decode(input: _m0.Reader | Uint8Array, length?: number): Match {
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
let end = length === undefined ? reader.len : reader.pos + length;
const message = createBaseMatch();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2:
message.referenceIndex = reader.int32();
break;
case 3:
message.liveIndex = reader.int32();
break;
case 4:
message.distance = reader.float();
break;
default:
reader.skipType(tag & 7);
break;
}
}
return message;
},
fromJSON(object: any): Match {
return {
referenceIndex: isSet(object.referenceIndex)
? Number(object.referenceIndex)
: 0,
liveIndex: isSet(object.liveIndex) ? Number(object.liveIndex) : 0,
distance: isSet(object.distance) ? Number(object.distance) : 0,
};
},
toJSON(message: Match): unknown {
const obj: any = {};
message.referenceIndex !== undefined &&
(obj.referenceIndex = Math.round(message.referenceIndex));
message.liveIndex !== undefined &&
(obj.liveIndex = Math.round(message.liveIndex));
message.distance !== undefined && (obj.distance = message.distance);
return obj;
},
fromPartial<I extends Exact<DeepPartial<Match>, I>>(object: I): Match {
const message = createBaseMatch();
message.referenceIndex = object.referenceIndex ?? 0;
message.liveIndex = object.liveIndex ?? 0;
message.distance = object.distance ?? 0;
return message;
},
};
function createBaseKeypointMatches(): KeypointMatches {
return {
referenceKeypoints: undefined,
liveKeypoints: undefined,
matches: [],
};
}
export const KeypointMatches = {
encode(
message: KeypointMatches,
writer: _m0.Writer = _m0.Writer.create()
): _m0.Writer {
if (message.referenceKeypoints !== undefined) {
KeypointSet.encode(
message.referenceKeypoints,
writer.uint32(18).fork()
).ldelim();
}
if (message.liveKeypoints !== undefined) {
KeypointSet.encode(
message.liveKeypoints,
writer.uint32(26).fork()
).ldelim();
}
for (const v of message.matches) {
Match.encode(v!, writer.uint32(34).fork()).ldelim();
}
return writer;
},
decode(input: _m0.Reader | Uint8Array, length?: number): KeypointMatches {
const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
let end = length === undefined ? reader.len : reader.pos + length;
const message = createBaseKeypointMatches();
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 2:
message.referenceKeypoints = KeypointSet.decode(
reader,
reader.uint32()
);
break;
case 3:
message.liveKeypoints = KeypointSet.decode(reader, reader.uint32());
break;
case 4:
message.matches.push(Match.decode(reader, reader.uint32()));
break;
default:
reader.skipType(tag & 7);
break;
}
}
return message;
},
fromJSON(object: any): KeypointMatches {
return {
referenceKeypoints: isSet(object.referenceKeypoints)
? KeypointSet.fromJSON(object.referenceKeypoints)
: undefined,
liveKeypoints: isSet(object.liveKeypoints)
? KeypointSet.fromJSON(object.liveKeypoints)
: undefined,
matches: Array.isArray(object?.matches)
? object.matches.map((e: any) => Match.fromJSON(e))
: [],
};
},
toJSON(message: KeypointMatches): unknown {
const obj: any = {};
message.referenceKeypoints !== undefined &&
(obj.referenceKeypoints = message.referenceKeypoints
? KeypointSet.toJSON(message.referenceKeypoints)
: undefined);
message.liveKeypoints !== undefined &&
(obj.liveKeypoints = message.liveKeypoints
? KeypointSet.toJSON(message.liveKeypoints)
: undefined);
if (message.matches) {
obj.matches = message.matches.map((e) =>
e ? Match.toJSON(e) : undefined
);
} else {
obj.matches = [];
}
return obj;
},
fromPartial<I extends Exact<DeepPartial<KeypointMatches>, I>>(
object: I
): KeypointMatches {
const message = createBaseKeypointMatches();
message.referenceKeypoints =
object.referenceKeypoints !== undefined &&
object.referenceKeypoints !== null
? KeypointSet.fromPartial(object.referenceKeypoints)
: undefined;
message.liveKeypoints =
object.liveKeypoints !== undefined && object.liveKeypoints !== null
? KeypointSet.fromPartial(object.liveKeypoints)
: undefined;
message.matches = object.matches?.map((e) => Match.fromPartial(e)) || [];
return message;
},
};
declare var self: any | undefined;
declare var window: any | undefined;
declare var global: any | undefined;
var globalThis: any = (() => {
if (typeof globalThis !== "undefined") return globalThis;
if (typeof self !== "undefined") return self;
if (typeof window !== "undefined") return window;
if (typeof global !== "undefined") return global;
throw "Unable to locate global object";
})();
function bytesFromBase64(b64: string): Uint8Array {
if (globalThis.Buffer) {
return Uint8Array.from(globalThis.Buffer.from(b64, "base64"));
} else {
const bin = globalThis.atob(b64);
const arr = new Uint8Array(bin.length);
for (let i = 0; i < bin.length; ++i) {
arr[i] = bin.charCodeAt(i);
}
return arr;
}
}
function base64FromBytes(arr: Uint8Array): string {
if (globalThis.Buffer) {
return globalThis.Buffer.from(arr).toString("base64");
} else {
const bin: string[] = [];
arr.forEach((byte) => {
bin.push(String.fromCharCode(byte));
});
return globalThis.btoa(bin.join(""));
}
}
type Builtin =
| Date
| Function
| Uint8Array
| string
| number
| boolean
| undefined;
export type DeepPartial<T> = T extends Builtin
? T
: T extends Array<infer U>
? Array<DeepPartial<U>>
: T extends ReadonlyArray<infer U>
? ReadonlyArray<DeepPartial<U>>
: T extends {}
? { [K in keyof T]?: DeepPartial<T[K]> }
: Partial<T>;
type KeysOfUnion<T> = T extends T ? keyof T : never;
export type Exact<P, I extends P> = P extends Builtin
? P
: P & { [K in keyof P]: Exact<P[K], I[K]> } & {
[K in Exclude<keyof I, KeysOfUnion<P>>]: never;
};
function isSet(value: any): boolean {
return value !== null && value !== undefined;
}