GithubHelp home page GithubHelp logo

kookmin-sw / 2018-cap1-2 Goto Github PK

View Code? Open in Web Editor NEW
6.0 6.0 1.0 91.49 MB

코웨이 (Coding Wherever Easily)

Home Page: https://kookmin-sw.github.io/2018-cap1-2/

Java 85.72% Python 8.61% Shell 5.66%
java ocr opencv server

2018-cap1-2's People

Contributors

dependabot[bot] avatar gychoics avatar injeongchoii avatar marching0531 avatar occidere avatar shinjong93 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

hohyunjun

2018-cap1-2's Issues

인식 가능한 Pseudo code 간결화 작업

인식 가능한 Pseudo code 간결화 작업

개요

초창기에 얘기했던대로 여러 종류의 pseudo code를 받아 처리하게 하면, 지나치게 복잡해지고 혼란을 야기할 수 있음.
따라서 인식가능한 Pseudo code를 1개로 통일시키는 방향을 고려해볼 것.

Diagram

  • 기존 구조
    image
  • 변경 후 구조
    image

기대 효과

  • 사용자의 사용법 습득에 있어서의 혼란을 방지하여 learning curve를 낮출 수 있음
  • 불필요한 전처리 과정을 배제하여 인터프리팅 속도 향상 가능
  • 개발 시 발생할 수 있는 혼란 감소 가능

한계점 및 해결방안

  • 한정된 문법으로 인한 범용성 저하 -> Tutorial 및 사용법 페이지를 제공하여 집중화.
  • 사람마다 Pseudo code 형식이 서로 달라서 받아들이는 pseudo code 형식을 신중히 정해야 함 -> 제일 많이 쓰이는 Pseudo code 인식을 최우선적으로 고려할 것.

Android - Server 간 통신 프로토콜 정립

Android - Server 간 통신 프로토콜 정립

정해야 할 것?

  • 어떤 통신 이용할 것인지? (TCP/UDP)
  • 프로토콜 구조 정의 (Header/Contents)

비고

  • 기타 추가가 필요한 내용은 본 게시글에 직접 추가 바람.

Android - Server 간 Packet 프로토콜 정의

Packet 프로토콜 구조

  • Packet 클래스로 생성하여 관리한다.
  • capstone.kookmin.commons.Packet 패키지로 관리

Header 부분

  • int statusCode; // 상태코드
    • 100: 성공
    • 200: Logical Error
    • 300: System Error
    • 500: Send Images
  • int errorLines[]; // 빨간 줄 칠 에러 발생 라인 정보가 담긴 배열

Body 부분

  • String pseudoLines[]; // 성공 또는 Logical Error 시 보여줄 수도코드가 담긴 배열
  • String javaLines[]; // 성공 시 보여줄 자바코드가 담긴 배열
  • byte images[]; //처음 안드로이드에서 사진을 보내기 위한 바이트 배열

참고

image

암묵적 의미가 동일한 기호처리

for 구문에서 ~와 동일한 의미를 가지는 -> : 기호가 들어왔을 때,
<현재>

  • 인터프리터 대상에서 제외되는 ->, : 기호를 그대로 반환해서 로지컬 에러 발생

이를 영상처리 단계에서 ->, : 기호를 ~ 기호로 대체 변환해줘
인터프리팅 성공 가능성을 높이는 것에 대해 고려.

  • =, <=, != 기호를 하나의 기호로 합치는 것이 기호 표기 상 가능하다면
    해당 기호들도 고려 대상에 포함.

Python 영상처리 데몬 개발

Java server 내부에서 Python 영상처리코드 호출 시 Python 외부 라이브러리 관련 문제로 인해
Java server와는 별개로 새로 들어오는 pseudo code image file을 해당 폴더에서 인식하는
Python 데몬 개발 필요

Interpreter db 로드 부분 수정 필요

Interpreter db 로드 부분 수정 필요

  • 원래 db 패키지 내부를 읽어오게 하였으나, jar 파일에서 읽어오는 것이 아닌 인터프리터를 불러온 쪽(서버)의 폴더를 읽어오는 문제 발생
  • 가장 간단한 방법으로는 예전처럼 클래스 명을 직접 입력하는 것

선행한 개별 프로젝트들을 공식 깃으로 이전

선행한 개별 프로젝트들을 공식 깃으로 이전

  • 기존 프로젝트의 로그가 유지된다.

How to

상황: 2018-cap1-2/src 내부에 Coway/ 폴더를 생성해 로그를 유지한 상태로 Coway 프로젝트를 이전하고자 함

  1. remote 등록 & fetch
