Как объединить 32-битные и 64-битные модули Python - PullRequest
0 голосов
/ 28 апреля 2018

В одном из своих проектов по робототехнике я пытаюсь получить изображение с камеры Нао Робота и использовать Tensorflow для распознавания объектов.

Проблема в том, что API-интерфейс робота NaoQi построен на 32-битном Python2.7. (http://doc.aldebaran.com/1-14/dev/python/install_guide.html)

API распознавания объектов Tensorflow работает только с 64-битной версией. (https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md и https://www.tensorflow.org/install/install_windows)

Я использую Windows 10, и у меня установлены Python 2.7 32-битный и 3.6 64-битный, и я могу запускать модули независимо, но не могу передать образ между ними.

Есть ли обходные пути для решения этой проблемы? Спасибо.

1 Ответ

0 голосов
/ 28 апреля 2018

Я не думаю, что есть способ заставить оба модуля работать в одном и том же интерпретаторе, если вы говорите, что один только 32-битный, а другой только 64-битный.

Итак, рассмотрите возможность запуска двух интерпретаторов и обеспечения их связи друг с другом с помощью обмена сообщениями, удаленного вызова процедур и т. Д.

Я настоятельно не рекомендую использовать разделы с общей памятью, сокеты UNIX или TCP, так как слишком много низкоуровневых деталей для обработки, которые отвлекут вас от реальной цели вашей работы.

Вместо этого рассмотрим некоторую высокоуровневую библиотеку, такую ​​как zeromq , которая также имеет привязки Python , и ее очень просто использовать: вы можете отправлять двоичные данные, строки или объекты Python по проводам , который будет автоматически сериализован и десериализован при помощи pickle.

Полезные значения:

Пример клиента:

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().

Проверка документация .

...