簡體   English   中英

如何從 Python 腳本中運行 Open Pose 二進制文件 (.exe)?

[英]How to run Open Pose binary (.exe) from within a Python script?

我正在制作一個身體跟蹤應用程序,如果用戶選擇跟蹤他們的身體動作,我想在其中運行 Open Pose。 OpenPose 二進制文件可以像這樣運行:

bin\OpenPoseDemo.exe --write_json 'path\to\dump\output'

因此,在我的 Python 腳本中,我希望有一行代碼可以運行 Open Pose,而不必通過打開單獨的命令行 window 來要求用戶手動運行 OpenPose。 為此,我嘗試過:

import os
os.popen(r"C:\path\to\bin\OpenPoseDemo.exe --write_json 'C:\path\to\dump\output'")

但這會產生以下錯誤:

Error:
Could not create directory: 'C:\Users\Admin\Documents\Openpose\. Status error = -1. Does the parent folder exist and/or do you have writing access to that path?

我猜這意味着 OpenPose 只能通過進入bin子目錄所在的openpose目錄來打開。 所以,我寫了一個包含這一行的 shell 腳本:

bin\OpenPoseDemo.exe --write_json 'C:\path\to\dump\output'

並保存為run_openpose_binary.shopenpose目錄下(即bin所在目錄)。

然后我嘗試從我的 Python 腳本中運行這個 shell 腳本,如下所示:

import subprocess
subprocess.call(['sh', r'C:\path\to\openpose\run_openpose_binary.sh'])

這給出了以下錯誤:

FileNotFoundError: [WinError 2] The system cannot find the file specified

我還嘗試了以下方法:

os.popen(r"C:\path\to\openpose\run_openpose_binary.sh")

os.system(r"C:\path\to\openpose\run_openpose_binary.sh")

這些不會產生任何錯誤,而是彈出一個空白 window 並關閉。

所以,我的問題是,如何從我的 Python 腳本中運行 OpenPoseDemo.exe?

對於您的最后一種方法,您缺少 os.popen 的返回值,即 pipe。 所以,你需要的是這樣的:

# untested as I don't have access to a Windows system
import os


with os.popen(r"/full/path/to/sh C:/path/to/openpose/run_openpose_binary.sh") as p:
    # pipes work like files
    output_of_command = p.read().strip() # this is a string

或者,如果您想證明自己的未來,另一種選擇是:

# untested as I don't have access to a Windows system
popen = subprocess.Popen([r'/full/path/to/sh.exe', r'/full/path/to/run_openpose_binary.sh')],  stdin=subprocess.PIPE, stdout=subprocess.PIPE,encoding='utf-8')
stdout, stderr = popen.communicate(input='')

如果您有進一步的困難,請發表評論。

我不得不多次打這場仗,我找到了解決辦法。 這可能不是最優雅的解決方案,但它確實有效,我將使用如何在視頻上運行 OpenPose 的示例來解釋它。 您已經獲得了 openpose 下載路徑和視頻路徑,並且從那里它是一個 3 行解決方案。 首先,將當前工作目錄更改為該 openpose 文件夾,然后創建您的命令,然后調用 subprocess.run (我嘗試使用 subprocess.call 但沒有奏效。我沒有嘗試 shell=False 但我聽說它更安全方法。我會留給你。)

import os
import subprocess

openpose_path = "C:\\Users\\me\\Desktop\\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended\\openpose\\"
video_path = "C:\\Users\\me\\Desktop\\myvideo.mp4"
os.chdir(openpose_path)
command = "".join(["bin\\OpenPoseDemo.exe", " -video ", video_path])
subprocess.run(command, shell=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM