Career/Barrier Free Application Development

총 정리 : 시작은 도전, 마무리는 성장

김 정 환 2020. 4. 1. 21:20
반응형
참여

참여의 시작은 친구의 권유였습니다. 당시 저는 프로그래밍을 시작한지 6개월 정도였고, 어떻게 해서든지 실력을 향상시키고 싶었습니다. 그런데 마침 친구가 어플 개발하는 대회가 있다면서 저에게 의견을 물었습니다. 어플 개발은 전혀 생각이 없었지만 machine learning을 활용한 object detection을 이용할 수 있다고 해서 얼른 참여했습니다. 또한, 사회적 배려 대상자들에게 유용한 어플리케이션을 제공할 수 있다고 생각했습니다. 나머지 한 명은 다른 공모전에 만나게 되었고 친해졌다고 합니다. 이렇게 저를 포함하여 3명이서 대회에 참가했습니다.

 

 

 

신청

수십 팀 중에서 15팀을 선출했습니다. 서류로 idea와 계획서를 제출하는 방식이었습니다. 저희는 시각장애인 보행에 도움이 되는 어플을 개발할 계획이여서 그러한 내용으로 채웠습니다. 아래 사진은 초반에 어떻게 IoT를 계획하고 어떤 알고리즘으로 낙상 사고를 예방하고 대처할 수 있을지 적어본 글 입니다.

 

 

 

 

1차

1차는 면접으로 진행되었습니다. 어플 개발에 대한 기획을 만들기 위해서 저희는 Design thinking을 사용했습니다. 가장 먼저 했던 작업은 자료 조사와 아이디어 구상이었습니다. 인터넷을 통해서 시각장애인 보행에 불편한 요소를 수집했습니다. 그리고 이것을 해결하기 위해서 어떤 기능이 필요한지를 구상했습니다. 불편한 요소는 빙판길, 볼라드, 계단과 계간 사이의 큰 간격이었습니다. 이 3가지를 해결하기 위해서 machine learning을 이용해여 인식하기로 했습니다. 그리고 이렇게 구상된 내용을 가지고 광주광역시장애인종학복지관에 직접 찾아가서 저희의 생각을 feedback 받기로 했습니다. 

 

피드백 이외에도 시각장애인들을 위한 여러가지 기구들도 살펴 보았습니다. 아래에 있는 장비는 장애물 감지 진동 센서입니다. 감지할 거리를 설정하여 사용자 앞에 물체가 있으면 진동으로 알려줍니다. 이런 형태로 옷깃에 붙여서 카메라를 사용하기로 했습니다.

 

또는 카메라를 지팡이에 달아보려는 시도도 해보았습니다. 1차 면접 심사가 끝난 후에, 복지관장님께서 많은 시각장애인 분들이 지팡이를 사용하는 것은 아니라고 하셨습니다. 저는 시각 장애인분들이 모두 앞이 보이지 않을 거라는 생각을 가지고 있었습니다. 하지만 실제로 앞이 전혀 보이지 않는 맹인뿐만 아니라 흐릿하게 또는 음영만 보이는 사람들도 있다는 사실을 알게 되었습니다. 그래서 모든 사람들이 사용할 수 있도록 하기 위해서 지팡이가 아닌 탈부착형태의 브로치를 만들기로 했습니다.

 

 

발표 내용의 일부분 입니다. 첫번째 표지는 Stick of Safe라고 했습니다. 이것을 만들 당시에 지팡이를 활용하자고 했었으나 나중에 브로치가 되었고, 다시 표지를 만들기에는 시간이 부족해서 그대로 사용했습니다. 개발 계획에서 저의 보유 기술은 feature engineering과 deep learning이라고 기재되어 있습니다. 현재 다시 보니 아직 초보라는 것이 많이 보입니다. feature engineering은 기술로 쓰기에 다소 약하고, deep learning보다는 machine learning이 더 적합하다라고 생각합니다. 지금 보니 손발이 오그러들지만 대견해 보입니다.

 

발표 장소는 여의도 이룸센터 2층 입니다. 발표는 팀장이 맡고 저는 Object detection을 맡고 친구는 기획을 맡았습니다. 15팀 중에서 12팀을 선출했습니다. 이런 공모전을 한 번도 해본 적 없는 저에게 굉장히 떨리는 시간이었습니다. 3명 모두 발표를 마치고 환하게 웃고 있습니다. 면접심사가 끝나고, 건대로 놀러갔었습니다. 아마도 회포를 풀러갔던 것 같습니다. 순대국밥과 소주를 마시면서 아직 어색했던 사이를 돈독하게 했습니다.

 

