Files
HSAP/algorithms/dms_yolo/code.embedded.bak/ultralytics/solutions/object_blurrer.py
Chengfang Lu e72bc061c5 feat: HSAP platform v2 — modular navigation, quality review, audit log, world model simulation
Major changes:
- New frontend (platform/web/): Vite + React 18 + TypeScript + Tailwind
- 4-module navigation: 数据送标 / 模型管理 / 车队管理 / 系统管理
- Data catalog with charts (DMS/ADAS/Lane 3-tab view)
- Quality review workflow (标注质检): Good/Fine/Bad scoring with auto-advance
- Audit enhancements: batch operations, rejection categories, Feishu notifications
- Operation audit log (操作日志)
- World model simulation studio (仿真工坊)
- Dataset version management with snapshots and diff
- ADAS 7-class dataset integration (138K images organized + compressed)
- User management with Feishu integration and pagination
- CRUD/search/filter on all pages, card layout redesign
- PIL-optimized image overlay rendering
- Auto-snapshot on build, in_review workflow stage
- Removed embedded algorithm code (now in workspace)
2026-06-03 11:40:21 +08:00

90 lines
3.9 KiB
Python

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
from typing import Any
import cv2
from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
from ultralytics.utils import LOGGER
from ultralytics.utils.plotting import colors
class ObjectBlurrer(BaseSolution):
"""A class to manage the blurring of detected objects in a real-time video stream.
This class extends the BaseSolution class and provides functionality for blurring objects based on detected bounding
boxes. The blurred areas are updated directly in the input image, allowing for privacy preservation or other effects.
Attributes:
blur_ratio (int): The intensity of the blur effect applied to detected objects (higher values create more blur).
iou (float): Intersection over Union threshold for object detection.
conf (float): Confidence threshold for object detection.
Methods:
process: Apply a blurring effect to detected objects in the input image.
extract_tracks: Extract tracking information from detected objects.
display_output: Display the processed output image.
Examples:
>>> blurrer = ObjectBlurrer()
>>> frame = cv2.imread("frame.jpg")
>>> processed_results = blurrer.process(frame)
>>> print(f"Total blurred objects: {processed_results.total_tracks}")
"""
def __init__(self, **kwargs: Any) -> None:
"""Initialize the ObjectBlurrer class for applying a blur effect to objects detected in video streams or images.
Args:
**kwargs (Any): Keyword arguments passed to the parent class and for configuration including:
- blur_ratio (float): Intensity of the blur effect (0.1-1.0, default=0.5).
"""
super().__init__(**kwargs)
blur_ratio = self.CFG["blur_ratio"]
if blur_ratio < 0.1:
LOGGER.warning("blur ratio cannot be less than 0.1, updating it to default value 0.5")
blur_ratio = 0.5
self.blur_ratio = int(blur_ratio * 100)
def process(self, im0) -> SolutionResults:
"""Apply a blurring effect to detected objects in the input image.
This method extracts tracking information, applies blur to regions corresponding to detected objects, and
annotates the image with bounding boxes.
Args:
im0 (np.ndarray): The input image containing detected objects.
Returns:
(SolutionResults): Object containing the processed image and number of tracked objects.
- plot_im (np.ndarray): The annotated output image with blurred objects.
- total_tracks (int): The total number of tracked objects in the frame.
Examples:
>>> blurrer = ObjectBlurrer()
>>> frame = cv2.imread("image.jpg")
>>> results = blurrer.process(frame)
>>> print(f"Blurred {results.total_tracks} objects")
"""
self.extract_tracks(im0) # Extract tracks
annotator = SolutionAnnotator(im0, self.line_width)
# Iterate over bounding boxes and classes
for box, cls, conf in zip(self.boxes, self.clss, self.confs):
# Crop and blur the detected object
blur_obj = cv2.blur(
im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])],
(self.blur_ratio, self.blur_ratio),
)
# Update the blurred area in the original image
im0[int(box[1]) : int(box[3]), int(box[0]) : int(box[2])] = blur_obj
annotator.box_label(
box, label=self.adjust_box_label(cls, conf), color=colors(cls, True)
) # Annotate bounding box
plot_im = annotator.result()
self.display_output(plot_im) # Display the output using the base class function
# Return a SolutionResults
return SolutionResults(plot_im=plot_im, total_tracks=len(self.track_ids))