// it's for Latex

pages

[Tensorflow Image Recognition in ROS] #01. Install Tensorflow to python2

이번에 프로젝트의 일환으로 ROBOTIS의 Open Manipulator 제품에 Camera를 장착하여 물체를 판별한 뒤, Grasping 과정을 수행하도록 하는 작업을 진행하였다.
이 때, 물체를 판별하는 작업을 진행하기 위하여 Tensorflow Image Recognition in ROS 를 이용하기로 하였다.
이 과정에 대한 내용은 다음 사이트를 참고하여 진행하였다.

https://medium.com/@k3083518729/tensorflow-image-recognition-58b0ac77c263


작업환경 (Labtop)
OS : Linux_Ubuntu_16.04
ROS : Kinetic
Python version : 2.7
Tensorflow version : 1.13.1



일단 시작하기 전에 다음과 같은 주의사항이 있다.
a. ROS는 python3와 호환이 힘드므로 python2를 사용해야 한다. ROS  설치시 기본적으로 python2.7이 들어있다.
b. tensorflow 설치 또한 python2에 해야한다.

많은 시행착오를 거치며 위 두가지 사항을 지켜야 한다고 깨달았다.

그럼 시작하자.

1. Install Ubuntu 16.04 


다음 링크를 참조한다.

http://doocong.com/webserver/ubuntu-setup/


2. Install ROS Kinetic


다음 링크를 참조한다.

https://cafe.naver.com/openrt/14575

wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh && chmod 755 ./install_ros_kinetic.sh && bash ./install_ros_kinetic.sh

3. Install pip


다음 링크를 참조한다.

https://pip.pypa.io/en/stable/installing/

Installing with get-pip.py

To install pip, securely download get-pip.py1:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
Then run the following:
python get-pip.py

4. Install Tensorflow to Python 2


다음 링크를 참조한다.

https://crystalcube.co.kr/189

해당 링크에서는 virtualenv를 이용했지만 내 경우엔 이용하지 않을 것이므로 아래 부분만 진행한다.


sudo pip install --upgrade pip
sudo pip install --upgrade setuptools
// Python 2.7 인 경우
pip install --upgrade tensorflow
출처: https://crystalcube.co.kr/189 [유리상자 속 이야기]



# Error


다음과 같은 에러가 발생했다.

(1) /usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/__init__.py:83: RequestsDependencyWarning: Old version of cryptography ([1, 2, 3]) may cause slowdown.  warnings.warn(warning, RequestsDependencyWarning)


(2) ERROR: pyasn1-modules 0.2.7 has requirement pyasn1<0.5.0,>=0.4.6, but you'll have pyasn1 0.1.9 which is incompatible.



(3) ERROR: tensorboard 2.0.1 has requirement futures>=3.1.1; python_version < "3", but you'll have futures 3.0.5 which is incompatible.


(4) ERROR: Cannot uninstall 'enum34'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.


하나하나 파헤쳐보자.

(1) /usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/__init__.py:83: RequestsDependencyWarning: Old version of cryptography ([1, 2, 3]) may cause slowdown.  warnings.warn(warning, RequestsDependencyWarning)


cryptography module의 version 문제라고 한다. 
다음 링크를 참조하자.


이제 upgrade를 진행하자.

sudo pip install --upgrade cryptography
이 후 다음과 같은 error가 발생한다.

Traceback (most recent call last):
  File "/usr/local/bin/pip", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/main.py", line 45, in main
    command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/commands/__init__.py", line 96, in create_command
    module = importlib.import_module(module_path)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/commands/install.py", line 23, in <module>
    from pip._internal.cli.req_command import RequirementCommand
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/cli/req_command.py", line 20, in <module>
    from pip._internal.network.session import PipSession
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/network/session.py", line 17, in <module>
    from pip._vendor import requests, six, urllib3
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/__init__.py", line 97, in <module>
    from pip._vendor.urllib3.contrib import pyopenssl
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/urllib3/contrib/pyopenssl.py", line 46, in <module>
    import OpenSSL.SSL
  File "/usr/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 118, in <module>
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

다음 명령어를 통해 해결하자.

