프로젝트 일자  : 2005-11-29
소요기간         : 3개월
용도               : SSM 창의 과제
개발인원         : 정명수, 김기석, 이상민, 고태경 총4명

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

임베디드 영상처리

사용자 삽입 이미지

임베디드 동영상 플레이어

사용자 삽입 이미지

테터툴즈와 연동하여, 보드에서 찍은 사진을 바로 웹으로 전송. 가지고 다니는 PMP를 통하여 테터툴즈와 같은 웹블로깅을 바로 할 수 있는 기능.

사용자 삽입 이미지

임베디드 플래시 플레이어. 보드상에서 플래시 동영상을 즐길 수 있도록 한다.

사용자 삽입 이미지

사진첩. 웹과 현재 임베디드 보드안에 사진들을 관리한다

사용자 삽입 이미지

네비게이션. 영상처리, 디비관리, 플래시 및 동영상, MP3플레이어등으로 이동 할 수 있게 한다.

< 개발 배경 및 목적 >
디지털 기기의 발전으로 데이터의 양은 증가 추세에 있는 반면에 이를 수용할 수 있는 임베디드 장치는 컴퓨터를 사용해야 하는 외장형 하드디스크나, 플래시 메모리 정도이다. 이와 같이 단순한 파일 교환형태만 가능한 장치는 사용자 인터페이스 측면이나 기타 부분에서 그 한계를 가지고 있고, 이를 해결할 수 있는 상호간 데이터 파일을 선택적으로 전송할 수 있는 장치는 극히 드물다. 그래서 본 프로젝트에서는 임베디드 장치 상호간의 미들웨어 시스템을 개발하고 구현하는 것을 목적으로 하고 있다.

< 주요특징 >
a) pc없이 usb host 기능으로 임베디드 장치와의 선택적인 파일 전송
b) 이미지 파일의 이미지 프로세싱
c) 이미지 프로세싱된 영상을 pc로 전송할 필요 없이 Web에 개시가능
d) usb를 이용한 데이터 고속 입출력 가능
iPad <-> PC , ums (dica ,mp3,외장disk)<->iPad
e) software codec을 이용한 mpeg4,mpeg2,mpeg1 format의 동영상 재생
f) ID3 Tag 및 mpeg info 정보를 표현한 mp3 플레이어
g) playlist 관리로 선택적 파일 재생
h) Exif 정보표현으로 이미지 파일 상세정보 표현 가능
i) iPad에서 category 관리 및 Web DB 관리
j) windows manager 프로그램으로 손쉬운 pc와의 데이터 송수신
k) 한글 오토마타를 이용한 한글 표현

< 기능 차별성 >
임베디드 미들웨어 시스템과 각종 멀티미디어 플레이어 기능 및 이미지 편집기능을 이용하여 iPad에서 무선네트워크를 이용 미니 블로그의 DB에 직접 개시할 수 있다는 것이 장점으로 second 장치가 아닌 First 장치로 구성될 수 있다.

a)iPad는 임베디드 시스템의 장점인 휴대성을 살려 언제 어디서나 내 사진을 미니 홈피에 올릴 수 있도록 고안 되었다.
b)단순히 찍은 사진을 올리는 것이 아니라 필터, 이펙터, 사이즈 조절 기능이 첨부되어 원본의 사진을 자신의 스타일에 맞게 편집하여 개시할 수 있다.
c)멀티미디어 기능 중 mp3,동영상 재생 기능을 같이 첨부하여 pmp나 mp3 player와 같이 단순 기능에 한정되어 있지 않고 conversions 개념으로 사용될 수 있다.
d)usb기능중 OTG 기능으로 임베디드 장치 상호간의 파일 복사는 가능하지만 선택적으로 리스트를 보면서 파일을 복사, 삭제하는 기능이 있는 제품은 없다. 하지만 iPad는 자체 하드디스크로 마운트한 외부 장치에서 파일을 복사, 삭제가 가능하며 외부장치(CF,ums)로의 복사, 삭제가 가능하다.
e)사용자는 휴대장치를 통해 자신만의 선호 이미지들을 가지고 다른 사용자에게 보여주기를 원하는 경우가 많다. 디지털 카메라는 자신의 이미지를 보여주기에는 LCD화면 크기가 협소하며, 일반 LAPTOP 컴퓨터로는 카테고리별 또는 앨범별로 분류할 수 없고 저장장치의 크기가 작다. PMP 나 mp3 player도 위와 마찬가지 일 것이다. iPad는 위와 같은 불편사항에 초점을 맞추어 이를 개선하는 것에 목적을 두고 개발하였다.




