본문 바로가기
파이썬 팁

Gradio 기초(Colab에서 사용하기)

by 다빈치코딩 2023. 9. 11.

목차

    반응형

    파이썬을 배우고, 머신러닝을 배우고나면 내가 만든 것을 다른 사람들에게 소개하거나 공유하고 싶은 생각이 듭니다. 문제는 이것을 쉽게 보여줄 수 없다는 점입니다. 그럴 경우 Gradio(그라디오)를 사용하여 친구들이나 지인들에게 쉽게 공유가 가능합니다.

    Gradio란?

    gradio는 파이썬으로 만든 머신러닝이나 데이터 사이언스로 만든 프로그램을 웹 어플리케이션으로 만들어주는 역할을 합니다. 기본적으로 웹 어플리케이션을 만들기 위해서는 웹에 대한 지식도 있어야하고, 자바스크립트, HTML, CSS로 프론트 부분을 만들고, 장고(Django), 플라스크(Flask)등으로 서버를 만들어 배포를 해야 합니다. Gradio는 이런 복잡한 과정을 생략하고 바로 배포가 가능하다는 장점이 있습니다.

    그럼 Colab에 간단한 파이썬 프로그램을 만들고 이것을 Gradio를 통해 웹에 배포하는 과정을 진행해 보겠습니다. 이 부분은 Gradio의 Quickstart 부분을 제가 이해한 방법으로 설명한 것입니다. 원문을 보고 싶다면 여기 를 확인해 보시기 바랍니다.

    Gradio & Colab Tutorial

    Colab에 대해 잘 모른다면 다빈치코딩 파이썬에 설명해 놓았습니다. 파이썬 시작하기에서 확인해보시기 바랍니다. Colab에 접속해서 먼저 Gradio를 Colab에 설치를 해야 합니다. 설치하는 방법은 Colab 실행창에 아래 문구를 입력하면 됩니다.

    !pip install gradio

    먼저 !는 Colab에서 리눅스 명령어를 실행시켜주는 역할을 합니다. Colab에는 따로 터미널 환경이 없기 때문에 Colab 코드창에서 !를 넣어 터미널에 명령어를 입력하듯이 사용할 수 있습니다.

    pip는 (Package Installer for Python)의 약자로 파이썬으로 작성된 패키지 소프트웨어를 설치, 관리하는 패키지 관리 시스템 입니다. pip를 사용하면 직접 해당 패키지의 웹사이트에 찾아가 다운로드하고, 설치하는 과정을 따로 할 필요 없이 간단한 명령어로 실행이 가능합니다.

    install gradio는 gradio 프로그램을 설치하라는 명령어 입니다. 이렇게 간단하게 Colab에 프로그램을 설치할 수 있습니다.

    실행을 해보면 이와같이 알아서 설치가 되는 것을 볼 수 있습니다. 캡쳐에서는 몇 줄만 보여주었지만 꽤나 긴 과정을 거쳐 설치가 됩니다. 설치가 완료되면 gradio를 colab에서 사용할 수 있습니다. 

    colab에 gradio를 설치 하더라도 런타임이 만료되면 gradio 설치한 것도 사라집니다.  런타임이 끝났다면 다시 설치를 해주어야 합니다.

    함수 만들기

    다음으로 gradio에서 실행할 함수를 만들어 줍니다. gradio를 처음 사용하는 것이기 때문에 hello_world 함수를 만들어 보겠습니다.

    def hello_world(name):
        return f'Hello World, {name}!'

    이름을 입력받고 hello world에 이름을 추가하여 출력하는 함수 입니다. 혹시나 문자열 앞에 f가 무슨 뜻인지 모른다면 f-string에 대해 설명해 놓은 글을 확인해 보시기 바랍니다.

     

    함수와 gradio 연결하기

    다음으로 만들어진 함수와 gradio를 연결시켜 보겠습니다.

    import gradio as gr
    
    demo = gr.Interface(fn=hello_world , inputs='text', outputs='text')
    demo.launch(debug=True, share=True)

    첫 번째 줄 부터 설명하겠습니다.

    import gradio as gr

    gradio를 앞으로 gr로 불러 사용한다는 뜻입니다. 해당 부분이 이해가 안가면 모듈에 별명 붙이기 부분을 확인 바랍니다.

     

    demo = gr.Interface(fn=hello_world , inputs='text', outputs='text')

    Interface는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경계를 뜻합니다. 즉 gradio와 내가 만든 함수를 연결시켜주는 함수라 생각하면 됩니다. 그럼 Interface에 들어가는 매개변수에 대해 알아보겠습니다.

    • fn : 함수명을 넣는 부분입니다.
    • inputs : 입력값 유형을 넣습니다. 여러 입력값이 있는 경우 리스트 형태로 넣어주면 됩니다.
    • outpus : 출력값 유형을 넣습니다. 출력 역시 여러개가 있다면 리스트 형태로 넣어줍니다.

    이렇게 필수로 입력해야 하는 파라메터는 3개 입니다. 다양한 파라메터 추가가 가능하기 때문에 추가하고 싶은 부분이 있으면 공식 문서에 해당 부분을 확인해서 추가가 가능한지 확인해 보시기 바랍니다.

     

    demo.launch(debug=True, share=True)

    interface를 통해 만든 프로그램을 실행시키는 부분 입니다. TV나 신문에서 브랜드 런칭한다는 말을 들어본 적이 있을 것입니다. 여기서 말하는 런칭이 바로 이 과정입니다. interface로 연결시킨 프로그램을 실행시키는 부분 입니다.

    launch에도 다양한 매개변수가 들어갑니다. 필수 입력을 해야하는 매개변수는 없습니다. 어떤 매개변수를 넣을 수 있는지 알고 싶다면 공식 문서에서 해당 부분을 확인 바랍니다. 그럼에도 위에 추가한 매개변수에 대해 알아보겠습니다.

    • debug : 오류 발생시 내용을 확인할 때 사용합니다. 기본값은 False이기 때문에, 완성 전에는 debug값을 True로 하여 오류 확인하면서 수정하길 바랍니다.
    • share : 다른 사람들과 공유를 할 것인지 선택합니다. 친구들과 공유하기 위해서는 이 부분을 True로 설정해야 합니다.

    그럼 코드가 완성되었으니 실행해 보겠습니다.

    Gradio 실행하기

    우리가 만든 함수가 웹에 동작하는 모습을 볼 수 있습니다. name에 이름을 입력하고 Submit 버튼을 누르면 Hello World! 뒤에 입력한 이름이 나오는 프로그램입니다. 위 문장에 나와있는 public URL 뒤의 주소를 클릭하면 Colab이 아닌 웹페이지에서 동작하는 것을 볼 수 있습니다. 이 URL은 최대 72시간 즉 3일간 동작이 가능합니다. 단 Colab에 해당 프로그램이 실행되고 있어야 합니다. 해당 프로그램 동작이 끝나면 이 웹도 동작하지 않게 됩니다.

     

    텍스트로 프로그램을 만들어 보았으니 이번에는 이미지로 작업을 하는 것을 확인해 보겠습니다.

    이미지에 sepia 필터 적용하기

    sepia 필터는 이미지를 따뜻한 갈색 세피아톤으로 바꾸는 것입니다. sepia 필터 적용하는 부분에 대한 설명은 생략하겠습니다. 이미지의 행렬값에 내적을 하고 전치 행렬을 곱해주는 것으로 수학적으로 설명하기에는 시간이 많이 필요한 관계로 이런것이 있다 정도로 기억하면 될 것 같습니다.

    import numpy as np
    import gradio as gr
    
    def sepia(input_img):
        sepia_filter = np.array([
            [0.393, 0.769, 0.189], 
            [0.349, 0.686, 0.168], 
            [0.272, 0.534, 0.131]
        ])
        sepia_img = input_img.dot(sepia_filter.T)
        sepia_img /= sepia_img.max()
        return sepia_img
    
    demo = gr.Interface(sepia, "image", "image")
    demo.launch(debug=True, share=True)

    sepia 필터를 적용할 함수를 만들어 주었습니다. 이전과의 차이점은 Interface 부분이 "text"가 아니라 입력과 출력 모두 image로 처리하도록 변경한 것입니다. 이렇게 텍스트 뿐만 아니라 이미지를 입력과 출력으로 사용할 수 있습니다.

    실행을 해보면 귀여운 아기 사진이 흑백 느낌이 나는 따뜻한 갈색으로 변경된 것을 알 수 있습니다.

    반응형