본문 바로가기

코딩/파이썬(Python)

[파이썬] 파이썬, 머신러닝으로 네이버페이 키패드 인식 후 입력하기

반응형

파이썬, 머신러닝으로 네이버페이 키패드 인식 후 입력하기

 

요즘 간편결제가 활성화되면서 공인인증서나 복잡한 패스워드 없이 4~6자리 PIN 번호 입력만으로 결제가 되는 시스템이 활성화되고 있는 듯 하다.

 

하지만 단순히 번호를 입력하는 방식이 아니라, 화면을 보고 키패드를 누르는 방식이다 보니, 이를 자동화하는 것이 생각보다 쉽지가 않은 모양이다.

 

그래서 이번에는 머신러닝을 통해서 키패드를 인식하는 것을 한번 만들어보았다.

 

우선 아래 이미지는 PC에서 네이버페이를 통해서 결제를 할때 나타나는 PIN 입력 화면 창이다.

 

여기서 아래 초록색 키패드 부분의 숫자가 무작위로 정렬이 되는데, 이를 인식하여 마우스 등을 통해 클릭하게 하는 작업을 해볼까 한다.

 

작업 순서

 

1. 네이버페이 PIN입력 화면 크롤링 - 학습데이터 및 테스트셋 수집용 : selenium으로 이미지 저장 자동화

 - 이 부분은 핵심내용과는 거리가 멀고 설명이 지나치게 길어지니 생략

 

2. 각 이미지별로 label 작업 - 행렬기준으로 (3,4)인 키패드를 (1,12)으로 가정

 - 빈칸은 "_"로 입력

 

3. 키패드 부분 크롭 및 흑백변환 후 다시 숫자별로 잘라내어 숫자별 폴더에 저장 - opencv 사용

 

4. 각 글자별로 학습데이터 생성 - numpy를 사용해서 픽셀 기준 (30,20)인 데이터를 (1,600)으로 변환

 - 간단한 학습 모델을 만들어서 cross-folding validation을 해보니 정확도가 100%에 가깝게 나타난다.

classifier = MLPClassifier(solver='adam', hidden_layer_sizes=(400,), max_iter=400)
scores = cross_val_score(classifier, data, train_target, cv=5)
print(scores)
print(np.mean(scores))

[0.90909091 1.         1.         1.         1.        ]
0.9818181818181818

 

5. 트레이닝셋 학습 및 테스트셋 검증

 - 이제 새로운 테스트셋 4개를 만들어서 파일명에 정답을 입력해두고, 실제 예측결과와 일치하는지 확인해보니 다행히 4개 모두 일치하는 것으로 나타난다.

 

Answer : 4985__032761 / Prediction : 4985__032761 True
Answer : 549_17_06832 / Prediction : 549_17_06832 True
Answer : 645__8037192 / Prediction : 645__8037192 True
Answer : 90625_17_438 / Prediction : 90625_17_438 True

 

6. (3,4) 행렬로 다시 변환

 - 네이버페이의 경우 키패드의 1행부터 가로를 시작으로 0부터 11까지 id를 부여하고 해당 id를 기준으로 이벤트를 발생시키는 것으로 보인다. 때문에 (1,12)로 표현하는게 적절하긴 하나, 보기 편한게 (3,4)로 표현하면 아래와 같다.

 

[['4' '9' '8' '5']
 ['_' '_' '0' '3']
 ['2' '7' '6' '1']]
[['5' '4' '9' '_']
 ['1' '7' '_' '0']
 ['6' '8' '3' '2']]
[['6' '4' '5' '_']
 ['_' '8' '0' '3']
 ['7' '1' '9' '2']]
[['9' '0' '6' '2']
 ['5' '_' '1' '7']
 ['_' '4' '3' '8']]

 

7. 패스워드 각 숫자별 위치 확인 및 클릭

 - 예측결과로 받아온 행렬에서 각 숫자의 위치(index)를 가져오고, 행렬 위치에 따라 화면상의 좌표 위치를 계산하고 selenium으로 하여금 해당 위치를 클릭하게 하면 된다.

 - 클릭하는 것이 번거롭다고 하면 onclick()이벤트를 발생시키도록 javascript 코드를 작성하면 더 간편하다.

 

 

결론

머신러닝을 통한 이미지 인식으로 무작위로 생성되는 키패드의 글자를 인식하여 입력하는 것이 어렵지는 않다. 다만, 이미지 처리와 좌표 계산 등 실제 화면과의 연동을 위한 전,후처리의 정확도가 더 중요한 작업이다. 시행착오를 겪으면서 오류가 나지 않도록 하는 일이 핵심일 듯 하다.

 

 

소스 관련 문의는 비밀댓글로 이메일 또는 연락처 남겨주시거나 카카오톡 오픈채팅으로 연락 부탁드립니다.

카카오톡 오픈채팅

반응형