首页 > 解决方案 > 我应该如何将数据集文件夹路径放在这个 python 代码中

问题描述

所以我正在研究来自 git hub 的手语手势识别 python 项目。我按照自述文件并将所有数据集文件保存(在项目的根文件夹中)在两个单独的文件夹中,分别命名为 train_videos 和 test_videos 用于机器学习。

现在我收到以下错误:

usage: video-to-frame.py [-h] gesture_folder target_folder
video-to-frame.py: error: the following arguments are required: gesture_folder, target_folder

以下是“video-to-frame.py”文件中的代码。我不知道在哪里放置我的数据集 fodler 的路径。

import cv2
import os
import pickle
from os.path import join, exists
import handsegment as hs
import argparse
from tqdm import tqdm

hc = []


def convert(gesture_folder, target_folder):
    rootPath = os.getcwd()
    majorData = os.path.abspath(target_folder)

    if not exists(majorData):
        os.makedirs(majorData)

    gesture_folder = os.path.abspath(gesture_folder)

    os.chdir(gesture_folder)
    gestures = os.listdir(os.getcwd())

    print("Source Directory containing gestures: %s" % gesture_folder)
    print("Destination Directory containing frames: %s\n" % majorData)

    for gesture in tqdm(gestures, unit='actions', ascii=True):
        gesture_path = os.path.join(gesture_folder, gesture)
        os.chdir(gesture_path)

        gesture_frames_path = os.path.join(majorData, gesture)
        if not os.path.exists(gesture_frames_path):
            os.makedirs(gesture_frames_path)

        videos = os.listdir(os.getcwd())
        videos = [video for video in videos if(os.path.isfile(video))]

        for video in tqdm(videos, unit='videos', ascii=True):
            name = os.path.abspath(video)
            cap = cv2.VideoCapture(name)  # capturing input video
            frameCount = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
            lastFrame = None

            os.chdir(gesture_frames_path)
            count = 0

            # assumption only first 200 frames are important
            while count < 201:
                ret, frame = cap.read()  # extract frame
                if ret is False:
                    break
                framename = os.path.splitext(video)[0]
                framename = framename + "_frame_" + str(count) + ".jpeg"
                hc.append([join(gesture_frames_path, framename), gesture, frameCount])

                if not os.path.exists(framename):
                    frame = hs.handsegment(frame)
                    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                    lastFrame = frame
                    cv2.imwrite(framename, frame)

                if cv2.waitKey(1) & 0xFF == ord('q'):
                    break
                count += 1

            # repeat last frame until we get 200 frames
            while count < 201:
                framename = os.path.splitext(video)[0]
                framename = framename + "_frame_" + str(count) + ".jpeg"
                hc.append([join(gesture_frames_path, framename), gesture, frameCount])
                if not os.path.exists(framename):
                    cv2.imwrite(framename, lastFrame)
                count += 1

            os.chdir(gesture_path)
            cap.release()
            cv2.destroyAllWindows()

    os.chdir(rootPath)


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Extract Individual Frames from gesture videos.')
    parser.add_argument('gesture_folder', help='Path to folder containing folders of videos of different gestures.')
    parser.add_argument('target_folder', help='Path to folder where extracted frames should be kept.')
    args = parser.parse_args()
    convert(args.gesture_folder, args.target_folder)

是项目的 git hub 存储库的链接。

标签: pythonpathgesture-recognition

解决方案


所以我对 python 比较陌生,但是你分享的代码片段是一个函数,输入为 gesture_folder 和 target_folder 所以说你需要查看函数 convert() 在你的整体代码中被调用的位置,然后检查什么输入在函数调用内部。

因此,如果看起来像这样,则替换函数调用中的路径

convert("C:\\User\gesturefolder","C:\\User\targetfolder" )

但如果它看起来像这样

convert(gf,tf)

那么您将需要向后工作并找到 gf 和 tf 的声明位置并替换那里的路径

编辑:

parser.add_argument('C:\\User\gesturefolder', help='Path to folder containing folders of videos of different gestures.')
parser.add_argument('C:\\User\targetfolder', help='Path to folder where extracted frames should be kept.')

如果用你的路径替换它不起作用,那么尝试用 \ 或 / 替换所有反斜杠

编辑2:

所以我查看了 Github,似乎在调用 python 代码时提供了路径

video-to-frame.py [-h] gesture_folder target_folder

你有没有尝试过这样的事情

gesture_folder="C:\\..." #gesture folder path
target_folder="C:\\..." #target folder path

video-to-frame.py [-h] gesture_folder target_folder

编辑3:

我能想到的最后一个建议是,因为您只是直接运行代码而不是调用它,因此只需在导入和 hc 之间的代码开头定义路径

import cv2
import os
import pickle
from os.path import join, exists
import handsegment as hs
import argparse
from tqdm import tqdm

gesture_folder="C:\\..." #gesture folder path
target_folder="C:\\..." #target folder path

hc = []

推荐阅读