2차

1차가 끝나고 그린라이트와 현대오토에버에서 교육을 해주었습니다. 어플 개발에 대한 전반적인 과정과 필요한 기술, 장애, 장애인을 위한 어플 등에 대한 교육을 4일에 걸쳐서 진행했습니다. 장소는 이룸센터 2층에서 진행됬습니다. 아침 9시에 진행됬는데, 제가 머물고 있는 장소에서 9시까지 여의도로 갈려고 하니 무척 이른 시간에 나와야 했습니다. 색다른 경험으로는 저도 직장인이 된 것 같았습니다. 9시면 출근 시간이여서 직장인들과 같은 지하철을 타면서 출근(?)했습니다. 그냥 보내는 시간이 아쉬워서 책을 읽으면서 갔던 기억이 새록새록 합니다.

 

 

 

교육을 들으면서 필기도 열심히 했습니다. 교육 초반에 프로젝트 관리에 대한 교육을 받았었는데, 솔직히 필요성을 느끼지 못했었습니다. 처음 들어보는 말도 많았고 엄청나게 자세하게 관리해야 하는지 몰랐습니다. 아무대로 처음 개발에 임하고 작은 규모였기 때문에 이런 생각을 한 것 같습니다. 하지만 어플 개발 중반에 접어든 이후부터 마무리까지 오면서 느낀점은 관리가 굉장히 중요한 것이라고 생각했습니다. 다행이도 저희 멘토님께서 프로젝트 매니저로 일을 하셔서 저희의 일정을 계속 관리해주셨습니다. 만약에 프로젝트 관리가 제대로 이루어지지 않았으면, 기간 내에 어플 개발이 완료되지 않았을 수도 있거나, 기능과 완성도 면에서 복잡하고 부족한 부분이 있었을 것이라고 생각합니다. 17일의 교육은 저에게 새로운 관점을 배울 수 있게 해주었습니다. 장애인을 동정하지 말고 공감하고 문제를 해결하기 위해서 멀리서 관찰하는 것이 아니라 다가가서 직접 물어보고 답을 찾으라는 태도를 배울 수 있었습니다. 18일에는 보안과 할 수 있게 하는 기술에 대해서 배웠습니다. 개발에서 보안도 빼놓을 수 없는 부분이라고 합니다. Security code를 이용해서 코드를 보안하고, 개인정보를 이용하게 된다면 이 또한 무조건적으로 보호되어야 하고 그 방법과 중요성에 대해서 배울 수 있었습니다. '할 수 있게 하는 기술'은 말 그대로 무엇을 하게 해주는 기술을 말합니다. 어렵고 복잡한 기술이 할 수 있게 하는 것이 무조건 할 수 있게 하는 것이 아닌, 쉽고 간단한 기술이라도 무엇을 할 수 있게 해주면 된다는 것을 보고 배울 수 있었습니다. 

총명한 눈으로 수업을 항상 잘 들었으면 좋았겠지만, 배부르고 피곤해서 조는 경우도 있었습니다. 아래 사진은 제가 잠시 졸고 있는 틈을 타서 친구가 찍어 보내준 사진입니다. 잘 자고 있네요.

명상

 

교육을 마치고 다음 기획 단계로 넘어갔습니다. 1차 내용을 수정하고 구체화하고 교육 내용을 반영하여 새로운 기획을 만들어야 했습니다. 그리고 이것이 2차 면접심사입니다. 저희는 1차에서 했던 Design thinking을 그대로 실행했습니다. idea를 만들어서 시각장애인분들에게 가져가서 피드백을 받고 수정 보완해서 다시 가져갔습니다. 그리고 그린라이트에서 도서관장님을 멘토로 붙여주셔서 더 폭넓은 피드백을 받을 수 있었습니다.

 

그리하여 총 3번의 수정을 거쳤습니다. 1차 면접심사에서 받은 내용으로 볼라드, 낙상, 계단 사이 틈 중에 볼라드와 낙상을 선택했습니다. 그리고 지팡이 대신에 브로치를 사용하기로 했습니다. 그리고 계속 피드백을 받으면서 수정 보완했습니다.

 

