| --- |
| title: Video Background Removal |
| emoji: 👁 |
| colorFrom: green |
| colorTo: yellow |
| sdk: streamlit |
| sdk_version: 1.31.1 |
| app_file: app.py |
| pinned: false |
| --- |
| # AI Powered Video Background Removal Tool |
|
|
| [](https://github.com/killian31/VideoBackgroundRemoval/stargazers) |
| [](https://github.com/killian31/VideoBackgroundRemoval/actions/workflows/github-actions-black-formatting.yml) |
| [](https://wakatime.com/badge/github/killian31/VideoBackgroundRemoval) |
|
|
| The Video Background Removal Tool is designed to enable users to effortlessly remove backgrounds from videos by selecting a subject in a single frame. This powerful tool is optimized to run on CPUs and boasts a user-friendly interface, making it ideal for a wide range of users, especially online content creators like YouTubers. |
|
|
| <p align="center"> |
| <table> |
| <tr> |
| <td> |
| <img src="assets/example.gif" width="385" height="216" /> |
| </td> |
| <td> |
| <img src="assets/output_example.gif" width="385" height="216" /> |
| </td> |
| </tr> |
| </table> |
| </p> |
| |
| ## Contents |
|
|
| Table of contents: |
|
|
| - [Installation](#installation) |
| - [Usage](#usage) |
| - [Example](#example) |
| - [Contribution](#how-to-contribute) |
|
|
| ## Installation |
|
|
| ### With pyenv and poetry |
|
|
| ```bash |
| git clone https://github.com/killian31/VideoBackgroundRemoval.git |
| cd VideoBackgroundRemoval |
| pyenv virtualenv 3.11.9 vbr |
| pyenv activate vbr |
| pip install poetry |
| poetry install |
| ``` |
|
|
| ## Usage |
|
|
| ### Using the Streamlit app (locally) |
|
|
| Run `streamlit run app.py` to launch the Streamlit app. Then, upload a video, draw a |
| bounding box around what you want to remove the background from, using the sliders, |
| and click on Segment Video. |
|
|
| ### Command line |
|
|
| ```bash |
| usage: main.py [-h] [--video_filename VIDEO_FILENAME] [--dir_frames DIR_FRAMES] [--image_start IMAGE_START] [--image_end IMAGE_END] [--bbox_file BBOX_FILE] [--skip_vid2im] |
| [--mobile_sam_weights MOBILE_SAM_WEIGHTS] [--tracker_name {yolov7,yoloS}] [--output_dir OUTPUT_DIR] [--output_video OUTPUT_VIDEO] [--auto_detect] |
| [--background_color BACKGROUND_COLOR] |
| |
| options: |
| -h, --help show this help message and exit |
| --video_filename VIDEO_FILENAME |
| path to the video |
| --dir_frames DIR_FRAMES |
| path to the directory in which all input frames will be stored |
| --image_start IMAGE_START |
| first image to be stored |
| --image_end IMAGE_END |
| last image to be stored, last one if 0 |
| --bbox_file BBOX_FILE |
| path to the bounding box text file |
| --skip_vid2im whether to write the video frames as images |
| --mobile_sam_weights MOBILE_SAM_WEIGHTS |
| path to MobileSAM weights |
| --tracker_name {yolov7,yoloS} |
| tracker name |
| --output_dir OUTPUT_DIR |
| directory to store the output frames |
| --output_video OUTPUT_VIDEO |
| path to store the output video |
| --auto_detect whether to use a bounding box to force the model to segment the object |
| --background_color BACKGROUND_COLOR |
| background color for the output (hex) |
| ``` |
|
|
| ## Example |
|
|
| The following command line is a working example from a video stored in the repo: |
|
|
| ```bash |
| python3 main.py --video_filename assets/example.mp4 --dir_frames ./frames --bbox_file bbox.txt --mobile_sam_weights models/mobile_sam.pt --output_dir output_frames --output_video output.mp4 |
| ``` |
|
|
| ## How to Contribute |
|
|
| We welcome contributions from the community! To ensure a consistent code style, we ask contributors to follow these guidelines: |
|
|
| ### Code Format |
|
|
| Please format your code using the `black` code formatter. |
|
|
| #### Installation |
|
|
| ```bash |
| pip install black |
| ``` |
|
|
| #### Usage |
|
|
| To format your code: |
|
|
| ```bash |
| black . |
| ``` |
|
|
| This setup will help maintain a consistent coding style throughout the project. |
|
|