2015년 11월 12일 목요일

여기 어디지? 실내에서 장소 이름을 자동으로 인식할 수 있을까?



[범 지구적 실내 위치 제공을 위한 걸음 - 1]


실내 위치(장소) 인식을 범 지구적(?)으로 제공할려고 하다보니, 장소 인식 시스템은 구축을 위해 필요로하는 사람의 노동력을 최소로 만들수 있는가가 가장 중요한 문제라는 결론에 도달하게 되었다.

가장 좋은 것은 처음 가는 실내 장소에서도 여기가 어디인지 자동으로 인식할 수 있는 시스템을 만드는 것! 그렇다고 휴대폰의 다양한 리소스를 엄청(?) 써서 장소인식을 자동으로 해보겠다 라는 발상은 논문에나 쓸법한 방식이므로 일단 제외를 하고...

이 문제를 놓고 계속 고민해 오던 방식이 있었다. 사람들은 WiFi AP를 설치할때 AP의 이름(ssid)으로 장소와 관련이 있는 이름을 주로 사용하는 경향이 있다. (예를 들어 xxx_house, starbucks, ...) 물론 iptime, olleh 와 같이 장소하고 아무런 관련이 없는 값도 있다. 그런데, 매장들의 경우는 (특히 커피숍, 베이커리 등) 고객들에 편의를 주기 위해 무료 WiFi를 설치하고 자기 매장을 구별할 수 있게 매장 이름을 ssid로 사용 한다 (와이파이 관련 사업하시는 대표님이 오프라인 매장들을 이런 경향이 아주 강하다고 알려 주심 ^^).

때마침 어제 극심한 스트레스를 받고 있던 차, 이를 해결하기 위해 하루 종일 코딩 하기로 결심하면서 그동안 미뤄뒀던 이 일을 해 보기로 했다. 우리 회사는 (로플랫 이에요~) 지난 9월에 거금 300만원을 들여 아르바이트를 통해 서울시내 주요 커피/베이커리/패스트푸드 브랜드 매장 4000여곳을 직접 방문해서 WiFi 신호를 수집했다. 브랜드는 총 24개. 장난아니죠!

다른 브랜드 매장에는 잘 발견이 안 되지만, 특정 브랜드 매장에서만 유독 관찰되는 ssid 가 과연 있을까? 만약 명확한 패턴이 관찰이 된다면, 실제 학습하지 않은 브랜드 장소들도 앞으론 자동으로 인식할 수 있지 않을까?

이 패턴이 있는지 확인하기 위해서 TFIDF (Term Frequency Inverse Document Frequency) 라는 방식을 사용해 보기로 했다. 간략히 설명하자면 TFIDF는 다른 문서에는 잘 없지만 특정 문서에서는 유독 자주 관찰되는 단어를 찾아서 그 문서를 대표하는 키워드로 사용하고자 할때 사용하는 방식이다. 

여기서는 term은 ssid를 조금 손 봐서 (공백, 1F, 2F, -, 등 몇가지 불필요한 정보 삭제) 사용했고, 하나의 브랜드에서 보이는 term 전체 리스트를 하나의 document로 생각했다.

실제 사용한 데이터와 파이썬 코드는 아래 링크에서
와이파이 데이터 및 파이썬 코드 다운받기

자.. 그렇게 해서 우리가 찾은 결과는... (상위 2개만 표시했어요~)

스무디킹
     smoothieking 122.680970654
     lmart 37.1551271931
망고식스
     mangosix 117.962471782
     ohtsamoris 34.0064151724
탐앤탐스
     tomntoms 353.566062149
     tomntoms2 143.976117873
달콤
     dalkomm 67.4360154759
     dkstaff 48.0901373952
배스킨라빈스
     *baskinrobbinsfreewifi 351.874426106
     baskinstaff 316.311356495
설빙
     sulbing 177.466778557
     publicwifi@seoul 37.6269488538
할리스
     hollys 346.06287093
     hollyscoffee 205.464673366
파리크라상
     pariscroissant 47.3940463793
     u+net7063 21.9376604943