발표 당일, 저는 2013년도에 산 Xnote laptop으로 제 얼굴을 학습시키기고 있었습니다. 실은, 몇 일 전부터 계속 제 얼굴을 학습시키기 위해서 CNN모델에 제 사진을 수 백장 집어 넣고 있었습니다. 제가 사용했던 모델은 일본의 어떤 회사원이 개발해서 공개한 모델입니다. 이 회사원은 상사가 자신의 주변에 오면 카메라로 상사의 얼굴을 인식해서 자신의 컴퓨터 화면을 바로 바꾸기 해주는 재미있는 생각을 했습니다. 저는 이분의 소스코드를 얻어서 학습시키고 있었습니다. 만약에, 이것이 성공해서 발표 때 보여진다면 대단한 효과를 얻을 수 있다고 생각했기 때문입니다. 하지만, 컴퓨터 성능 자체가 너무 낮아서 학습도 엄청~ 정말로 상상할 수 없을 정도로 느렸습니다. 그리고 이미지가 부족했던지 모델이 잘못됬던지 해서 얼굴이 없어도 얼굴이라고 인식했습니다. (지금 생각해보면 bossSensor는 상사가 근처에 와서 화면이 바뀐 것이 아닌 어떤 사람이 가까이 와도 작동하는 것 같습니다. 저 모델와 저 이미지 데이터 양으로는 도저히 설명한 만큼의 성능이 나오기는 힘듭니다.) 각설, 저희 팀의 발표가 시작되었습니다... 끝나고 열심히 피드백을 적고 있습니다.

발표가 끝난 직후, 심사위원님들의 피드백과 의견

 

 

 

모든 팀의 발표를 보면서 대단한 기술과 idea를 보면서 감탄을 했습니다. 그리고 발표되는 PPT를 보면서, 동적으로 움직이는 내용과 벌써 개발을 시작한 것 같은 영상까지 있어서 대단하다고 생각했습니다. 그래서 이번 심사에서는 저희는 통과 정도만 할 것이라고 생각했습니다. 이런 말을 하는 이유는 2차에서 기획을 가장 잘한 팀에게 1등을 주기로 했습니다. 그런데 아무런 상도 없고 그냥 제일 잘해서 '참 잘했어요~'같은 의미의 상장 입니다. 그래서 아무 생각없이 앉아 있는데 갑자기 저희 팀 이름이 호명되었습니다. 그 순간, 저와 팀장은 바로! 일어나~지 않고 2초가 정적했습니다. 뭔가 잘못 들은 느낌이었습니다. 그리고 나서 팀장은 일어나서 소리를 질렀습니다. '아니 이게 무슨일이야???' 

발표가 끝난 뒤, 현업 개발자와의 간담회

전혀 기대하지 않았기 때문에 또는 받아도 되는가 하는 생각 때문에 기분이 너무 이상했습니다. 이게 현실인가? 물론 최종 결과는 아니었지만 이렇게 1등이라는 것을 해보다니 기분이 참 이상했습니다. 상을 받는데 음악이 안 나오는 귀여운 진행사고가 있었지만 모든 것이 좋아보였습니다. 이런 걸 들고 찍는 날이 올 줄이야.

대표이사님과 한 컷
모두와 함께 한 컷

 

그리고 행사가 끝나갈 때쯤, 현대 방송에서 저희 팀과 인터뷰를 진행했습니다. 갑작스러운 전개에 약간 당황했지만, 질문에 최대한 정성을 담아서 난생 처음 인터뷰를 했습니다. 그때 마지막 질문만 기억에 남습니다. "배리어프리 앱 개발 콘테스트를 어떤 대학생들에게 추천하고 싶으신가요?" 라는 질문에 저는 "누구나 참여할 수 있지만, 아무나 할 수는 없다고 생각합니다. 저는 현대오토에버의 ‘스마트자동차 공학 사회공헌 프로그램도 함께하고 있는데요. 디지털 교육 소외 지역 아동들에게 코딩 교육을 해주고, 새로움 꿈을 꾸게 돕는 멘토링 활동입니다. 두 활동 모두 ‘공감 능력’이 필요하다고 생각합니다. 아무리 기술에 자신이 있어도, 소외된 사람들 입장에서 배려하지 못하면 아무도 사용하지 않는 앱이 될 테니까요."라고 했던 것이 기억납니다. 핵심은 공감이었습니다. Design Thinking과 교육에서 모두 사용자들이 사용할 것이기 때문에 그들과 공감하는 것이 가장 중요하다고 생각했습니다. 

