망키로도 아는 포켓몬 실루엣 퀴즈 만드는 법
소개
전국 1억 2623만 명의 천 주머니인 타이태 팬 여러분, 안녕하세요
@garnetddolphin 이라고 합니다.
평상시는 성과 사쿠라와 사과의 거리 으로 엔지니어를 하고 있습니다.
여러분은 포켓몬을 좋아합니까?
성별 불문하고, 많은 분이 한 번은 플레이했다/본 적이 있는 작품인 것은 아닐까요.
이 기사에서는 그런 포켓몬 애니메이션으로 CM 컷시에 흐르고있었습니다.
「이 포켓몬 누구야?」를 실장해 보았으므로 순서도 포함해 소개합니다.
개발 환경
출처
구현
포켓몬 이미지 얻기
Github에 이미지를 올리고 계시는 분들로부터 빌렸습니다.
이번에는 초대 151마리만 출제해 나가기로 합니다.
이미지에서 윤곽 추출
/path/to/dir/
는 각자 읽어 주세요.
gray.pyimport 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.pyimport 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.pyimport 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()
실행 결과
정답
실패
참고문헌
포켓몬 이미지 얻기
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()
실행 결과
정답
실패
참고문헌
감사의 말
Reference
이 문제에 관하여(망키로도 아는 포켓몬 실루엣 퀴즈 만드는 법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/garnetddolphin/items/393fdc907d7a9f59d5cb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)