투썸플레이스
     twosome 299.706186749
     twosomeplace 108.219123484
롯데리아
     freeu+zone 88.7228391117
     netis 84.2126950537
오설록
     osulloc 54.1014045696
     osullocoffice 34.0064151724
커핀그루나루
     coffine 180.172415342
     coffinestaff 119.309873534
스타벅스
     ollehstarbucks 777.623609645
     starbucksap 763.155045796
카페베네
     bene 432.322186157
     caffebene 179.032554836
폴바셋
     telecop 72.0622928439
     paulbassett 68.4053228807
이디야
     ediya 435.833696014
     ediyacoffee 294.886922454
잠바주스
     jambajuice 50.745192024
     jjgn 25.8583532148
파스쿠찌
     pascucci 309.194823577
     *pascuccifreewifi 260.112876875
던킨도너츠
     dunkin 169.064771011
     *dunkindonutsfreewifi 150.868885425
맥도날드
     현대hcnwifiphone 108.219123484
     mcdonaldsfreewifi 90.071033507
공차
     gongcha 156.376995187
     publicwifi@seoul 66.2951003614
커피빈
     gangnamwifi 108.186485868
     dummy 77.5799315416
엔제리너스
     angelinus 163.497102488
     angel 100.184377114
파리바게뜨
     *parisbaguettefreewifi 576.698454226
     parisstaff 476.708074552

와우....
예상은 했지만... 생각보다 패턴이 아주 잘 나온다... 물론 없는 경우도 있다.


스타벅스가 서울시내 330개 정도, 전국적으로 720개가 있다고 한다. 나머지 절반은 수집하러 다니지 않아도 될 것 같다... 물론, 조금더 분석하고 자동으로 장소 이름을 설정하기 위해선 알고리즘을 더 devise 해 봐야겠지만...


전문가 분들께~
위에 링크를 통해서 실제 서울시내 4000개 장소 데이터를 오픈했습니다. 관심 있으신 분들은 오픈해 드린 데이터를 활용해서 더 좋은 방법들을 찾아볼 수 있을 거 같애요... 그렇게 하신 분들은 저에게도 좀 알려 주세요~~ ^^

2015년 11월 7일 토요일

애플은 실내에서 WiFi 신호를 수집하는 앱(Indoor Survey)을 왜 private하게 릴리즈 했나?

이번주 세상을 살짝 달군 하나의 사건이 있었다. 그 이름 Apple Indoor Survey.




우연히 외국 사이트에서 봤는데, 한글 기사로도 나오고 페이스북에서 지인이 나에게 확인하라고 알려도 줬다.




Survey 라는 단어는 위치시스템을 구축할 때 장소를 학습한다는 의미로 쓰이는 단어다. 즉 애플이 사람들에게 실내 위치시스템을 구축하기 위한 도구를 뿌리고 있고, 사람들을 위치시스템 구축에 끌어들이고 있다는 의미로 해석된다.

원문을 살짝 보면 "By dropping 'points' on a map within the Survey App, you indicate your position within the venue as you walk through. As you do so, the Indoor Survey App measures the radio frequency (RF) signal data and combines it with an iPhone's sensor data."
즉, 이 앱을 통해서 우리가 무선신호 (== WiFi)를 알아서 잘 수집하겠습니다 라는 뜻이다.

10여년이 넘은 와이파이 실내 위치기술을 지금에 와서 왜 이런 방식으로? 

첫번째, 실내 위치시스템은 아무리 큰 회사도 혼자서는 구축할 수 있는게 아니다. 실내 장소가 너무 많고 구축을 위한 노동력이 많이 필요하기 때문에 결국은 일반 사람들(최소한 비즈니스 파트너들)을 실내위치 시스템 구축에 동참시켜야 한다. 

두번째, "전문가의 노력이 많이 드는일을 일반인이 쉽해 할 수 있다?" 여기에 문제가 있었기 때문이다. 일반 사람들이 하기에 쉽지 않은 일이었다. 2013년 200억을 주고 인수한 WiFi SLAM 회사의 기술은 간단히 생각하면 실내에서 WiFi 신호 수집 자체를 아주 쉽게 해 주는 기술이다. 이제 이 회사 기술의 내재화가 끝났다는 말인 것 같다.