테터툴즈 연동을 위한 PMP의 DB 엔진

사용자 삽입 이미지
DB Engine : MySQL Sever와 연동하여 iPad에서 관리하는 쿼리와 통신, 데이터를 처리하게 된다.
※ 사용자 DB 처리
- 사용자 ID, 접근권한, Password, server lacation등을 설정 관리 한다.
※ 이미지 DB 처리
- IPad에서 이미지 프로세싱된 파일들의 위치를 웹서버의 물리적인 위치와 맵핑하여 이미지와 정보를 추가, 갱신처리한다.
※ 자체 DB 관리
- IPad 타겟 보드 내에서 MySQL의 데이터를 백업 받거나 또는 갱신하거나, 테이블 전체를 드랍할수 있도록 DB에 관련된 작업들을 수행한다.
※ 카테고리 관리
- 웹 브라우져를 통하여 사용자에게 표시될 이미지 그룹 또는 카테고리를 삽입, 삭제 저장하는것을 관리하며, Sub 카테고리를 생성할수 있도록 관리 한다.
 
Socket  : 사용자에게 보여지기 위해서 일정한 방식으로 웹서버와 통신해야하는데 소켓의 주된 역할은 IPad 이미지 전송이다. IPad 이미지 전송은 사용자의 한글, 또는 웹형식에 맞지않는 이미지 파일 이름을 인코딩하고 DBEngine과 연동하여 웹서버의 특정 위치에 삽입하고 DB Engine으로부터 위치를 확인 받는다.

MySQL Sever : MySQL 서버는 IPad에서 접근된 쿼리를 처리하며, PHP로 작성된 Tetter tools와 함께 연동하여 사용자가 웹브라우져에 표시, 또는 데이터를 처리 하게 된다.

※ DBEngine Architecture

사용자 삽입 이미지


Gtk+는 임베디드보드의 특성상 C로 구현되어 있으나 상속 Tree등을 C를 사용하여 OOP에 가깝게 설계되었다.

우리가 제작하는 DBEngine도 마찬가지로 생성자와, 파괴자등을 포함하고 각 UI 프로그램 또는 각 모듈간에 통신을 하기 위해 Singletone으로 생성되어 있으며, 모든 파일에서 전역변수를 줄였다.

엔진의 생성자에서는 자신의 포인터를 참조하여, 이미 생성된것이라면 다시 불리지 않도록 처리하여 여러번 중복으로 엔진을 생성하여 디비에 접근하는것을 차단했다.
엔진은 서버의 테이블의 이름과 연동하여 자신의 쿼리 상태를 체크하고, 시작시 사용자로부터 저장된 파일스트림으로부터 엔진을 초기화 할수 있도록 설계 되었다.
현재 UML은 개괄적인 축소판이며 실제 프로그램 구현상에서는 ImageManager에서도
엔진과 마찬가지로 OOP스타일의 객체를 생성하여 서로 통신하게 한다.

원격지 데이터베이스에서 쿼리된 내용은 CategoryInfo 객체에 담기게 되며 ManagerWindow와 리스트로 통신하게 된다.
ManagerUtil은 main과 gtk의 시그널 처리를 위한 콜백에서 사용하는 operation등을 처리하기위해 하나의 객체로 사용하고 있으며, 일종의 Trace bullet으로 차후 리펙토링을 통해 다시 몇 개의 객체로 분리될 예정이다.

우리는 일반적인 임베디드 C 스타일을 설계에서 중복을 방지하고, 전역 상태 또는 변수를 가급적 자제하여 프로그램의 안전성을 꾀하고 있다.

 Image Viewer & Editor

사용자 삽입 이미지

1. 휴대성을 가진 장치들이 증가하고 다양화 됨에 따라 장치가 가지고 있는 이미지들을 쉽게 확인하고 이미지 처리 해야 할 경우가 많아졌음.
2. 이에 iPad는 휴대장치에서 실시간 이미지 처리를 하여 저장하게 하고 각각의 이미지를 육안으로 확인하게 하여 사용자의 편의를 도모하였음.
3. 디바이스들의 메모리 또는 물리적 저장장치의 크기가 현존히 증가하였다고 해도 이미지의 퀄리티가 증가하고 그 양이 많아 짐에 따라 디바이스에서 자신이 촬영 또는 만들어낸 특정 이미지를 제외한 더미(Dummy) 이미지들을 즉각 처리 해야할 경우를 위해 iPad는 디바이스에서 즉각 이미지들을 분류하여 사용자의 공간을 확보 할수 있게 한다.
4. Image Viewer 는 장치내에 저장되어 있는 image file의 내용을 간편히 확인하고, 필요한 경우 간단한 편집을 할 수 있는 기능을 추가하였다.
5. Embedded system에 6.4inch color LCD를 장착함으로서 실사 size의 사진을 감상 가능하도록 구성하였다.
6. 또한 digital 사진의 특성상 후보정을 가능하게 system을 구성함으로서 embedded 기기 에서 file의 편집, 삭제, 확인, web개시 까지 모두 가능하게 구성하였다.
7. 디지털 사진에서 이미지를 개인 PC로 옮겨 다시 이미지를 에디팅 또는 처리 하지 않고 임베디드 보드상에서 바로 이미지를 처리 하기 위해 Batch Image Processing 또는 특정 기능을 수행하는 Image Filter 등을 제작하였다.
8. Image Viewer의 모든 GUI는GTK+2.0으로 구현되었다.


