Google 필기 인식 API 사용해본 결과입니다.

2,067 views
Skip to first unread message

Jaeho Lee

unread,
Mar 30, 2013, 2:46:45 AM3/30/13
to appso...@googlegroups.com
딱히 공식적으로 발표한 건 아닌데

HTTP 프로토콜을 가로채기해서 그대로 보내보니까 잘 되네요.

모바일 크롬을 디버깅 모드로 USB 연결한 뒤 폰에서 글씨를 쓰고

이렇게 request 와 search 가 두개 각각 나오는데. request가 먼저 떨어진 것으로 보아 여기에 뭔가 있을 것 같았습니다.

POST 로 보내는 거라서 request payload 를 보니 좌표같은게 있습니다.
webstorm을 열고 똑같이 보내보니 실패했습니다.
원인은 header에 content-type을 지정안하면 실패하더군요.
그래서 json 으로 지정하고 이렇게 보냈습니다.

method 는  POST
path는 /inputtools/request?ime=handwriting&app=mobilesearch&cs=1&oe=UTF-8
payload 는
{"device":"Mozilla/5.0 (Linux; Android 4.0.4; GT-i9100 Build/IML74K) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.49 Mobile Safari/537.31 ApiKey/1.257","options":"enable_pre_space","requests":[{"writing_guide":{"writing_area_width":360,"writing_area_height":567},"ink":[[[98,118,141,192,200],[159,149,139,138,190],[0,61,80,214,350]],[[89,112,133,236],[254,248,242,217],[664,784,803,952]],[[202],[230],[1209]],[[202,198,187,189,194],[230,248,322,384,424],[1216,1355,1501,1634,1750]]],"language":"ko"}]}

이렇게 보냈더니

뭔가 RESPONSE 가 나오더군요.

성공했습니다. 아마도 저 외계어 중 하나가 제가 입력한 "구"라는 글자 일것 같은데
인코딩 문제인지 깨져나오더군요.

["SUCCESS",[["aabbc9fb759d74dd",["援�,"洹�1","洹�","援�,"援�T","援�","異�T","寃�T","異�","異�"]]]]

내용은 이렇습니다.
첫번째 글자와 매칭해서 맞는지 검사하면 되겠네요.

좌표가 5개인게 좀 아리송하긴한데 암튼 일단계는 클리어 했습니다.

Jaeho Lee

unread,
Mar 30, 2013, 2:51:56 AM3/30/13
to appso...@googlegroups.com
폰에서 확인하니

["SUCCESS",[["aabbc9fb759d74dd",["援�,"洹�1","洹�","援�,"援�T","援�","異�T","寃�T","異�","異�"]]]]

요 내용은

["SUCCESS",[["aabbc9fb759d74dd",["구","그 1","그1", "국", "국T", "축 T", "게 T", "축T", "축i"]]]]

입니다.
제대로 받아왔음을 확인했습니다.

2013년 3월 30일 토요일 오후 3시 46분 45초 UTC+9, Jaeho Lee 님의 말:

윤 준호

unread,
Mar 30, 2013, 4:06:11 AM3/30/13
to appso...@googlegroups.com
2가지 상황이 있을 수 있겠네요.


1. 화면이 잠긴 상태에서
폰을 켰들때
글자인식락(가제) 앱이 떠서
미리 설정한 어떤 글씨를 제대로 쓰면
화면 잠김이 풀린다.

2. 폰 사용중 일정 시간마다
화면이 잠기면서
미리 설정한 어떤 글씨를 제대로 쓰면
화면 잠김이 풀린다.

1) 안드로이드에서는 1과 2 모두 가능하죠?
근데 1의 경우에도 인터넷 연결 가능한가요?

2) iOS에서는 1은 불가하고 2는 가능한가요?

Jaeho Lee

unread,
Mar 30, 2013, 6:36:02 AM3/30/13
to appso...@googlegroups.com
안드로이드의 경우 1이 가능하고 1인 상태에서 푸쉬 같은 게 오는 걸 보면 인터넷 연결은 가능하지 않나 싶구요.
2는 안되는 걸로.. 레퍼런스도 없고 무슨 기업용 보안 프로그램 설치하는 수준의 이야기네요.

그리고 iOS는 전.부 안됩니다.
어플리케이션이 OS를 제어할 수 없습니다.
iOS용 락스크린 앱 같은게 없는 이유죠. 애초에 2가 안되는 거구요.


