DENK UTILS
Custom computer vision utilities for image and video processing, visualization, and memory management.
Installation
For Users
pip install denku
Features
Image Processing
from denku import read_image, save_image, change_contrast
# Read and process images
image = read_image("path/to/image.jpg")
processed_image = change_contrast(image, contrast=20)
save_image(processed_image, "path/to/output.jpg")
# Create and apply masks
from denku import get_color_mask_with_hsv, merge_images_by_mask_with_gauss
import numpy as np
# Create a mask based on HSV color range
color_min = np.array([0, 100, 100])
color_max = np.array([10, 255, 255])
mask = get_color_mask_with_hsv(image, color_min, color_max)
# Merge images using a mask
background = read_image("path/to/background.jpg")
merged = merge_images_by_mask_with_gauss(background, image, mask)
# Resize images
from denku import resize_to_min_side, resize_to_max_side
# Proportionally resize image to have minimum side of 256 pixels
resized_min = resize_to_min_side(image, min_side=256)
# Proportionally resize image to have maximum side of 512 pixels
resized_max = resize_to_max_side(image, max_side=512)
# Center crop and rotate images
from denku import center_crop, rotate_image, show_images
# Get original dimensions
h, w = image.shape[:2]
# Crop center 50% of the image
target_h = h // 2
target_w = w // 2
cropped = center_crop(image, target_h, target_w)
# Rotate image by different angles
rotated_90 = rotate_image(image, angle=90) # Rotate 90 degrees counter-clockwise
rotated_45 = rotate_image(image, angle=45) # Rotate 45 degrees counter-clockwise
rotated_neg30 = rotate_image(image, angle=-30) # Rotate 30 degrees clockwise
# Display all images in a grid
show_images(
images=[image, cropped, rotated_90, rotated_45, rotated_neg30],
n_rows=2,
titles=['Original', 'Center Cropped', '90°', '45°', '-30°'],
global_title='Image Processing Examples'
)
Video Processing
import denku
# Read video frames
# Read every frame
frames, fps = denku.read_video("video.mp4")
# Read every 2nd frame
frames, fps = denku.read_video("video.mp4", frame_stride=2)
# Read every 5th frame
frames, fps = denku.read_video("video.mp4", frame_stride=5)
# Convert video to different FPS
converted_frames = denku.convert_video_fps(frames, original_fps=fps, target_fps=16)
denku.save_video(converted_frames, "output.mp4", fps=16)
# Create a grid of videos
video_paths = ["video1.mp4", "video2.mp4", "video3.mp4", "video4.mp4"]
grid = denku.create_video_grid(video_paths, grid_size=(2, 2))
denku.save_video(grid, "video_grid.mp4")
# Advanced video operations
from denku import overlay_video, concatenate_videos, save_video_from_frames
# Overlay one video on top of another
overlay_video(
background_path='path/to/video1.mp4',
overlay_path='path/to/video2.mp4',
output_path='output/overlayed.mp4',
overlay_scale=0.3, # Make overlay 30% of original size
x_offset=10, # 10 pixels from left
y_offset=10 # 10 pixels from top
)
# Concatenate videos horizontally
concatenate_videos(
input_paths=['path/to/video1.mp4', 'path/to/video2.mp4'],
output_path='output/concatenated.mp4'
)
# Save frames as video
frames, fps = read_video('path/to/video.mp4')
save_video_from_frames(
frames=frames,
output_path='output/saved.mp4',
fps=fps,
codec='mp4v',
input_format='rgb'
)
Box Operations
from denku import get_boxes_iou, get_boxes_intersection, get_boxes_union, get_boxes_iou_matrix
# Example boxes (x1, y1, x2, y2)
box1 = (10, 10, 50, 50) # First box
box2 = (30, 30, 70, 70) # Second box
# Calculate IoU (Intersection over Union)
iou = get_boxes_iou(box1, box2)
print(f"IoU: {iou:.2f}") # Should be around 0.25
# Calculate intersection area
intersection = get_boxes_intersection(box1, box2)
print(f"Intersection area: {intersection}") # Should be 400
# Calculate union area
union = get_boxes_union(box1, box2)
print(f"Union area: {union}") # Should be 1600
# Calculate IoU matrix between two sets of boxes
boxes1 = [
(10, 10, 50, 50), # First box
(20, 20, 60, 60) # Second box
]
boxes2 = [
(30, 30, 70, 70), # Third box
(40, 40, 80, 80) # Fourth box
]
# Calculate IoU matrix between two sets of boxes
iou_matrix = get_boxes_iou_matrix(boxes1, boxes2)
print("IoU Matrix:")
print(iou_matrix)
# Output will be a 2x2 matrix showing IoU between each pair of boxes
Visualization in Jupyter Notebooks
from denku import show_image, show_images, show_video_in_jupyter, show_gif_in_jupyter
# Display images
show_image(image, title="My Image", figsize=(10, 10))
# Display multiple images in a grid
show_images([image1, image2, image3], n_rows=2, titles=["Image 1", "Image 2", "Image 3"])
# Display video in Jupyter
show_video_in_jupyter("path/to/video.mp4", width=640)
# Display GIF in Jupyter
show_gif_in_jupyter("path/to/animation.gif", width=480)
Memory Management
from denku import empty_cuda_cache, print_cuda_allocated_memory
# Reset CUDA memory and run garbage collection
empty_cuda_cache()
# Print current CUDA memory usage
print_cuda_allocated_memory()
Development
Setup Development Environment
# Clone the repository
git clone https://github.com/TheDenk/denku.git
cd denku
# Install with development dependencies
pip install -e ".[dev]"
# Install pre-commit hooks
pre-commit install
Running Tests
# Run all tests
pytest
# Run tests with coverage report
pytest --cov=denku
# Run tests for a specific module
pytest tests/test_utils.py
# Run tests with detailed output
pytest -v
# Run tests and show coverage in HTML format
pytest --cov=denku --cov-report=html
Contacts
Issues should be raised directly in the repository. For professional support and recommendations please welcomedenk@gmail.com.
Metadata
Release files for denku 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| denku-0.1.5.tar.gz | 24.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| denku-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 47.3 kB
Release files / denku-0.1.5.tar.gz
| Download URL | denku-0.1.5.tar.gz |
|---|---|
| Size | 24.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2c5dd1589e79918579ac39aceb6e7a5f046da8161403fa50a17f5e96f6dd68ad
|
|
BLAKE2b-256 checksum How to use checksums |
f234390bc516f5d5f3bb1f79a09fe8f18c602a340cb3cbc192232f1fa7ca3f0b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.3
|
Release files / denku-0.1.5-py3-none-any.whl
| Download URL | denku-0.1.5-py3-none-any.whl |
|---|---|
| Size | 22.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cda6507f596c6b242d02f9fd8b8906350d3cad3128e743f25a14e190e116c380
|
|
BLAKE2b-256 checksum How to use checksums |
5c0552367a5a10101b035c36b2807d1936eb3f82d0daea33366ed9f9763969a2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.3
|
Security for denku 0.1.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.