※ iPad Image Manager
- Image Filter는 Image Library중 공개 library인 Imlib 1.9.15를 Embedded linux에 맞게 porting 하여 몇몇 Image filter를 구현하였으며 배치 이미지 처리(Batch Image Processing)을 위한 wrapping code 및 Glue code를 생성하였다.
- 단순히 이미지 필터를 사용하는것이 아니라 사용자가 촬영한 사진을 전문가 사진의 이미지로 흉내내는 특정 느낌의 연출필터(따뜻한 느낌, 쿨한 느낌등)를 구현
- 배치 이미지 처리(Batch Image Processing)
  사용자가 촬영한 특정한 몇몇 이미지 또는 그룹을 특정 기능 또는 필터, 이미지 리사이즈를 위해 한번에 여러효과를 적용하여 임베디드 보드 상에서 처리 및 구현 할수 있도록 지원한다.
- 자동화 처리 및 특정 기타 필터
  현재 작업중인 내용으로 사진의 크기에 따라 적절한 리사이즈를 처리 할 수 있도록 하게 하며, 사용자의 로고, 텍스트등을 입력하여 이미지를 처리에 포함 될수 있도록 지원한다.
- DBEngine과 연동
  이미지 처리후 웹서버의 특정 위치 또는 특정 텍스트 내용을 저장하고 확인하기위해 iPad의 엔진과 함께 연동하여 이미지 처리 한다.

Flash Player, MP3 Player, 동영상 Player 기타 PMP기능 및 개발 과정과 기술적인 요약을 보실려면 아래 문서를 참조 하실 수 있습니다. 아래 문서는 당시 개발 보고서와 각각 파트별로 처음 프로토타입에 대한 설명들을 포함하고 있습니다. 개발에 관한 좀 더 깊은 이슈를 원할 경우 개인적으로 질문 바랍니다.

DB Engine.hwp

테터툴즈와 PMP 연결 DB Engine부분

※ Image Viewer.hwp

임베디드 이미지 뷰어에 관련 보고

i pad 개발 보고서.doc

I PAD 개발 보고서 / 한글 오토마타 및 키보드, 각종 플레이어 및 프로토콜 분석등 모두 포괄

프로젝트 일자  : 2005-10-01
소요기간         : 3개월
용도               : RSA 외주 개발
개발인원         : 정명수, 경승현, 이재욱, 이상윤,  총4명
프로그램명      : CodeWizard

프로그램 목표 : 언어를 모르는 사람들이 레고 처럼 블럭들을 조립하여 하나의 프로그램을 제작 하도록 함. 각 블럭들은 C언어와 같은 형태를 띄며 각 블럭들은 패키지로 저장이 가능하며 서브모터, 컨트롤러, 외부 함수들을 불러 올 수 있도록 함.



사용자 삽입 이미지

손쉬운 프로그램 조립 기능

1. 좌측에서 언어의 기본 구문들을 뜯어서 초록색 바탕화면에 블럭 조립 하듯이 끼워 놓도록 함.
2. 각 블럭들은 C언어에 맞도록 Identity 되도록 하고 각 블럭들은 소스를 유지하는 엔진에서 관리됨.
사용자에게 조립된 블럭들은 다시 분리 되고 특정 위치에 조립하여 끼워 넣을 수 있으며 사용자가 원하는 만큼을 복사, 삭제, 삽입, 저장을 할 수 있게 하고 각 단위는 모두 패키지라는 서브 블럭 조직으로 독립 모듈처럼 저장, 배포, 설치 할 수 있음.
3. 사용자에게 의해서 생성된 프로젝트는 모두 위저드에 의해 저장이 가능하고 다시 로드 될시에 기존 제작되었던 조립도 그대로 로딩.


