본문 바로가기

코딩/파이썬(Python)

[파이썬] 머신러닝으로 캡챠(captcha) 뚫기 2편 (위메프 파트너)

반응형

관련글 : 머신러닝으로 민원24 캡챠(Captcha) 뚫기

 

이전에 머신러닝으로 민원24 캡챠를 뚫는 글을 쓴 적이 있었는데, 많은 분들이 문의를 주시고 답변을 해드리는 과정에서 생각보다 다양한 곳에서 캡챠를 사용하고 있고 그것때문에 고생하시는 분들이 많다는 것을 알게 되었다.

 

그리고 최근에 위메프 파트너스 사이트에도 캡챠가 적용이 되어서, 이 캡챠를 해결해 달라는 요청이 있었는데, 지금까지 정부사이트 캡챠와 형식은 동일하지만 영문알파벳까지 포함되어 있는 좀더 고도화된 캡챠를 사용하고 있었다.

 

 

알파벳이 포함되면.. 총 26개 글자가 더 늘어나니깐 기존 10개 숫자를 학습시킬 때 필요했던 데이터의 3.6배의 데이터가 필요하게 된다. (10+26=36) 그렇다는 말은 캡챠마다 레이블 붙여주는데 걸리는 시간의 3.6배가 걸린다는 의미이다.

 

예를 들어 숫자로만 구성된 캡챠를 학습시킬때 1000개의 이미지를 사용했다고 하면 이제는 3600개의 이미지가 있어야 하고, 하나하나 정답을 입력을 해줘야 한다... (미친다...)

 

 

그리고 이전과 마찬가지로 크롭한 뒤 고정폭으로 글자를 잘라주고, 한글자씩 별개 이미지로 저장한다.

 

 

이미지를 나눠서 저장하는 건 자동화를 했지만 그래도 꽤 시간이 걸리는 작업이다... 어쨋든 다 구별을 해놓고 보니 몇가지 숫자와 알파벳이 보이지 않는다.

 

숫자는 0, 1, 9가 없고, 영문은 i, j, l, o, q, s, t, u, v, z가 없다. 

 

아무래도 영문은 소문자로 적용하다보니 헷갈리기 쉬운 숫자와 영문자는 제외시킨 듯 하다.

그래서 총 글자 분류 수는 23개이다. 다행히, 이전과 같은 수준의 정확도를 구현하기 위해서는 2.3배 정도만 더 있으면 된다는 의미이다.

 

그리고 Scikit-learn 라이브러리로 MLP 모델을 사용해서 학습 시킨 다음, 100개의 테스트셋에 대해서 테스트를 해보았다.

 