[2018-cap1-2 (master)]$ git remote add Coway ../Coway/
[2018-cap1-2 (master)]$ git fetch Coway
From ../Coway
 * [new branch]    master    ->    Coway/master
  1. 임시 브랜치 생성
[2018-cap1-2 (master)]$ git checkout -b temp Coway/master
Branch temp set up to track remote branch master from Coway.
Switched to a new branch 'temp'
  1. Coway 프로젝트 내부 내용을 Coway 폴더를 생성한 뒤 내부로 옮기고 커밋
[2018-cap1-2 (temp)]$ mkdir Coway
[2018-cap1-2 (temp)]$ git mv * Coway/
[2018-cap1-2 (temp)]$ git add .
[2018-cap1-2 (temp)]$ git commit -a -m "move Coway Project into nested Coway dir"
  1. master 브랜치에서 병합
[2018-cap1-2 (temp)]$ git checkout master
Switched to branch 'master'
[2018-cap1-2 (master)]$ git merge temp       // 충돌 알아서 해결
[2018-cap1-2 (master)]$ git push origin master
  1. 뒷정리
[2018-cap1-2 (master)]$ git remote remove Coway
[2018-cap1-2 (master)]$ git branch -D temp

참고: http://gypark.pe.kr/wiki/Git/%EC%A0%80%EC%9E%A5%EC%86%8C%EB%B3%91%ED%95%A9

발표 준비 및 대본 녹음

200초 내외로 발표 준비 및 대본 녹음 완료해야함.

현재 측정으로는 220초 언저리에서 완료되고 있으니 녹음을 들어보고 피드백 바람.

영상처리 5: 라인별 윤곽선 최종 정렬 및 병합

TODO)

  1. 동적 리스트 생성을 활용하여 이미지에서 도출되는 라인의 갯수에 맞춰 리스트를 생성할 것.

  2. 라인 리스트 별로 x축을 기준으로 정렬하여 좌 -> 우 순서로 윤곽선을 정렬.

  3. 윤곽선의 중심을 기준으로 일정거리 이내에 발견되는 윤곽선을 병합할 것(i / j / = 등의 문자)

PROBLEM)

  1. 동적으로 리스트를 생성하는 것은 어떻게 구현할 것인지?

  2. 라인별 리스트에 윤곽선들은 어떻게 넣을 것인지?

  3. 윤곽선의 중심을 기준으로 일정거리 이내를 탐색하는 과정에서 '일정거리'를 어떠한 값으로 설정을 할 것인가? 현재 사용중인 이미지에서만 가능한 방법이 아니라 보편적으로 사용가능한 방법인가?

  4. 3줄 이상의 라인을 가진 이미지에 대한 테스트가 필요.

AWS 서버 신청할 것

AWS 서버 신청할 것

  • (필수) 개발서버
  • (선택) 운영서버

Required Specifications

  • OS: Ubuntu 16.04+ or CentOS 7.3+
  • RAM: 16GB ~ 8GB
  • Storage: HDD 100GB+
  • Network: 1Gbps ~ 100Mbps
  • GPU(Optional)

예약어 처리

Pseudo code에서 입력 받는 Java 예약어 처리 완성

  1. 인식할 예약어 선정
  2. 예약어 사전 구축
  3. 예약어 매칭 구현

영상처리 4-1 윤곽선 통합 및 정렬

방법 1) 현재 윤곽선 기준으로 리스트 내부 전체 탐색 -> 복잡도 n^2

방법 2) 현재 윤곽선 기준으로 범위 정해서 리스트 탐색 -> 1번 보다는 복잡도 우수...?

복잡도가 염려되긴 하나, 들어오는 코드의 길이와 그것에서 추출되는 윤곽선 갯수를 고려해보면 100개 남짓.

n^2의 복잡도를 가져도 수행시간에서 유의미한 차이가 발생하지는 않을 가능성이 높음.

Server 내부에서 Interpreter 호출 할 수 있도록 할 것

Server 내부에서 Interpreter 호출 할 수 있도록 할 것

Interpreter.jar를 Server의 dependency로 추가하여 호출할 수 있도록 할 것.

import capstone.kookmin.interpreter.parse.Parser; // Interpreter 라이브러리 import
......
Parser parser = Parser.getInstance();
String converted = parser.parse(pseudoCodePath); // pseudoCodePath: /home/user/dir/pseudo.txt

영상처리 - 4 윤곽선 개선

