ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [컴퓨터비전(이미지/영상)] Object Detection - Part3. Yolo Web Application 개발하기
    AI/컴퓨터비전 2022. 8. 1. 16:16
    반응형

    1. Requirements : 요구 기술


     

    2. Hands-on 목표


    1. Web page인 Front-End에서 사용자가 이미지 또는 영상을 업로 할 수 있다.
    2. 전송 버튼을 클릭하여 파일을 Back-End 서버에 전달하고, Yolo 모델에서 추론을 진행한다.
    3. 추론 처리 후 Flask의 Front-End로 결과를 리턴한다.
    4. 다운로드 버튼이 새로 나타나 처리된 이미지 또는 영상을 다운로드하여 확인한다. 

     

    3. Hands-on 진행


    • https://github.com/ViAsmit/YOLOv5-Flask 에 방문하여 git clone 하거나 zip파일을 다운받아 압축을 해제한다.
    • Visual Studio Code를 에서 해당 프로젝트 경로를 오픈한다.
    • 새 터미널을 열어 라이브러리를 설치해야한다.
      이때, default로 PowerShell이 열리는데, 보통 보안을 관리하는 회사PC에서는 보안 정책으로 권한이 없으니 Command Prompt로 다시 열어준다.

    • 터미널에 'pip install -r requirements.txt'를 입력해 필요한 라이브러리를 설치하도록 명령한다.(pytorch, OpenCV, Flask 포함)
    • 해당 프로젝트는 기본 COCO 데이터셋으로 학습된 yolov5s.pt로 이미지 또는 영상을 flask로 API로 구현한 것이다.
      flask가 잘 설치 되었다면 'flask run'을 입력하여 실행해본다. flask에 대한 설명은 이 링크를 활용.
    • 'flask run'후 이제 웹브라우져를 열고 http://127.0.0.1:5000/ 로 이동

    Flask로 구현 된 샘플 UI

    • 이제 파일(이미지 또는 영상)을 업로드 해본다. Send 버튼을 누르면 Yolov5에서 이미지 processing을하고 Download 버튼이 활성화되어야 한다.
    • ERROR 발생 - file을 POST하는 과정에서 무언가 문제가 있는 것 같다.(아래는 해결 과정)
    <FileStorage: 'image.jpg' ('image/jpeg')>
    [2021-12-10 10:34:00,549] ERROR in app: Exception on /detect [POST]
    Traceback (most recent call last):
      File "c:\users\k10545\appdata\local\programs\python\python39\lib\site-packages\flask\app.py", line 2070, in wsgi_app
        response = self.full_dispatch_request()
      File "c:\users\k10545\appdata\local\programs\python\python39\lib\site-packages\flask\app.py", line 1515, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "c:\users\k10545\appdata\local\programs\python\python39\lib\site-packages\flask\app.py", line 1513, in full_dispatch_request
        rv = self.dispatch_request()
      File "c:\users\k10545\appdata\local\programs\python\python39\lib\site-packages\flask\app.py", line 1499, in dispatch_request
        return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
      File "C:\Users\K10545\projects-detection\YOLOv5-Flask\app.py", line 25, in detect
        subprocess.run("ls")
      File "c:\users\k10545\appdata\local\programs\python\python39\lib\subprocess.py", line 505, in run
        with Popen(*popenargs, **kwargs) as process:
      File "c:\users\k10545\appdata\local\programs\python\python39\lib\subprocess.py", line 951, in __init__
        self._execute_child(args, executable, preexec_fn, close_fds,
      File "c:\users\k10545\appdata\local\programs\python\python39\lib\subprocess.py", line 1420, in _execute_child      
        hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
    FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다
    127.0.0.1 - - [10/Dec/2021 10:34:00] "POST /detect HTTP/1.1" 500 -



    [해결] : subprocess 모듈 실행 오류
    디버깅을 진행해보니 subproess 모듈 실행에 오류가 있었다. Python 정식 Doc과 해당 git에서는 리눅스 환경 기준으로 작성된듯하다.
    Python에서의 Subporess 모듈은 현재의 소스 코드안에서 다른 프로세스를 실행하게 해주며 데이터 입출력을 제어하는 기능을 한다.
    여기서는 Yolov5의 detect.py를 실행하기 위함이다. 
    아래처럼 Windows 기준에 맞게 변경하였다. args 부분은 리스트 형태로 입력되기 때문에 ['dir']로 입력하였다.
    'Shell=True' 인자는 셀화면에 출력 여부인데, Windows에서는 필수라고 한다.
    (subprocess.run("ls")는 없어도 된다. 주석처리하였다. 그냥 파일 목록을 확인하기 위한 용도? 인것 같다. 왜 들어간지는 모르겠다.)
    참고 사이트

    샘플 이미지를 업로드하고 버튼을 클릭하자, image.jpg에 대하여 추론이 진행되었다! Download를 눌러 해당 결과를 확인해보면 성공이다.

     

    반응형

    댓글

Designed by Tistory.