김정환과 양창석

 

이렇게 2차 심사가 끝나고 참가자 모두 즐거운 저녁을 먹으러 갔습니다. 저는 돈가스를 주문했습니다. 담당자님께서 옆에 앉아서 이런 말을 해주셨습니다. "여태 기획에서 1등 했던 팀이 최종에서 1등 했던 경우가 없어~". 솔직히 저는 우승에 전혀 관심이 없이 저 스스로에 대한 공부와 소외 계층을 도와보겠다는 의지로 참여하고 있었기에 전혀 신경쓰지 않았지만, 담당자님의 장난에 맞장구 치려고 이렇게 말했습니다. "그러면 다음부터 그 말 못하시겠네요~ 저희가 1등 해보죠~"

 

저희 소식은 현대 저널에 게시되었습니다. 그 외에도 배리어프리 앱 개발 콘테스트를 검색하면 저희 얼굴이 나오는 마법!

https://news.hmgjournal.com/Group-Story/%ED%98%84%EB%8C%80%EC%98%A4%ED%86%A0%EC%97%90%EB%B2%84-%EB%B0%B0%EB%A6%AC%EC%96%B4%ED%94%84%EB%A6%AC-%EC%95%B1%EA%B0%9C%EB%B0%9C-%EC%BD%98%ED%85%8C%EC%8A%A4%ED%8A%B8

 

평화롭고 행복한 일상을 위해, 현대오토에버 배리어프리 앱 개발 콘테스트

모두가 일상적인 행복을 누리는 세상, 현대오토에버와 대학생들이 ICT 기술로 함께 만들어갑니다.

news.hmgjournal.com

 

3차

본격적인 앱 개발에 돌입했습니다. 그전에 각 팀마다 멘토님을 배정해 주셨습니다. 저희도 그분을 만나서 앱 개발 멘토링을 진행했습니다. project manager로 일하시는 멘토님은 저희의 개발 수준과 남은 일 수를 고려하여 일정을 계획해 주셨습니다. 아래 그림은 일정과 수행 업무를 기록한 종이입니다. 처음에 글을 쓸 때는 깔끔했는데 계속 추가해서 쓰니 굉장히 더러워 보입니다. 첫 번째 종이를 보면, 어떤 단계로 개발이 이루어지는지 기록되어 있고, 하단에 몇 월까지 어떤 기능을 끝내야 하는지 기록되어 있습니다. 두 번째 종이는 해야할 일별로 기간에 따라 정리했습니다. 세 번째 종이는 서버와 앱의 통신 과정을 기록했습니다. 서버와 통신에 대해서 하나도 몰라서 여쭈어 봤습니다. 네 번째는 빠른 시일내에 확인하고 알아봐야 할 일을 기록해 놓았습니다. 다섯 번째는 어플 주요 기능과 관련 내용을 써놓은 것 같습니다. 여섯 번째 종이는 첫 메토링 내용을 요약했니다.

 

멘토님께서 한 가지 활동을 주셨습니다. 3명이서 함께 모여 캠프같은 합숙을 해보기를 권하셨습니다. 3명 모두 개발 경험이 없고 분야도 달랐기 때문에 같이 있으면서 서로 영향을 주면 분위기와 개발 진행도가 크게 향상될 것이라고 말씀하셨습니다. 그래서 다음 달인 10월에 멘토링이 끝나고 합숙하기로 결정했습니다. 빠르게 하고 싶었지만, 한 친구가 광주광역시에 거주하고 있어서 언제든지 일정을 잡지 못했습니다.

 

10월이 오기 전에 저는 YOLO를 사용하여 bollard를 어느 정도 학습시키기로 했습니다. YOLO에 대한 내용은 여기에 제가 정리해서 올려 놓았습니다. 개발 내용이 아닌 스토리를 이야기 하자면, CNN모델 처럼 이미지 사진을 모델에 그대로 넣어서 학습시키는 줄 알았습니다. 다시 말하면, 전처리 없이 그냥 넣으면 되는 줄 알았습니다. 하지만, 사진에 bounding box를 그려 넣는 전처리 과저이 필요했습니다. 그래서 허겁지겁 yolo_mark 사용법을 배워서 2만장이 넘는 이미지를 제가 손수 bounding box를 그려 넣은 기억이 있습니다. 1개의 사진당 3초정도 걸렸으니 8시간 넘게 네모 박스만 그리고 있었습니다.