sudo python -m easy_install --upgrade pyOpenSSL

(2) ERROR: pyasn1-modules 0.2.7 has requirement pyasn1<0.5.0,>=0.4.6, but you'll have pyasn1 0.1.9 which is incompatible.


해당 에러는 pyasn1-modules 은 0.2.7 version 이 필요하고, pyasn1 은 <0.5.0,>=0.4.6 version 이 필요하다는 이야기이다.

다음 링크를 참조한다.

https://github.com/etingof/pyasn1-modules/issues/10

먼저 아래 명령어를 통해 내가 가지고 있는 modules의 version을 확인한다.

pip freeze | grep pyasn1
pyasn1==0.1.9
pyasn1-modules==0.0.7

확실히 요구되는 버전보다 낮은 것을 알 수 있다.
이제 업그레이드를 해보자.

아래 명령어를 수행 시에 pyasn1은 upgrade 된 것을 확인할 수 있다.

pip uninstall pyasn1 && pip install pyasn1

pip freeze | grep pyasn1
pyasn1==0.4.7
pyasn1-modules==0.0.7


이제 pyasn1-modules를 업그레이드 한다.

pip uninstall pyasn1-modules && pip install pyasn1-modules

하지만 다음과 같은 에러가 뜬다.

ERROR: Cannot uninstall 'pyasn1-modules'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

다음 링크를 참조한다.

https://blog.naver.com/waterey/221576731282

distutils installed project는 manual하게 삭제를 해주어야 한다고 한다.
한번 해보자.

$ cd /usr/lib/python2.7/dist-packages/
$ sudo rm -r pyasn1_modules/
$ sudo rm -r pyasn1_modules-0.0.7.egg-info 


이제 다시 설치를 해보자.

sudo pip install pyasn1-modules

pip freeze | grep pyasn1
pyasn1==0.4.7
pyasn1-modules==0.2.7

위와 같이 upgrade 된 것을 확인할 수 있다.

이제 다음 에러를 확인해보자.

(3) ERROR: tensorboard 2.0.1 has requirement futures>=3.1.1; python_version < "3", but you'll have futures 3.0.5 which is incompatible.


해당 내용에는 futures module의 version이 3.1.1 이상이어야 한다고 한다.
하지만 내가 갖고 있는 futures의 module은 3.0.5 version이다.

pip freeze | grep furtures
futures==3.0.5

그럼 다시 위와 같은 과정으로 업그레이드 해보자.

sudo pip uninstall futures && sudo pip install futures

pip freeze | grep furtures
futures==3.3.0

성공적으로 설치가 되었다.

(4) ERROR: Cannot uninstall 'enum34'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.


이 또한 위 과정에서 해결방법을 참고하면, Manual하게 enum34 module을 삭제해야 하겠다.

다음 명령어를 통해 제거를 진행한다.

$ cd /usr/lib/python2.7/dist-packages/
$ sudo rm -r enum34-1.1.2.egg-info 






이제 다시 설치를 진행해보자.

$ sudo pip install --upgrade tensorflow

Successfully installed absl-py-0.8.1 astor-0.8.0 backports.weakref-1.0.post1 cachetools-3.1.1 certifi-2019.9.11 chardet-3.0.4 enum34-1.1.6 funcsigs-1.0.2 functools32-3.2.3.post2 gast-0.2.2 google-auth-1.7.0 google-auth-oauthlib-0.4.1 google-pasta-0.1.8 grpcio-1.25.0 h5py-2.10.0 idna-2.8 keras-applications-1.0.8 keras-preprocessing-1.1.0 markdown-3.1.1 mock-3.0.5 numpy-1.16.5 oauthlib-3.1.0 opt-einsum-2.3.2 protobuf-3.10.0 requests-2.22.0 requests-oauthlib-1.3.0 rsa-4.0 tensorboard-2.0.1 tensorflow-2.0.0 tensorflow-estimator-2.0.1 urllib3-1.25.7 werkzeug-0.16.0 wrapt-1.11.2

드디어 설치가 제대로 된 것을 확인할 수 있다.











댓글 없음:

댓글 쓰기