Category: Python

  • 이미지 파일에 글자 넣기

    matplotlib 이나 opencv를 통해서 이미지를 보통 다룬다. 연구나 자료 분석을 하기 위한 plot 이라면 matplotlib.pyplot을 이용한다. 그리고 plot에 글자를 입력하는 방법은 matplotlib.pyplot.text 를 이용하면 된다. 그런데 이 방법으로 figure에 글자를 보이게 하더라도 저장할 경우에는 보이지 않는다. 아마 실제 자료에는 그 결과가 반영 안되는 것 같다.

    이미지 파일에 직접 결과를 입력해서 넣는 방법을 이용하여 하고 opencv의 putText를 이용하면 된다. 글자가 이미지 파일에 직접 삽입되기는 한다. 그런데 글꼴, 위치 지정, anti-aliasing은 좀 별로다.

            cv2.putText(fig,
                        str(...),
                        (100, 175),
                        cv2.FONT_HERSHEY_SIMPLEX,
                        7,
                        [255, 255, 255],
                        thickness=33,
                        lineType=cv2.LINE_AA
                       )
  • pip.conf

    이전에 devpi 를 이용한 파이썬 미러 운영에 대하여 글을 쓴 적이 있다. 미러를 운영하면 속도가 매우 빠르지만, 설치 과정에서 꽤 기~~인 명령어가 입력이 되어야 한다. 구글 검색을 통하여 pip.conf 파일을 생성함으로써 기본 옵션으로 지정하는 방법을 알게 되었다.

    ~/.pip/pip.conf
    
    [global]
    index-url = http://beta.work:3141/root/pypi/+simple/
    trusted-host = beta.work
    [search]
    index = http://beta.work:3141/root/pypi/
    
  • devpi 설치하기

    파이썬에서 PIP로 설치할 때에도 역시 서버에서 패키지를 읽어온다. 어떤 이유던지 간에 반복적으로 설치를 해야할 경우 네트웍의 부하가 발생하므로 부하 감소 및 설치 시간 단축을 위하여 미러 서버를 알아 보았다. 많이 사용하는 것은 devpi 인 것 같다. PIP로 설치를 해야 하므로 Python과 PIP를 설치한다.

    # sudo apt install python3 python3-pip

    다음에는 devpi를 설치한다.

    # pip install devpi-server

    다음에는 devpi-init 로 초기 작업을 수행한다.

    root@316de82ccf07:/# devpi-init
    INFO  NOCTX Loading node info from /root/.devpi/server/.nodeinfo
    INFO  NOCTX generated uuid: 5554de437dc84dedbbe1979040af5047
    INFO  NOCTX wrote nodeinfo to: /root/.devpi/server/.nodeinfo
    INFO  NOCTX DB: Creating schema
    INFO  [Wtx-1] setting password for user 'root'
    INFO  [Wtx-1] created user 'root'
    INFO  [Wtx-1] created root user
    INFO  [Wtx-1] created root/pypi index
    INFO  [Wtx-1] fswriter0: commited at 0
    

    마지막으로 devpi-server를 실행한다. 모든 요청에 대하여 응답할 수 있도록 0.0.0.0 으로 설정하였다.

    root@316de82ccf07:/# devpi-server --host=0.0.0.0
    2021-11-01 17:11:09,293 INFO  NOCTX Loading node info from /root/.devpi/server/.nodeinfo
    2021-11-01 17:11:09,294 INFO  NOCTX wrote nodeinfo to: /root/.devpi/server/.nodeinfo
    2021-11-01 17:11:09,324 WARNI NOCTX No secret file provided, creating a new random secret. Login tokens issued beile option to provide a persistent secret. You can create a proper secret with the devpi-gen-secret command.
    2021-11-01 17:11:11,537 INFO  NOCTX devpi-server version: 6.2.0
    2021-11-01 17:11:11,537 INFO  NOCTX serverdir: /root/.devpi/server
    2021-11-01 17:11:11,537 INFO  NOCTX uuid: 5554de437dc84dedbbe1979040af5047
    2021-11-01 17:11:11,537 INFO  NOCTX serving at url: http://0.0.0.0:3141 (might be http://[0.0.0.0]:3141 for IPv6)
    2021-11-01 17:11:11,537 INFO  NOCTX using 50 threads
    2021-11-01 17:11:11,537 INFO  NOCTX bug tracker: https://github.com/devpi/devpi/issues
    2021-11-01 17:11:11,537 INFO  NOCTX IRC: #devpi on irc.freenode.net
    2021-11-01 17:11:11,537 INFO  NOCTX Hit Ctrl-C to quit.
    2021-11-01 17:11:11,541 INFO  Serving on http://0.0.0.0:3141
    

    이제 클라이언트에서 이 devpi 서버 쪽으로 패키지를 요청하도록 한다. HTTPS를 이용하지 않을 경우 –trusted-host 를 지정하지 않으면 설치가 되지 않는다.

    root@d7ec45a78430:/# pip3 install --trusted-host my.dongtan -i http://my.dongtan:3141/root/pypi/+simple/ pandas
    Looking in indexes: http://my.dongtan:3141/root/pypi/+simple/
    Collecting pandas
      Downloading http://my.dongtan:3141/root/pypi/%2Bf/10e/10a2527db79af/pandas-1.3.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.5 MB)
         |████████████████████████████████| 11.5 MB 2.0 MB/s
    Collecting pytz>=2017.3
      Downloading http://my.dongtan:3141/root/pypi/%2Bf/367/2058bc3453457/pytz-2021.3-py2.py3-none-any.whl (503 kB)
         |████████████████████████████████| 503 kB 11.5 MB/s
    Collecting python-dateutil>=2.7.3
      Downloading http://my.dongtan:3141/root/pypi/%2Bf/961/d03dc3453ebbc/python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
         |████████████████████████████████| 247 kB 7.6 MB/s
    Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.9/dist-packages (from pandas) (1.21.3)
    Collecting six>=1.5
      Downloading http://my.dongtan:3141/root/pypi/%2Bf/8ab/b2f1d86890a2d/six-1.16.0-py2.py3-none-any.whl (11 kB)
    Installing collected packages: six, pytz, python-dateutil, pandas
    Successfully installed pandas-1.3.4 python-dateutil-2.8.2 pytz-2021.3 six-1.16.0
    
  • 시리얼 통신 read(), readline()

    시리얼 통신을 함에 있어 자료를 받을 때 readline()을 이용하고 있었다. 이번에 하는 것은 이상하게도 자료가 덜 받아지는 경우가 많이 있었다. 원인은 모르겠으나 모든 바이트를 수신하는 read()로 변경해 보았다. 그랬더니 버퍼에 있던 자료까지 다 받아지는지 자료들이 줄줄 들어왔다. 송수신이 확실히 구별되는 편이 좋기 때문에, read()로 데이터를 더 이상 받아지지 않을 때까지 받았다. 그 다음에 다시 전송을 하니 결과가 일정하게 계속 나온다.