machine learning, image 27

Breaking Wechall Crackcha using tensorflow(keras) 2. training and testing the data.

http://qkqhxla1.tistory.com/988 에 이은 글. 이젠 데이터를 트레이닝하고 테스트할 차례이다. 그전에 이전 글의 클래스를 가져왔다. import numpy as np import cv2 import requests import queue import os import string download_image_name = './image/problem.png' first_preprocessed_name = './image/problem1.png' after_bfs_dot_remove_name = './image/problem2.png' class SiteHandler: def __init__(self): self.header = {'Cookie': 'WC=11107310-13590-T..

Breaking Wechall Crackcha using tensorflow(keras) 1. collecting the data.

예전. 대략 3년전에 http://qkqhxla1.tistory.com/382?category=602369 글에서 wechall 의 캡챠를 깨기 위해 많은 노력을 했었다. 그러다 도저히 방법론 자체를 잘 모르겠어서... 포기했다. 최근에 tensorflow를 공부하던 도중 keras를 사용해서 숫자 인식하는 코드가 많은것을 보고.. tensorflow도 공부해볼겸 다시 도전했다. 바로 이전글에서 이것저것 삽질하면서, 또 스스로 데이터를 수집하고 트레이닝을 시켜보면서 깨달은건 어떤 알고리즘을 사용하느냐보다는, 좋은 데이터가 '많이' 들어갔을때 좋은 결과를 낸다는거다. 엄청난 삽질을 해가며 데이터를 가공하고, 넣고, 예측 테스트를 했는데 예측률이 90%가 넘었을때의 기쁨은 진짜 어떤걸로도 표현할 수가 없을것..

MNIST Handwritten Digit Recognition in Keras(Tensorflow)

파이썬 3 기반입니다. https://nextjournal.com/gkoehler/digit-recognition-with-keras 에서 읽은 글을 다시 제가 정리했습니다. 위 글도 좋긴 한데 굳이 쓸때없는 pyplot를 이용한 그래프 그리기와, 변수명 등을 너무 대충 지어서 가독성이 떨어지기에 공부하면서 다시 정리했습니다. (예로 : (X_train, y_train), (X_test, y_test) = mnist.load_data()) 새로 정리한 글에서는 신경 네트워크 만드는 부분과 데이터 넣는법, 만드는 법을 중점적으로 적겠습니다. tensorflow에도 keras가 들어왔기에 tensorflow의 keras를 쓰겠습니다. 목적은 다른 머신러닝을 돌리기 위한 적당한 코드 이해입니다. 여기에서는 m..

hackthissite bypass the image captcha

드디어 이걸 풀었다!! 매우 감격스럽다.거의 포기하려다가 한번만 해볼까... 했던게 성공했다. 중간의 긴 코드는 대부분 앞의 글과 같으므로 이해하려면 앞의 글들도 참고하면서 보는게 좋다.1차 삽질 : http://qkqhxla1.tistory.com/2572차 삽질 : http://qkqhxla1.tistory.com/344OCR of Hand-written Data using SVM : http://qkqhxla1.tistory.com/440 문제 링크 : https://www.hackthissite.org/missions/prog/6/ 풀이 방법.이 문제는 두가지 방법이 있다. 그려지는 자바스크립트를 분석해서 선과 호를 분석해서 글자를 조합하여 만든후 그 글자의 위치에 따라서 판별해내는 방법과, oc..

OCR of Hand-written Data using SVM

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_ml/py_svm/py_svm_opencv/py_svm_opencv.html 앞의 knn의 예제에서는 단순히 knn으로 분류하고 글자를 정하는것까지 다 했었는데, 이번에는 hog란걸로 특징점을 찾고, svm으로 글자들을 구분할 것이다. hog라는건 각각 글자들의 특징벡터를 찾아서 특징들을 기억해놓는거라고 보면 된다. hog : https://en.wikipedia.org/wiki/Histogram_of_oriented_gradients hog와 svm의 조합을 사용해보면서 느낀점은, knn만 사용하는것보다 많이 정확도가 높다는것이다. knn이 단순히 픽셀의 위치중 가까운 위치들..

