Skip to content

Commit 54604b7

Browse files
committed
remove loguru dep
1 parent c03e479 commit 54604b7

13 files changed

+60
-38
lines changed

examples/2d_multi_object_tracking.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11

22
import cv2
3-
43
import motpy
5-
from motpy import MultiObjectTracker, ModelPreset
4+
from motpy import ModelPreset, MultiObjectTracker
5+
from motpy.core import setup_logger
66
from motpy.testing_viz import draw_rectangle, draw_text, image_generator
77

8-
motpy.set_log_level('DEBUG')
8+
logger = setup_logger(__name__, is_main=True)
99

1010

1111
def demo_tracking_visualization(num_steps: int = 1000, num_objects: int = 10):

examples/detections_with_features.py

Whitespace-only changes.

examples/mot16_challange.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77
import cv2
88
import fire
99
import pandas as pd
10-
from loguru import logger
11-
1210
from motpy import Box, Detection, MultiObjectTracker
11+
from motpy.core import setup_logger
1312
from motpy.testing_viz import draw_detection, draw_track
1413

1514
"""
@@ -27,6 +26,7 @@
2726
2827
"""
2928

29+
logger = setup_logger(__name__, is_main=True)
3030

3131
COL_NAMES = ['frame_idx', 'id', 'bb_left', 'bb_top', 'bb_width', 'bb_height', 'conf', 'x', 'y', 'z']
3232

