Streamlit 및 Streamlit-webrtc를 사용하여 쉬운 컴퓨터 비전 웹 앱을 구축해 봅시다

유선형



몇 줄의 코드로 파이썬으로 웹 앱을 만들 수 있는 놀라운 오픈 소스 프레임워크입니다. 이제 웹 앱을 디자인하기 위해 HTML 페이지와 Css 시트를 만드는 대신 Streamlit(프레임워크) 도구가 있습니다. 이 모든 작업을 쉽게 할 수 있고 하나의 코드 스크립트에서 모든 디자인 및 앱 기능을 컴파일할 수 있습니다. 따라서 이 도구의 기능을 자세히 알아보도록 하겠습니다. 이 놀라운 프레임워크에 대한 자세한 내용은 다음 링크를 참조하십시오. - Streamlit documentation

전제 조건



계속 진행하기 전에 다음 패키지를 설치해야 합니다.
  • streamlit

  • % pip install streamlit
    


  • opencv-python

  • % pip install opencv-python
    


  • streamlit-webrtc

  • % pip install streamlit-webrtc
    


  • av

  • % pip install av
    


    앱을 만들 준비가 되었습니다 🥳



    먼저 "Hello world"를 인쇄하여 앱을 실행합니다.

    따라야 할 단계:
  • 시스템에 빈 폴더를 만듭니다.
  • 해당 디렉토리로 이동합니다.

  • % cd /usr/include directory
    


  • 동일한 디렉토리에 빈 파일app.py을 만듭니다.
  • 동일한 디렉토리에 가상 환경을 만듭니다.(선택 사항)

  • % python -m venv venv
    


  • 가상 환경을 활성화합니다.(macOS)

  • % . /venv/bin/activate
    


  • app.py 파일로 이동하여 다음 코드를 작성하고 파일을 저장합니다.

  • import streamlit as st
    st.write("Hello, world")
    


  • 동일한 디렉터리에서 다음 명령을 실행하여 앱을 실행합니다.

  • % streamlit run app.py
    


    이렇게 하면 streamlit 서버가 부팅되고 앱이 브라우저에서 열립니다.

    산출





    Streamlit_Webrtc


    streamlit_webrtc 패키지는 실시간 비디오/오디오 스트리밍용입니다.
    app.py 파일을 업데이트하여 제목 및 비디오 스트리밍 구성 요소streamlit_webrtc를 추가합니다. 앱의 기능을 보여주기 위한 예일 뿐이므로 앱에서 "Hello World"를 제거할 것입니다.
  • 필요한 모든 패키지를 가져오는 중입니다.
  • 앱에 제목 추가 - "Computer Vision Streamlit 응용 프로그램"
  • 실시간 비디오 스트리밍을 위해 webrtc_streamer()에서 가져온 streamlit_webrtc 클래스를 호출합니다.

  • import streamlit as st
    from streamlit_webrtc import webrtc_streamer
    st.title("Computer Vision Streamlit application")
    webrtc_streamer(key="demo")
    


    산출





    "시작"버튼을 클릭하면 비디오 및 오디오 캡처 권한을 요청합니다. 권한을 부여하면 라이브 비디오 스트리밍이 표시됩니다.

    OpenCV를 사용하여 앱에 비디오 처리 구성 요소를 추가해 보겠습니다.



    캡쳐한 영상에 app.py를 이용한 필터를 적용할 수 있도록 OpenCV 파일을 업데이트 하겠습니다.
  • 이 자습서에서는 캐니 ​​에지 감지 필터라는 OpenCV 라이브러리의 이미지 처리 필터를 사용합니다.
    원하는 대로 다른 필터를 자유롭게 사용할 수 있습니다.
  • 먼저 클래스 이름VideoProcessor을 만들고 그 안에 이름recv()이라는 함수를 정의합니다. 이것은 프레임에서 입력을 받고 프레임에 출력을 반환하는 콜백 함수입니다.
  • webrtc_streamer().recv() 함수가 있는 클래스 개체를 video_processor_factory 인수로 사용할 수 있습니다.
  • .recv()의 인수는 캡처된 웹캠 입력 비디오의 이미지 프레임입니다. frame.to_ndarray() 명령을 사용하여 NumPy 배열로 변환합니다.

  • -이 명령.recv()으로 화면에 표시되는 av.VideoFrame.from_ndarray(image, format="bgr24")에서 반환됩니다.
  • 다음 코드를 사용하여 app.py 파일을 업데이트합니다.

  • import av
    import cv2
    import streamlit as st
    from streamlit_webrtc import webrtc_streamer
    st.title("Computer Vision Streamlit application")
    class VideoProcessor:
        def recv(self, frame):
            image = frame.to_ndarray(format="bgr24")
    
            image = cv2.cvtColor(cv2.Canny(image, 100, 200), cv2.COLOR_GRAY2BGR)
    
            return av.VideoFrame.from_ndarray(image, format="bgr24")
    webrtc_streamer(key="demo", video_processor_factory=VideoProcessor)
    


    산출





    와우!🥳 우리는 이 앱으로 준비되었습니다



    전개



    Streamlit Cloud에 앱을 배포하려면 여기Documentation를 확인하십시오.

    좋은 웹페이지 즐겨찾기