digit recognition with MNIST database with sklearn

http://hanzratech.in/2015/02/24/handwritten-digit-recognition-using-opencv-sklearn-and-python.html에 나온데로 따라서 한거 정리. (환경 : 윈도우 7 파이썬 32비트.) 여태까지 숫자인식을 할때에는 파이썬으로 이미 만들어진 모듈이나, opencv로 내가 하나하나 입력해줘서 트레이닝후 인식을 했었는데, 이번엔 이미 만들어진 다수의 숫자 데이터를 가져와서(70000개), 각각의 특징점을 찾은 후(또는 이미 정리된 특징점으로) 숫자를 인식하는 기본적인 예제. 인식률이 높다는게 큰 특징. 1. sklearn 모듈 설치.http://scikit-learn.org/stable/install.html기본 필요조건.Python (>= 2.6..

데이터마이닝, 머신러닝 공부관련(커리큘럼)

페이스북 python korea에서 Sungchul Choi 님이 적어주신 글. 잊어버릴까봐 통째로 복사문제될시 비공개로 돌리겠습니다. # 데이터마이닝 공부 로드맵 for 파이썬제목과 관련하여 얼마전에 정리한 내용이 있어 공유 드립니다. 제가 공부한 과정이기도 하고, 제가 운영하는 연구실의 코스웤이기도 합니다. 현재 학교에서도 이 코스로 MOOC 강좌를 개발하고 있습니다... 언제 끝날지는 ㅎㅎ 필요하신 분께 도움이 되었으면 합니다.1) 리눅스 공부: 데이터 분석을 위해서는 리눅스와 command line interface(CLI)에 익숙해 져야 합니다. 리눅스 공부를 먼저 시작하시길 권합니다. 전부다 아실 필요는 없고 윈도우 키고 끄고 폴더 만들고 지우고 하듯이 리눅스 CLI 에서 그런 것들에 익숙해 ..

Net-Force Hmmm, I don't see it...

점자가 있고, 점자를 읽으면 된다. 네이버에서 점자 표를 찾아서 읽어서 해석해도 되지만 그래서는 아무 도움이 되지 않기에 프로그래밍했다. 방법론.1. 일정이상 검은색 부분은 완전히 검게 칠하고, 아닌부분은 희게 칠해버린다. 2. 쓸때없는 바탕 부분은 잘라내고, 점자판을 각각의 점에 맞게 칸을 나눈다. (그래야 판별하기 쉽다.)3. 나눠진 판을 토대로 알고리즘을 짜서 점자를 식별한다. 2까지 완료된 결과물.코드. # -*- encoding: cp949 -*- import numpy as np import cv2 import Image dot_dic = {'000001':'BIG','100000':'a','101000':'b','110000':'c','110100':'d','100100':'e','11100..

DareYourMind programming 8

http://www.dareyourmind.net/menu.php 들어가보면 스도쿠모양의 틀이 있고, 노란색 점 갯수로 스도쿠를 하면 된다. 매번 이미지는 바뀌며, 제한시간은 5초이다. 저런 이미지에서 뽑아서 하면 된다. 스도쿠 문제는 예전에 풀었던 포스트가 있으므로 거기서 알고리즘을 또 그대로... 가져왔다. 방법론1. 주변의 회색부분은 흰색으로 만들고 검은색 사각형을 인식한다. 각 81개의 검은 사각형이 인식되는데, 각각의 검은 사각형의 x,y좌표를 처음엔 y좌표로 정렬 그다음엔 x좌표로 정렬해서 따로 저장해둔다.그러면 현재 위 사진 기준으로 (7,2,5,8,4,' ',' ',3,6,4,1...) 순서로 정렬된다. 2. 노란색 점을 인식해서 각각 노란색점이 위에서 저장해놓은 x,y좌표의 사각형 안에 ..

W3Challs Chuck Norris Challenge(half)

