망키로도 아는 포켓몬 실루엣 퀴즈 만드는 법

소개



전국 1억 2623만 명의 천 주머니인 타이태 팬 여러분, 안녕하세요
@garnetddolphin 이라고 합니다.
평상시는 성과 사쿠라와 사과의 거리 으로 엔지니어를 하고 있습니다.
여러분은 포켓몬을 좋아합니까?
성별 불문하고, 많은 분이 한 번은 플레이했다/본 적이 있는 작품인 것은 아닐까요.
이 기사에서는 그런 포켓몬 애니메이션으로 CM 컷시에 흐르고있었습니다.
「이 포켓몬 누구야?」를 실장해 보았으므로 순서도 포함해 소개합니다.

개발 환경


  • Mac OS X 10.14.5
  • Python 3.7.3
  • OpenCV 4.1.0

  • 출처



    구현



    포켓몬 이미지 얻기



    Github에 이미지를 올리고 계시는 분들로부터 빌렸습니다.
    이번에는 초대 151마리만 출제해 나가기로 합니다.

    이미지에서 윤곽 추출


    /path/to/dir/ 는 각자 읽어 주세요.

    gray.py
    import cv2
    import os
    
    # パス
    import_path = '/path/to/dir/pokequiz/images'
    export_path = '/path/to/dir/pokequiz/gray'
    
    # ディレクトリ読み込み
    for filename in os.listdir(import_path):
        # 画像ファイル取得
        if os.path.isfile(os.path.join(import_path, filename)):
    
            # 画像ファイルをグレースケールで読み込み
            image_path = 'images/' + filename
            img = cv2.imread(image_path, 0)
    
            # 平坦化
            gray = cv2.GaussianBlur(img,(11,11),0)
    
            # 二値化
            ret, img_thresh = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY)
    
            # 二値化した画像の保存
            filename = filename.replace('.png','_gray.png')
            image_export_path = 'gray/' + filename
            cv2.imwrite(image_export_path,img_thresh)
    

    여기를 실행하면 이렇게 됩니다.

    처리 전





    처리 후





    json 파일 만들기



    createJson.py
    import glob
    import os
    import json
    
    os.chdir('/path/to/dir/pokequiz/gray/')
    
    index = 0
    file_list = sorted(glob.glob('*.png'))
    data = {}
    for i in range(len(file_list)):
        data[i+1] = {
            "image": file_list[i],
            "name": ""
        }
    
    os.chdir('/path/to/dir/pokequiz/')
    name_json = open('name.json', 'w')
    json.dump(data, name_json, indent=2)
    

    여기를 실행하고 실루엣 퀴즈의 대답(포켓몬 이름)을 입력합니다.

    name.json
    {
      "1": {
        "image": "001Bulbasaur_gray.png",
        "name": "フシギダネ"
      },
      "2": {
        "image": "002Ivysaur_gray.png",
        "name": "フシギソウ"
      },
      "3": {
        "image": "003Venusaur_gray.png",
        "name": "フシギバナ"
      },
      "4": {
        "image": "004Charmander_gray.png",
        "name": "ヒトカゲ"
      }
      .
      .
    }
    

    퀴즈 출제



    여기까지 할 수 있으면, name.json 중에서 랜덤으로 포켓몬을 출제해 올리면 OK입니다.

    quiz.py
    import sys
    import random
    import glob
    import os
    import json
    import matplotlib.pyplot as plt
    import cv2
    
    # 1~151の間でランダムに選ぶ
    rand = random.randint(1,151)
    
    # name.jsonの読み込み
    f = open('name.json', 'r')
    jsn = json.load(f)
    
    
    # 出題する画像の読み込み
    os.chdir('/path/to/dir/pokequiz/gray/')
    image_file = jsn[str(rand)]["image"]
    img = cv2.imread(image_file)
    cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
    cv2.imshow('image',img)
    cv2.waitKey(0)
    
    
    answer = input("だーれだ? >> ")
    if answer == jsn[str(rand)]["name"]:
        print("正解")
    else:
        print("残念  正解->" + jsn[str(rand)]["name"])
    
    cv2.destroyAllWindows()
    

    실행 결과



    정답





    실패





    참고문헌


  • htps : // m / fuck / ms / a d5 858cb f8159829 9
  • htps : // 이 m / 요시 케타 바시 / ms / 5722395218

  • 감사의 말


  • 이 세상에 포켓몬을 만들어 준 닌텐도님, 감사합니다.
  • 이불 寅泰님. 개발하는 동안 최고의 배경 음악이었습니다. BEAT SWEET은 의존성이 있습니다 ...
  • 좋은 웹페이지 즐겨찾기