반응형

졸업프로젝트 🎓 11

[ 졸업프로젝트🎓 ] 기술블로그 총정리

졸업프로젝트 주제는 딥러닝 기반 언택트 학습 도우미 : 자동 채점 및 오답노트 생성 이다 자동채점 기능을 구현하기 위해서는 문제집 정확히 말하면 문제 별로 데이터 베이스에 데이터를 담고있어야 하고 우리가 사용한 5개년의 수능완성, 교육청 평가원 모의고사를 일일이 추출하기는 너무 비효율적이었다. 따라서 데이터베이스를 구축하기 위해 openCV를 이용, 자동으로 문제 영역을 추출하는 기술을 구현하였다. 또한, 카메라 스캔을 통해 주관식 답안, 문제정보가 이미지로 넘어오면 이를 ocr을 거쳐 채점 알고리즘 쪽으로 넘겨주어야 한다. 스캔기능은 프론트,문제정보, 답안 추출등의 기능은 YOLO에서, 채점 기능은 백엔드에서 구현되었다. 이 글은 YOLO에서 넘어온 이미지 데이터를 읽어 text화 하고, 정렬해 백엔드..

[ 졸업프로젝트 ] 카카오 vision API(OCR) 사용하기 feat.Colab

카카오 좋은 기업이네.. 사용할 이미지 결과 화면 [OCR] output:{ "result": [ { "boxes": [ [ 132, 249 ], [ 177, 249 ], [ 177, 288 ], [ 132, 288 ] ], "recognition_words": [ "12" ] }, { "boxes": [ [ 196, 254 ], [ 244, 253 ], [ 244, 277 ], [ 196, 278 ] ], "recognition_words": [ "EBS" ] }, { "boxes": [ [ 250, 252 ], [ 343, 252 ], [ 343, 278 ], [ 250, 278 ] ], "recognition_words": [ "수능완성" ] }, { "boxes": [ [ 352, 250 ], [..

#210217 많은 일이 일어났다

지금까지 한 일 1. 데이터 베이스 완성 문제집( 평가원 수능완성) 크롭 문제영역 추출한대로 딱 맞게 자르기 답지 크롭 답지는 문제와 다르게 페이지를 넘어가서 이어지는 경우가 빈번함 // 심하면 한페이지 전체가 한문제를 넘어가기도 그 어려운걸 해냅니다.. >_0 flag 이용해서 이 부분까지 완성! => 최종 검토까지 마치고 데이터베이스에 추가까지 완료 2. 프로토타입 기반으로 프론트 Figma 로 다같이 프로토타입 만들기 이를 기반으로 인류가 프론트 작업 중 나랑 유정이는 react native 스터디를 했으나 YOLO+openCV로 퇴출당함..ㅎ_ㅎ.. (솔직히 다행이라고 생각한다 프론트,,,,자신없어,,,) 3. 대망의 YOLO 및 실제 기술 파트 문제영역 인식 가로세로 직선 인식에 성공했다 이걸 ..

[ OpenCV + MNIST ] 손글씨로 쓴 숫자 인식하기 !

결론부터 말하면 정말 멍청하고도 단순한 실수로 애꿎은 CNN 을 괴롭히고 있었다 🥲 (언니가 미안해...) 지금 내가 하고 있는 작업은 프론트에서 받아온 원본 사진을 처리해서 문제 영역 자르기-> 자른 영역에서 네모 친 답영역 추출 -> 손글씨로 쓴 답 ocr 하기 이중에서 답영역 추출 + ocr 하기를 시도해 보았다. 일단 사용할 이미지는 이것이다. MNIST 모델 #MNIST 모델 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() # 각종 파라메터의 영향을 보기 위해 랜덤값 고정 tf...

[ OpenCV ] 가로 직선, 세로 직선 지우기 -> 문제 별로 크롭 && 문제 영역 확보해서 자르기

초기 화면 결과화면 과정 1. 이미지 불러오기 2. 문제집 위의 헤더 (문제 영역이 아닌 부분) 자르기 3. 가운데 세로선 기준으로 왼쪽 오른쪽 나누기 4. 문제영역 contour잡기 (왼쪽-> 오른쪽 순서) 5. 각 contour의 위쪽 좌표를 이용해서 현재 contour~ 다음 contour까지 영역 잡아서 자르기 (이걸 반복) 6. 헤더에서 페이지 수 읽어오기 //아직 성공 못했다. 이건 다 멍청한 pytesseract 탓이다 코드 0. 드라이브 마운트 #일단 드라이브 마운트 from google.colab import drive drive.mount('/content/drive') 1. 2. 이미지 불러오기 && 윗 부분 자르기 #이미지 윗 부분 자르기 def cropTop(image): src=..

[ OpenCV ] colab에서 이미지 읽어오기, 보여주기, 저장하기 // 공유드라이브 마운트

from google.colab.patches import cv2_imshow cv2_imshow(image) 개발을 하면서 정리하려고 했는데 어쩌다 보니 다 완성하고 기억 저장소 용으로 기록하게 되었다.. 그래도 이게 어디람 1. 드라이브 마운트 하기 from google.colab import drive drive.mount('/content/drive') 파일을 로컬에서 가져오지 않고 드라이브에서 가져올 거라 항상 마운트를 잊지 않도록해 ** 공유 문서함 마운트 하는 법 드라이브 마운트를 하면 내 드라이브에 있는 파일은 drive안에 뜨고 sharedDrive 라는 폴더도 뜨긴하는데 이 이상의 경로는 보이지 않는다. 이유는 모르겠고 해결 방법은 사용하려는 파일이 있는 폴더의 소유자 권한을 받으면 된..

[ 졸업프로젝트 ] #210112 문제집 크롭하기

일단 생각보다 진척도가 매우 높다 문제 크롭만 (솔직히 말하면 수능완성 교재만) 1주일+@ 로 계획해 두었는데 크롭+ 덩어리 만들기 방식으로 오늘 어느정도 완성했다. 어제 밤에 저 방식을 시도했을때의 문제점 1. 가운데 경계를 무시하고 덩어리들 끼리 가까우면 한 영역이 되어버린다 2. 위 아래의 무늬(..? 하튼 문제로서의 아무 기능이 없는 부분들)가 영역으로 인식이 된다 개선 아이디어 1. 위 아래 부분을 필요한 부분 외에 crop (문제집의 형식상 위아래 여백은 크게 변하지 않는다) 2. 가운데 라인을 기준으로 왼쪽 영역, 오른쪽 영역으로 나누어서 input으로 사용한다 양쪽여백 크롭 오른쪽 중앙의 " 확률과 통계" 부분이 문제 얘도 영역으로 포함되거나 개별 영역을 차지하는 경우가 있었다. +데이터 ..

[ OpenCV ] 이미지 영역 추출하기, 영역 그리기

import numpy as np import cv2 from matplotlib import pyplot as plt def contour(): #파일 불러오기 imgfile = '/content/drive/MyDrive/crop/suwan.png' img=cv2.imread(imgfile) imgray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #이미지 BGR에서 흑백으로 변환 edge = cv2.Canny(imgray, 150, 200) #Canny 알고리즘 이용 이미지의 edge를 검출 cv2_imshow(edge) contours, hierarchy = cv2.findContours(edge, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #이미..

[ OpevCV ] 이미지 흑백 변환, 저장하기

전체 코드 #드라이브 마운트 from google.colab import drive drive.mount('/content/drive') import numpy as np import cv2 from google.colab.patches import cv2_imshow def handle_image(): #이미지 불러오기 imgfile='/content/drive/MyDrive/crop/3dol.jpeg' img=cv2.imread(imgfile,cv2.IMREAD_GRAYSCALE) #흑백으로 불러오기 cv2_imshow(img) #화면상에 display cv2.imwrite('/content/drive/MyDrive/crop/3dol_bw.jpeg',img) #흑백으로 바꾼 이미지 저장 if __na..

[OpenCV] Colab 사용 이미지 가져오기

드라이브 내의 이미지를 불러오므로 드라이브 마운트를 해야한다. 드라이브 마운트 from google.colab import drive drive.mount('/content/drive') 드라이브 마운트를 해야함 import numpy as np import cv2 from google.colab.patches import cv2_imshow def handle_image(): #이미지 읽어오기 imgfile='/content/drive/MyDrive/crop/3dol.jpeg' img=cv2.imread(imgfile, cv2.IMREAD_COLOR) imgfile= cv2.cvtColor(img, cv2.COLOR_BGR2RGB) cv2_imshow(img) if __name__=='__main__'..