lightweight openpose人体姿态估计多线程实现实时性,python代码实现
时间: 2023-06-17 19:06:37 浏览: 207
使用python语言的超轻量openpose源码,能实时对人体进行姿态检测,下载可直接运行
5星 · 资源好评率100%
首先需要安装 OpenCV 和 OpenPose 库,可以使用以下命令进行安装:
```
pip install opencv-python
pip install opencv-contrib-python
pip install opencv-python-headless
pip install opencv-contrib-python-headless
pip install pyopenpose
```
接着可以使用以下代码进行多线程实现实时性的人体姿态估计:
```python
import cv2
import numpy as np
import pyopenpose as op
import threading
import time
class OpenPoseThread(threading.Thread):
def __init__(self, opWrapper, img):
threading.Thread.__init__(self)
self.opWrapper = opWrapper
self.img = img
self.opWrapper.start()
self.datum = op.Datum()
def run(self):
self.datum.cvInputData = self.img
self.opWrapper.emplaceAndPop([self.datum])
class VideoThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.cap = cv2.VideoCapture(0)
self.ret, self.frame = self.cap.read()
self.opWrapper = op.WrapperPython()
self.opWrapper.configure({"model_folder": "/path/to/openpose/models/", "disable_multi_thread": True})
self.opWrapper.start()
self.stop = False
def run(self):
while not self.stop:
ret, frame = self.cap.read()
opThread = OpenPoseThread(self.opWrapper, frame)
opThread.start()
opThread.join()
pose_keypoints = self.opWrapper.getPoseKeypoints()
cv2.imshow("OpenPose", self.datum.cvOutputData)
if cv2.waitKey(1) & 0xFF == ord('q'):
self.stop = True
self.cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
videoThread = VideoThread()
videoThread.start()
time.sleep(10)
videoThread.stop = True
videoThread.join()
```
上述代码中,使用 `OpenPoseThread` 类和 `VideoThread` 类分别处理 OpenPose 的多线程实现和视频的读取和显示。`OpenPoseThread` 类用于执行 OpenPose 的姿态估计,`VideoThread` 类用于读取视频并显示结果。可以使用 `disable_multi_thread` 参数来关闭 OpenPose 的多线程实现,这样可以避免线程之间的竞争导致的性能问题。
在 `VideoThread` 的 `run` 方法中,循环读取视频帧并启动 `OpenPoseThread` 线程进行姿态估计。在 `OpenPoseThread` 线程中,将视频帧作为输入数据传递给 OpenPose 并执行姿态估计。姿态估计完成后,将输出结果传递回 `VideoThread` 线程并显示结果。
最后,使用 `cv2.imshow` 来显示视频帧。可以使用 `cv2.waitKey` 来等待用户按下 'q' 键来停止程序的运行。
阅读全文