@@ -114,7 +114,7 @@ def run(
114114
frame_idx, detections = next(dets_gen)
115115
except Exception as e:
116116
logger.warning('finished reading the sequence')
117-
logger.trace(f'exception: {e}')
117+
logger.debug(f'exception: {e}')
118118
break
119119

120120
# read the frame for a given index

examples/webcam_face_tracking.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
from urllib.request import urlretrieve
44

55
import cv2
6-
from loguru import logger
7-
from motpy import Detection, NpImage, MultiObjectTracker
6+
from motpy import Detection, MultiObjectTracker, NpImage
7+
from motpy.core import setup_logger
88
from motpy.detector import BaseObjectDetector
99
from motpy.testing_viz import draw_detection, draw_track
1010

@@ -15,6 +15,9 @@
1515
1616
"""
1717

18+
logger = setup_logger(__name__, is_main=True)
19+
20+
1821
WEIGHTS_URL = 'https://github.com/opencv/opencv_3rdparty/raw/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000.caffemodel'
1922
WEIGHTS_PATH = 'opencv_face_detector.caffemodel'
2023
CONFIG_URL = 'https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt'

motpy/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .core import Box, Detection, NpImage, Track, set_log_level
1+
from .core import Box, Detection, NpImage, Track
22
from .model import Model, ModelPreset
33
from .tracker import (BasicMatchingFunction, MatchingFunction,
44
MultiObjectTracker)

motpy/core.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import collections
2+
import logging
3+
import os
24
import sys
35
from typing import Optional
46

57
import numpy as np
6-
from loguru import logger
78

89
""" types """
910

@@ -40,7 +41,27 @@ def __repr__(self):
4041

4142
""" utils """
4243

44+
LOG_FORMAT = "%(asctime)s\t%(threadName)s-%(name)s:%(levelname)s:%(message)s"
4345

44-
def set_log_level(level: str) -> None:
45-
logger.remove()
46-
logger.add(sys.stdout, level=level)
46+
47+
def setup_logger(name: str,
48+
level: Optional[str] = None,
49+
is_main: bool = False,
50+
envvar_name: str = 'MOTPY_LOG_LEVEL'):
51+
if level is None:
52+
level = os.getenv(envvar_name)
53+
if level is None:
54+
print(f'[{name}] fallback to INFO log_level; set {envvar_name} envvar to override')
55+
level = 'INFO'
56+
else:
57+
print(f'[{name}] envvar {envvar_name} sets log level to {level}')
58+
59+
level_val = logging.getLevelName(level)
60+
61+
if is_main:
62+
logging.basicConfig(stream=sys.stdout, level=level_val, format=LOG_FORMAT)
63+
64+
logger = logging.getLogger(name)
65+
logger.setLevel(level_val)
66+
67+
return logger

motpy/model.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44
import numpy as np
55
from filterpy.common import Q_discrete_white_noise
66
from filterpy.kalman import KalmanFilter
7-
from scipy.linalg import block_diag
8-
97
from motpy.core import Box, Detection, Track, Vector
108
from motpy.metrics import angular_similarity, calculate_iou
9+
from scipy.linalg import block_diag
1110

1211

1312
""" The list of model presets below is not complete, more reasonable

motpy/testing_viz.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import numpy as np
2-
from loguru import logger
3-
4-
from motpy.core import Track, Detection
2+
from motpy.core import Detection, Track, setup_logger
53
from motpy.testing import CANVAS_SIZE, data_generator
64

5+
logger = setup_logger(__name__)
6+
7+
78
try:
89
import cv2
910
except BaseException:

motpy/tracker.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
import numpy as np
55
import scipy
66
from filterpy.kalman import KalmanFilter
7-
from loguru import logger
8-
9-
from motpy.core import Box, Detection, Track, Vector
7+
from motpy.core import Box, Detection, Track, Vector, setup_logger
108
from motpy.metrics import angular_similarity, calculate_iou
11-
from motpy.model import ModelPreset, Model
9+
from motpy.model import Model, ModelPreset
10+
11+
logger = setup_logger(__name__)
1212

1313

1414
def get_object_tracker(dt: float, model: Model, x0: Optional[Vector] = None):
@@ -107,7 +107,7 @@ def is_invalid(self):
107107
has_nans = any(np.isnan(self._tracker.x))
108108
return has_nans
109109
except Exception as e:
110-
logger.trace('invalid tracker, exception: %s' % str(e))
110+
logger.warning('invalid tracker, exception: %s' % str(e))
111111
return True
112112

113113
@property
@@ -229,7 +229,7 @@ def __init__(self, dt: float,
229229
self.model_spec = ModelPreset[model_spec].value
230230
else:
231231
raise NotImplementedError('unsupported motion model %s' % str(model_spec))
232-
logger.trace('using model spec: %s' % str(self.model_spec))
232+
logger.debug('using model spec: %s' % str(self.model_spec))
233233

234234
self.matching_fn = matching_fn
235235
self.matching_fn_kwargs = matching_fn_kwargs if matching_fn_kwargs is not None else {}
@@ -238,11 +238,11 @@ def __init__(self, dt: float,
238238

239239
# kwargs to be passed to each single object tracker
240240
self.tracker_kwargs = tracker_kwargs if tracker_kwargs is not None else {}
241-
logger.trace('using tracker_kwargs: %s' % str(self.tracker_kwargs))
241+
logger.debug('using tracker_kwargs: %s' % str(self.tracker_kwargs))
242242

243243
# kwargs to be used when self.step returns active tracks
244244
self.active_tracks_kwargs = active_tracks_kwargs if active_tracks_kwargs is not None else {}
245-
logger.trace('using active_tracks_kwargs: %s' % str(self.active_tracks_kwargs))
245+
logger.debug('using active_tracks_kwargs: %s' % str(self.active_tracks_kwargs))
246246

247247
def active_tracks(self,
248248
max_staleness_to_positive_ratio: float = 3.0,
@@ -258,14 +258,14 @@ def active_tracks(self,
258258
if cond1 and cond2 and cond3:
259259
tracks.append(Track(id=tracker.id, box=tracker.box))
260260

261-
logger.trace('active/all tracks: %d/%d' % (len(self.trackers), len(tracks)))
261+
logger.debug('active/all tracks: %d/%d' % (len(self.trackers), len(tracks)))
262262
return tracks
263263

264264
def cleanup_trackers(self):
265265
count_before = len(self.trackers)
266266
self.trackers = [t for t in self.trackers if not (t.is_stale or t.is_invalid)]
267267
count_after = len(self.trackers)
268-
logger.trace('deleted %s/%s trackers' % (count_before - count_after, count_before))
268+
logger.debug('deleted %s/%s trackers' % (count_before - count_after, count_before))
269269

270270
def step(self, detections: Sequence[Detection]):
271271
""" the method matches the new detections with existing trackers,
@@ -275,9 +275,9 @@ def step(self, detections: Sequence[Detection]):
275275
# filter out empty detections
276276
detections = [det for det in detections if det.box is not None]
277277

278-
logger.trace('step with %d detections' % len(detections))
278+
logger.debug('step with %d detections' % len(detections))
279279
matches = self.matching_fn(self.trackers, detections)
280-
logger.trace('matched %d pairs' % len(matches))
280+
logger.debug('matched %d pairs' % len(matches))
281281

282282
# all trackers: predict
283283
for t in self.trackers:

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
numpy
22
scipy
33
filterpy
4-
loguru

0 commit comments

Comments
 (0)