최근에 계속 WiFi SLAM이라는 단어가 나를 귀찮게 하고 있어서 문득 예전 자료를 찾아봤다. 무려 7년전 2008년 12월 13일. "A Solution to the Simultaneous Localization and Map Building (SLAM) Problem" 이라는 논문을 랩 세미나에서 발표했다. 그해부터 였나보다. 실내위치 시스템은 구축에 드는 시간(비용)이 항상 문제라는 걸 깨달았다. 그리고 이걸 어떻게 풀까만을 계속 고민했던 것 같다. 그러다 찾은 방법이 로보틱스에서 사용되던 SLAM 이라는 기술이었고, 박사학위 주제로 이걸 연구해 봐야겠다고 생각했었다. 하지만 결국은 그것도 한계가 있다고 생각했었고 지금도 그 생각에는 변함은 없다.

자... 어쨋든... 현재 애플은 WiFi SLAM이라는 기술을 일부 활용해서 실내위치시스템을 확장하고자 하는 것 같다. 그런데 재미난 사실은 애플은 2013년 iBeacon을 릴리즈하고, 실내에서 어디에 있는지 알고 싶으면 iBeacon을 활용하라고 했다. 그리고 그 즈음부터 WiFi 신호를 일반 앱에서는 활용할 수 없게 막아버렸다. 그리고 2년후 다시 찾아온 것이 Indoor Survey 인 것이다.

현재 애플의 정책 변화에 따라 실내위치 시스템에서는 다양한 기술들이 혼재되어 각각의 길을 열심히 찾아가고 있는 중이다. 대표적인 iBeacon, 지자계 센서, 사운드, light, 그리고 WiFi. 어떤 기술이 어떠한 포지션을 갖게 될지 시간만이 알겠지만...

그래도 이 해묵은 WiFi를 실내위치 기술이 앞으로 어떻게 갈지 너무 궁금하다. 왜나하면 내가 그 자리에 서 있으니깐. 개인적인 생각은 fundamental 이다. 다른 기술들은 상황에 따라 필요한 곳, 적합한 곳에 적용이 될 것이다. 그런데 WiFi는 기본이다. 지금 설치되어 있는 인프라, 기술, 및 비용을 고려했을 때 세상 어디에있든 실내 장소를 구별해 줄 수 있는 실현 가능한 유일한 기술이기 때문이다. 즉, WiFi를 이용한 방식이 전 세계의 실내위치에 대한 기본 시스템이 된다는 것이다. 다른 것들은 더하기. 다만 iOS에서는 애플의 control 하에 있다는 것.

근데 WiFi SLAM 으로 가능하겠어?
줸장! 언젠간 애플에게 한방 먹이고말테다!


2015년 10월 20일 화요일

실내 위치 서비스는 과연 가능한 것인가?

누군가는 지금도 실내에서 위치정보를 획득할 수 있다고 말할 것이다. 휴대폰을 켜서 지도 앱을 실행하면 오차가 있지만 내 위치가 지도에 표시가 되니깐. 나는 지금 강남의 한 고층빌딩의 16층 내에 있는 사무실에 앉아 있다. 하지만 구글이 알려주는 내 위치는 이 건물 바로앞 강남대로 위이다. 이걸 실내위치 서비스라고 보긴 어려운 것 같다.

기술에 대해 좀 알고 많은 정보를 가지고 있는 사람들은 아마도 네이버 지도앱을 예로들면서 벌써 그런 서비스는 있다고 말할 것같다. 네이버 지도를 실행해 보면 특정 장소 (강남역 지하 상가, 영등포 타임스퀘어 등)에서 실내 지도 보기 기능을 제공하는 걸 볼 수 있다. 실내지도 보기를 누르면 실내 상세 지도가 나오고 내 위치가 조금더 정확하게 나오는 것을 확인할 수 있다. 코엑스 몰 앱도 있었다. 지금은 구조가 바껴서 동작하지 않지만, 예전에는 코엑스 몰 앱을 통해서 코엑스 실내에서 상당히 정확한 위치를 알 수 있었다.