i , = 등 과 같이 하나의 글자이지만 2개의 부분으로 떨어져있는 경우 윤곽선이 2개로 잡히는 문제가 발생함.

이를 해결하기 위한 코드의 개선이 필요.

가능한 경우 및 오류 관련 상세 설명

  1. 성공 -> 멀쩡히 잘 됨

  2. 로지컬 에러 -> 수도 코드 문법에 잘못이 있거나, 혹은 수도 코드가 멀쩡히 추출되지 않았을 경우

  3. 시스템 에러 -> 통신 등 기타 에러

2번 에러 관련하여 논의가 필요합니다.

수도 코드가 멀쩡히 안 나오는 경우라는 것은 글씨가 이상하거나 혹은 사진이 잘못 찍혀서 인식이 불량한 경우를 뜻합니다.
이러한 경우에 일단 수도 코드를 추출하여 잘못된 수도 코드를 반환하여 줄 것인지 아니면 시스템 에러로 반환 할 것인지에 대한 논의도 필요하며, 전자의 경우로 진행할 경우 어떤식으로 통신을 하고 블랭크 라인이 들어오는 상황이 발생할 가능성이 있어 다양한 논의가 필요할 것입니다.

추론 가능한 변수 타입 설정

반복문 내부에서 for(i = 0 ~ n) 이라고 적을 경우 변수 i를 int i로 변환가능할 수 있도록 구현이 필요함.

추가설명)
a = b 와 같이, 변수 타입에 대한 서술 없이 할당하는 구문이 나왔을 때,
b의 string을 읽어들여 첫 번째 string 에 따라 분류

  1. string
    1 - 1. true , false 인 경우 - boolean
    1 - 2. new 인 경우 - 그 뒤에 서술되는 객체 타입
    1 - 3. null 인 경우 - object 타입
    1 - 4. 그 외 string - string
  2. 숫자
    2 - 1. '.'을 포함하는 숫자 - double
    2 - 2. 그 외 int - int
  3. {}
    -- 내부에 들어있는 값에 맞는 변수 타입의 배열

영상 처리 - 8 최종 마무리

구글 비전 api를 활용하여 텍스트 추출을 진행하고, 정밀도를 향상 시킬것.
테스트 케이스를 구축
전처리간 발생가능한 에러 발견 및 미비한 부분 수정 요망.

메서드 콜, 예약어 맨 뒤에 세미콜론(;)을 자동으로 붙여주는 기능 개발

메서드 콜, 예약어 맨 뒤에 세미콜론(;)을 자동으로 붙여주는 기능 개발

ex)

break -> break;
e.printStackTrace() -> e.printStackTrace();

구현 계획

  • 소괄호로 끝나는 경우 무조건 세미콜론 붙이게 한다.
  • 그 이외엔, 예약어 사전에 있는 경우(break, continue 등)에만 세미콜론을 붙이게 한다.

비고

  • 기타 사항 있을 시 기술

브랜치 관련 상세 설명

<이름>_<번호>의 형식으로 통일하고자 하며, 번호는 다른 사람들과 반드시 같아야할 필요 없음.

생성하는 브랜치마다 번호를 증가시켜서 한눈에 가장 최근의 브랜치가 어느 브랜치인지만 확인 할 수 있으면 됨.

예를 들어 IP_<번호>로 영상처리 관련 브랜치를 생성하고 있는데, 이슈 번호에 따라 <번호> 부분이 변경되고 있고 현재 3번째 브랜치에서 작업중. 숫자가 가장 큰 브랜치가 최근 작업하고 있는 브랜치.

파이썬 영상처리 -2- 이미지 잡음 처리 및 명확하게 전처리

현재까지의 코드로는 글자 이미지와 종이가 명확하게 구별이 잘 되지 않음.

또한 히스토그램 분포가 들어오는 이미지의 종류에 따라 다양하여 일괄적으로 임계값을 적용할 수 없음.

모든 이미지에 대하여 일정한 임계값으로 처리할 수 있어야 자동화가 성립됨.

각자 개발할 브랜치 생성하며 개발하기

<이름>_<브랜치 번호>의 형식으로 이름 짓고 완성되면 마스터에서 합치는 방식으로 합시다.

성적에 반영하기 위해 작업이 완료된 브랜치는 닫지 말고 유지해야함.

가능한 현재 해결해야하는 목표를 이슈에 설정하고 그 번호를 따라주기를 바랍니다.

예시로 나는 영상처리 3번 이슈 해결 예정이므로 브랜치는 IP_3을 사용할 예정입니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.