들어가면 이런 사진이 있고 매번 바뀐다. 수식을 잘 인식해서 답을 빨리 보내면 된다. ^는 pow를 뜻하고, mod는 %를 뜻한다. 풀었는데 요청을 다시 보내라고 나온다. 인식은 맨날 하는 pytesser로 했으며, ^가 '~로 인식되서 '~가 인식됬으면 제대로 인식된걸로 판별하고, 파이썬의 pow인 **로 바꿨다. 인식한걸 파이썬의 유효한 식으로 변경 후, eval로 실행시켰다. #-*- coding: cp949 -*- import pytesser, Image import urllib2, re, threading session = 'PHPSESSID=9afc7sagp6hnohjh51hrh6oam1' def download_photo(filename): file_path = "%s%s" % ("C:\\U..

WeChall Crackcha 관련 삽질.

취미삼아 opencv를 공부하고 있지만 취미로 공부하게 만든 문제중에 하나가 이 Crackcha이다.문제는 이렇다.이러한 캡챠를 인식해서 30분안에 468개의 캡챠를 맞게 인증하면 된다. 틀려도 리셋되지 않지만 상당히 어렵다. 30분안에 468개이면 최소 3~4초내에 1개씩 인증해야 하는데.. 프로그래밍적으로 한다고 해도 다운로드 받고, 이미지 연산하고, 보내기까지 최소 2.x초는 걸린다. 즉 인식률을 최소 60%이상으로 끌어올려야 문제를 풀 수 있다는건데... 코딩의 마지막 문제인만큼 상당히 어렵다. 일단 현재까지 한 삽질을 올리겠다.image denosing : http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_photo/..

python OCR of Hand-written Data using kNN 코드해석

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_ml/py_knn/py_knn_opencv/py_knn_opencv.html?highlight=hand 이페이지 하나를 이해하기가 매우 힘들었다. 파이썬은 어느정도 사용하는데, 저기서는 데이터 분석용으로 numpy를 주로 사용하고, 무슨 복잡한 kNN알고리즘까지 들어가니 저 간단한 코드 몇줄 해석하는데 상당히 오래걸렸다. 나중에 다시 볼 때를 위해 정리해서 올려놓음. 샘플사진.(digits.png) 코드. import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread('digits.png')..

k-Nearest Neighbour 알고리즘.(번역)

knn알고리즘에 대해 공부하려고 했는데 대부분 c++의 opencv를 예로 들고 있어서;; 파이썬 opencv 관련 한글자료는 찾기가 힘들기도 하고.. 새로 opencv c++기반 책을 사서 보기엔 귀찮아서 python opencv튜토리얼을 보고 익힐 겸, 직접적인 코드도 보고 영어연습도 할 겸, 모르는단어는 찾아가면서 번역했습니다. 틀린점있으면 수정하겠습니다. http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_ml/py_knn/py_knn_understanding/py_knn_understanding.html?highlight=knn 번역. k-Nearest Neighbour 알고리즘 이해. 목표. k-Nearest Neig..

python opencv rotated image recognition (hackthis captcha 4)

이전 문제풀이 : http://qkqhxla1.tistory.com/273 지금 풀 문제 링크 : https://www.hackthis.co.uk/levels/captcha/4 들어가보면 난이도가 2,3번보다 확 올라갔음을 알 수 있다. 이렇게 회전되있으며, 거기다가 색깔까지 입혀져있다. 2,3번은 내가 머신러닝의 트레이닝을 해서 풀었지만, 4번은 SIFT라는 회전에 강건한(어떠한 이미지가 회전되도 인식을 잘 하는 알고리즘) 방법을 써서 풀었다. 관련 자료 1 : http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html?highlight=orb 관련 자료 2 : htt..

captchacker 설치 삽질.

일단 결론부터 적자면 나같이 이거 좋아보인다고 설치하려고 삽질하는사람 없길 바람. 몇일동안 설치때문에 삽질했는데 결국 실패. 진행에 필요한 자료가 없어져서 뭘 할수가 없음. 더 해보려고 해도 소스 전체를 분석해야되기때문에 그냥 포기. 아래는 구체적인 포기이유. 일부 exe가 64비트에서는 제대로 동작하질 않음. 그리고 기본적으로 다운받아야 하는 자료 몇개가 없음. 예로 letter1.bmp, letter2.bmp, letter3.bmp같은게 없음.(종종 exe파일도 다운 안 받아질때가 있음.) 설치 환경이 너무 제한적임.(python 2.5) 또 모듈 설치할게 많은데 설치가 빡셈, 설명도 부족하고 구글링해도 자료도 안나옴. 그래도 이거때문에 3일 날려먹은게 아까워서 도전해볼사람들을 위해 설치방법을 올림...