2013년 3월 30일 토요일 오후 5시 6분 11초 UTC+9, 윤 준호 님의 말:

Junho Youn

unread,
Mar 30, 2013, 10:08:17 AM3/30/13
to appso...@googlegroups.com
아 안드로이드에서 2가 안되는군요.

이 아이디어의 핵심은
스마트폰 가지고 놀고 싶은 아이들에게
동기부여해서 글자 공부 가르치고
부모들한테 일종의 심리적 위안을 주는 건데

아이폰에선 어떻게든 안되는 아이디어군요.
안드로이드에서만 가능한 아이디어.



Jaeho Lee

unread,
May 24, 2013, 1:37:14 PM5/24/13
to appso...@googlegroups.com
옛날 Google이 GSON이라는 독특한 구조를 가지고 있었던게 떠올라서
저 좌표값의 배열이 뭔가 하고 다시 봤더니
일정한 규칙이 있더군요.

일단 결론만 말해서 비밀을 밝혀냈습니다.
결과는 이쪽입니다.
제가 "구"라고 그린 좌표가 정확하게 찍히네요.

원천 데이터를 보면
[[[98,118,141,192,200],[159,149,139,138,190],[0,61,80,214,350]],[[89,112,133,236],[254,248,242,217],[664,784,803,952]],[[202],[230],[1209]],[[202,198,187,189,194],[230,248,322,384,424],[1216,1355,1501,1634,1750]]]

이런 모습인데
이걸 보기 좋게 자르면

[
    [
        [98, 118, 141, 192, 200],
        [159, 149, 139, 138, 190],
        [0, 61, 80, 214, 350]
    ],
    [
        [89, 112, 133, 236],
        [254, 248, 242, 217],
        [664, 784, 803, 952]
    ],
    [
        [202],
        [230],
        [1209]
    ],
    [
        [202, 198, 187, 189, 194],
        [230, 248, 322, 384, 424],
        [1216, 1355, 1501, 1634, 1750]
    ]
]

이와 같은 형태가 됩니다.
n개의 배열이 3개가 한쌍으로 묶인 형태가 되네요.

그런데 잘 보니까 3개의 그룹중 마지막 배열이 일정하게 계속 증가하는 것입니다.
일정하게 증가해서야 좌표값이 될 수 없죠.
그래서 마지막을 제외하고

[
    [
        [98, 118, 141, 192, 200],
        [159, 149, 139, 138, 190],
    ],
    [
        [89, 112, 133, 236],
        [254, 248, 242, 217],
    ],
    [
        [202],
        [230],
    ],
    [
        [202, 198, 187, 189, 194],
        [230, 248, 322, 384, 424],
    ]
]

이렇게 관찰해보니
각각의 최소단위 배열의 갯수가 일정하지 않고 쌍으로 이루어져 있는 것으로 보아
첫번째 배열이 x값, 두번쨰 배열이 y값이지 않을까 유추해보았습니다.
    [
        [202],
        [230],
    ],
같은 경우엔 그냥 점을 찍은거죠.
총 4획은 그은 것으로 보입니다.

그래서 svg로 그려보니 "구"라는 형태의 스트록이 나오더군요.
그럼 제외한 세번째 값은 무엇일까 라는 의문이 남는데
필기인식에서 x,y 좌표이외에 필요한 팩터가 어떤게 있을까 생각해보니 시간축이 필요할 거라는 생각이 들더군요.
일단 무조건 0으로 시작하는 것으로 보아 첫번째 점을 찍기 시작한 시점을 0으로 계산해서 나머지는 델타값이 아닐까라는 가정을 했습니다.
맨 마지막 값이 1750 이니까 이걸 밀리초로 환산하면
1.750초 즉 2초 조금 안되는 시간동안 "구"라는 글자를 그렸고 그 한획한획을 그릴때마다 밀리초로 기록을 했다는 결론이 나옵니다.

즉 as3건 web이건 google의 필기인식 API를 사용할 수 있는 원천 기술을 손에 넣은 셈이 되었습니다 음화화


2013년 3월 30일 토요일 오후 3시 46분 45초 UTC+9, Jaeho Lee 님의 말:
딱히 공식적으로 발표한 건 아닌데
Reply all
Reply to author
Forward
0 new messages