machine learning, image

python opencv image recognition 2 (hackthis captcha 2)

qkqhxla1 2015. 2. 14. 20:10

앞에서 opencv에 대해서 대충 감을 잡아봤고, 이제 내가 원하는대로 바꿔보자.

http://qkqhxla1.tistory.com/228 에서의 숫자인식을 내가 원하는 이모티콘, 그림 인식 등으로

바꿔보자. 우리가 인식할 그림이다. (문제 : https://www.hackthis.co.uk/levels/captcha/2)

문제를 키면

요러한 화면이 나오는데 저 표정 순서대로 입력해서 보내면 된다.

참조해서 요청을 보내주면 된다. 위의 초록그림같은경우 ;) :|~~ 등으로 보내면 되겠다. 난 이미지인식을 할 때 그림을 영어소문자로 인식했다.(해쉬값 저장하듯이) 위에 적어놨는데 :D는 a로, :)는 b로.. 이런식으로 l까지 인식했다. 나중에 우리가 알아서 다시 원래 이모티콘으로 변형해 주면 된다.


인식을 위해서 이미지를 여러번 새로고침후 12개의 이미지를 하나하나 수작업으로 복붙해서 가져왔다. 가져온 이미지.

인식을 위해 사용된 코드이다. 변경된 부분은 주석을 달았다.

확실한 판별을 위해 배경은 흰색으로, 이모티콘이나 하트가 있는 부분은 검은색으로 변경시켰다.

import Image
im = Image.open('captcha3.png')
for i in range(0,im.size[1]):
    for j in range(0,im.size[0]):
        if im.getpixel((j,i))[0] > 15:
            im.putpixel((j,i),(255,255,255))
        else:
            im.putpixel((j,i),(0,0,0))
im.save('captcha3.png')

이 코드를 사용해서 이미지를 반전(?)시키고, 하나하나 순서에 맞게 수작업으로 가져왔다. 



실행시키니 이런식으로 변경되어 나왔다. 이 이미지를 대상으로 트레이닝을 실시했다. (captcha3.png) 이제 아래 코드를 실행시키고 위쪽에 세로로 길게 적어놓은 표? 를 참조해서 각 얼굴에 맞는 영어를 입력한다.


트레이닝이 다 끝났다. 동일한 이미지로 테스트를 해보자.



이걸 실행하면


abcdefghijkl로 잘 인식을 한다!! 그런데 문제가 있었다. 저 abcd답이 나오면 바로 그냥 문자열 변수 answer에 넣게 해놨는데, 하트의 크기가 조금 달라서 그런지 순서대로 인식하지 않는 경우가 있다.


위에 보이는건 abcdefghijkl이지만 answer에 넣을때는 cdefgab~이렇게 순서가 뒤죽박죽할수도 있다는

소리이다. 이걸 대비해서 난 리스트를 만들어서 x좌표와 저 문자를 같이 넣은 후, x좌표대로 정렬해서 문자를 뽑아오는 알고리즘으로 문제를 해결했다. 테스트까지 완료했으니 다음에는 문제를 풀어보겠다.


풀이 : http://qkqhxla1.tistory.com/274