DCL The Game의 레이스 결과를 자동으로 Slack에 게시

4263 단어 슬랙드론AutoML
안녕하세요. 드론 아저씨입니다. Drone Champions League (DCL) 이라고 하는 유럽 각지에서 드론 레이스를 개최하고 있는 프로 리그가 있습니다. DCL에서 출시된 드론 레이스 시뮬레이터, DCL The Game 유지합니다.

무슨 일이야? 



↓ 이런 것이 레이스 후에 나온다.

그것이 ↓처럼 투고된다.


어떻게 해?


  • 정기적으로 화면 캡처.
  • 레이스 결과 화면인지 여부를 결정합니다.
  • 타임이나 파일럿명을 취득한다.
  • Slack에 게시합니다.

  • 1. 정기적으로 화면 캡처.



    전체 프로그램은 Python으로 작성되었으므로 화면 캡처는 PIL의 ImageGrab입니다. DirectX 풀 스크린인데도 보통으로 제대로 취할 수 있다. PIL의 Image 객체가 되어 있으므로 후처리도 하기 쉽다.

    [Python] [Windows] Python으로 화면 캡처하기
    htps : // 코 m / 코아라 - 1 / / ms / 6 아 98298d793f22cf2 36

    2. 레이스 결과 화면인지 여부를 결정합니다.



    치마치마 픽셀 해석 순이 다르기 때문에 AutoML Vision 의 Single-Label Classification 로 기계 학습.

    게임 내용을 비디오 캡처한 후 1초마다 프레임 내보내기 작게 리사이즈.
    ffmpeg -i capture.mp4 -vf scale=256:-1 -vcodec png -r 1 images/%05d.png
    

    수동으로 분류, 라벨링 → Cloud Storage에 업로드 → 교육, 또는 튜토리얼 ↓
    h tps : // c ぉ d. 오, ぇ. 코 m / ぃ 시온 / 아우토 ml / 드 cs / 에드 게쿠 쿠스 rt

    필요한 것은 flow-result-complete 라벨만이지만, 다른 씬에도 라벨 붙여 보았다. 수가 상당히 치우치고 있다.


    훈련 후. 과학 학습 같은 느낌도 들지 않아 🤔 (실제로 문제 없음)


    모델을 다운로드하여 Docker에서 이동합니다. REST API로 이미지를 보내면 추론 결과가 JSON에서 반환됩니다.
    h tps : // c ぉ d. 오, ぇ. 코 m / ぃ 시온 / 아우토 ml / 드 cs / 고마워 rs-gcs

    내부적으로는 TensorFlow가 움직이고 있지만, 여기까지 전혀 TensorFlow 얽힌 코드 쓰지 않았다. PIL로 이미지를 읽고 HTTP를 요청합니다. 정밀도 문제 없음. 학습시간 2시간 정도. API 이용료 600엔 정도. 락틴!

    3. 타임이나 파일럿 이름을 취득한다.



    결과 화면을 얻을 수 있으면, 나머지는 거기에서 필요한 정보를 추출한다. 이미지에서 문자 정보를 추출하려면 OCR. 파이썬에서 OCR이라면 pytesseract가 클래식? Vision API에는 OCR도 있습니다. 그쪽이 정밀도는 좋지만 이번은 읽어내는 내용이 몹시 심플하기 때문에 pytesseract 로 부족했다.

    보통 전체 화면을 pytesseract에 먹이면 확실히 데이터가 돌아오므로 필요한 곳만 잘라낸 이미지를 먹이게 한다. 그리고 배경 흰색으로 문자 검은 쪽이 정밀도 높다 때문에 흑백 반전시킨다.

    영숫자만이라면 거의 틀리지 않고 읽을 수 있다. 가끔 파일럿 이름에 영숫자 이외를 사용하고 있는 사람 있으면 잘못된다. (시란인이므로 무시😅)

    상태 아이콘도 읽습니다.



    인간이 부족할 때는 과거의 인간의 리플레이가 고스트로서 등장. 어느 것이 고스트인지는 결과 화면의 아이콘으로 알 수 있다. 이것을 읽으려면 , 아이콘 표시 위치를 잘라낸 뒤 scikit-image의 structural_similarity 그리고 비교해 판정. 접속이 끊어졌을 때의 아이콘도 판정.

    4. Slack에 게시합니다.



    필요한 정보를 얻을 수 있으면 나머지는 성형하여 투고. 이미지 첨부로 투고할 때는 chat.postMessage 아니고 files.upload 네.

    무엇을 잡아?



    Slack에 게시하기만 하면 아직 이마이치이지만, Spreadsheet 라든지에 얽혀 가도록(듯이) 하면 여러가지 집계할 수 있어, 팀 연습이 완성됩니다 😉

    좋은 웹페이지 즐겨찾기