yolo_mark로 이미지에 bounding box 그리기

 

 

그리고 YOLO모델에 넣어서 학습하려니 오류는 엄청 뜨는 겁니다. '이제부터 진짜 시작이다'라는 생각이 들었습니다. 정말로 우여곡절 끝에 학습을 성공했습니다. 아래 영상은 학습이 되고 있는 중을 보여줍니다. 첫 번째 동영상의 왼쪽 그래프는 loss값을 보여주고 있습니다. 학습이 진행되면서 점점 내려갑니다. 그리고 오른쪽 검은색 화면은 64개의 이미지가 계속 들어가는 것을 보여주고 있습니다. 하지만 문제가 있었습니다. tensorflowlite 앱에 제가 학습한 모델의 weights가 올라가지 않았습니다. 결국 이상태로 10월 멘토링을 진행하기로 했습니다. 멘토님께 보여드릴려고 했는데... ㅠㅠ

 

 

 

10월 멘토링은 여의도 어느 카페에서 진행되었습니다. 저는 제가 만든 모델을 가지고 갔지만 역시나... 오류가 떠서 보여드리지 못했습니다. 대신해서, 제가 하려고 하는 것을 똑같이 해놓은 분의 영상을 보여드렸습니다. 멘토링이 끝나고 저희는 air bnb로 예약해 놓은 방으로 이동했습니다. 흑석도의 어느 방이었습니다. 가격도 저렴하고 여의도와 비교적 가까워서 이곳으로 선택했습니다. 사실 호텔 같은 곳에서 멋지게 하려고 했는데 예산도 고려해야 했습니다. 저는 이곳으로 가기 전에 멘토님이 컴퓨터를 빌려주시기로 했습니다. 제 컴퓨터 2013 Xnote의 상태를 보시고는 절대로 이 컴퓨터로 합숙에서 개발할 수 없을 것이라고 말씀하시고, 컴퓨터를 빌려줄테니 따라오라고 하셨습니다. 그래서 지하철을 타고 멘토님 집 근처로 가서 컴퓨터를 받아왔습니다. 엄청 크고 엄청 무겁고 엄청 성능 좋은 것이 개발자가 쓰는 컴퓨터 같았습니다. 저는 다시 지하철을 타고 흑석도로 향하는데 친구들이 실망 썩인 목소리로 전화를 해왔습니다. "정환아... 오면 실망할 거다... 완전 구린데" 저는 길바닥에서도 자봤고 몇 개월 세탁하지도 않은 침구류에서 잠도 자봐서 이 정도면 무난하다고 생각했습니다. (길바닥? 몇 일 세탁 안한 침구류? 가 궁금하신 분들은 저의 여행 일지를 참고하시면 됩니다.)

 

2박 3일은 먹고 자면서 개발에만 전념했습니다. 정말 캠프였다고 할까요? 식사는 편의점이나 배달로 전부 해결했고 새벽까지 개발하다가 아침에 일어나서 또 개발했습니다. 1일 차에서는 모두 의욕이 넘쳤지만, 2일 차가 되니 친구들 모두 멘탈붕괴에 빠졌습니다. 3명 모두 Java와 android studio를 처음 다뤘기 때문에 멘땅에 해딩이 아니라 멘땅에 몸을 투척하는 정도였습니다. 저는 비교적 python을 다루었고 machine learning도 공부도 해서 이렇게 저렇게 풀어보면 되지라고 생각했지만, 친구들은 한 숨을 푹푹 쉬면서 짜증난다며 힘들어 했습니다. 부족한 실력이었지만 다행이도 제가 학습 속도가 빨라서 이런 친구들을 다독이며 그들의 프로그램 문제를 해결해 주면서 함께 개발을 했습니다. 후반에는 저도 한숨이 푹푹 나오기는 했지만... 여차여차해서 합숙이 끝났습니다. 이 당시에는 뭔가 많이 한 것 같았습니다. 마음가짐도 달라졌습니다. 확실히 모여서 머리를 맞대로 문제를 해결하니 달라졌습니다. 그런데 지금 와서 보면 일을 1000이라고 하면 그 때 1정도 했습니다. 하지만 천리 길도 한 걸음 부터라고 그 때의 그 한 걸음이 가속력을 잘 내주어서 개발을 끝마칠 수 있었습니다.

 