이렇게 보면 실내 위치 서비스는 존재하고 있는 기술로 벌써 구현이 되어 있다고 말할 수도 있겠다. 하지만 과연 그런 것인가? 대한민국에 있는 사람 중 실내 위치서비스를 경험한 혹은 경험할 수 있는 사람은 과연 0.1%라도 될까? 그리고 특정지역에만 구축되어 있는 실내서비스도 시간이 지날수록 정확도는 떨어지고 있고 꽤 짧은 기간안에 무용지물이 되어버리고 만다.

15년이 넘은 와이파이 실내 위치 기술. 아직도 우리는 실내 위치 서비스가 제공이 되지 않는 사회에서 살고 있다. 구글도 무려 10년이라는 세월가까이 노력하고 있지만 실내위치서비스를 제공하지 못하고 있다.

우리는 끊임없이 보다 정확한 실내 위치를 얻기위한 기술 개발에 온 힘을 쏟고 있다. 이러한 방향이 과연 바람직한 것인지 모르겠다. 이는 지난 15년 간의 경험으로부터 우리는 아무것도 배우지 못하고 있다는 것이 아닌지 모르겠다.

우리는 하루의 90%에 가까운 시간을 실내에서 생활하는 삶의 방식을 가지고 있다. 다시 원래 질문으로 돌아와보자. 이러한 상황에서 우리들은 우리가 있는 실내에서 과연 위치서비스를 받을 수 있는 것인가?

분명 우리는 기존과는 다른 생각을 해 보아야 한다. 우리가 일상 생활을 하며 지내는 이 실내라는 곳에서는 위치라는 정보를 실외에서 바라보던 방식과는 또 다른 어떠한 형태의 정보로 바라보아야 할 필요가 있지 않을까?

2015년 2월 14일 토요일

O2O를 향한 스마트폰 위치기반 기술들 (iBeacon vs. WiFi vs. Sound)

실내에서 스마트폰의 위치를 인식하는 주요 기술로는 기존에 주류를 이루던 WiFi AP의 신호를 활용하는 것과 최근 크게 화두가 되고 있는 iBeacon을 활용하는 것을 들 수 있다. 둘은 기본적으로 기기에서 주기적으로 송신하는 무선 신호를 활용한다는 점에서는 기술적으로 거의 동일하다고 볼 수 있을 것 같다. 

하지만 둘 사이에는 여러가지 면에서 차이점들이 존재한다.

첫째, 실내 위치서비스를 구축하는 관점.
WiFi는 무선 인터넷을 사용하기 위한 목적으로 기존에 설치되어 있는 AP 장비를 활용하고, iBeacon은 위치서비스를 위한 목적으로 beacon 기기들을 직접 설치해서 구축한다는 점이 다르다. 그래서 SK Planet은 다음과 기사를 낸다. 2014년 하반기 신촌 일대 80개 상점에 beacon을 설치 했고, 해당 상점에 들어갈 때마다 쿠폰 서비스를 제공할 수 있다라고... 앞으로 beacon이 얼마나 빠른 속도로 확산될지는 모르겠지만, 위치기반 서비스를 해야 하는 곳마다 새롭게 beacon을 설치해야 한다는 것은 ubiquitous한 서비스를 만들어 내기에는 문제가 될 것 같다.

둘째, 장소인식 성능의 관점.
iBeacon의 TxPower는 기본적으로 -30dBm 에서 4dBm 사이 이다. WiFi의 TxPower가 통상 15dBm 인 것과 비교해서 상당히 낮은 파워로 신호를 전송하기 때문에 도달 거리에서는 큰 차이가 있다. 무선 신호는 환경에 아주 많은 영향을 받는다. 특히 수분으로 구성이 되어 있는 사람의 몸을 통과할 때 무선 신호의 세기는 아주 많이 감소한다. 박물관과 같은곳에선 iBeacon을 활용해서 특정 전시물 바로 앞을 지나갈 때 자동으로 어떠한 정보를 보여주고 싶을 것이다. (상점의 경우도 마찬가지겠지...) 하지만 세밀한 영역을 타깃으로 하기 위해 적은 power로 신호를 송신하는 것은, 사람들이 많이 있을 경우 안그래도 약한 신호를 더 감쇠시켜 원하는 영역 안에 있는 사람들의 스마트폰에 신호가 결국은 도달하지 못해 원하는 서비스를 제공하지 못할 확률이 높다. 