사용자 삽입 이미지


Onclick 컴파일 및 다운로드 , 실행

1. 사용자가 블럭을 이용하여 만든 프로그램이 실제 소스상으로는 어떤 모양을 띄는지 보여줌.
2, Lexical analyzer 자체 제작. Syntax Highlighting기능이 포함된 Editor로 view기능 제공.
3. gcc 컴파일러에 의해 기존 라이버리 및 오브젝트와 링크 하여 이미지를 생성시켜줌.
4. 컴파일 된 내용을 target board로 다운로드 하도록 하고 코드위저드 프로그램 내부에 터미널 기능도 포함하고 있어 target board 및 로봇을 동작 시킬 수 있음.

사용자 삽입 이미지


사용자 삽입 이미지

기타 70가지 사용자 편의를 위한 요구사항 만족

1. RC 서브 모터 조절.
2. DC 모터 및 콘트롤러 세팅.
3. 각종 주변 장치에 대한 UI를 따로 제공
4. 리모콘 프로그램 가능




p.s) 2년이 넘은 일이라 기억은 나지 않지만 기타 제작된 문서를 포함하여 드라이버, Service까지 제공 했었음. 제작된 엔진의 문서만 100페이지 분량. 각종 UI 컴포넌트 및 컴파일러, C언어 파서 및 하이라이팅이 들어가는 에디터까지 포함하여 제작.
프로젝트 일자  : 2005-08-02
소요기간         : 3개월
용도               : SSM 창의 과제
개발인원         : 정명수, 김형욱, 이상윤. 총3명
기타사항         : 미래과학자상 / 성균관 게임 제작자 대회 외 2개 전국 대회 수상





CLASS-MATE는 C++언어 교육 프로그램으로 OOP(Object-Oriented Programming)을
중심으로 OOP의 주요 기능(추상화, 상속, 다형, 가상함수, 추상클래스...etc) 교육을 목표로 하고 있습니다. 이런 OOP의 주요 기능들은 CLASS(클래스)와 밀접한 관계에 있기 때문에 배우자 또는 한쌍의 한 쪽을 뜻하는 MATE를 합성하여서 CLASS-MATE 라는 이름을 짓게 되었습니다.


사용자 삽입 이미지

사용자 삽입 이미지
사용자 삽입 이미지

CLASS-MATE 개발 동기
학습자는 일반적인 간단한 프로그래밍을 통해서 실제 OOP기능을 통한 패러다임을 적용할 수 없다. 간단한 예로 가상함수와 추상클래스, 다형성의 프로그래밍 패러다임을 적용하기 위해서는 잘 디자인된 OOP 설계부터 릴레이션을 가지는 많은 부분의 적용 예까지 너무 광범위하기 때문에 오브젝트라는 조그마한 실습 도구를 통해 좀더 OOP설계를 쉽게 배울 수 있게 하기 위함이다.
초보자, 학생 등 전문 프로그래밍 지식이 없는 사람들에게 C++에 보다 쉽고 재미있게 접근할 수 있도록 하는 방식을 제시한다.

CLASS-MATE 개발 목적
대학교 C++학습 커리큘럼에 사용 될 수 있을 정도의 안정성. 간단한 프로그래밍으로도 학생들에게 프로그래밍에 대한 자신감과 성취감을 느끼게 할 수 있을 만큼의 API지원, 손쉽게 C++프로그래밍을 할 수 있는 개발 솔루션을 체험하게 하는 COM 인터페이스 제공 및 유연성을 가진 엔진을 포함한 프레임워크 개발. 중 고급 C++ 유저 테스트 해볼 수 있는 디자인 패턴 적용 및 복잡한 클래스 설계 적용 등의 프로그래밍 skill을 소화할 수 있을 정도의 유연성 제공을 목표로 한다.


사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
CLASS-MATE 특징
교육용 시뮬레이션 프로그램
가시성이 없는 알고리즘, 자료구조를 놀이도구를 표방하여 가시화 시켜준다.
다른 Object들과의 설계 및 성능 비교가 가능하다.
OOP의 일반적 특성인 상속, 다형성, Internal Class를 배울 수 있다.
다른 OOP와 달리 C++언어의 특성에 귀속되는 추상 클래스, 인터페이스, 다중상속 및 Virtual function, 이벤트 처리 방법과 COM기반의 통신 방법등을 학습, 실행 해 볼수 있다.
특히 초급 학습자는 제공되는 C++언어의 특성과 OOP개념을 배움과 동시에 자신의자료구조 및 알고리즘 모두를 테스트 해 볼 수 있다.
고급 기술자에게는 Object의 성능 향상을 위해 프로그래밍 skill을 조율할 수 있고, 평가가 가능하다.
Object 수행평가를 통해서 부족한 부분을 필요성에 의해 다시 학습함으로써 다시 코딩으로 이어질 수 있는 학습 사이클을 형성하게 된다.
사용자 삽입 이미지

