@eyepop.ai/eyepop-render-2d 0.19.1 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -104,47 +104,47 @@ See [JSONPath expression](https://www.npmjs.com/package/jsonpath)
104
104
  Most prebuild render classes provide a reasonable default `target`.
105
105
  #### Rendering Bounding Boxes and Class Labels
106
106
  ```typescript
107
- Render2d.renderBox(target = '$.objects.*')
107
+ Render2d.renderBox({target: '$.objects.*'})
108
108
  // or
109
109
  Render2d.renderBox()
110
110
  ```
111
111
  #### Render Human Body Poses (2d or 3d)
112
112
  ```typescript
113
- Render2d.renderPose(target = '$..objects[?(@.category=="person")]')
113
+ Render2d.renderPose({target: '$..objects[?(@.category=="person")]'})
114
114
  // or
115
115
  Render2d.renderPose()
116
116
  ```
117
117
  #### Render Human Hand Details
118
118
  ```typescript
119
- Render2d.renderHand(target = '$..objects[?(@.classLabel=="hand circumference")]')
119
+ Render2d.renderHand({target: '$..objects[?(@.classLabel=="hand circumference")]'})
120
120
  // or
121
121
  Render2d.renderHand()
122
122
  ```
123
123
  #### Render Human Faces
124
124
  ```typescript
125
- Render2d.renderFace(target = '$..objects[?(@.classLabel=="face")]')
125
+ Render2d.renderFace({target: '$..objects[?(@.classLabel=="face")]'})
126
126
  // or
127
127
  Render2d.renderFace()
128
128
  ```
129
129
  #### Render Segmentation Masks
130
130
  ```typescript
131
- Render2d.renderMask(target = '$..objects[?(@.mask)]')
131
+ Render2d.renderMask({target: '$..objects[?(@.mask)]'})
132
132
  // or
133
133
  Render2d.renderMask()
134
134
  ```
135
135
  #### Render Segmentation Contours
136
136
  ```typescript
137
- Render2d.renderContour(target = '$..objects[?(@.contours)]')
137
+ Render2d.renderContour({target: '$..objects[?(@.contours)]'})
138
138
  // or
139
139
  Render2d.renderContour()
140
140
  ```
141
141
  #### Blur an Object (TODO does black-put instead of blur)
142
142
  ```typescript
143
- Render2d.renderBlur(target = '$..objects[?(@.classLabel=="face")]')
143
+ Render2d.renderBlur({target: '$..objects[?(@.classLabel=="face")]'})
144
144
  ```
145
145
  #### Render a Trail of a traced object over time
146
146
  ```typescript
147
- Render2d.renderTrail(1.0, target = '$..objects[?(@.traceId)]')
147
+ Render2d.renderTrail({target: '$..objects[?(@.traceId)]', trailLengthSeconds:1})
148
148
  // or
149
149
  Render2d.renderTrail()
150
150
  ```
@@ -152,18 +152,74 @@ By default, this traces the mid-point of the object's bounding box. Instead, one
152
152
  sub-objects or key points of the traced object. Use the optional parameter `traceDetails` for this purpose.
153
153
  E.g. trail the nose of every traced person:
154
154
  ```typescript
155
- Render2d.renderTrail(1.0, '$..keyPoints[?(@.category=="3d-body-points")].points[?(@.classLabel.includes("nose"))]')
155
+ Render2d.renderTrail({
156
+ target: '$..objects[?(@.traceId)]',
157
+ trailLengthSeconds:1,
158
+ traceDetails:'$..keyPoints[?(@.category=="3d-body-points")].points[?(@.classLabel.includes("nose"))]'
159
+ })
156
160
  ```
157
161
  #### Custom render implementation
158
- To implement custom rendering rules, implement the `Render` interface and create your own `RenderRule` objects:
162
+ To implement custom rendering rules, create a custom class as follows:
159
163
  ```typescript
164
+ import { PredictedObject, StreamTime } from '@eyepop.ai/eyepop'
165
+
160
166
  export interface Render {
167
+ target: string
161
168
  start(context: CanvasRenderingContext2D, style: Style): void
162
169
  draw(element: any, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void
163
170
  }
164
171
 
165
- export interface RenderRule {
166
- readonly render: Render
167
- readonly target : string
172
+ export class RenderCustomImage implements Render
173
+ {
174
+ public target: string = "$..objects[?(@.category=='person')]"
175
+
176
+ private context: CanvasRenderingContext2D | undefined
177
+ private style: any
178
+
179
+ // Optionally, add a constructor here. ie: constructor(...) { }
180
+
181
+ // The start method sets the context and style properties.
182
+ start(context: CanvasRenderingContext2D, style: any)
183
+ {
184
+ this.context = context
185
+ this.style = style
186
+ }
187
+
188
+ // The draw method draws the image and line on the canvas based on the positions of the points in the PredictedObject.
189
+ public draw(
190
+ element: PredictedObject, // The object containing the keypoints
191
+ xOffset: number, // The x offset for the drawing
192
+ yOffset: number, // The y offset for the drawing
193
+ xScale: number, // The x scale factor for the drawing
194
+ yScale: number, // The y scale factor for the drawing
195
+ streamTime: StreamTime // The timestamp for the stream of predicted objects
196
+ ): void
197
+ {
198
+ // Check if the context and style properties have been set
199
+ if (!this.context || !this.style)
200
+ {
201
+ throw new Error('render() called before start()')
202
+ }
203
+
204
+ // Check if the keypoints are defined
205
+ if (!element.keyPoints) return
206
+ if (!element.keyPoints.length) return
207
+
208
+ // Find the points of interest in the keypoints
209
+ for (let i = 0; i < element.keyPoints.length; i++)
210
+ {
211
+ const kp = element.keyPoints[ i ]
212
+ for (let j = 0; j < kp.points.length; j++)
213
+ {
214
+ const point = kp.points[ j ]
215
+ if (point.classLabel === 'left eye' || point.classLabel === 'right eye')
216
+ {
217
+ // Draw with the canvas context here
218
+ }
219
+ }
220
+ }
221
+ }
168
222
  }
223
+
224
+
169
225
  ```
@@ -14,35 +14,35 @@ interface Colors {
14
14
  declare class Style {
15
15
  font: string;
16
16
  colors: Colors;
17
+ scale: number;
17
18
  private static defaultColors;
18
19
  constructor(context: CanvasRenderingContext2D);
19
20
  private calculateFont;
21
+ private calculateScale;
20
22
  }
21
23
 
22
- interface Render {
24
+ interface RenderTarget {
25
+ target: string;
26
+ }
27
+ interface Render extends RenderTarget {
23
28
  start(context: CanvasRenderingContext2D, style: Style): void;
24
29
  draw(element: any, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void;
25
30
  }
26
31
 
27
- interface RenderRule {
28
- readonly render: Render;
29
- readonly target: string;
30
- }
31
-
32
- interface Renderer {
32
+ interface Renderer extends RenderTarget {
33
33
  draw(p: Prediction): void;
34
34
  }
35
35
  declare namespace Render2d {
36
- function renderer(context: CanvasRenderingContext2D, rules?: RenderRule[] | undefined): Renderer;
37
- function renderBlur(target: string): RenderRule;
38
- function renderBox(includeSecondaryLabels?: boolean, target?: string): RenderRule;
39
- function renderMask(target?: string): RenderRule;
40
- function renderContour(target?: string): RenderRule;
41
- function renderFace(target?: string): RenderRule;
42
- function renderKeypoints(target?: string): RenderRule;
43
- function renderHand(target?: string): RenderRule;
44
- function renderPose(target?: string): RenderRule;
45
- function renderTrail(durationSeconds?: number, traceDetails?: string | undefined, target?: string): RenderRule;
36
+ function renderer(context: CanvasRenderingContext2D, rules?: Render[] | undefined): Renderer;
37
+ function renderBlur(target: string): Render;
38
+ function renderBox(showClass?: boolean, showText?: boolean, showConfidence?: boolean, showTraceId?: boolean, showNestedClasses?: boolean, target?: string): Render;
39
+ function renderMask(target?: string): Render;
40
+ function renderContour(target?: string): Render;
41
+ function renderFace(target?: string): Render;
42
+ function renderKeypoints(target?: string): Render;
43
+ function renderHand(target?: string): Render;
44
+ function renderPose(target?: string): Render;
45
+ function renderTrail(trailLengthSeconds?: number, traceDetails?: string | undefined, target?: string): Render;
46
46
  }
47
47
 
48
48
  export { Render2d, type Renderer, Render2d as default };
@@ -14,35 +14,35 @@ interface Colors {
14
14
  declare class Style {
15
15
  font: string;
16
16
  colors: Colors;
17
+ scale: number;
17
18
  private static defaultColors;
18
19
  constructor(context: CanvasRenderingContext2D);
19
20
  private calculateFont;
21
+ private calculateScale;
20
22
  }
21
23
 
22
- interface Render {
24
+ interface RenderTarget {
25
+ target: string;
26
+ }
27
+ interface Render extends RenderTarget {
23
28
  start(context: CanvasRenderingContext2D, style: Style): void;
24
29
  draw(element: any, xOffset: number, yOffset: number, xScale: number, yScale: number, streamTime: StreamTime): void;
25
30
  }
26
31
 
27
- interface RenderRule {
28
- readonly render: Render;
29
- readonly target: string;
30
- }
31
-
32
- interface Renderer {
32
+ interface Renderer extends RenderTarget {
33
33
  draw(p: Prediction): void;
34
34
  }
35
35
  declare namespace Render2d {
36
- function renderer(context: CanvasRenderingContext2D, rules?: RenderRule[] | undefined): Renderer;
37
- function renderBlur(target: string): RenderRule;
38
- function renderBox(includeSecondaryLabels?: boolean, target?: string): RenderRule;
39
- function renderMask(target?: string): RenderRule;
40
- function renderContour(target?: string): RenderRule;
41
- function renderFace(target?: string): RenderRule;
42
- function renderKeypoints(target?: string): RenderRule;
43
- function renderHand(target?: string): RenderRule;
44
- function renderPose(target?: string): RenderRule;
45
- function renderTrail(durationSeconds?: number, traceDetails?: string | undefined, target?: string): RenderRule;
36
+ function renderer(context: CanvasRenderingContext2D, rules?: Render[] | undefined): Renderer;
37
+ function renderBlur(target: string): Render;
38
+ function renderBox(showClass?: boolean, showText?: boolean, showConfidence?: boolean, showTraceId?: boolean, showNestedClasses?: boolean, target?: string): Render;
39
+ function renderMask(target?: string): Render;
40
+ function renderContour(target?: string): Render;
41
+ function renderFace(target?: string): Render;
42
+ function renderKeypoints(target?: string): Render;
43
+ function renderHand(target?: string): Render;
44
+ function renderPose(target?: string): Render;
45
+ function renderTrail(trailLengthSeconds?: number, traceDetails?: string | undefined, target?: string): Render;
46
46
  }
47
47
 
48
48
  export { Render2d, type Renderer, Render2d as default };