8월이었나 9월이었나... 딩굴딩굴거리다가 갑작스레 떠오른 아이디어! 바로 여성 가슴의 컵 사이즈를 측정하는 어플을 만들어 보면 어떨까 하는 생각에 c#으로 끄적끄적 거려 대충 프로그램을 만들어 본 적이 있었다. 나 변태 아님...-_-;; 아무튼 이녀석을 다 만들고 자랑/질문할겸 지금은 오고가는사람이 거의 없는 DC 프갤에 올렸었는데 평균 조회수 200명이 안넘는 이곳에서 2000명씩이나 들어오는 나름 괜찮은 반응!?ㅋ
그러던 와중에 바쁜일들이 겹쳐서 이녀석을 앱으로 만들겠다는 계획은 어느새 짬되어버리고... 연말이 와서 딩굴딩굴하다가 다시 생각나서 부랴부랴 만들어봤다.
일단 최초 계획은 영상처리와 비전기술을 이용해 촬영한 사진을 자동 분석해서 결과물을 출력하는 것이었는데, 맨살(-_-;;;)이나 단색의 옷을 입은 경우에는 어느정도 좋은 결과가 나왔지만, 약간이라도 패턴이 들어가 있는 옷을 입은 사진을 이용하면 전혀 엉뚱한 결과가 나오기 일수.. 그래서 일단 수동으로 가슴 위아래를 직선으로 긋고 그 직선의 길이를 이용해서 가슴 컵의 사이즈를 산출하는 방법만 적용하였다. 컴퓨터로 영상처리를 하면 어떻게든 할 수 있을텐데 안드로이드로는 아직 openCV조차 깔지를 못하고 있다..;
뭐 아직 완성단계의 앱은 아니고 한창 테스트중이다.(한 70% 정도 완성된듯.) 그래서 디자인도 엉망..ㅋ 옵티머스 시리즈에서는 그럭저럭 잘 돌아가는것 같은데 갤럭시 시리즈에서는 이상하게 사진만 찍으면 자꾸 반시계방향으로 도는데 도대체 이유를 알 수가 없다.ㅠㅠ 안드로이드로 기껏해야 회사 디비 접속해서 데이터나 확인하는 앱따위나 만들다가 사진도 찍고, 약간의 그래픽작업도 들어가는 앱을 만들려니 머리가 뽀개질것 같음..ㅠ 이 문제 해결하는 방법 아시는 분 있음 헬프..ㅠ
테스트 기종은 갤2, 아이뻐유저라서 스샷찍는게 어렵다보니 볼륨조절하는 것이 같이 찍혀버렸다;;
(찍을땐 저녀석이 같이 찍혔는지도 몰랐다;)
도움말은 아직 미완성, 시작하기 버튼을 누르면 다음 화면으로 넘어간다.
젤 밑엔 구글 애드몹!! 집에 쌀이 떨어져서.. 라면사먹을 돈이나 좀 벌어보고자;;;
물론 비영리 목적의 이 블로그 상단에 구글 광고를 삽입한것도 쌀이 떨어져서-_-;
누가 시작하기 버튼 누르다가 잘못 눌러서 카운트좀 올라갔으면 좋겠다ㅋ
두번째 화면!
처음에는 이녀석을 안넣었는데, 아무래도 사람의 몸 구조가 천차만별이라
조금이라도 오차를 줄여보고자 넣었다.
자신의 가슴둘레를 알면 해당 가슴 둘레를 선택하면 되고,
만약 모를 경우 옆에 가슴둘레에 따른 평균키도 함께 넣었으니 본인의 키에 맞게 선택하면 된다.
본인이 말랐으면 한단계 아래, 통통하다 싶음 한단계 위의 것을 선택하자.
예) 158cm 키에 마른체중일 경우 => 65
158cm키에 평균체중일 경우 => 70
158cm 키에 통통한 경우 => 75
다음으로 넘어가기 위해서는 사진 촬영 버튼을 누르자.
(사진 불러오기 기능은 아직 추가하지 않았다.)
사진 촬영 버튼을 누른 후 정면 가슴을 촬영한 후의 영상!
갤럭시2에서는 화면이 이렇게 -90도 방향으로 돌아가는 버그가 있다;;;
물론 이 앱은 사진을 인터넷상으로 전송하거나 하는 기능이 없지만
사진이 본인의 스마트폰에 저장되므로 프라이버시를 위해 절대 맨살이나 브라만 입고 찍지말고;;;;;
적당히 라인이 들어나는 타이트한 옷을 입고 촬영을 하자.
일단 촬영하고 나면 사진과 같이 본인의 컵에 해당 하는 부분과 밴드에 해당하는 부분에
터치로 선을 그어주자.
붉은색이 컵, 녹색이 밴드를 의미하는 선이다.
반대로 하면 AA 나옴!! 난 책임 못짐;
그다음에 다음으로 버튼을 누르면 카메라가 한번 더 켜지는데 이번엔 측면 사진을 찍는다.
음... 내가 만들었지만 은근 사용법이 복잡하다.ㅠㅠ
이부분은 측면 사진을 찍고 위의 정면과 같이 컵과 밴드를 드래그로 그려주자.
은근 드래그로 정확하게 그리기가 힘든데... 약간 빗겨나간건 몰라도, 0.5cm 이상 빗겨나갔다면
다시 그려주는것이 정확도에 도움이 된다=_=;;
이제 다음으로를 누르면 결과!!
음.. 구글링해서 얻은 저 그림속의 여성은 I컵-_-;;
처음에 본인이 선택한 가슴둘레와 산출된 컵사이즈,
그리고 컵과 밴드(언더라고 잘못 표기)의 차이가 함께 출력된다.
이 앱에 들어간 사이즈 측정 루틴은 별거 없다. 쉽게 말하자면 사각형의 가로길이(정면)와 세로길이(측면)으로 컵과 밴드 각각의 두 타원을 그린 후 해당 타원들의 둘레를 산출하고 컵 타원에서 밴드 타원을 뺀것이 끝이다. 다만 정확도를 조금이라도 더 높히고자 타원을 생성할 때 MRI 영상도 분석하고..ㅠㅠ 해부학책도 보면서 나름 산출한 상수를 적용하였다.
일단은 사람이 직접 재도 1~2cm정도의 오차가 날텐데 앱으로 컵 사이즈를 산출해봤자 얼마나 정확하겠느냐마는... 그래도 이런저런 상수도 산출해서 넣고, 여러가지 오차들을 많이 고려해서 만들었으니 조금이라도 필요로 하는 사람들(본인의 속옷 사이즈를 잘 모른다던지 할 때.. 애들은 가라~)이 유용하게 썼으면 좋겠다. 근데 직접 테스트해보려고 내 가슴 찍어보는데 옆쪽 찍기가 생각보다 많이 힘들다.ㅠㅠ 본인 가슴 측정하도록 만든건데 누가 찍어주지 않으면 사용하기 쉽지 않다는게 함정...
앱스토어 같은데 올리려면 개발자 등록비가 몇만원정도 들어서 일단은 계획이 없지만... 조만간 집구석에 쌀이 좀 충당되면 한번 지원해볼 생각이다...쿨럭;
그리고 아이폰 버전은... 나도 아이폰 유저라서 만들고싶지만.. 개발에 필요한 맥이 없어서 아직 계획없음;
오늘 회사에서 약간의 말다툼이 있었는데 그 말다툼의 원인은 바로 한 컴퓨터에 여러개의 USB 키보드(혹은 KEYBOARD로 인식되는 기타 USB장치)를 연결하고 그것들을 각각 구분해서 쓸수 있냐는 의문에서 시작되었다. 난 당연히 구분해서 쓸수있다고 했고, 상대방은 안된다고 하길래 텍스트박스 3개 놓고 KEYBOARD 디바이스 3개 설치한 후, 1번 키보드는 1번 텍스트박스, 2번 키보드는 2번 텍스트박스 이런식으로 입력되는 간단한 프로그램을 2시간 안에 만든다에 양주 한병 걸고 신나게 구글링 시작..ㅋㅋ
키보드로 이런저런 입력하면 핸들값 뿐만 아니라 키보드의 고유이름, 디바이스 종류까지 싹 긁어올 수 있는데 핸들값은 USB를 뽑고 다시끼거나, 프로그램을 재실행하거나 컴퓨터를 끄거나 하면 변경되는 사항이고 디바이스 종류는 종류가 같으면 다 동일하게 출력되기 때문에 키보드의 고유이름을 가지고 구분하기로 하였다.
폼을 새로 만들것도 없이 코드프로젝트에서 받은 소스코드를 베이스로 조금 수정해서 완성!!
이건 키보드1번(PS/2)으로 입력받았을때의 모습.
이건 키보드 2번(USB)으로 입력!
이건 USB 바코드리더기로 바코드를 찍어 입력받았을때의 모습. 바코드리더기도 키보드로 인식된다.
여기서 주목해야할 것이 바로 Name 이다. 이녀석은 컴퓨터를 껏다가 다시 켜도 변경되지가 않기 때문에 충분히 이녀석 하나만으로 디바이스를 구분할 수 있었다.(단, USB를 뽑아서 다른 USB 포트에 꽂았을 경우 바뀌는지는 확인해보지 않았다.) 코드프로젝트에서 다운받은 파일을 보면 InputDevice.cs 파일이 있는데 이녀석은 까보기가 귀찮아서 나중에 시간나면 까보기로 하고 다음과 같이 간단히 디바이스 이름이 동일한지 판단하는 코드만 추가해서 1시간만에 완성!
if (e.Keyboard.deviceName.Replace("&", "&&") == "\\\\?\\ACPI#PNP0303#4&&31296f4f&&0#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}") { textBox1.Focus(); } else if (e.Keyboard.deviceName.Replace("&", "&&") == "\\\\?\\HID#VID_0566&&PID_3032&&MI_00#7&&cacf6ea&&0&&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}") { textBox2.Focus(); } else
{ textBox3.Focus();
}
이런식으로 간단히 코딩해줬는데도 키보드 동시입력(예를들면 1번 키보드는 k를 계속 누르고, 그 중간중간 2번 키보드로 l을 누름)시에 텍스트가 엉키지 않고 모두 제대로 나왔다. 딱히 바로 쓸데가 있는 것은 아니지만 하나의 컴퓨터에 여러개의 바코드리더기를 설치하고 각각 다른 데이터를 입력하는 작업 등을 수행하는 시스템을 만들때 응용하는것도 나쁘지 않을듯.