이미지 관련 2차삽질 (hack this site : Bypass the image captcha)

해결 : http://qkqhxla1.tistory.com/442 1차 삽질 : http://qkqhxla1.tistory.com/2571. grayscale 부드럽게 보정 (이거 더 찾아볼것)http://codereview.stackexchange.com/questions/41688/rotating-greyscale-images 2. opencv공식 홈페이지 warpaffinehttp://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_ml/py_svm/py_svm_opencv/py_svm_opencv.html?highlight=warpaffine 3. python-tesseracthttps://code.google.com/p/pyth..

canyouhack.it Captcha Challenge 1, 2

http://canyouhack.it/Hacking-Challenges/Captcha-Challenges/Tilt-your-head/2. Tilt your head. 들어가보면 기울어진 글자가 보인다.(매번 글자와 기울어진 정도 변경.) 이 기울어진 글자를 해석해서 2초안에 /Content/Challenges/Captcha/Captcha2.php?text=답 과같은 형식으로 보내면 답이 포함된 이미지가 출력된다고 한다. 어떻게 할까 생각하다가 기울어진 글자의 각도를 계산해서, 돌아간 각도만큼 원래 각도대로 돌려준 후 python ocr 모듈인 pytesser로 인식하기로 했다. 각도 계산은 모든 경우에 계산하게 하기는 너무 복잡했다. 그래서 270~90도 사이의 값만 인식하게 하고,(즉 6시방향~12시방..

Enigmagroup missions/programming 8 (섞여있는 글자 인식)

이미지를 해석해서 해당 이미지가 어떤 글자를 나타내는지 보고, 해석해서 보내면 된다.일단 문제 페이지에 들어가보면 이런식의 이미지가 하나 뜬다. 딱 봐도 흰색 부분을 잘 어떻게 만들다보면 어떤 글자가 만들어질것 같다. 처음에는 못풀다가, 생활코딩에 질문을 올려서 힌트를 좀 얻었다. 가장 도움이 됬던 말은 '자연 영상의 변화는 공간상에서 급격하게 변하지 않는다' 라는 말이었다. 음... 이미지를 다운받아서 각 색상을 RGB값으로 변경 후, 첫번째 RGB값만 정렬해서 출력해보았다. 그런데 R,G,B중 특정 하나의 글자가 어떤 값에서 시작해서 1씩 증가하는걸 발견했다. 딱 이걸 보고 감이 대충 왔다. 아마도 작은 순서대로 위에서부터 이미지를 하나씩 복사하면 되지 않을까..? 코딩을 했더니 그게 맞았다. 위와 ..

Enigmagroup Captcha Cracking 1, 2

앞에서 많이 썼던 pytesser로 문자열을 인식했고, 그 전까지의 보정은 모두 pil모듈로 보정했다. Captcha 1.# -*- encoding: cp949 -*- import Image import urllib2 import pytesser def download_photo(filename): file_path = "%s%s" % ("C:\\Users\\Ko\\Documents\\Visual Studio 2012\\Projects\\PythonApplication37\\", filename) downloaded_image = file(file_path, "wb") req = urllib2.Request('http://www.enigmagroup.org/missions/captcha/1/image.p..

python opencv image recognition 3 (hackthis captcha 2,3)

이제 테스트까지 해봤으니 실전이다.https://www.hackthis.co.uk/levels/captcha/2 문제를 풀어보려고 한다. 이 문제풀이는 앞장에서의 트레이닝을 했다고 가정한다. 앞장에서의 트레이닝을 안했으면 인식을 못한다. 1. 이미지를 다운받는다.2. 앞장에서와 같이 인식률을 높이기 위해 다운받은 이미지를 변경시킨다.3. 인식후 x좌표를 기준으로 정렬해서 변수에 집어넣는다.4. 변수의 알파벳과 표정을 매치시켜 답을 도출한다. #-*- coding: cp949 -*- import operator import cv2 import numpy as np import urllib2 import Image def download_photo(filename): file_path = "%s%s" % (..

