102 lines
2.7 KiB
Python
102 lines
2.7 KiB
Python
"""
|
|
Face Mask Blur - Blender 5.0 Extension
|
|
Detect faces and apply blur in VSE for privacy protection.
|
|
"""
|
|
|
|
bl_info = {
|
|
"name": "Face Mask Blur",
|
|
"blender": (5, 0, 0),
|
|
"category": "Sequencer",
|
|
"version": (0, 2, 0),
|
|
"author": "Hare",
|
|
"description": "Detect faces and apply blur in VSE for privacy protection",
|
|
}
|
|
|
|
|
|
def register():
|
|
"""Register all extension components."""
|
|
import bpy
|
|
from bpy.props import FloatProperty, IntProperty, EnumProperty, StringProperty
|
|
|
|
from . import operators
|
|
from . import panels
|
|
|
|
# Register scene properties for face detection parameters
|
|
bpy.types.Scene.facemask_conf_threshold = FloatProperty(
|
|
name="Confidence",
|
|
description="YOLO confidence threshold (higher = fewer false positives)",
|
|
default=0.5,
|
|
min=0.1,
|
|
max=1.0,
|
|
step=0.01,
|
|
)
|
|
|
|
bpy.types.Scene.facemask_iou_threshold = FloatProperty(
|
|
name="IOU Threshold",
|
|
description="Non-maximum suppression IOU threshold",
|
|
default=0.45,
|
|
min=0.1,
|
|
max=1.0,
|
|
step=0.01,
|
|
)
|
|
|
|
bpy.types.Scene.facemask_cache_dir = StringProperty(
|
|
name="Cache Directory",
|
|
description="Optional cache root directory (empty = default .mask_cache)",
|
|
default="",
|
|
subtype='DIR_PATH',
|
|
)
|
|
|
|
bpy.types.Scene.facemask_bake_blur_size = IntProperty(
|
|
name="Bake Blur Size",
|
|
description="Gaussian blur size (pixels) used for bake",
|
|
default=50,
|
|
min=1,
|
|
max=501,
|
|
)
|
|
|
|
bpy.types.Scene.facemask_bake_display_scale = FloatProperty(
|
|
name="Mask Scale",
|
|
description="Scale factor for the blur mask ellipse at bake time (1.0 = raw detection size)",
|
|
default=1.3,
|
|
min=0.5,
|
|
max=3.0,
|
|
step=0.1,
|
|
)
|
|
|
|
bpy.types.Scene.facemask_bake_format = EnumProperty(
|
|
name="Bake Format",
|
|
description="Output format for baked blur video",
|
|
items=[
|
|
("MP4", "MP4", "Export as .mp4"),
|
|
("AVI", "AVI", "Export as .avi"),
|
|
("MOV", "MOV", "Export as .mov"),
|
|
],
|
|
default="MP4",
|
|
)
|
|
|
|
operators.register()
|
|
panels.register()
|
|
|
|
|
|
def unregister():
|
|
"""Unregister all extension components."""
|
|
import bpy
|
|
from . import operators
|
|
from . import panels
|
|
|
|
panels.unregister()
|
|
operators.unregister()
|
|
|
|
# Unregister scene properties
|
|
del bpy.types.Scene.facemask_conf_threshold
|
|
del bpy.types.Scene.facemask_iou_threshold
|
|
del bpy.types.Scene.facemask_cache_dir
|
|
del bpy.types.Scene.facemask_bake_blur_size
|
|
del bpy.types.Scene.facemask_bake_display_scale
|
|
del bpy.types.Scene.facemask_bake_format
|
|
|
|
|
|
if __name__ == "__main__":
|
|
register()
|