안드로이드에서 OpenCV를 이용하여 앱을 제작하는 방법을 설명하는 문서입니다.


예전에 패스트캠퍼스의 "OpenCV와 함께하는 컴퓨터 비전 프로그래밍 캠프" 강의에서 진행했던 내용입니다만, 현재는 커리큘럼에서 제외한 상태이구요...


예전에 정리했던 내용을 최신 Android Studio 기준에 맞게 일부 수정하여 배포합니다.




Posted by kkokkal
:
1. 업그레이드

2011년 1월 28일에 CYON 홈페이지에 옵티머스Q, 옵티머스Z(SKT) 프로요 업그레이드가 올라왔다. 이번 업그레이드의 가장 큰 특징은 아무래도 프로요(안드로이드 2.2)에서 제공하는 달빅VM의 성능 향상과 테더링 지원, SD카드에 어플 설치 등이지만, 그 외 LG에서 제공하는 기본 어플들의 사용 편의성 향상도 눈에 띤다.

(1) 프로요 업그레이드

프로요에서 되어야 할 것들이 다 된다. 일단 사진 캡쳐한 것을 보면 대충 알 수 있다. (클릭하면 커진다.)

 
 
 
 
 
 

벤치마크 성능을 살펴보면, 기존에 옵젯을 첨 샀을 때 어쩌다 600점 넘는 적이 있다가 보통 500점 후반대를 기록하였지만, 이번 업그레이드 이후 745점을 기록하였다. 대충 그래프를 보면 CPU 성능만 두 배 정도 빨라졌는데, 이게 다 달빅VM이 빨라졌기 때문이다. 특히 갤러리에서 사진 넘어가는 속도가 확실히 빨라졌다.

(다만, 처음 부팅이 좀 더 오래 걸리는 느낌이 들고, 갤러리 실행 시 진입 시간이 좀 더 길어진 것 같기도 하고... 진입하고 나서는 확실히 빠른데...)

(2) 기본 어플 편의성 증가

몇 가지 생각나는 것만 적으면...