C++ 로 학습자가 개발하게 될 휴머노이드 인스턴스들

사용자 삽입 이미지

휴머노이드의 아이템 클래스들, 코드상에서 벡터등으로 받아 낼 수 있다.


CLASS-MATE 활용 
  대학교 C++학습 커리큘럼에 활용
  개인적인 C++학습용으로 활용
  개인이 작성한 알고리즘, 자료구조 코드의 성능을 조금의 수정을 통해 눈으로 성능을 확인할 수 있으며, 여타 다른 코드와의 성능 비교용으로 활용
  휴머노이드 오브젝트를 통해서 토너먼트식의 대회를 추진하여 C++ 프로그래밍을 좀 더 많은 유저들에게 활성화 시킬 수 있다.

관련 문서
CLASS-MATE와 관련 된 자세한 요약 문서와 관련 SDK를 보시려면 아래 문서를 통하여 확인 할 수 있습니다. 마이크로 소프트웨어 소개글에 보시면 휴머노이드를 만들기 위한 API들이 정리 되어 있으며 간단한 휴머노이드의 예제도 제시되어 있습니다.

humanoid_document.rar

휴머노이드 관련 SDK 설명 문서

parser_assister_helpDoc.rar

제작된 컴파일러와 파서, 비쥬얼 어시스터 라이브러리 사용할 개발자를 위한 SDK 문서

마이크로 소프트웨어.pdf

마이크로 소프트웨어에 소개된 CLASS-MATE 전반적 소개

마이크로 소프트웨어 2.pdf

마이크로 소프트웨어에 소개된 CLASS-MATE의 제작과정 및 API 소개 / 휴머노이드 예제



프로젝트 일자  : 2005-07-02
소요기간         : 2개월
용도               : 코드그루 및 오픈 소스 공개용
개발인원         : 정명수 (단독개발)


파서 라이브러리

CPP 파서의 라이브러리를 원하는 프로그래머를 고려하여 제작.
커플링 클래스(플랫폼에게 종속적인 부분)를 수정하여 확장
플랫폼 독립성 : SYNCRONIZER CLASS가 WIN32에 종속적으로 제작.
파서지원 언어 : C++, NULL
확장성 : CParser INTERFACE를 통한 확장 가능.
확장테이블과 확장파서를 사용치 않기 위해서는 CParserTuple 클래스 수정
Compile 싱커는 옵션에 따라 일반 실행파일로 컴파일 가능.
오토마타 : Lexical Analyzer와 메서드, 클래스에 대하여 ParserTree소유


비쥬얼 어시스트
# C++ 문법을 파싱하여 각자 신텍스 하일리이팅을 먹여주는 기능

# 각 헤더 파일과 구현 파일을 구분하여 테이블을 형성함으로써 프로그래머가 코딩할때 그 인스턴스가 속한 클래스를 찾아 내부 사용할수 있는 메서드들을 어시스트 해주는 기능을 포함.


파서는 에디트 컨트롤과 분리하여 다른 플랫폼에 이식 할수 있도록 제작.
파서와 신텍스 에디트 컨트롤은 라이브러리 형태로 배포할수 있도록 제작.
도움말 문서 따로 제작.


컴파일 정보
컴파일 OUTPUT : DLL 및 COM
컴파일 싱크 : VC++ 6.0

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
파서에 관련된 사항은 제작시 문서를 참조 할 수 있음.

parserDocument.rar

임시로 제작된 파서 라이브러리 문서 다운로드


프로젝트 일자  : 2004-11-27
소요기간         : 1개월
용도               : 텀프로젝트
개발인원         : 정명수, 김민혁, 노종욱, 김덕우

스크린샷
사용자 삽입 이미지
사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지
사용자 삽입 이미지


떼쓰기도 하고 삐지기도 하고, 밥도 안먹고, 한번씩 집도 나가고..
단기간에 만든것 치곤 고생도 많이 들어가고 꽤나 깔끔해 보임.

게임 자체에 의미보다 클래스간의 정의를 객체지향 패러다임을 벗어나지 않게 설계 하려고 노력한것에 의의가 있고 처음 작업 분할, 제작한것에 의미가 있음.




제작시에 생성했던 UML의 일부

사용자 삽입 이미지