창석 팀장은 블루투스 통신에 전념하고 있었습니다. 그리고 합숙 당시에 아두이노와 android studio 사이에서 고군분투하던 형이 영상을 보내왔습니다. 초음파 센서에서 측정된 거리가 앱에 표시되는 영상입니다. 대단히 기분이 좋았습니다. 형에게 소스 코드를 보내달라고 하고 제가 만들고 있는 master에 병합시켰습니다. 그리고 이때즈음 제가 학습시킨 weights를 tensorflowlite에 탑재할 수 있어서 어플로 볼라드를 탐지할 수 있게 되었습니다. 

 

 

어플에서 bollard를 탐지할 수 있게 되었기 때문에 무선 카메라를 주문하기로 했습니다. 한국에서는 1.5배나 비싸서 amazon에서 직구를 했습니다. 약 4만원인 녀석입니다. 제공되는 어플도 있어서 테스트하기에 적합하다고 생각했습니다. 그리고 이녀석과 저희 어플을 연결하기로 했습니다. 이 녀석과의 결말을 지금 말씀드리겠습니다. 결국 연결하지 못했습니다. 초보자였던 저는 제가 스스로 개발할 실력이 안되는 것을 알았기 때문에 github를 샅샅이 뒤져서 약 100개 정도의 소스 코드를 얻을 수 있었습니다. 그리고 그것들을 전부 분석해서 어떻게든 방법을 찾아보려고 했습니다. 하지만, 정말 중요한 파일들은 apk로 이미 compile되어 있어서 코드를 볼 수 없었습니다. 또는, 회사마다 아니며 개발자마다 각자의 복잡한 카메라 모듈을 설정해 놓아서 이것을 제가 해석하기에는 실력이 부족했습니다. 그렇게 약 50일 정도를 이것만 하는데 투자했지만 아무런 소득이 없이 마무리 되었습니다. 이것이 마무리될 무렵에 팀장이 올라와서 같이 개발하기로 했습니다. 저는 팀장을 보자마자, "나 이거 50일 동안 했는데 머리가 터져버릴 것 같아!!! 잡은 것 없는 태평양 바닷속 한 가운데에서 살려고 허우적대는 것 같아!!! 악!!!" 이라고 혼자 터지고 쓰러졌습니다. 팀장도 웃겼는지 그만하면 됬다고 카메라는 하지말고 다른 대안을 찾아보자고 했습니다. 그렇게 이 카메라 녀석과 작별했습니다. 다시 보지말자.

 

그럼에도 불구하고, 이 IP카메라를 나중에라도 성공시키고 싶어서 분석 테이블을 작성했었습니다. 테이블에는 '왜 이 카메라가 필요한가?', '어떻게 작동하는가?' 등을 적었습니다. 그중에서 핵심은 '왜 이 카메라가 필요한가?' 였습니다. 이 카메라가 필요한 이유는, 시각장애인들이 매번 스마트폰 카메라를 들고 거리에서 볼라드를 인식하며 걷어 다닐 수 없기 때문입니다. 이후 몇 달 뒤, 팀장과의 대화 중에 100% 해결은 아니지만 핵심 이유를 커버할 아이디어가 떠올랐습니다. 팀장이 '근접알림센서' 기능을 추가하자고 의견이 나왔습니다. 마감 기간이 얼마 남지 않아서 하고 있는 기능부터 먼저 완성하자고 했습니다. 그러나 팀장은 이 기능은 저희 어플의 완성도를 높여줄 것이라는 의견을 내놓았습니다. 몇 번의 회의에서 '어떻게 만들 것인가?', '얼마나 걸릴 것인가?' 등에 대한 질응답을 한 후에 2가지 이유에서 의견을 수렴했습니다. 그 중 이전에 분석했던 테이블이 떠올랐고, 들여다 보니 '근접알림센서가 외부 카메라의 부재를 해결할 것이다'라는 이유가 있었습니다. 방법은 다음과 같습니다.  최소 1번만 거리에서 카메라로 볼라드를 인식해서 서버 데이터베이스에 저장한다면, 이후에는 스마트폰은 주머니에 넣어도 근접알림센서가 백그라운드에서 동작하여 근처에 볼라드가 있다고 알려주기 때문입니다. 따라서 매번 가는 방식에서 1번만 가는 방식으로 변경될 수 있었습니다.

 

 

