[英]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.sh
在openpose
目錄下(即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.