Flask에서 난프레 해독 앱을 만들어 보았다.
소개
난프레의 문제 이미지를 읽으면 해독하여 문제를 풀어주는 앱을 만들어 보았습니다.
개발 환경(일부)
Nampre 이미지의 숫자 영역 추출
난프레 문제의 1칸마다 수치 영역의 화상 취득은 OpenCV를 이용했습니다.
우선, 사각형의 영역 취득 화상을 그레이 스케일 해, 2치화합니다.
img_bgr = cv2.imread(image_path)
img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
# 二値化
_, img_2chi = cv2.threshold(img_gray, 200, 255, cv2.THRESH_BINARY)
# 数独表の抽出
t_x, t_y, t_w, t_h, img_bgr, img_2chi = get_rect_sudoku(img_bgr, img_2chi, image_path)
그런 다음 난프 문제의 정사각형 영역을 감지합니다.
def get_rect_sudoku(image_bgr, image_2chi, target_path):
image_bgr = cv2.copyMakeBorder(image_bgr, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=255)
image_2chi = cv2.copyMakeBorder(image_2chi, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=255)
contours, hierarchy = cv2.findContours(image_2chi, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
area_list = list(map(lambda x: cv2.contourArea(x), contours))
target_index = np.array(area_list).argsort()[::-1][1] # 面積が2番目に大きい矩形のindex
target_cnt = contours[target_index]
x, y, w, h = 0, 0, 0, 0
if target_cnt is not None:
x, y, w, h = cv2.boundingRect(target_cnt)
return x, y, w, h, image_bgr, image_2chi
나중에 사각형 영역을 9 × 9 등분하여 난프레 문제의 매스마다 이미지를 얻습니다.
숫자 판정
필기 숫자 인식으로 유명한 MNIST에서 학습한 모델을 이용하여 숫자 화상의 판정을 실시했습니다.
CNN의 아키텍처는 기억나지 않지만 어디서나 데려온 것입니다.
model.add(Conv2D(32, (3, 3), padding="same", input_shape=(28, 28, 1)))
model.add(Activation("relu"))
model.add(Conv2D(32, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(64, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(Conv2D(64, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(128, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(Conv2D(128, (3, 3), padding="same"))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(100))
model.add(Activation("relu"))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))
model.compile(loss=categorical_crossentropy,
optimizer='Adam',
metrics=['accuracy'])
난프레 문제의 해답 취득
난프레 문제를 푸는 로직도 스스로 만드는 것은 힘들기 때문에 다음을 사용하셨습니다.
고래 비행 책상 Python으로 난프를 풀어 보자.
이하의 생각에 근거하고 있는 것 같습니다.
화면 이미지
왼쪽이 업로드한 난프레 문제 이미지로 오른쪽이 1칸마다 숫자 판정한 결과입니다.
저기 바르게, 거기에 실패합니다.
소스 코드
소스 코드는 여기에 있습니다.
htps : // 기주 b. 코 m / 타케 9999 / 스도쿠 _ 오 cr
이하를 참고로 했습니다.
프론트 부분은 거의 둥글게 사용하고 있습니다.
htps : // 코 m / 카즈야 _ 얼룩 / / ms / f5 에 f5 훗 d850b8b9 에 7 아 81
Flask 이미지 업로드 부분
htps : // 코 m / 케이 모리 야마 / ms / 7c935c91 95d857714fb
Reference
이 문제에 관하여(Flask에서 난프레 해독 앱을 만들어 보았다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/take9999/items/ae927d5c869496623edc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)