vidformer 0.6.0__tar.gz → 0.6.1__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- vidformer-0.6.1/PKG-INFO +36 -0
- vidformer-0.6.1/README.md +19 -0
- {vidformer-0.6.0 → vidformer-0.6.1}/pyproject.toml +2 -1
- {vidformer-0.6.0 → vidformer-0.6.1}/vidformer/__init__.py +1 -1
- {vidformer-0.6.0 → vidformer-0.6.1}/vidformer/cv2/vf_cv2.py +192 -0
- vidformer-0.6.0/PKG-INFO +0 -24
- vidformer-0.6.0/README.md +0 -8
- {vidformer-0.6.0 → vidformer-0.6.1}/vidformer/cv2/__init__.py +0 -0
- {vidformer-0.6.0 → vidformer-0.6.1}/vidformer/vf.py +0 -0
vidformer-0.6.1/PKG-INFO
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: vidformer
|
3
|
+
Version: 0.6.1
|
4
|
+
Summary: A Python library for creating and viewing videos with vidformer.
|
5
|
+
Author-email: Dominik Winecki <dominikwinecki@gmail.com>
|
6
|
+
Requires-Python: >=3.8
|
7
|
+
Description-Content-Type: text/markdown
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
9
|
+
Classifier: Operating System :: OS Independent
|
10
|
+
Requires-Dist: requests
|
11
|
+
Requires-Dist: msgpack
|
12
|
+
Requires-Dist: numpy
|
13
|
+
Project-URL: Documentation, https://ixlab.github.io/vidformer/vidformer-py/
|
14
|
+
Project-URL: Homepage, https://ixlab.github.io/vidformer/
|
15
|
+
Project-URL: Issues, https://github.com/ixlab/vidformer/issues
|
16
|
+
|
17
|
+
# vidformer-py
|
18
|
+
|
19
|
+
[![PyPI version](https://img.shields.io/pypi/v/vidformer.svg)](https://pypi.org/project/vidformer/)
|
20
|
+
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/ixlab/vidformer/blob/main/LICENSE)
|
21
|
+
|
22
|
+
|
23
|
+
vidformer-py is our Python 🐍 interface for [vidformer](https://github.com/ixlab/vidformer).
|
24
|
+
Our [getting started guide](https://ixlab.github.io/vidformer/getting-started.html) explains how to use it.
|
25
|
+
|
26
|
+
**Quick links:**
|
27
|
+
* [📦 PyPI](https://pypi.org/project/vidformer/)
|
28
|
+
* [📘 Documentation](https://ixlab.github.io/vidformer/vidformer-py/)
|
29
|
+
* [🧑💻 Source Code](https://github.com/ixlab/vidformer/tree/main/vidformer-py/)
|
30
|
+
|
31
|
+
**Publish:**
|
32
|
+
```bash
|
33
|
+
export FLIT_USERNAME='__token__' FLIT_PASSWORD='<token>'
|
34
|
+
flit publish
|
35
|
+
```
|
36
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# vidformer-py
|
2
|
+
|
3
|
+
[![PyPI version](https://img.shields.io/pypi/v/vidformer.svg)](https://pypi.org/project/vidformer/)
|
4
|
+
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/ixlab/vidformer/blob/main/LICENSE)
|
5
|
+
|
6
|
+
|
7
|
+
vidformer-py is our Python 🐍 interface for [vidformer](https://github.com/ixlab/vidformer).
|
8
|
+
Our [getting started guide](https://ixlab.github.io/vidformer/getting-started.html) explains how to use it.
|
9
|
+
|
10
|
+
**Quick links:**
|
11
|
+
* [📦 PyPI](https://pypi.org/project/vidformer/)
|
12
|
+
* [📘 Documentation](https://ixlab.github.io/vidformer/vidformer-py/)
|
13
|
+
* [🧑💻 Source Code](https://github.com/ixlab/vidformer/tree/main/vidformer-py/)
|
14
|
+
|
15
|
+
**Publish:**
|
16
|
+
```bash
|
17
|
+
export FLIT_USERNAME='__token__' FLIT_PASSWORD='<token>'
|
18
|
+
flit publish
|
19
|
+
```
|
@@ -18,7 +18,8 @@ dependencies = [
|
|
18
18
|
|
19
19
|
[project.urls]
|
20
20
|
Homepage = "https://ixlab.github.io/vidformer/"
|
21
|
-
|
21
|
+
Documentation = "https://ixlab.github.io/vidformer/vidformer-py/"
|
22
|
+
Issues = "https://github.com/ixlab/vidformer/issues"
|
22
23
|
|
23
24
|
|
24
25
|
[build-system]
|
@@ -1,5 +1,10 @@
|
|
1
1
|
from .. import vf
|
2
2
|
|
3
|
+
try:
|
4
|
+
import cv2 as _opencv2
|
5
|
+
except:
|
6
|
+
_opencv2 = None
|
7
|
+
|
3
8
|
import uuid
|
4
9
|
from fractions import Fraction
|
5
10
|
from bisect import bisect_right
|
@@ -28,6 +33,10 @@ LINE_AA = 16
|
|
28
33
|
_filter_scale = vf.Filter("Scale")
|
29
34
|
_filter_rectangle = vf.Filter("cv2.rectangle")
|
30
35
|
_filter_putText = vf.Filter("cv2.putText")
|
36
|
+
_filter_arrowedLine = vf.Filter("cv2.arrowedLine")
|
37
|
+
_filter_line = vf.Filter("cv2.line")
|
38
|
+
_filter_circle = vf.Filter("cv2.circle")
|
39
|
+
_filter_addWeighted = vf.Filter("cv2.addWeighted")
|
31
40
|
|
32
41
|
|
33
42
|
def _ts_to_fps(timestamps):
|
@@ -234,3 +243,186 @@ def putText(
|
|
234
243
|
args.append(bottomLeftOrigin)
|
235
244
|
|
236
245
|
img._f = _filter_putText(img._f, text, org, fontFace, fontScale, color, *args)
|
246
|
+
|
247
|
+
|
248
|
+
def arrowedLine(
|
249
|
+
img, pt1, pt2, color, thickness=None, line_type=None, shift=None, tipLength=None
|
250
|
+
):
|
251
|
+
"""
|
252
|
+
cv.arrowedLine( img, pt1, pt2, color[, thickness[, line_type[, shift[, tipLength]]]] )
|
253
|
+
"""
|
254
|
+
assert isinstance(img, _Frame)
|
255
|
+
img._mut()
|
256
|
+
|
257
|
+
assert len(pt1) == 2
|
258
|
+
assert len(pt2) == 2
|
259
|
+
assert all(isinstance(x, int) for x in pt1)
|
260
|
+
assert all(isinstance(x, int) for x in pt2)
|
261
|
+
|
262
|
+
assert len(color) == 3 or len(color) == 4
|
263
|
+
color = [float(x) for x in color]
|
264
|
+
if len(color) == 3:
|
265
|
+
color.append(255.0)
|
266
|
+
|
267
|
+
args = []
|
268
|
+
if thickness is not None:
|
269
|
+
assert isinstance(thickness, int)
|
270
|
+
args.append(thickness)
|
271
|
+
if line_type is not None:
|
272
|
+
assert isinstance(line_type, int)
|
273
|
+
assert thickness is not None
|
274
|
+
args.append(line_type)
|
275
|
+
if shift is not None:
|
276
|
+
assert isinstance(shift, int)
|
277
|
+
assert shift is not None
|
278
|
+
args.append(shift)
|
279
|
+
if tipLength is not None:
|
280
|
+
assert isinstance(tipLength, float)
|
281
|
+
assert shift is not None
|
282
|
+
args.append(tipLength)
|
283
|
+
|
284
|
+
img._f = _filter_arrowedLine(img._f, pt1, pt2, color, *args)
|
285
|
+
|
286
|
+
|
287
|
+
def line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None):
|
288
|
+
assert isinstance(img, _Frame)
|
289
|
+
img._mut()
|
290
|
+
|
291
|
+
assert len(pt1) == 2
|
292
|
+
assert len(pt2) == 2
|
293
|
+
assert all(isinstance(x, int) for x in pt1)
|
294
|
+
assert all(isinstance(x, int) for x in pt2)
|
295
|
+
|
296
|
+
assert len(color) == 3 or len(color) == 4
|
297
|
+
color = [float(x) for x in color]
|
298
|
+
if len(color) == 3:
|
299
|
+
color.append(255.0)
|
300
|
+
|
301
|
+
args = []
|
302
|
+
if thickness is not None:
|
303
|
+
assert isinstance(thickness, int)
|
304
|
+
args.append(thickness)
|
305
|
+
if lineType is not None:
|
306
|
+
assert isinstance(lineType, int)
|
307
|
+
assert thickness is not None
|
308
|
+
args.append(lineType)
|
309
|
+
if shift is not None:
|
310
|
+
assert isinstance(shift, int)
|
311
|
+
assert shift is not None
|
312
|
+
args.append(shift)
|
313
|
+
|
314
|
+
img._f = _filter_line(img._f, pt1, pt2, color, *args)
|
315
|
+
|
316
|
+
|
317
|
+
def circle(img, center, radius, color, thickness=None, lineType=None, shift=None):
|
318
|
+
assert isinstance(img, _Frame)
|
319
|
+
img._mut()
|
320
|
+
|
321
|
+
assert len(center) == 2
|
322
|
+
assert all(isinstance(x, int) for x in center)
|
323
|
+
|
324
|
+
assert isinstance(radius, int)
|
325
|
+
|
326
|
+
assert len(color) == 3 or len(color) == 4
|
327
|
+
color = [float(x) for x in color]
|
328
|
+
if len(color) == 3:
|
329
|
+
color.append(255.0)
|
330
|
+
|
331
|
+
args = []
|
332
|
+
if thickness is not None:
|
333
|
+
assert isinstance(thickness, int)
|
334
|
+
args.append(thickness)
|
335
|
+
if lineType is not None:
|
336
|
+
assert isinstance(lineType, int)
|
337
|
+
assert thickness is not None
|
338
|
+
args.append(lineType)
|
339
|
+
if shift is not None:
|
340
|
+
assert isinstance(shift, int)
|
341
|
+
assert shift is not None
|
342
|
+
args.append(shift)
|
343
|
+
|
344
|
+
img._f = _filter_circle(img._f, center, radius, color, *args)
|
345
|
+
|
346
|
+
|
347
|
+
def getFontScaleFromHeight(*args, **kwargs):
|
348
|
+
"""
|
349
|
+
cv.getFontScaleFromHeight( fontFace, pixelHeight[, thickness] )
|
350
|
+
"""
|
351
|
+
if _opencv2 is None:
|
352
|
+
raise NotImplementedError("getFontScaleFromHeight requires the cv2 module")
|
353
|
+
return _opencv2.getFontScaleFromHeight(*args, **kwargs)
|
354
|
+
|
355
|
+
|
356
|
+
def getTextSize(*args, **kwargs):
|
357
|
+
"""
|
358
|
+
cv.getTextSize( text, fontFace, fontScale, thickness )
|
359
|
+
"""
|
360
|
+
if _opencv2 is None:
|
361
|
+
raise NotImplementedError("getTextSize requires the cv2 module")
|
362
|
+
return _opencv2.getTextSize(*args, **kwargs)
|
363
|
+
|
364
|
+
|
365
|
+
def addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=-1):
|
366
|
+
"""
|
367
|
+
cv.addWeighted( src1, alpha, src2, beta, gamma[, dst[, dtype]] ) -> dst
|
368
|
+
"""
|
369
|
+
assert isinstance(src1, _Frame)
|
370
|
+
assert isinstance(src2, _Frame)
|
371
|
+
src1._mut()
|
372
|
+
src2._mut()
|
373
|
+
|
374
|
+
if dst is None:
|
375
|
+
dst = _Frame(src1._f)
|
376
|
+
else:
|
377
|
+
assert isinstance(dst, _Frame)
|
378
|
+
dst._mut()
|
379
|
+
|
380
|
+
assert isinstance(alpha, float) or isinstance(alpha, int)
|
381
|
+
assert isinstance(beta, float) or isinstance(beta, int)
|
382
|
+
assert isinstance(gamma, float) or isinstance(gamma, int)
|
383
|
+
alpha = float(alpha)
|
384
|
+
beta = float(beta)
|
385
|
+
gamma = float(gamma)
|
386
|
+
|
387
|
+
if dtype != -1:
|
388
|
+
raise Exception("addWeighted does not support the dtype argument")
|
389
|
+
|
390
|
+
dst._f = _filter_addWeighted(src1._f, alpha, src2._f, beta, gamma)
|
391
|
+
return dst
|
392
|
+
|
393
|
+
|
394
|
+
# Stubs for unimplemented functions
|
395
|
+
|
396
|
+
|
397
|
+
def clipLine(*args, **kwargs):
|
398
|
+
raise NotImplementedError("clipLine is not yet implemented in the cv2 frontend")
|
399
|
+
|
400
|
+
|
401
|
+
def drawContours(*args, **kwargs):
|
402
|
+
raise NotImplementedError("drawContours is not yet implemented in the cv2 frontend")
|
403
|
+
|
404
|
+
|
405
|
+
def drawMarker(*args, **kwargs):
|
406
|
+
raise NotImplementedError("drawMarker is not yet implemented in the cv2 frontend")
|
407
|
+
|
408
|
+
|
409
|
+
def ellipse(*args, **kwargs):
|
410
|
+
raise NotImplementedError("ellipse is not yet implemented in the cv2 frontend")
|
411
|
+
|
412
|
+
|
413
|
+
def ellipse2Poly(*args, **kwargs):
|
414
|
+
raise NotImplementedError("ellipse2Poly is not yet implemented in the cv2 frontend")
|
415
|
+
|
416
|
+
|
417
|
+
def fillConvexPoly(*args, **kwargs):
|
418
|
+
raise NotImplementedError(
|
419
|
+
"fillConvexPoly is not yet implemented in the cv2 frontend"
|
420
|
+
)
|
421
|
+
|
422
|
+
|
423
|
+
def fillPoly(*args, **kwargs):
|
424
|
+
raise NotImplementedError("fillPoly is not yet implemented in the cv2 frontend")
|
425
|
+
|
426
|
+
|
427
|
+
def polylines(*args, **kwargs):
|
428
|
+
raise NotImplementedError("polylines is not yet implemented in the cv2 frontend")
|
vidformer-0.6.0/PKG-INFO
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: vidformer
|
3
|
-
Version: 0.6.0
|
4
|
-
Summary: A Python library for creating and viewing videos with vidformer.
|
5
|
-
Author-email: Dominik Winecki <dominikwinecki@gmail.com>
|
6
|
-
Requires-Python: >=3.8
|
7
|
-
Description-Content-Type: text/markdown
|
8
|
-
Classifier: Programming Language :: Python :: 3
|
9
|
-
Classifier: Operating System :: OS Independent
|
10
|
-
Requires-Dist: requests
|
11
|
-
Requires-Dist: msgpack
|
12
|
-
Requires-Dist: numpy
|
13
|
-
Project-URL: Homepage, https://ixlab.github.io/vidformer/
|
14
|
-
Project-URL: Issues, https://ixlab.github.io/vidformer/issues
|
15
|
-
|
16
|
-
# vidformer-py
|
17
|
-
|
18
|
-
## Publish
|
19
|
-
|
20
|
-
```bash
|
21
|
-
export FLIT_USERNAME='__token__' FLIT_PASSWORD='<token>'
|
22
|
-
flit publish
|
23
|
-
```
|
24
|
-
|
vidformer-0.6.0/README.md
DELETED
File without changes
|
File without changes
|