도큐먼트가 되는 클래스는 페어리와 마스터를 aggregation 하고 있으며 생성시 페어리와 마스터를 생성하여 주종의 계약을 맺게 한다.

디스플레이어로 명명되어 있는 두개의 클래스는 바운더리중 뷰클래스로 글자를 뿌려주는 클래와 그래픽을 뿌려주는 클래스로 구성된다.

텍스트 디스플레이어 클래스를 페어리클래스에서 레퍼런스 (association) 당하고 있으면서 필요시 게임진행이 필요한 정보를 뿌려주기 위해서 ECho() 함수를 제공하고 있다.

그래픽 디스플레이어 클래스는 페어리 실체에서 레퍼런스 당하고 있으며 그 이유는 페어리가 지신의 표정이 되는 CFace 클래스를 가지고 있기 때문이다.
사용자 삽입 이미지

윈도우가 생성될 당시 도큐먼트가 되는 바운드 클래스에서 페이리와 마스터를  create 함수를 이용하여 각각 생성한다. 생성된 마스터와 페어리는 Contract함수에 의해 주종관계로 서로 레퍼런스된다. (association관계) 페어리는 생성될 당시 페어리젠 (컨트롤 클래스) 을 aggregation하고있으며 create를 통해 실체를 초기화, 생성 시킨다.


페어리젠은 각각의 상황에 따라 현재 자신의 상황을 페어리에게 요청 (Reqeust 함수)하게 되며 자신이 취해야 할 표정과 또는 변화될 표정의 해제요청(Cancle 함수)을 하게된다.

페어리는 자신의 얼굴을 페이스 메니저를 통하여 표정을 관리하며 필요시 마스터에게 요청을 하기도 한다. 또한 자신이 만들어낸 보석을 마스터에게 던져주기도 한다.

마스터는 사용자의 입력을 받아 자신의 페어리에게 밥을 준다거나 다른 일련의 행동을 하게되며 행동을 취할 당시 마스터가 소유한 아이템(아이템 클래스) 금전 상황을 소비 또는 증가 시키기 된다.
사용자 삽입 이미지

도큐먼트 클래스에서 페어리와 마스터의 데이터들을 운용하는데 이는 페어리와 마스터 모두 자료로 취급되기 때문이며 프레임과 뷰 보다 도큐먼트의 성격이 강하기 때문이다.

마스터는 인벤토리와 상점을 사용할수 있는데 우선 도큐먼트가 마스터의 금전 상태와 현재 아이템 주머니를 요구한다 (GET), 인출된 정보를 상점에게 건내줌으로써 보석을 팔거나 선물을 사는등의 메세지를 보낼수 있다.

인벤토리는 마스터의 내부상태를 보여주는것으로 불려지기전에 동기화 해주는 메시지를 호출해주고 인벤토리를 호출하는 On 함수를 불러오며 각경의 금전 변화에 따라 마지막에 금을 셋 해준다.
사용자 삽입 이미지
사용자 삽입 이미지

주요 엔티티라고 함은 페어리와 마스터를 의미하며 마스터는 페어리에게 식사를 제공하거나 선물을 주기 위해 아이템을 소유하고 있다. (aggregation)
실제 이 아이템을 상점에서 이 아이템을 팔고, 마스터 클래스는 상점 클래스에서 아이템을 취득하기위해 마스터의 금과 아이템을 던져주면 오더에 따라 상점 클래스가 반응한다.

마스터는 현재 자신이 보유한 아이템과 금을 확인하기 위해 인벤토리 클래스에게 자신을 보고하며 인벤토리 클래스는 사용자에게 실제 마스터가 보유한 아이템과 금전상황을 디스플레이 해준다.
사용자 삽입 이미지

페어리는 자신을 컨트롤하는 페어리 젠을 초기화 함으로써 생성된다. 비슷한 시점에서 이미지를 제어해주는 클래스가 이미지 경로와 관계된 유저 디파인 컨테이너를 호출 하여 테이블로 된 경로를 생성하고 그 테이블을 사용하여 이미지 테이블을 완성한다.

페어리는 자신을 삶을 살면서 (Dolife : 실체는 OnTimer로 인한 호출) 페어리젠의 상태점검 메시지를 계속 보낸다. 페어리 젠은 상태정검후 각상태에 따라 알맞는 표정을 페어리에게 리퀘스트 하고 현상태를 연결된 리스너인 텍스트 디스플레이어에게 에코해준다.

페어리는 취합된 얼굴 표정을 가지고 실제 우선순위에 맞게 표정관리 클래스를 이용하여 열굴 표정을 그래픽 디스플레이어에게 표시하게 한다.
사용자 삽입 이미지


