# DancingOttoMatches **Repository Path**: chen_fang_yi/dancing-otto-matches ## Basic Information - **Project Name**: DancingOttoMatches - **Description**: 基于OpenPose的BODY25模型的跳舞电棍生成 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2022-07-31 - **Last Updated**: 2023-02-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 基于OpenPose的BODY25模型的跳舞电棍生成 Bilibili : [@路边的水果摊子](https://space.bilibili.com/28334037) 本项目基于OpenPose识别的人体Keypoint生成一个小人视频,并有着电棍的头。 #### 安装 1. 实验时使用的软件环境配置如下表所示。 | 名称 | 版本 | | -------- | ------ | | Python | 3.8.1 | | Numpy | 1.19.3 | | OpenCV | 4.0.5 | | pykalman | 0.9.5 | 使用以下命令来安装依赖。 ```shell pip install numpy pip install opencv-contrib-python pip install pykalman ``` 2. 下载并安装OpenPose。 [OpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation](https://github.com/CMU-Perceptual-Computing-Lab/openpose) #### 运行 1. 运行OpenPose,生成关键点文件,支持生成带手部的关键点文件(--hand)。***由于本程序不支持多个目标***,生成关键点文件时建议进行如下设置以限制关键点文件所识别的人物数量:--tracking 0 --number_people_max 1。具体的过程请参考[OpenPose文档](https://cmu-perceptual-computing-lab.github.io/openpose/web/html/doc/index.html) 2. 将包含关键点文件的文件夹拷贝至本程序目录。 3. 编写配置文件(JSON格式)。目录下的config.json展示了使得程序运行的最基本配置。 ```json {"source_path": "output","output_path": "output_out"} ``` 您需要修改source_path为关键点文件夹的名称,output_path则指明了输出的位置。如果您没有指定output_path,他将自动生成在您source_path下的output文件夹中。 有一些额外的参数可以供您选择,将在下方的[配置参数](#配置参数)中一并列出。 4. 在本程序目录下运行以下命令。 ```shell python run.py --config 配置文件的路径 ``` 您也可以不填写--config的值,默认选择config.json作为配置文件运行。 5. 等待一会后,您就可以看到一个小人开始跳舞了。等待运行结束,您就可以在output_path的位置下看到一个视频文件了。 #### 更进一步 如果您希望修改电棍的脑袋为其他形象,请替换img目录下的图像。 #### 配置参数 ##### 基本 | 参数名 | 类型 | 默认值 | 说明 | | ----------- | ---- | ------------------------ | -------------------- | | source_path | str | **必填项** | 关键点文件夹的名称。 | | output_path | str | {{*source_path*}}/output | 输出目录名称。 | | w | int | 1920 | 输出图像宽度。 | | h | int | 1080 | 输出图像高度。 | ##### 火柴人行为配置 | 参数名 | 类型 | 默认值 | 说明 | | -------------- | ---- | ------------- | ------------------------------------------------------------ | | draw_hand | bool | false | 是否绘制手部。需要在Openpose生成关键点时选择生成手部关键点。 | | draw_border | bool | false | 是否绘制描边。仅在部分部位进行描边。 | | body_size | int | 40 | 躯干尺寸。 | | other_size | int | 10 | 肢体尺寸。 | | hand_size | int | 1 | 手指尺寸。 | | border | int | 2 | 描边尺寸。 | | color | str | "0,0,0" | 颜色。三位数分别为R,G,B。请使用英文逗号分隔。 | | border_color | str | "255,255,255" | 描边颜色。三位数分别为R,G,B。请使用英文逗号分隔。 | | head_stabilize | bool | true | *实验性功能*,关闭后,将使得电棍的头部开始随意晃动、旋转。 | ##### 平滑选项 *如果Openpose生成的关键点不完整,启动下面的平滑选项可能会导致一些输出上的异常情况。* | 参数名 | 类型 | 默认值 | 说明 | | -------------- | ----- | ------ | ------------------------------------------------------------ | | is_kalman | bool | true | 是否启用卡尔曼滤波。可以显著降低抖动。 | | is_missing_fix | bool | true | 是否启用强制异常值修复。可以按照相邻值强制修复异常值/缺失值,增强卡尔曼滤波的效果。 | | kalman_d | float | 1.0 | 卡尔曼滤波阻尼。越大关键点的运动越稳定,但同时丢失的细节也越多。**必须为浮点数。** | | missing_type | int | 1 | 异常值修复类型。这将决定正常值的置信区间。设置为1时,置信区间平均值±3倍的标准差,仅修复极端异常值。设置为其他值时,置信区间平均值±2倍的标准差,修复一般异常值。 | ##### 视频输出 | 参数名 | 类型 | 默认值 | 说明 | | ------------- | ---- | ----------- | ------------------ | | save_pictures | bool | false | 是否保留逐帧图像。 | | fps | int | 25 | 视频帧率。 | | video_name | str | "video.avi" | 视频名称。 |