python opencv image recognition 2 (hackthis captcha 2)

앞에서 opencv에 대해서 대충 감을 잡아봤고, 이제 내가 원하는대로 바꿔보자. http://qkqhxla1.tistory.com/228 에서의 숫자인식을 내가 원하는 이모티콘, 그림 인식 등으로 바꿔보자. 우리가 인식할 그림이다. (문제 : https://www.hackthis.co.uk/levels/captcha/2)문제를 키면요러한 화면이 나오는데 저 표정 순서대로 입력해서 보내면 된다. 참조해서 요청을 보내주면 된다. 위의 초록그림같은경우 ;) :|~~ 등으로 보내면 되겠다. 난 이미지인식을 할 때 그림을 영어소문자로 인식했다.(해쉬값 저장하듯이) 위에 적어놨는데 :D는 a로, :)는 b로.. 이런식으로 l까지 인식했다. 나중에 우리가 알아서 다시 원래 이모티콘으로 변형해 주면 된다. 인식을 위..

python opencv image recognition basic function analysis

파이썬으로 opencv를 간단하게 공부하기로 결심했다. 굳이 공부하는 이유를 들자면 그림인식이나캡챠인식 문제가 이곳저곳 워게임에서 많이 나오는데, 그냥 풀고 싶어서이다. 또 코딩으로 풀면실력도 적절히 늘어날것 같아서.(배워두면 언젠가는 쓰겠지.) python opencv에 대해서는 저번에 글을 썼었는데, http://qkqhxla1.tistory.com/228내 생각에 저 기본 예제 코드만 이해할수있으면 그림 인식이나 복잡한 숫자 인식도 가능하다고 생각한다. (아니면 뭐....) 그래서 저 예제 코드를 이해하는 방향으로 튜토리얼에서 함수들을 하나하나 직접 실험해보면서 익힐 생각이다.. cv2.cvtColor(image, flag)이미지의 모드를 flag에 따라서 바꿔주는 거라고 한다. BGRGRAY BG..

이미지 관련 삽질(hack this site level 6)

2차삽질 : http://qkqhxla1.tistory.com/344 문제. https://www.hackthissite.org/missions/prog/6/ 저기 링크가 걸려있는 HERE을 누르면 아래에 캡쳐한것과 같은 화면이 뜬다. 거기서 글자를 인식해서 차례차례 써서 제출하면 된다. 각각의 글자는 자바스크립트로 그려지며, 선분 하나하나가 그려지는 형태이기 때문에 소스코드를 본다고 글자를 추출해 낼수 없다.(소스코드가 태그로 감싸진게 아니라 자바스크립트 자체로 직접 그린다.) 예제 소스코드. 따라서 OCR을 구현하거나 자바스크립트를 해석해서 어떤 글자가 만들어지는지 봐서 풀어야 하는데 난 OCR로 해보려고 삽질을 했었다. 아래는 삽질한 내용이다. 엄청나게 삽질을 해 봤지만 결국 실패............

hack this site Programming missions : Analyze the picture and find the ascii code

https://www.hackthissite.org/missions/prog/2/ The pixels in the above image are numbered 0..99 for the first row, 100..199 for the second row etc. White pixels represent ascii codes. The ascii code for a particular white pixel is equal to the offset from the last white pixel. For example, the first white pixel at location 65 would represent ascii code 65 ('A'), the next at location 131 would rep..

python opencv 기본예제.

다운로드 : http://docs.opencv.org/trunk/doc/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.html 공식 튜토리얼 : https://opencv-python-tutroals.readthedocs.org/en/latest/ 다운로드 사이트의 참조할 페이지 : http://docs.opencv.org/trunk/doc/py_tutorials/py_ml/py_knn/py_knn_opencv/py_knn_opencv.html http://stackoverflow.com/questions/9413216/simple-digit-recognition-ocr-in-opencv-python 에서 가져온 예제코드. 사진파일에서 숫자..