Morning Photo

(Batch image processor)

Myoungsoo Jung

1. Introduction

Digital photography has taken off in a big way over the past few years. In fact, digital cameras are becoming so popular that they are one of the must-have digital equipments in these days. With a digital camera, we can take a high quality photos easily, and these are stored in a very cheap storage, actually reusable media in contrast to a film which can be used only once. We can see a picture that we have taken immediately and retake if we don't like. Consequently, we may have huge number of photos and it brings up another issue; we have to organize them as an expected format to find out easily next time and utilize storage such as hard-disk more efficiently.

There are several programs to manipulate photos, e.g. Picasa of Google Inc. Out project, the batch image processing system, also has similar objectives with other programs. Our project has several fascinated features such as image transform filters, thumbnail preview. In addition, it manages each image file with database, so it makes easy and fast to access and organize them.

 

 

2. Problem statements & Motivation

First, we sometimes do not know the exact location of the image file that we want to get. The morning photo application provides the database for image files to resolve it. Consequently, a user does not need to remember all the detailed information about the image file.

Second, CxImage library is too complicate to use. Thus, we provide the image library "MorningPhoto Engine" by abstracting the CxImage library. Morning photo engine is an wrapping class. You can see the detail about the structure in diagram 1.

We exploit the natural way to process an image. If a user has an analog camera, he or she takes the film from their camera. After that, he or she extracts the image from the film and then deals with this image by using an album. Morning photo provides abstraction tools such as film and album. Each abstracted film and album image was managed in the database, and each one can have box to manage bunch of film and album. In our application, to handle each abstraction tools, it supports the traverse tree, which you can see top of left side in figure 1.


3. Implementation

To support several options of image processing, we categorized the functions that we implemented into five parts. So Morning photo batch image processor has five tab control windows on the bottom of the main frame. These are image information, effecting and filtering, data management, manage albums, help as shown in the figure 1

A tree control system is another major feature of our program, and it help to traverse lots of image files. Our program provides three different kinds of image tree. First one is film box tree, and it indicates the original image before image processing. Second tree deals with processed images, and our application called it to album box tree. Above two kinds of tree and box abstraction tool are managed by database, which implemented by DAO 6.0. In last, user can traverse the image on existing file system by using a file box tree.

The following is the detailed options that we provide.


3.1 Main Features

a. Batch resizing image

- User defined image size

- Vertical and horizontal image can be processing by difference way

- User can choose the quality of image when they process it.

b. Supporting several image process algorithms

- Bilinear image processing

- Bicubic image processing

- Nearest image processing

c. Image cropping

- Support template to crop image

- Configurable crop area

< Figure 1: Deal with Image Information (Resize, Algorithm, Crop, and so on)>

d. Data management

- User-defined workspace

- Support the backup of image database

- Replacement of the database.

< Figure 2: Deal with Data Management (Manage Workspace, Manage Database)>

e. Effecting

- Similar with one of cellular phone

- Transfer to soft image

- Transfer to rough image

- Rotating

- Special effect: cool image, comfortable image and so on.

 

< Figure 3: Effecting and Filtering Tab (Several Effecting, Four Filtering, Rotate, Strangeness, Adjust Images, Distort image and so on. )>

f. Adjustment

- Contrast

- Lightness

- Adjust level of image

g. Distort filtering

- Reversing image color

- New paper and so on.

h. Management

- Image file management

- Album management.

3.2 System-level block diagram

Our system consists of three parts. First part is Morning photo image library that wraps functionality of CxImage Library. Second part is the data manager that deals with the options and file system when morning photo processes an image. Third part is the database manager that manages the information of images with hiding the actual location. Diagram 1 describes above managers.

< Diagram 1: Moring photo engine (left) and Relation about Package of class (right)>

3.3 Programming language used

- Microsoft Visual C++ 6.0

- Microsoft Access 97

- MFC 6.0

- DAO 6.0, CxImage

3.4 Third party components

a. CxImage [1]

CxImage is an open-source image processing library, which makes easy and simple to load, save, display, and transform images. It supports a variety of file format such as BMP, GIF, ICO, TGA, PCX, WBMP, WMF, SKA, JPEG, PNG, MNG, TIFF, JBIG, JPEG2000, RAW, PNM, PPM, PGM, RAS. It can be loaded selectively when use it to make a specific tool. It supports a variety of development platform such as Visual C++ 6.0 to Visual C++ 2008, Borland C++ Builder 3 and 6 which commonly used.

It includes several features such as quantization error rounding, pastes metafile pictures, graph data extraction, red eye remove, selective blur, customized linear filter, histogram, text smoothing.

