首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openpose给出错误:无法从另一个线程访问CPU/GPU指针数据

Openpose给出错误:无法从另一个线程访问CPU/GPU指针数据
EN

Stack Overflow用户
提问于 2018-01-20 00:42:26
回答 1查看 218关注 0票数 1

我想初始化一个openose实例,将它保存为一个class字段,这个类实现了一些与grpc相关的逻辑,将监听一个端口,我想从这个端口将请求(一个图像)传递给保存的openpose实例进行检测,然后将检测结果返回给这个端口。

在谷歌之后,我找到了PyOpenpose,并像这样实现了我的设计:

代码语言:javascript
复制
  class PosingServer:
    def __init__(self, setting=PosingSetting):
        self.setting=setting
        self.initNetwork()

    def detect(self, req):
            #detect pose
            net.detectPose(req.image)
            #detect pose
           return net.getKeypoints(net.KeypointType.POSE)[0]

    def initNetwork(self):
        setting = self.setting
        self.net = OP.OpenPose(setting.poseSize, setting.faceHandSize, setting.outSize,\
                               setting.modelType, setting.modelFolder, setting.logLevel,\
                               setting.downloadHeatmaps)

   *****grpc related stuffs*******

在PosingServer运行后,它可以接收rpc请求并执行检测,但这一行:

代码语言:javascript
复制
return net.getKeypoints(net.KeypointType.POSE)[0]

给出错误:

代码语言:javascript
复制
The CPU/GPU pointer data cannot be accessed from a different thread.

Coming from:
- src/openpose/pose/poseExtractor.cpp:checkThread():341
- src/openpose/pose/poseExtractor.cpp:checkThread():345
- src/openpose/pose/poseExtractor.cpp:getPoseKeypoints():265
ERROR    Exception calling application: 
Error:
The CPU/GPU pointer data cannot be accessed from a different thread.

Coming from:
- src/openpose/pose/poseExtractor.cpp:checkThread():341
- src/openpose/pose/poseExtractor.cpp:checkThread():345
- src/openpose/pose/poseExtractor.cpp:getPoseKeypoints():265
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/grpc/_server.py", line 377, in _call_behavior
    return behavior(argument, context), True
  File "server/pose/PosingServer.py", line 81, in carryOut
    return self.detector.detect(req)
  File "server/pose/PosingServer.py", line 40, in detect
    return net.getKeypoints(net.KeypointType.POSE)[0])
RuntimeError: 
Error:
The CPU/GPU pointer data cannot be accessed from a different thread.

如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-03-18 14:49:50

在调用getPoseKeypoints()之前,应该使用函数PoseExtractor::initializationOnThread()PoseExtractor对象进行初始化。我在开发自己的多线程应用程序时遇到了完全相同的错误,因为初始化是从父线程调用的,而我试图从子线程获取姿势关键点。我通过确保在同一线程中调用这两个函数解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48345744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档