- 상단의 알림바에 전화기 설정이 [진동]/[소리] 모두 아이콘이 나타난다. (음.. 이건 그닥 좋아보이진 않은데...)
- 상단의 알림바를 내리고, [소리/진동/무음] 세 가지 모드를 선택하던 것이 [소리/진동] 두 개로 바뀌고 (음.. 이것도 그닥 좋다고만 볼 수는 없는데..), 그리고 토글 형태로 모드 변경이 가능해졌다. 예전에는 대화상자가 새로 떠서 선택하는 방식이었는데, 그것보다는 편한 것 같다.
- 기본 동영상 플레이어에서 화면 터치 잠금 기능이 생겼다. (그러나 앞뒤로 10초 이동 같은 기능은 여전히 없어서 그냥 Soul Player를 쓸꺼다.
- 통화 기록에서 동일한 사람들과의 통화 기록이 묶음 형태로 나타난다. 이건 확실히 갠찮은 변화다.
- 음악 프로그램은 여전히 폴더 단위 지원을 안하고...
- 카메라 종료할 때, BACK 버튼을 두 번 연속으로 눌러야 종료됨.

음.. 이렇게 써놓으니까 생각보다 편의성 증가는 많지 않은가? 흠.. 어쨋든 변화가 있다는 것은 환영.

(2월 1일 업데이트)

- x264, h264 동영상 재생 지원!!! 이건 꽤나 비중있는 업데이트인 듯. 720p까지는 안되지만 600p까지는 잘 되는 것을 확인.

2. 루팅

옵티머스Q와 마찬가지로 옵티머스Z도 기존의 z4root 같은 앱으로는 루팅이 안된다. 그래서 옵큐와 마찬가지로 슈퍼워클릭 v1.6.3 버전으로 루팅에 성공했다. 머, 아주 깔끔하게 한 번에 된 건 아니고, 어떻게 좀 하다보니 되었다. 암튼, 되기는 된다.

3. 나름 최적화

루팅을 했으니 이제 안 쓰는 앱들을 지워서 내부 메모리 확보라도 해보자.

(0) 먼저 rootexplorer 실행하여 /system/ 폴더 전체를 zip으로 압축하자. 혹시나 나중에 다시 복원하고 싶은 것이 생기면 이 압축 파일을 이용하여 복원할 수 있을 것이다. /system/ 폴더를 길게 터치하면 zip 압축 메뉴가 나타나고, 실제 압축을 시작하면 /sdcard/SpeedSoftware/Zip 폴더에 system.zip 파일이 생성된다.

(1) /system/app/ 폴더에서 사용하지 않는 앱들 삭제

A00000000D.apk ... 준플레이어
AnalogClock.apk ... 아날로그시계?
andSisWidget3_signed.apk ... 위젯
CalendarWidget.apk ... 위젯
CyBGM.apk ... 사이BGM
DaumMaps.apk ... 지우고 마켓에서 설치
DeskClock.apk ... 먼지 몰라도 시계 (알람 어플임. ㅡㅡ; )
DigitalAlarmWidget.apk ... 위젯
DioDict_Stern.apk ... 디오딕 전자사전 -> (2)번 폴더 지우는 것과 연관되어있음.
DioPenHWR_SU950.apk ... 디오텍에서 만든 것 같은데 안쓸꺼니까 삭제
DragShake.apk ... 이런거 안씀.
EnglishBean.apk ... 잉글리쉬빈. 가입하면 기프트콘 준다는데 걍 안받고 말자..
GenieWidget.apk ... 위젯
I000400002.apk ... 네이트 ... 얘를 지우니까 MMS 확인이 안되더라. ㅡㅡ; (그리고 배터리도 얘 때문에 많이 닳았던 것이 아닌가 하는 의심이...)
Me2day.apk ... 미투데이
Melon.apk ... 멜론
MemoWidget.apk ... 메모위젯. 컬러메모(?)쓰니까 삭제.
Minihompy.apk ... 미니홈피. (이런건 머하러.. 누가 요즘 싸이한다고..)
MoxierMail.apk ... 목시어 메일. 일단 안쓰니까 삭제.
NateConnecting.apk ... 네이트 컨넥팅
NatePortal.apk ... 네이트
NateSearch.apk ... 네이트 검색
NaverBlog.apk ... 네이버 블로그
NaverMaps.apk ... 이거 지우고 마켓에서 설치
NaverSearch.apk ... 이것도 지우고 필요하면 마켓에서 설치
NewsWidget.apk ... 뉴스 위젯
Ovjet.apk ... 오브젯. 실행 빈도가 하도 떨어지니까...
Quickoffice.apk ... 마켓에서 새로 다운받아서 사용.
RoatTyping.apk ... 로드타이핑. 안씀.
WeatherWidget.apk ... 위젯
WorldClockWidget.apk ... 위젯

이렇게 해서 지우기 전 "297.08MB used, 44.92MB free"에서 "261.30MB used, 80.70MB free"으로 바뀜.
(NOTE) 이 수치는 개인적으로 아래 (2)번 항목을 먼저 실행했었기에 나타난 수치임.

(2) /system/3rd_party/Diatek 폴더 삭제, 대략봐도 20~30MB 차지하고 있음. 참고로 나는 기본 내장된 사전보다 ColorDict 사전을 더 애용하고 있다. 일단 기본 내장 사전은 스크롤이 너무 느려서 맘에 안 든다.

(3) /system/usr/keylayout/surf_keypad.kl 파일 변경

"key 217  SEARCH  WAKE_DROPPED" 문장을 "key 217  CALL  WAKE_DROPPED"로 변경. 그러면 폰 하단 오른쪽 검색 버튼을 통화 버튼으로 사용할 수 있다. 자세한 사항은 여기를 참조...

(4) 부팅 화면 변경

자세한 사항은 여기를 참조...

(5) 문자음 변경

일단 시크릿가든의 "문자왔숑~"으로 문자음을 바꿀려고 했는데, 음.. 아쉽게도 먼가 예기치않은 문제가 있었다. 그래서 일단은 '두두두두두두두 유브갓메일~'로 설정해두었다. 이거 다 쓰고 문자왔숑~으로 바꿔놔야지..

4. 결론

사실 옵티머스Z야말로 LG 안드로이드폰 중에서 버림받은 폰에 속한다. 안드로이드펍에서 LG 게시판을 읽어보면 90%는 옵티머스Q 얘기고, 9%는 안드로원, 나머지 1%가 옵젯 이야기이다. (이제는 옵원, 옵마하, 옵2X 얘기가 대세일려나?) 아무래도 판매량이 부진하다보니 그런 것일텐데..

사실 난 옵티머스Z에 대해서 사람들이 물어보면 항상 이렇게 대답한다: "특별히 좋은 점도 없고, 특별히 나쁜 점도 없다. 그냥 쓰기에 무난한 폰이다." 사실 출고된지 얼마 되지도 않아서 거의 공짜로 풀린 폰이지만, 나름 스냅드래곤 1GHz로 성능이 좋은 편이다. 그 후에 나온 옵티머스원이나 시크, 팬택의 이자르, 최근 삼성에서 내놓으려고 하는 저가형 폰들이 600~800MHz CPU를 탑재한 것에 비하면 아무래도 그것보다는 좋지 않겠냐는 게 내 생각이다. 게다가 디자인도 나름 깔끔한 편이고... (개인적으로는 국내에는 출시되지 않은 LG 미니폰이 더 끌렸지만.. 음) 그러니 암튼 2년간 고장만 나지 말고 잘 동작해줬으면 좋겠다~ ^^

Posted by kkokkal
:


안드로이드 게임 중에 Frozen Bubble이라는 게임이 있는데, 예전에 오락실에도 있었던 게임이다.
이 겜이, 처음엔 각도 조절하는게 적응이 안되서 그냥 그랬는데, 좀 하다보니까 꽤 재미가 있다.
특히 잠자기 전에 한 두 판 깨고 자면 괜찮다. ^^;

몇 번의 큰 고비가 있긴 했는데, (특히 99번째 판) 끈질기게 도전해서 결국 100판까지 다 깼다. 뿌듯~

이 겜을 하면서 느낀 점.

1. 이것또한 지나가리라. (긍정적 사고 & 끈기)
2. 똑같은 버블이 뭉쳐서 깨질 때 나는 효과음이 꽤 매력적이다. 마치 볼링 스트라이크 소리처럼.. 역시 게임에서는 시나리오, 그래픽 뿐만 아니라 음향 효과도 큰 비중을 차지한다.

'Story > Open Diary' 카테고리의 다른 글

내가 먹어 본 가장 맛있는 버거  (0) 2012.02.05
김밥  (0) 2011.07.19
태풍 뚫고 제주도  (2) 2010.09.08
내 가방이 젤 멋있어~  (5) 2010.09.03
kkokkal의 미투데이 - 2010년 6월 16일  (0) 2010.06.17
Posted by kkokkal
:
옵티머스Z는 SKT에서 출시된 모델이고, 그래서 기본적으로 아래와 같은 부팅 화면이 나타난다.


그러나 "내 폰은 특별해야해!!!" 라는 생각을 하는 사람들이 있게 마련이고, 또 컴터로 하는게 안되는게 어딨어... 라고 생각하는 사람들도 있게 마련이고... 난 두 가지 생각을 다 하는 사람 중에 한 명이고... 그래서 부팅 화면을 바꾸는 방법을 알아보았다. (일단 저 위에 움직이는 GIF 그림이 눈에 거슬리면 ESC 키를 누르시기를...)

아직까지 인터넷에 옵티머스Z에 대한 customizing 기법은 그닥 많지 않았다. 다행히 같은 LG에서 나온 옵티머스Q 부팅 화면 바꾸는 방법은 찾을 수 있었는데, 파일 시스템을 살펴보니 대략 방법이 비슷하다고 생각되었다. 일단 [옵티머스Q 부팅 화면 바꾸기]를 잘 읽어보기 바란다. 이 글을 이해하지 못하면 아래 내용을 절대 따라하지 않기 바란다.

(중요) 부팅화면 바꾸는 작업은 루팅이 필수적이다. 옵티머스Z 루팅 방법 및 기본적인 파일 조작 방법은 다른 인터넷 블로그를 찾아보기 바란다. 또한 이 작업은 꽤 위험할 수 있으므로, 컴퓨터랑 친하지 않은 사람은 가급적 따라하지 않기 바란다. 혹시라도 잘못되어 핸드폰이 켜지지 않는 불상사가 생길 수도 있으니 조심해야한다.

일단 루팅이 되었다면 Root Explorer 앱을 실행하여 /system/media 폴더를 살펴보자.

이 디렉토리를 보면 bootanimation.zip 파일을 발견할 수 있는데, 이 파일이 부팅 시 애니메이션을 담당하는 파일이다. 이 파일 구조는 아래와 같다.


bootanimation.zip 파일에는 desc.txt 파일 1개와 part0, part1 두 개의 폴더가 있고, 각 폴더 밑에는 다수의 PNG 파일들이 들어있다. 이 PNG 파일들이 차례대로 화면에 출력되면서 애니메이션처럼 나타나게 된다. 그러므로 이 파일을 교체하면 다른 부팅 애니메이션을 볼 수 있다.

참고로 오리지날 bootanimation.zip 파일에 들어있는 PNG 파일은 360x600 크기에 24비트 컬러로 구성되어 있다. 그러므로 이와 동일한 크기와 색상 수의 영상으로 애니메이션을 바꿔치기하는 것이 가장 좋을 것이다. (그렇지만 이보다 작은 크기의 영상을 사용하여도 (다행히) 화면 중앙에 잘 출력되는 것을 확인하였는데...)

인터넷을 뒤져보니 xda-developers 사이트에서 괜찮은 부팅 애니메이션 파일을 구할 수 있었다. 마치 일반 PC가 부팅하는 화면과 유사하게 만들어놓은 부팅 애니메이션이다. 이 파일은 http://forum.xda-developers.com/showthread.php?t=648555 에서 다운 받을 수 있는데, 이 중 필자는 HTC Dream의 xp-style에 연결된 파일을 다운받았다. 실제로 다운받은 파일 이름은 dream-bios-boot-rob.turner.zip 이고, 이 파일의 압축을 풀어보면 안에서 4,002,115 바이트 크기의 bootanimation.zip 파일을 찾을 수 있다.


이 파일을 추출해서 옵티머스Z의 /system/media/ 디렉토리에 덮어쓰면 된다. (덮어 쓰는 작업은 일단 PC에서 sdcard로 파일을 옮기고, root explorer를 이용해서 파일을 복사하였다.) 편의를 위해 dream-bios-boot-rob.turner.zip 파일에서 추출한 bootanimation.zip 파일을 같이 올려놓는다. (참고로, 이 파일에 들어있는 PNG 파일의 크기는 320x480이다. 그래서 옵티머스Z 화면 크기보다 좀 작게 그림이 나타난다는 단점이 있다.)


아래는 bootanimation.zip 파일을 교체한 후 실제 옵티머스Z의 부팅 장면을 촬영한 동영상이다. 카메라가 좀 오래된 모델이라 포커스가 흐려지기는 하지만, 부팅 화면이 바뀐 것은 확인할 수 있다.



일단 옵티머스Z 오리지날 부팅 애니메이션 바꿔치기는 성공했는데, 첫 화면에 나오는 LG 로고는 아직 어떻게 바꾸는 지 알아내지 못했다. 커널 이미지 만들 때 바꿀 수 있다는 얘기를 듣기는 했지만, 그건 불가능한 이야기고... 뭐, 찾아보면 방법이 없지는 않겠지... 하고 생각할 뿐이다. ^^

Posted by kkokkal
:
옵티머스Z(이하 옵젯)를 입양한 지 어언 24일째 (2010년 8월 18일 개통).

처음 한 두 주는 이런 저런 어플(appliation)을 다운받아서 깔아보고, 인터넷을 해보고, 동영상을 시청하고... 그러면서 보냄.

그러다 옵젯 루팅도 시도!!! 그러나 루팅 후에 딱히 할 일도 없었다. 기껏해야 사용하지 않는 어플들 몇 개 지우는 거? (뭐, 예를 들어, 네이트, 네이버블로그, 싸이월드 같은 것들...) 그러다가 한 가지 갠찮았던 것은 자주 사용하지 않았던 검색 버튼을 내가 원하는 다른 기능으로 매핍(mapping)할 수 있었다는 점.

일단 옵젯은 전면 하단에 4개의 버튼을 가지고 있다.


안드로이드폰은 기본적으로 BACK 버튼과 MENU, HOME 버튼은 반드시 가지고 있어야 한다. SEARCH 버튼은 반드시 있어야 하는 것은 아니지만 있는 것을 권장? 뭐, 권장까지는 아니더라도 있으면 좋다. (개인적으로 스마트폰에 버튼이 많이 있는 것을 좋아한다. 그리고 사용자 임의의 키 지정이 가능해야 한다고 생각한다.) 옵젯에도 4개의 하드 버튼을 제공하는데, 이 중 가장 사용 빈도가 적은 버튼은 아무래도 검색 버튼이다. 이 검색 버튼을, 보다 사용 빈도가 높은 '통화' 버튼으로 기능을 변경하려고 한다.

일단 이 작업은 루팅이 되어 있어야 한다. 루팅은 http://ksjsk000.blog.me/50094716398 블로그를 참고하기 바란다. 그리고 "Root Explorer"라는 앱이 깔려있어야 한다. 머, 이건 안드로이드 마켓에서 구입을 하든, 어둠의 루트에서 구하든 그건 알아서 하길 바라고... (확실하게 언급하고 지나가야 할 것은, 루팅과 키 맵핑 변경 같이 시스템을 건드리는 일은 위험을 감수하는 일이라는 것이다. 그러므로 자신이 컴터 또는 스마트폰에 대해서 잘 알지 못한다면 루팅같은 건 하지 말기 바라고, 또한 루팅을 해서 일어나는 일들은 모두 본인의 책임이라는 것을 명심하기 바란다.)

준비가 되어 있다면, 루트 익스플로러를 실행해서 /system/usr/keylayout 디렉토리로 이동을 하자. 그리고 거기에 있는 surf_keypad.kl 파일을 수정해야 한다. 아래 그림을 보자.

 


루트 익스플로러에서 해당 디렉토리로 이동을 하고, surf_keypad.kl 파일을 길게 누르고 있으면 메뉴가 나타나는데, 맨 아래 있는 "Open in Text Editor"를 선택하자. (아! 어쩌면 이 디렉토리의 속성을 쓰기 가능 형태로 바꿔야 할지도 모른다. 상단에 [Mount R/O]를 어떻게 잘 건드리면 될꺼다. ㅡㅡ; ) 그러면 아래 그림과 같이 편집이 가능한 창이 나타난다.


파일 중간 쯤을 보게 되면 "Key 217 SEARCH WAKE_DROPPED" 라는 문장을 찾을 수 있다. "SEARCH" 말 그대로 검색 버튼을 의미한다. 그러므로, 이 줄을 그림과 같이 "Key 217 CALL WAKE_DROPPED" 형태로 편집하면 검색 버튼이 통화 버튼처럼 동작하게 되는 것이다.

참고로, WAKE_DROPPED의 의미는 키를 눌렀을 때, 핸드폰이 깨어나고(WAKE, 즉, 꺼져있었다면 화면이 켜진다.), 해당 키의 기능은 수행하지 않는다(DROPPED, 떨어뜨렸다, 즉, ,CALL 버튼을 눌렀어도 CALL 기능은 (1번) 무시함)는 의미이다.

편집이 끝났다면 저장하고 재부팅! 그러면 검색 버튼을 누르면, 통화 목록 화면이 나타나고, 또 한 번 버튼을 누르면 최상위 통화 목록의 상대에게 전화를 걸게 된다. 또한, 전화를 수신할 때에도 검색 버튼(통화 버튼)을 누르면 전화를 받을 수 있다. ^^

Posted by kkokkal
: