# OpenCV-Webcam **Repository Path**: CV_Lab/opencv_webcam ## Basic Information - **Project Name**: OpenCV-Webcam - **Description**: 🚀 基于 OpenCV 的 Webcam 脚本程序,适用于计算机视觉数据采集,实时视频帧收集等。具有安装便捷、操作简单、跨平台等特点。 - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: https://gitee.com/PyCVer - **GVP Project**: No ## Statistics - **Stars**: 221 - **Forks**: 79 - **Created**: 2021-12-29 - **Last Updated**: 2025-04-07 ## Categories & Tags **Categories**: cv **Tags**: OpenCV, Webcam, 计算机视觉, 数据采集, YOLOv5 ## README 中文简体|[English](./README.en.md)
Simple Icons

基于OpenCV的Webcam程序,适用于计算机视觉数据采集,实时视频帧收集等。

具有安装便捷、操作简单、跨平台等特点。

code check Releases Version PyPI Docker Podman Jupyter License

pre-commit Python Version PyPI Package Health security bandit

star fork Docker Pulls PyPI All Downloads

## 🚀 作者简介 曾逸夫,从事人工智能研究与开发;主研领域:计算机视觉;[YOLOv8官方开源项目代码贡献人](https://github.com/ultralytics/ultralytics/graphs/contributors);[YOLOv5官方开源项目代码贡献人](https://github.com/ultralytics/yolov5/graphs/contributors);[YOLOv5 v6.1代码贡献人](https://github.com/ultralytics/yolov5/releases/tag/v6.1);[YOLOv5 v6.2代码贡献人](https://github.com/ultralytics/yolov5/releases/tag/v6.2);[YOLOv5 v7.0代码贡献人](https://github.com/ultralytics/yolov5/releases/tag/v7.0);[Gradio官方开源项目代码贡献人](https://github.com/gradio-app/gradio/graphs/contributors) ❤️ Github:https://github.com/Zengyf-CVer 🔥 YOLOv8 官方开源项目PR ID: - Fix YOLOv8 Chinese introduction:https://github.com/ultralytics/ultralytics/pull/219 - Add codespell and upgrade some components:https://github.com/ultralytics/ultralytics/pull/599 - Add pycln:https://github.com/ultralytics/ultralytics/pull/7141 - Fix heatmap width and height parameter bug:https://github.com/ultralytics/ultralytics/pull/7368 - ultralytics 8.0.237 cv2.CAP_PROP fix and in_counts and out_counts displays:https://github.com/ultralytics/ultralytics/pull/7380 💡 Ultralytics v8.1.0 代码贡献链接: - https://github.com/ultralytics/ultralytics/releases/tag/v8.1.0 🔥 YOLOv5 官方开源项目PR ID: - Save \*.npy features on detect.py `--visualize`:https://github.com/ultralytics/yolov5/pull/5701 - Fix `detect.py --view-img` for non-ASCII paths:https://github.com/ultralytics/yolov5/pull/7093 - Fix Flask REST API:https://github.com/ultralytics/yolov5/pull/7210 - Add yesqa to precommit checks:https://github.com/ultralytics/yolov5/pull/7511 - Add mdformat to precommit checks and update other version:https://github.com/ultralytics/yolov5/pull/7529 - Add TensorRT dependencies:https://github.com/ultralytics/yolov5/pull/8553 - Add paddle tips:https://github.com/ultralytics/yolov5/pull/9502 💡 YOLOv5 v6.1 & v6.2 & v7.0 代码贡献链接: - https://github.com/ultralytics/yolov5/releases/tag/v6.1 - https://github.com/ultralytics/yolov5/releases/tag/v6.2 - https://github.com/ultralytics/yolov5/releases/tag/v7.0 🔥 Gradio 官方开源项目PR ID: - Create a color generator demo:https://github.com/gradio-app/gradio/pull/1872

🚀更新走势