b. EXIF (Exchangeable Image file Format) [2] [3]

EXIF is a specification for image file format, which used by digital camera. It uses the existing image file format such as JPEG, TIFF, with the additional metadata tags. EXIF was created by the Japan Electronics Industries Development Association to include additional information in a photo. It is not a standard, but widely adapted in most of camera manufacturers and many of image file related programs. The EXIF tag structure is taken from TIFF files, and several image specific properties are overlapped between them. The metadata in EXIF covers a wide range of information like below

● Digital camera records date and time when it takes a photo.

● Digital camera settings such as model, manufacturer, ISO, shutter speed are recorded.

● It has a thumbnail image to preview image in a camera or file manager.

● It includes description and copyright information.

● It defines geometric location information.

The following is implemented of EXIF information [4]

< Figure 4: Implemented EXIF information viewer>

EXIF data is integrated within the image file. It needs support of image manipulate program to utilize it. Currently, many of the image manipulate program support it to display and manage files.

EXIF also has some drawbacks. First of all, data in EXIF can be spread anywhere because EXIF uses the offset pointer in the file, so the software may corrupt any pointers or corresponding data that is not encoded or decoded. Second, there are many variations according to manufacturer because there is no standard. Sometimes, a manufacture encapsulates the tag info and uses its own formats. It makes hard to retrieve information correctly. Third, EXIF defines only about TIFF or JPEG, not RAW files. It is caused camera manufacturers to make many properties, incompatible raw file format. And EXIF does not provide information about video, but most of digital camera can capture video as well. Most of drawback is related with its use of legacy file structure.

 

c. DAO (Data Access Objects) [5]

Data Access Objects is general programming interface for database access on Microsoft Windows system. It is able to bypass the Jet Engine and directly access ODBC data sources, including MS SQL server and other DB systems. It works with creating 'workspace' object, and it performs all database related operations. The workspace object is presented as a session object, which included in a large database engine object; Jet database engine or ODBCDirect database engine.

Morning photo uses DAO to manage image. Due to this, user does not need to know actual location of images.

4. Evaluation

4.1 Objective

The main objective is to make it easy to manipulate and access hundreds of image files. It includes several image filters and adapts algorithms. Database is used for organizing image files easily and efficiently.

 

4.2 Evaluation method

It is implemented mainly with Microsoft Visual C++ 6.0 and some third party libraries. Main window is designed as dialog of Microsoft Visual C++, and several filters are made with CxImage. Database is organized with support of DAO 6.0, MS Access 97. As additional feature, it extracts EXIF tags from photos and supports modifying it.

 

4.3 Result

Moring photo does not use any other libraries except CxImage and DAO 6.0. All comfortable management is implemented by win32 API. There are 26 kinds of image processing and 67 kinds of comfortable user options.

 

  1. Morning photo provides 26 kinds of image process.
  2. Morning Photo successfully provides the database abstraction to handle image locations
  3. Morning Photo provides thin image library by wrapping CxImage library.
  4. Morning Photo can provide 67 kinds of comfortable user options.

< Figure 5: After filtering and inserted image information in DB>

 

< Figure 6: Supporting multiple image codec (left) and file Management (Right) >

< Figure 7: Selecting the algorithms and image filtering (left), help documents (right) >

< Figure 7: Dealing with Image Information (Resize, Algorithm, Crop, and so on)>

< Figure 8: Information view of EXIF>

< Figure 9: built Database by MorningPhoto >

3.4 Assumption made

Moring Photo runs on the desktop PC.

4. Future work

4.1 Summarize your work

  1. Morning photo provides 26 kinds of image processing.
  2. Morning Photo successfully provides the database abstraction to handle image locations
  3. Morning Photo provides thin image library by wrapping CxImage library.
  4. Morning Photo can provide 67 kinds of comfortable user options.

     

4.2 If you had more time, what would you have done?

We can implement the morning photo in the embedded environments. When it is implemented, a user does not need to transfer image files from camera to PC. A user just takes a picture and then manages images on the camera by using a Morning Photo.

5. References

[1] Davide Pizzolato, CxImage, http://www.xdp.it/cximage/

[2] Personnel Blog, http://exif.net/64, Sep 11, 2006

[3] EXIF, Wikipedia, http://en.wikipedia.org/wiki/Exchangeable_image_file_format

[4] EXIF example, Wikipedia, http://en.wikipedia.org/wiki/File:Konqueror_Exif_data.jpg

[5] DAO, Wikipedia, http://en.wikipedia.org/wiki/Data_Access_Objects