Как я должен указать путь к папке dataset в этом коде Python

#python #path #gesture-recognition

#python #путь #распознавание жестов

Вопрос:

Итак, я работаю над этим проектом Python по распознаванию жестов на языке жестов из git hub. Я последовал за файлом read me и сохранил (в корневой папке проекта) все файлы dataset в двух отдельных папках с именами 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 «файл.
Я не могу понять, куда поместить пути к файлам моего набора данных.

 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: %sn" % 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 = 

        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) amp; 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 проекта.

Ответ №1:

Итак, я относительно новичок в python, но фрагмент кода, которым вы поделились, представляет собой функцию с входными данными gesture_folder и target_folder, поэтому с учетом сказанного вам нужно будет посмотреть, где вызывается функция convert() в вашем общем коде, а затем проверить, какие входные данные находятся внутри вызова функции.

Итак, если это выглядит так, замените пути в вызове функции

 convert("C:\Usergesturefolder","C:\Usertargetfolder" )
  

Но если это выглядит так

 convert(gf,tf)
  

затем вам нужно будет работать в обратном направлении и найти, где объявлены gf и tf, и заменить пути там

Редактировать:

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

Если замена этого на ваши пути не работает, попробуйте заменить все обратные косые черты на или /

EDIT2:

Итак, я просмотрел 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:

Последнее предложение, о котором я могу подумать, заключается в том, что, поскольку вы просто запускаете код напрямую, а не вызываете его, просто определите пути в начале кода между imports и 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 = []
  

Комментарии:

1. Функция вызывается в конце фрагмента кода, которым я уже поделился.

2. И он использует аргументы для ввода периметров для функционирования. Я пытался указать туда пути к своим папкам, но это не сработало: (

3. По-видимому, недостаточно далеко прокрутил. Я обновил свой ответ. Вы сказали, что уже пробовали это, но пробовали ли вы с двойной обратной косой чертой или /

4. Это все то же самое. Просто когда я указываю путь, он говорит: «Требуются следующие аргументы: C:\Usergesturefolder, C:\Usertargetfolder »

5. Я пробовал с двойными косыми чертами, а также с прямой и обратной косыми чертами, но безрезультатно