Answer : 2ay4n / Prediction : 2ay4n True
Answer : 2e2n5 / Prediction : 7e2n5 False
Answer : 2m6mn / Prediction : 2m8mn False
Answer : 2r2n3 / Prediction : 2r2n3 True
Answer : 2rf23 / Prediction : 2rf23 True
Answer : 2w4rr / Prediction : 2wdrr False
Answer : 2x7fx / Prediction : 2x7fx True
Answer : 3bh7x / Prediction : 3bh7x True
Answer : 3h8bd / Prediction : 3h8bd True
Answer : 3m7g5 / Prediction : 3m7g5 True
Answer : 3yagh / Prediction : 3yagh True
Answer : 44cc6 / Prediction : 44cc6 True
Answer : 4c76k / Prediction : 4c76k True
Answer : 536af / Prediction : 536af True
Answer : 547w7 / Prediction : 5f7w7 False
Answer : 5b2gb / Prediction : 5b2gb True
Answer : 5d37y / Prediction : 5d37y True
Answer : 6a7cy / Prediction : 6a7cy True
Answer : 6c3ab / Prediction : 6c3ab True
Answer : 6gena / Prediction : 6g2na False
Answer : 6h7f7 / Prediction : 6hrf7 False
Answer : 6hdmx / Prediction : 6hdmx True
Answer : 77cd7 / Prediction : 77cd7 True
Answer : 7fxfd / Prediction : 2rkfd False
Answer : 7pn67 / Prediction : 7pn67 True
Answer : 85wne / Prediction : 85wne True
Answer : a6rfy / Prediction : a6rfy True
Answer : a8r3a / Prediction : a8r5a False
Answer : afprh / Prediction : afprh True
Answer : b375d / Prediction : b375d True
Answer : b3hd6 / Prediction : b3hd6 True
Answer : bryfb / Prediction : bryfb True
Answer : bxrc3 / Prediction : bxrc3 True
Answer : c58w6 / Prediction : cgkw6 False
Answer : cdc5c / Prediction : cdc5c True
Answer : cnnf5 / Prediction : cnnf5 True
Answer : creen / Prediction : cr32n False
Answer : cx5ac / Prediction : cx5ac True
Answer : cx754 / Prediction : cx754 True
Answer : cxyw2 / Prediction : cxyw2 True
Answer : dh5bb / Prediction : dh5bb True
Answer : dn8r6 / Prediction : dn8r6 True
Answer : dxc75 / Prediction : dxc75 True
Answer : em47y / Prediction : emm7y False
Answer : epfpm / Prediction : epfpm True
Answer : f6pmh / Prediction : ffwmh False
Answer : fe5pm / Prediction : fa5pm False
Answer : fn834 / Prediction : fnc34 False
Answer : fy47m / Prediction : fy47m True
Answer : g5wf8 / Prediction : g5wr8 False
Answer : gb8kr / Prediction : gh8kr False
Answer : gef3a / Prediction : gef3a True
Answer : gfncg / Prediction : gfneg False
Answer : gnyae / Prediction : gayae False
Answer : gwbar / Prediction : gwdaf False
Answer : gyb7b / Prediction : gyb7b True
Answer : h6kde / Prediction : h6kde True
Answer : h73pf / Prediction : h73pf True
Answer : hbkbe / Prediction : hbkbe True
Answer : hdpay / Prediction : hdpay True
Answer : hhc43 / Prediction : hhc43 True
Answer : hr4cw / Prediction : hrkaw False
Answer : k474k / Prediction : k474k True
Answer : khbyx / Prediction : khbyx True
Answer : khcna / Prediction : khcna True
Answer : kk353 / Prediction : kk3e3 False
Answer : kwwcx / Prediction : yxac7 False
Answer : mbr23 / Prediction : m4n23 False
Answer : mfe5x / Prediction : mfe5x True
Answer : n6d24 / Prediction : r6d24 False
Answer : nah4h / Prediction : rah4h False
Answer : nc7p8 / Prediction : nc7p8 True
Answer : nrb3p / Prediction : nrb3p True
Answer : papna / Prediction : napna False
Answer : pd3fr / Prediction : pd3fr True
Answer : pd6w3 / Prediction : p86w3 False
Answer : pmehy / Prediction : pmehy True
Answer : pra3d / Prediction : nra3d False
Answer : prm2y / Prediction : pnm2y False
Answer : pw6a5 / Prediction : pw6a5 True
Answer : r85k3 / Prediction : r8ak3 False
Answer : rye7m / Prediction : r774n False
Answer : ryfb2 / Prediction : ryfb2 True
Answer : wcgmm / Prediction : wrmmm False
Answer : wnd86 / Prediction : wmd86 False
Answer : x3ykb / Prediction : x3ykb True
Answer : x57g2 / Prediction : x57g2 True
Answer : x5mra / Prediction : x5mra True
Answer : x68cd / Prediction : x68cd True
Answer : xgp2n / Prediction : xgp2n True
Answer : xre6h / Prediction : xre6h True
Answer : xwp5h / Prediction : xwm5h False
Answer : xxcap / Prediction : xxcap True
Answer : xy6ww / Prediction : xy8ww False
Answer : y2cc4 / Prediction : y2cc4 True
Answer : ybbnh / Prediction : ybbnh True
Answer : yc5kw / Prediction : yc3gw False
Answer : ycnm3 / Prediction : ycnm3 True
Answer : ypgbb / Prediction : ypgbb True
Answer : ywere / Prediction : 7wepe False
0.63

100개 중에 63개가 맞았고, 37개는 오답이 나왔다. 예전에 숫자로만 된 캡챠보다 정답률이 많이 떨어진다. 좀더 들여다보니 r, n, m 문자 간에 정확도가 떨어지는 현상이 나타나는 듯 하다. 이런 경우는 뭐 어쩔수 없다.. 학습데이터를 늘려 나가는 수 밖에..

 

현재 1600개의 학습이미지로 학습한 결과이고, 약 100개를 추가로 학습시킬 때마다 2%정도 정답률이 상승하는 것으로 보인다. 다만 추가로 학습시키더라도 점점 정답률은 체감적으로 증가할 텐데 최종적으로 얼마가 될지는 현재로서는 정확하게 알기는 어렵다. 

 

개인적인 생각으로는 70%정도 이상이면 만족스러운 정도가 아닌가 쉽다. 사실 63% 정도만 되어도 2번 중에 한번은 성공한다는 의미이고, 2번 연속 틀릴 확률은 13.75, 3번 연속 틀릴 확률은 5%, 4번 연속 틀릴 확률은 1.87%에 불과하다. (현재 위메프 파트너스에는 입력오류 횟수에 제한을 두고 있거나 하지는 않는 듯 하다.)

 

정확도를 더 높이기 위해서는 고정폭으로 글자를 자르지 않고, 각 글자별로 정확하게 crop하도록 중간에 별도의 알고리즘이 잇어야 할 듯 한데.. 여기까지 고민하기에는 시간이 여유롭지 않아 pass..

 

2020.9.3. 추가

3000개 이미지 추가 학습 및 이미지 처리 일부 변경 결과 정확도는 75%로 상승

 

소스 관련 문의는 카카오톡 오픈채팅으로 연락 부탁드립니다.

카카오톡 오픈채팅

반응형