저와 팀장이 기능 개발에 전념하고 있는 동안 다른 친구는 디자인을 맡았습니다. main색은 안전을 상징하는 초록색 계열로 하기로 했습니다. 그리고 화면 간의 이동은 스캐치해서 그려보았습니다. 디자인을 파워포인트로 한다는게 참 신기했습니다. 보면 볼 수록 실력이 대단한 것 같습니다.

 

 

개발을 하다보니 어느새 겨울이 되었습니다. 함박눈이 펑펑 하늘에서 쏟아지는 모습이 참 포근합니다.

 

이제 마무리 단계에 도달했습니다. 어플 등록하는 작업만 남은 상태였습니다. 하지만 아래와 같은 메일이 왔습니다. 권한상의 문제로 어플을 등록해줄 수 없다는 내용입니다. 여기에서 문제가 되는 권한은 CALL과 SMS로 알고 있었습니다. 2019에 보안이 강화되면서 민감한 권한을 몇가지 제한했습니다. 만일 카카오톡 같이 채팅 전용 앱일 경우에는 SMS가 문제가 되지 않지만, 게임앱인데 SMS사용한다면 권한이 제한된다는 이야기 입니다. 하지만 몇 가지 예외 사항이 있었습니다. 저희는 그중에서 '안전'이라는 항목에 속하기 때문에 어플 등록할 때, 소개에 이러한 내용을 써서 제출하면 되는 줄 알았습니다. 하지만 계속되는 거절... 거절... 거절... 나도 이 거절 메일을 거절하고 싶다... 개발 초보자 였기 때문에 저희 소스코드에서 권한 확인 문제를 제대로 확인하지 못했을지도 모른다는 생각을 했습니다. 총 5개의 권한이 있었습니다. 위치, 카메라, 외부저장소, 통화, SMS 순서대로 하나 하나 추가하면서 어플 등록하기로 했습니다. 위치, 카메라, 외부저장소, 통화까지 통과했습니다. 그런데 SMS에서 거절이 반복되는 것이었습니다. 소스코드를 보아도 SMS는 단순해서 권한 확인 코드는 어려운 일이 아니었습니다. 후... 다시 봉착한 벽... 그러다가 팀장이 구글 플레이어에 직접 메일을 보내기로 했습니다. 3일 정도 있다가 메일이 왔습니다. 메일 내용은 기억나지 않지만 대략 승인해주겠다는 내용이었습니다. 아... 그때 알았습니다. 제한된 권한을 사용할 때는 어플 내용과 사용하려는 제한된 권한의 용도를 양식에 적어서 제출해야 했습니다. 결국 거의 소스 코드는 문제가 없었고, 다만 메일을 보냈으면 해결되는 것이었습니다! 

 

그리고 마지막 3차 발표 당일. 강남의 어느 스터디룸. 2020년 2월 14일. 코로나19의 여파로 직접 만나는 것은 불가능하게 되었고 각 팀이 안전한 장소에서 화상으로 발표하기로 했습니다. 긴장한 팀장, 개발된 기술에 대한 질문에 대한 예상 답변을 읽고 있는 본인 그리고 발표를 돕고 있는 인호. 사다리 타기 결과 2번째로 발표하게 되었습니다. 발표 순서가 왔고 팀장은 떨리지만 침착하게 발표를 마무리 했습니다. 그 다음으로 역시 기술관련 질문이 왔습니다. 개발자님께서 bollard detection의 정확도, 낙상 감지 알고리즘과 정확도, detection을 학습시키는 과정에 대해서 질문해 주셨습니다.

 

detection 정확도는 AP(average precision)은 약 60 정도로 높게 나왔습니다. 상황이 특별했기 때문입니다. 길거리에서 긴 직사각형이고 색은 대부분 회색이나 검은색이기 때문입니다. 테이블이나 실내에서 정확도를 측정하면 정확도가 현저하게 낮게 나왔습니다. 왜냐하면 텀블러 조자 볼라드라고 인식했기 때문입니다. 만약에 컴블러를 볼라드라고 인식하지 않게 하기 위해서는 엄청나게 많은 데이터가 필요합니다. 하지만 저희 어플은 거리라는 장소에 사용될 것이기 때문에 약 6000장의 이미지로 적합한 성능을 낼 수 있다고 생각했습니다.

 

낙상 감지 알고리즘은 어느 분의 소스코드를 활용하여 재구현했습니다. 다만, 핸드폰을 주머니에 넣는 정도의 떨어짐도 낙상으로 감지되는 경우가 많아서 여러번의 테스트를 통해서 낙상이라고 감지하는 threshold 값을 변경했습니다.

 

