Как я должен положить путь к папке набора данных в этом коде Python - PullRequest
0 голосов
/ 29 марта 2019

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

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 29 марта 2019

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

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

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

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

convert(gf,tf)

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

EDIT:

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

EDIT3:

Последнее предложение, о котором я могу подумать, так это то, что вы просто запускаете код напрямую, а не вызываете его, а затем просто определяете пути в начале кода между import и 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 = []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...