셋째, 각각이 말하는 장소란?
기술적으로 유사하기 때문에 어떻게 활용하느냐에 따라 동일할 수 있겠지만 현재 접근하고 있는 방식에 의거해 말을 하자면, WiFi는 좌표를 제공하는 것을 목표로 하고 iBeacon은 어느 beacon 주변에 있느냐를 알려주는 것을 목표로 한다. 즉 WiFi는 기본적으로 위/경도 상의 위치를 알려주고자 했지만 iBeacon은 좌표를 알려주고자 하지는 않는다. 물론 기술적으로 유사하니 좌표를 알려주고자 하는 일에 동참할 수도 있겠지만, beacon이 송신하는 power의 세기를 봤을 때 현실적으로 어려움이 있지 않을 까 한다.

넷째, 스마트폰 입장에서의 power 소모 차이.
결론적으로 말하자면 위치를 인식하기 위해 두가지의 기술에 대해 스마트폰 입장에서의 파워 소모는 iBeacon이 조금 유리하나 아주 많은 차이는 아닌 것 같다. 디바이스의 스펙 상에서는 차이가 꽤 나는 것 같으나, beacon 신호든 wifi 신호든 스마트폰이 신호를 수신하기 위해서는 해당 chip만이 깨어나면 되는 것이 아니라 주변 peripherial이 함께 깨어나야 하므로 실제 파워소모에서는 크게 차이가 나지 않게 되는 것이다. iBeacon의 경우 한번 scan에 4초 정도를 쓴다고 할 때 대략 0.15mA를 사용한다. (링크 참고: https://github.com/RadiusNetworks/android-ibeacon-service/wiki/Battery-Usage). WiFi의 경우 한번 scan에 3~4초가 걸리고 이때 대략 0.17mA를 사용한다.

다섯째, Background 서비스 구현.
차이점이라고까지 얘기하긴 거시기 하지만, 어느 한 조사에 따르면 스마트폰 사용자의 50% 이상이 WiFi를 켜 두고 다닌다고 한다. 그런데 Bluetooth의 경우 얼마나 많은 사용자들이 켜 두고 다닐까? 더군다나 아직까지는 BLE를 지원하지 않는 스마트폰을 사용하고 있는 사용자가 더 많이 존재한다. 즉, 아직까지는 특히 안드로이드 시장에서는 iBeacon을 활용해서 위치기반 서비스를 제공하기에는 많은 어려움이 존재한다고 봐야 할 것 같다.

WiFi, iBeacon외의 다른 기술, Sound.
최근 Starbucks 매장에 들어가서 앱을 실행하면 대략 5초 후에 OO매장에 온 것을 환영한다는 문구가 나타난다. WiFi, GPS, BT 가 다 꺼져 있어도 나타난다. 처음엔 도대체 어떻게 했을까 궁금했다. 그런데 Spectrum Analyzer로 확인해 보면 1900Hz 근처에 peak가 보인다. 사람의 가청 주파수가 대략 20~20000Hz 이므로, 일반적으로 듣기 어렵다고 판단되는 주파수에 어떠한 정보를 실어 보내고 이를 받아서 어디에 있는지를 알아내는 것이다. 그런데 통상 음성신호(?)를 스마트폰에서 받아들이는 데는 더 많은 파워를 소모하게 된다. 즉, background로 사람들이 어디에 있는지를 모니터링 하기에는 어렵다는 것이다. 그래서 스타벅스는 매장에 들어 갔을 때 스타벅스 앱을 자동으로 띄워주지는 못하고, 사용자가 실행 시켰을 때에만 사운드 신호를 수신해서 매장 정보를 보여준다. 앞으로는 어떻게든 매장에 들어갔을때 자기 앱을 띄워 주고 싶겠지? 더 나아가서는 근처에 있으면 스타벅스 들르라고 알려줄 것이고... 한가지 궁금했던 점은 왜 iBeacon을 사용하지 않았을까? 기술적으로는 적합해 보이는데. 내가 내린 결론은 위에서 언급했듯이 아직 BLE가 지원되지 않는 폰들이 많다는 것이다. 그리고 bluetooth를 켜 놓고 다니는 사람또한 많지 않다는 것이다. 그래서 가능한한 많은 사용자 층을 확보하기 위해서 sound를 활용한 것으로 보인다. 하지만 이해할 수 없는 것은 굳이 새로운 기기를 설치하면서 까지 sound를 사용했을까 하는 것이다. 스타벅스는 WiFi AP도 매장내에 설치하고 또 대부분은 도심지역이니 주변 WiFi 신호도 많이 스캔이 될 것이니 WiFi를 그냥 활용했었어도 좋았을 것 같다. (Mute.ly 이런 앱을 보면 스타벅스에 앉아서 무음 실행하면 WiFi를 기반으로 장소를 인식하고, 나갔다 다시 들어와도 잘 인식한다. 층마다도 구별되어서 인식한다.) 아마 실무자가 잘 몰라서 꼬임에 넘어갔겠지? ㅋㅋ  --> 라고 처음에 생각하였으나, 결국 추정컨데 아이폰 때문이지 않을까 싶다. ㅠㅠ

ShopKick (SKPlanet에서 인수)
이 넘은 사용해 본적이 없어서 구체적으로 알 수 는 없다. 2년전 홍보 영상에서는 매장 근처를 지나갈 때 자동으로 쿠폰을 띄워줬는데, 파워 소모때문에 안 될것 같은데... 파워를 많이 쓰면서 그렇게 구현을 했는지, 실제는 앱을 실행중에만 근처 물품들에 대한 쿠폰을 띄워주는지는 모르겠다.

기타 
ZOYI의 WalkInsight Solution
조금 재미난 아이디어다. 이 솔루션은 스마트폰의 WiFi를 항상 켜두고 있는 사람들이 50% 이상이라는 가정에서 출발 한다. 스마트 폰에서 WiFi는 주기적으로 주변 WiFi AP들을 찾는다. 그리고 설정에 따라 연결할 수 있는 WiFi가 있으면 연결을 하거나 하지 않거나 한다. 이 과정에서 WiFi AP와 Smartphone의 WiFi 모듈 사이에서 일부 정보들을 주고 받게 된다. 여기에 스마트폰 WiFi 의 식별자인 BSSID (MAC Address) 를 WiFi AP가 획득하게 된다.
ZOYI는 WIFI AP단에서 수신되는 Smartphone의 BSSID 정보를 활용하여 주변에 얼마나 많은 사람들이 지나다니는지 그리고 매장안으로 들어온 사람, 전에 왔다가 다시 방문한 사람등을 대략적으로 추정할 수 있다. 물론 Smartphone에서 WiFi를 끄고 다니는 사람에 대해선 알 수 없다. 여기서와 같은 방식의 재 방문을 인식하는 아이디들은 애플의 입장에서는 싫었나 보다. 그래서 실제 스마트폰이 WiFi AP를 검색하는 동안에는 자신의 실제 BSSID를 올리지 않는다. 임의의 값을 올리고, WIFI AP에 연결해서 네트웍을 사용하게 될 때만 실제 BSSID를 AP에게 알려준다. 즉, 애플 아이폰을 쓰는 사용자의 재방문은 알 수 없는 문제가 발생한다. 머지 않아 안드로이드도 이런 방식을 지원 할 것이고 (특허 문제가 없다면) 그렇다면 재방문에 대한 정보는 앞으로 얻기 어렵다고 봐야 할 것 같다. 그래도 기본적인 아이디어는 좋은 것 같다.