- `2022-07-26` **⚡ [opencv-webcam-script v0.9 发行版](https://gitee.com/CV_Lab/opencv_webcam/releases/v0.9)正式上线** - `2022-07-26` **⚡ [opencv-webcam-script v0.9 Podman版](./tutorial/ows_podman.md)正式上线** - `2022-07-26` **⚡ [opencv-webcam-script v0.9 docker版](https://hub.docker.com/r/zengdockerdocker/opencv-webcam-script)正式上线** - `2022-07-26` **⚡ [opencv-webcam-script v0.9.1 PyPI版](https://pypi.org/project/opencv-webcam-script/0.9.1/)正式上线** - `2022-07-26` **⚡ [opencv-webcam-script v0.9 Jupyter版](./tutorial/ows_jupyter.ipynb)正式上线** - ⚡ **[opencv-webcam-script 历史版本](./v_change)**

💎项目用途

### 🔥 快速制作目标检测数据集 #### 📌 项目1:[基于YOLOv5的手势识别demo](GestureData_yolov5.md)

💡项目结构

``` . ├── opencv_webcam # 项目名称 │ ├── utils # 工具包 │ │ ├── __init__.py # 工具包初始化 │ │ ├── args_yaml.py # 指令管理 │ │ ├── compress.py # 压缩管理 │ │ ├── frame_opt.py # 帧保存管理 │ │ ├── check_opt.py # 检查管理 │ │ ├── fonts_opt.py # 字体管理 │ │ ├── plot.py # 作图管理 │ │ ├── rm_bgColor.py # 图片背景管理 │ │ ├── log.py # 日志管理 │ │ ├── path_opt.py # 保存路径管理 │ │ ├── sys_opt.py # 系统管理 │ │ └── time_format.py # 时间格式化 │ ├── tutorial # ows教程 │ │ ├── ows_bash.md # ows Bash版教程 │ │ ├── ows_pypi.md # ows PyPI版教程 │ │ ├── ows_docker.md # ows docker版教程 │ │ ├── ows_podman.md # ows Podman版教程 │ │ └── ows_jupyter.ipynb # ows Jupyter版教程 │ ├── v_change # 版本历史 │ │ ├── v01_v05_change.md # v0.1-v0.5版本变更 │ │ ├── v06_change.md # v0.6版本变更 │ │ ├── v07_change.md # v0.7版本变更 │ │ ├── v08_change.md # v0.8版本变更 │ │ └── README.md # 版本历史说明 │ ├── __init__.py # 项目初始化 │ ├── opencv_webcam.py # 脚本主运行文件 │ ├── LICENSE # 项目许可 │ ├── CodeCheck.md # 代码检查 │ ├── CodeSecurity.md # 代码安全检测 │ ├── setup.sh # 环境安装脚本 │ ├── fonts.sh # 字体下载脚本 │ ├── Dockerfile # docker构建文件 │ ├── setup.cfg # pre-commit CI检查源配置文件 │ ├── .pre-commit-config.yaml # pre-commit配置文件 │ ├── .gitignore # git忽略文件 │ ├── .dockerignore # docker忽略文件 │ ├── GestureData_yolov5.md # Gesture&YOLOv5 demo │ ├── README.md # 项目说明 │ ├── README.en.md # 项目说明(英文版) │ └── requirements.txt # 脚本依赖包 ```

🔥安装教程

❤️ OWS提供了**5**种安装方法。点击下面对应的logo,了解详细的安装与使用教程。
### ✅ 方法一:Linux Shell安装(开发版) #### 🔥 [opencv-webcam-script Bash版 详细教程](./tutorial/ows_bash.md) 📌 第一步:克隆项目 ```shell git clone https://gitee.com/CV_Lab/opencv_webcam.git # 克隆项目 ``` 📌 第二步:创建虚拟环境 ```shell # 创建conda虚拟环境,以python 3.8为例 conda create -n ows python==3.8 # 虚拟环境名称为ows conda activate ows # 激活虚拟环境 ``` 📌 第三步:安装脚本 ```shell pip install --upgrade pip # 升级pip pip install -r ./requirements.txt -U # 安装OpenCV Webcam脚本 ``` 📌 第二步和第三步也可以通过[setup.sh](./setup.sh) 执行 ```shell bash ./setup.sh ``` ❗ 注意:**OWS v0.6** 以上的版本需要在[**Python>=3.8.0**](https://www.python.org/) 的环境下运行 ### ✅ 方法二:pip 快速安装(PyPI版) #### 🔥 [opencv-webcam-script PyPI版 详细教程](./tutorial/ows_pypi.md) #### 🎨 简易教程 📌 第一步:创建ows虚拟环境,参见方法一 📌 第二步:执行pip指令 ```shell pip install opencv-webcam-script==0.9.1 ``` 📌 第三步:编写python程序 ```python from opencv_webcam.opencv_webcam import webcam_opencv # ------------例举几个功能------------ webcam_opencv() # 常规调用 webcam_opencv(is_autoSaveFrame=True) # 自动保存帧 webcam_opencv(is_autoSaveFrame=True, is_compress=True) # 压缩帧 ``` ❗ 注意:`==`后面一定要加**版本号**。如果执行`pip install opencv-webcam-script` 可能安装为测试版,会影响使用。 ### ✅ 方法三:docker 镜像安装(docker版) #### 🔥 [opencv-webcam-script docker版 详细教程](./tutorial/ows_docker.md) #### 🎨 简易教程 📌 第一步:下载镜像 ```shell sudo docker pull zengdockerdocker/opencv-webcam-script:v0.9 # 镜像拉取 ``` 📌 第二步:创建容器 ```shell xhost +local:root # 允许root用户访问正在运行的X服务器(重要) # 创建名称为ows的容器 sudo docker run --name=ows --ipc=host -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY --device=/dev/video0:/dev/video0 zengdockerdocker/opencv-webcam-script:v0.9 ``` 📌 第三步:运行程序 ```shell python opencv_webcam.py # 运行脚本程序 python opencv_webcam.py -isasf # 自动保存帧 # 获取docker帧数据到本机 sudo docker cp 容器名称:容器目录 本机宿主目录 sudo docker cp ows:/usr/src/app/WebcamFrame /home/用户名 # 举例 ``` ❗ 注意:启动ows容器前,需要执行`xhost +local:root` 指令,确保连接到本地设备。 ### ✅ 方法四:Podman 安装(Podman版) #### 🔥 [opencv-webcam-script Podman版 详细教程](./tutorial/ows_podman.md) #### 🎨 简易教程 📌 第一步:下载镜像 ```shell sudo podman pull docker.io/zengdockerdocker/opencv-webcam-script:v0.9 # 镜像拉取 ``` 📌 第二步:创建容器 ```shell xhost +local:root # 允许root用户访问正在运行的X服务器(重要) # 创建名称为ows的容器 sudo podman run --name=ows --ipc=host -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY --device=/dev/video0:/dev/video0 docker.io/zengdockerdocker/opencv-webcam-script:v0.9 ``` 📌 第三步:运行程序 ```shell python opencv_webcam.py # 运行脚本程序 python opencv_webcam.py -isasf # 自动保存帧 # 获取Podman帧数据到本机 sudo podman cp 容器名称:容器目录 本机宿主目录 sudo podman cp ows:/usr/src/app/WebcamFrame /home/用户名 # 举例 ``` ❗ 注意:启动ows容器前,需要执行`xhost +local:root` 指令,确保连接到本地设备。 ### ✅ 方法五:Jupyter 安装(Jupyter版) #### 🔥 [opencv-webcam-script Jupyter版 详细教程](./tutorial/ows_jupyter.ipynb) #### 🎨 简易教程 📌 第一步:安装 ```shell # 首先手动创建虚拟环境 # conda create -n ows python==3.8 # 虚拟环境名称为ows # conda activate ows # 激活虚拟环境 !git clone https://gitee.com/CV_Lab/opencv_webcam.git # 克隆 %cd opencv_webcam %pip install -qr requirements.txt -U # 安装 ``` ❗ 注意:安装完成后,将`ows_jupyter.ipynb`放入`opencv_webcam`目录中进行下面的操作 📌 第二步:运行 ```shell !python opencv_webcam.py # 默认按q键退出 !python opencv_webcam.py -isasf # 视频帧自动保存 ``` **注:[Jupyter版ows](https://gitee.com/CV_Lab/opencv_webcam/blob/master/tutorial/ows_jupyter.ipynb)程序通过`Ctrl+Enter` 即可运行单元指令**

⚡使用教程

❤️ **OWS v0.9** Bash Shell显示信息高度集成[rich](https://github.com/Textualize/rich)组件
OWS v0.9 Bash Shell显示信息
#### 💡 常规启动 ```shell # 启动ows程序 python opencv_webcam.py ``` ❗ 提示:启动ows程序后,首先进入**倒计时模式**,有**150帧**倒计时准备时间,会提示用户将设备调整到合适的位置,准备开始。
#### 💡 设备选择 ```shell # 多摄像头切换示例,默认为0 python opencv_webcam.py -dev 0 python opencv_webcam.py -dev 1 python opencv_webcam.py -dev 2 # RTSP python opencv_webcam.py -dev "rtsp://username:password@xxx.xxx.xxx" ``` ❗ 注意:进行**RTSP**操作时,尽可能在**Linux Shell**中将RTSP地址用**双引号**标注。 #### 💡 设置退出键 ```shell # 默认按q键退出 python opencv_webcam.py -q z # 设置z键退出 python opencv_webcam.py -q k # 设置k键退出 ```
#### 💡 自动保存帧 ```shell python opencv_webcam.py -isasf ``` ❗ 提示:系统根据摄像头保存的图片大小和本地磁盘容量,计算出**预保存的图片数量**
#### 💡 每隔n帧保存一次帧 ```shell # 每隔10帧保存一次帧 python opencv_webcam.py -isasf -fns 10 ``` #### 💡 手动保存帧 ```shell # 默认按a键捕获一帧 python opencv_webcam.py -ishsf ``` #### 💡 自定义捕获键 ```shell # 设置z键为捕获键,默认为a键 python opencv_webcam.py -ishsf -fck z ``` #### 💡 重塑帧尺寸(自定义宽高) ```shell # 重塑宽度300 高度200 python opencv_webcam.py -isasf -isrf -rf 300,200 # 自动版 python opencv_webcam.py -ishsf -isrf -rf 300,200 # 手动版 ``` #### 💡 重塑帧尺寸(自定义宽高缩放比) ```shell # 宽高缩放比为0.5 python opencv_webcam.py -isasf -isrf -rrf 0.5 # 自动版 python opencv_webcam.py -ishsf -isrf -rrf 0.5 # 手动版 ``` #### 💡 自定义保存路径 ```shell # 设置保存路径,默认保存路径为WebcamFrame python opencv_webcam.py -fsd custom_dir -isasf # 以自动版为例 ``` #### 💡 自定义帧目录名称 ```shell # 设置帧目录名称,默认保存路径为frames python opencv_webcam.py -fdn frames_custom -isasf # 以自动版为例 ``` #### 💡 自定义帧名前缀 ```shell # 设置帧图片的前缀名称 python opencv_webcam.py -isasf -fnp webcam # 以自动版为例 ``` #### 💡 设置帧保存格式 ```shell # 设置JPG质量为100,默认为95 python opencv_webcam.py -isasf -fss jpg -jq 100 # 设置PNG质量为5,默认为3 python opencv_webcam.py -isasf -fss png -pq 5 ``` #### 💡 设置暂停键 ```shell # 设置w键为暂停键,默认为p键 python opencv_webcam.py -p w # 按任意键继续 ``` #### 💡 设置保存帧数 ```shell # 设置保存100帧 python opencv_webcam.py -isasf -afn 100 ``` #### 💡 调整窗体尺寸 ```shell # 手动调整窗体尺寸(v0.9) python opencv_webcam.py -isrw ```
#### 💡 日志设置 ```shell # 日志文件默认保存在项目根目录,ows.log python opencv_webcam.py # 设置日志文件名称及类型,类型包括.log、.txt、.data python opencv_webcam.py -ln ows02.txt # 设置日志保存方式,,默认为追加模式 python opencv_webcam.py -lm w # 设置为覆盖模式 ```
#### 💡 视频帧压缩 ```shell # 常规压缩,默认ows.zip(以自动版为例) python opencv_webcam.py -isasf -isc # 自定义压缩文件名称 python opencv_webcam.py -isasf -isc -cn ows02 # 自动命名压缩文件 python opencv_webcam.py -isasf -isc -isacn # 自定义压缩模式,默认为写覆盖 python opencv_webcam.py -isasf -isc -cs tar -cm w:gz # tar压缩 python opencv_webcam.py -isasf -isc -cm a # 追加模式(a模式仅限zip) 注:该指令仅限v0.4 ```
#### 💡 去除背景色(抠绿、抠蓝) ```shell # 去除背景色,默认为绿色 python opencv_webcam.py -isasf -isrbgc # 选择背景色模式 python opencv_webcam.py -isasf -isrbgc -rbgcm green # 抠绿 python opencv_webcam.py -isasf -isrbgc -rbgcm blue # 抠蓝 ``` ❗ 注意:为了达到去除背景色的**最佳效果**,背景色尽量不要混入白光,尽可能使背景色保持高的饱和度。
#### 💡 日期-帧数图 ❤️ 该功能在每次运行OWS程序时,根据`date_time_frames.csv`文件会自动生成**日期-帧数图**。 ##### ✨ 操作示例 📌 运行指令 ```shell python opencv_webcam.py -isasf -fdn tiger python opencv_webcam.py -isasf -fdn lion python opencv_webcam.py -isasf -fdn elephant ``` 📌 日期-帧数图目录结构 ```shell . ├── opencv_webcam # 项目名称 │ ├── DateFrames # 日期-帧数图目录 │ │ ├── 2022-02-21 # 日期目录 │ │ │ ├── lion.png # lion类别日期-帧数图 │ │ │ ├── elephant.png # elephant类别日期-帧数图 │ │ │ └── tiger.png # tiger类别日期-帧数图 │ ├── date_time_frames.csv # 日期-帧数图日志 │ ├── .... # 其他文件 ```
📌 date_time_frames.csv日志文件 ```shell 2022-02-21 07:48:41,58,lion,WebcamFrame 2022-02-21 07:49:52,68,lion,WebcamFrame 2022-02-21 07:50:59,37,tiger,WebcamFrame 2022-02-21 07:51:14,59,elephant,WebcamFrame 2022-02-21 07:51:30,72,tiger,WebcamFrame 2022-02-21 07:51:42,116,lion,WebcamFrame 2022-02-21 07:51:54,127,elephant,WebcamFrame 2022-02-21 07:52:16,122,elephant,WebcamFrame 2022-02-21 07:52:27,106,lion,WebcamFrame 2022-02-21 07:52:38,127,tiger,WebcamFrame 2022-02-21 07:53:00,78,elephant,WebcamFrame 2022-02-21 07:53:10,107,tiger,WebcamFrame 2022-02-21 07:53:21,95,lion,WebcamFrame 2022-02-21 07:53:42,59,lion,WebcamFrame 2022-02-21 07:53:50,74,tiger,WebcamFrame 2022-02-21 07:53:59,97,elephant,WebcamFrame 2022-02-21 07:54:58,125,elephant,WebcamFrame 2022-02-21 07:55:11,79,lion,WebcamFrame 2022-02-21 07:55:20,110,tiger,WebcamFrame 2022-02-21 07:55:29,146,tiger,WebcamFrame 2022-02-21 07:55:55,50,tiger,WebcamFrame 2022-02-21 07:56:02,153,lion,WebcamFrame 2022-02-21 07:56:16,108,elephant,WebcamFrame 2022-02-21 07:56:38,121,tiger,WebcamFrame ```

📌 lion.png
📌 elephant.png
📌 tiger.png

#### 💡 指令查询 ```shell # 查询脚本参数 python opencv_webcam.py --help ```
📌 指令查询结果 ```shell usage: opencv_webcam.py [-h] [--device DEVICE] [--quit QUIT] [--is_autoSaveFrame] [--is_handSaveFrame] [--is_resizeFrame] [--frame_saveDir FRAME_SAVEDIR] [--frame_dirName FRAME_DIRNAME] [--frame_nSave FRAME_NSAVE] [--frame_capKey FRAME_CAPKEY] [--resize_frame RESIZE_FRAME] [--resizeRatio_frame RESIZERATIO_FRAME] [--frame_namePrefix FRAME_NAMEPREFIX] [--frame_saveStyle FRAME_SAVESTYLE] [--jpg_quality JPG_QUALITY] [--png_quality PNG_QUALITY] [--pause PAUSE] [--auto_frameNum AUTO_FRAMENUM] [--logName LOGNAME] [--logMode LOGMODE] [--is_compress] [--compressStyle COMPRESSSTYLE] [--is_autoCompressName] [--compressName COMPRESSNAME] [--compressMode COMPRESSMODE] [--is_rmbgColor] [--rmbgColorMode RMBGCOLORMODE] [--is_resizeWindow] OpenCV Webcam Script v0.9 optional arguments: -h, --help show this help message and exit --device DEVICE, -dev DEVICE device index for webcam, 0 or rtsp --quit QUIT, -q QUIT quit key for webcam --is_autoSaveFrame, -isasf is auto save frame --is_handSaveFrame, -ishsf is hand save frame --is_resizeFrame, -isrf is resize frame --frame_saveDir FRAME_SAVEDIR, -fsd FRAME_SAVEDIR save frame dir --frame_dirName FRAME_DIRNAME, -fdn FRAME_DIRNAME save frame dir name --frame_nSave FRAME_NSAVE, -fns FRAME_NSAVE n frames save a frame (auto save frame) --frame_capKey FRAME_CAPKEY, -fck FRAME_CAPKEY frame capture key (hand save frame) --resize_frame RESIZE_FRAME, -rf RESIZE_FRAME resize frame save --resizeRatio_frame RESIZERATIO_FRAME, -rrf RESIZERATIO_FRAME resize ratio frame save --frame_namePrefix FRAME_NAMEPREFIX, -fnp FRAME_NAMEPREFIX frame name prefix --frame_saveStyle FRAME_SAVESTYLE, -fss FRAME_SAVESTYLE frame save style --jpg_quality JPG_QUALITY, -jq JPG_QUALITY frame save jpg quality (0-100) default 95 --png_quality PNG_QUALITY, -pq PNG_QUALITY frame save jpg quality (0-9) default 3 --pause PAUSE, -p PAUSE webcam pause --auto_frameNum AUTO_FRAMENUM, -afn AUTO_FRAMENUM auto save number of frames --logName LOGNAME, -ln LOGNAME log save name --logMode LOGMODE, -lm LOGMODE log write mode --is_compress, -isc is compress file --compressStyle COMPRESSSTYLE, -cs COMPRESSSTYLE compress style --is_autoCompressName, -isacn is auto compress name --compressName COMPRESSNAME, -cn COMPRESSNAME compress save name --compressMode COMPRESSMODE, -cm COMPRESSMODE compress save mode, tar w:gz --is_rmbgColor, -isrbgc is remove background color --rmbgColorMode RMBGCOLORMODE, -rbgcm RMBGCOLORMODE remove background color mode --is_resizeWindow, -isrw is resize window ```
### 💬 技术交流 - 如果你发现任何OpenCV Webcam Script存在的问题或者是建议, 欢迎通过[Gitee Issues](https://gitee.com/CV_Lab/opencv_webcam/issues)给我提issues。 - 欢迎加入CV Lab技术交流群