detection 학습에 사용된 이미지의 개수는 약 6000장입니다. 처음에 2만장으로 했었으나 인터넷으로 모은 사진들은 화질이 좋지 않고 사진에서 차지하는 부분이 너무 많아서 practical situation에서는 적합하지 않았습니다. 그래서 손수 카메라로 촬영한 이미지와 인터넷에서 선별한 6000장의 이미지를 사용하였습니다.

 

모든 팀의 발표가 끝나고 수상팀의 발표만이 남아 있었습니다. 2차와 마찬가지로 저는 너무나 평온하게 고난했던 어플 개발이 끝났다는 사실에 이미 행복에 젖어 있었습니다~ 3등부터 호명하기 시작했습니다. 그리고 2등. 화상으로 진행되는 거라서 (정말 안타깝게도) 긴장감이 하나도 없이 1초 간격으로 팀이 호명되었습니다. 실제로 만나서 진행되었으면, 호면되서 나가고 소감 발표하고 상장 받고 했을테지만 지금은 그럴 수 없었습니다. 그리고 마지막을 호명했습니다. 

 

담장자: "최우수상은 You go, we go!"

(0.0001초 후)

팀장: (의자를 박차고 일어나며) 와!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

저: (유튜브 보고 있다가 팀장의 소리에 놀라며) ???

인호: (시끄러운 팀장을 보며) 조용히 해! 여기 스터디 룸이야!

 

영상 없다는 것이 아쉽지만, 순간을 글로 표현해보자면 저랬습니다. 최우수상을 거머쥐었습니다.

콘테스트가 끝났다는 것도 기뻤지만 상을 받았다는 것 또한 기쁘다는 것을 느꼈습니다. 회의가 끝나고 3명 모두 환희가 가득한 얼굴이었습니다. 스터디룸을 나오면서 맛있는 저녁을 먹기로 했습니다. 우승상금이라는 것이 있기 때문에 오늘은 꽤 비싼 음식을 먹어보기로 했습니다. 처음 제안했던 곳은 VIPS였습니다. 10여분을 걸어서 도착하니 배달만 하는 VIPS??? 큰 환희에서 아주 작은 실망감을 빼봐야 티도 나지 않았습니다. 그런데 너무 배고프고 맥주를 마시고 싶어서 근처에 있던 꽤 좋아보이는 치킨집으로 들어갔습니다. 저희는 약 6개월 간의 모험을 서로 이야기 하며 치킨과 떡볶이와 맥주를 먹으면서 회포를 풀었습니다. 담당자님에게 우승 피켓은 전달하냐고 물어보니, 그런거 없다고 사진으로 보내주셨습니다. 아... 일산에서 개최했으면 참으로 좋았을텐데. 첫 공모전에 첫 최우수상. 큰 아쉬움이지만 그대로 받아들이기로 했습니다. 친구들도 화상으로 모든 진행이 이루어져서 최우수상이 하나도 와닿지 않는다고 말했습니다. 함께 환희했고 아쉬워하는 느낌을 공감하면서 콘테스트가 마무리 되었습니다.

 

최우수상을 했는데 사진도 없고 손에 만져지는 것이 하나도 없어서 문의를 하니 상장을 보내주셨습니다. 짜잔~ 이제야 정말 수상한 것 같은 느낌입니다!

 

 

짧은 소감을 쓰면서 글을 마치겠습니다.

 

모든 것이 처음이었습니다. 어려워 보이고 불안하고 힘들었습니다. 하지만 포기하지 않고 계속 나아갔습니다. 문제가 있으면 해결했습니다. 서로 의견을 나누고 이해하고 협력했습니다. 그리고 마침내 이루어 내었습니다. 

 

지금 2020.04.02 저는 최우수상이라는 엄청난 일을 해냈다는 포부를 가지고 글을 쓰고 있습니다. 그런데 이 모습은 훗날에 다르게 보일 것 같습니다. 처음 합숙할 때 뭔가 대단한 것을 해낸 느낌이었지만 지금 후기를 쓰면서 다시 보니 귀여운 수준입니다. 아마도 훗날에 이 후기를 보면 귀여운 수준이라고 생각할 것 같습니다. 그리고 과거의 저를 대견해 할 것 같습니다. 여전히 천리 길을 가는 저의 모습을 지켜보고 있습니다.

 

 

반응형