使用PixelLib做视频背景模糊时出现UnboundLocalError报错如何解决
报错原因
该报错是PixelLib库blur_video方法的内部实现bug导致的:当你指定detect="person"仅检测人员目标时,库的帧处理逻辑没有提前声明output变量,只有在单帧画面检测到符合要求的person目标时才会给该变量赋值。一旦视频中某一帧没有检测到人员,逻辑分支就会调用未初始化的output变量,直接触发该报错。
此外你的代码存在冗余赋值问题:blur_video方法不需要将返回值重新赋值给原change_bg对象,虽然这不是本次报错的直接诱因,但属于不规范写法。
解决方案
- 先修正代码的冗余赋值,将最后一行的赋值操作改为直接调用方法:
import pixellib from pixellib.tune_bg import alter_bg change_bg = alter_bg(model_type = "pb") change_bg.load_pascalvoc_model("xception_pascalvoc.pb") # 去掉多余的change_bg = 赋值 change_bg.blur_video(video_path="Cut52-1.mp4", extreme = True, frames_per_second=10, output_video_name="blur2_video.mp4", detect = "person")
- 如果你使用的是0.7.0及以上版本的PixelLib,该版本存在上述已知bug,可回退到无bug的稳定版本:
pip install pixellib==0.6.1 - 若不想降级版本,可手动修改库源码的
tune_bg.py文件,在blur_video方法的帧处理逻辑前提前初始化output变量即可。 - 额外验证
xception_pascalvoc.pb模型文件是否存放在代码运行的同级目录,且文件完整未损坏,模型缺失/损坏也可能触发同类变量初始化异常。
内容的提问来源于stack exchange,提问作者Ahmed Abousari
相关产品推荐
相关产品推荐

