Welcome to the Pattern Discovery Kit!
This library provides tools to discover, detect, and track meaningful patterns in physical signals. These signals can be of various forms:
- Time series,
- Images,
- Movies,
- Any other type of n-dimensional data.
You can install patrick
from the source code by doing the following:
git clone https://github.com/mansour-b/patrick.git cd patrick pip install .
Here is an example to briefly present the API:
import numpy as np
from patrick.core import Box, Frame, Model, Movie, Tracker
from patrick.display import plot_frame
# Define the dimensions of the problem
frame_width = 5
frame_height = 5
movie_length = 3
gif_frames_per_second = 2
# Define a concrete model class, just for the example
class DumbModel(Model):
def predict(self, frame: Frame) -> Frame:
frame_id = int(frame.name)
frame.annotations.append(
Box(label="noise_in_a_square", x=frame_id, y=frame_id, width=1, height=1)
)
return frame
model = DumbModel()
# Our data for this short tutorial
frames = [
Frame(
name=str(10 * i),
width=frame_width,
height=frame_height,
annotations=[],
image_array=np.random.random(frame_height, frame_width),
)
for i in range(movie_length)
]
movie = Movie(name="some_noise", frames=frames, tracks=[])
# Run the detection model on individual frames
analysed_frames = [model(frame) for frame in movie.frames]
analysed_movie = Movie(
name="some_noise_with_boxes", frames=analysed_frames, tracks=[]
)
# TBD: run tracker on detections
analysed_movie = tracker.make_tracks(analysed_movie)
analysed_movie.name = "some_noise_with_boxes_and_tracks"
# Plot individual frames with detections
for frame in analysed_movie:
plot_frame(frame)
# TBD: make a GIF to show the tracks
export_to_gif(analysed_movie, fps=gif_frames_per_seconds)