【问题标题】:How to combine Python 32bit and 64bit modules如何组合 Python 32 位和 64 位模块
【发布时间】:2018-04-28 12:11:09
【问题描述】:

对于我的一个机器人项目,我正在尝试从 Nao Robot 的相机中获取图像并使用 Tensorflow 进行对象识别。

问题是机器人的 NaoQi API 是基于 Python2.7 32bit 构建的。 (http://doc.aldebaran.com/1-14/dev/python/install_guide.html)

Tensorflow 对象识别 API 仅适用于 64 位。 (https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.mdhttps://www.tensorflow.org/install/install_windows

我使用的是 Windows 10,我同时安装了 Python 2.7 32 位和 3.6 64 位,我能够独立运行这些模块,但我无法在两者之间传递图像。

是否有解决此问题的解决方法?谢谢。

【问题讨论】:

    标签: python tensorflow robotics nao-robot


    【解决方案1】:

    如果您说一个仅 32 位而另一个仅 64 位,我认为没有办法让两个模块在同一个解释器中工作。

    因此,考虑运行两个解释器,并让它们通过消息交换、远程过程调用等方式相互通信。

    我强烈反对使用共享内存部分、UNIX 或 TCP 套接字,因为有太多低级细节需要处理,这会分散您的工作真正目标。

    相反,请考虑一些高级库,例如 zeromq,它也有 python bindings,并且使用起来非常简单:您可以通过网络发送二进制数据、字符串或 python 对象,它们将自动序列化和反序列化使用泡菜。

    有用的读物​​:

    示例客户端:

    import zmq
    
    context = zmq.Context()
    socket = context.socket(zmq.REQ)
    socket.connect("tcp://localhost:5555")
    
    print("Sending request...")
    socket.send_string("Hello")
    #  Get the reply.
    message = socket.recv_string()
    print(f"Received reply: {message}")
    

    示例服务器:

    import zmq
    
    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind("tcp://*:5555")
    
    while True:
        message = socket.recv_string()
        print(f"Received request: {message}")
        socket.send_string("Hello")
    

    socket.send_string() 类似,您有socket.send_json()socket.send_pyobj()

    检查the documentation

    【讨论】:

    • 谢谢。该解决方案有助于解决问题。它现在可以工作了。
    猜你喜欢
    • 2014-07-02
    • 2013-01-11
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2018-12-29
    • 2010-11-11
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多