Motivation for brown bag

  • Exchange API 웹 요청을 편하게 하는 것을 보고 David이 관심을 보임

Intro

  • 프로그래밍은 누구나 할 수 있다
  • 당신이 프로그래머라면 1시간 안에 파이썬 문법을 익힐 수 있다
  • 프로그래밍 경험이 전혀 없어도 5일이면 간단한 프로그램을 작성할 수 있다
  • 당신이 해커라면? 해킹에 필요한 툴을 직접 만들 수 있다
  • 당신이 개발자라면? 빠르게 prototype을 작성해 볼 수 있다
  • 당신이 데이터 분석가라면? 데이터 시각화 및 통계를 쉽게 할 수 있다

Why did I start python?

  • 100여개의 시스템의 패스워드를 일일이 바꾸기 힘든데 한번에 할 수 없을까?

Udacity

Udacity was born out of a Stanford University experiment in which Sebastian Thrun and Peter Norvig offered their "Introduction to Artificial Intelligence" course online to anyone, for free.
I studied at Udacity(https://www.udacity.com/).
I thank Dave Evans who is Instructors Intro to Computer Science and Sebastian Thrun who is one of the creater of udacity.
The mission of udacity is to bring accessible, affordable, engaging, and highly effective higher education to the world. They and I believe that higher education is a basic human right, and we seek to empower our students to advance their education and careers.

What I did

  • 선거철마다 종북 몰이가 등장하는것 같은데 과거에는 어땟을까?(mechanize, beatiful soup, mongodb)
  • nmap보다 빠른 portscanner를 만들 수 없을까?(multi process, thread)
  • IBM Appscan이상의 Web vulnerability scanner를 만들 수 없을까?(requests)
  • 어떻게 하면 PC에서 패스워드가 포함된 파일만 가져올 수 있을까?(regular expression)
  • 컴퓨터는 어떻게 얼굴을 인식할까?(Demo, opencv)
  • 에버노트의 영수증을 인식하는 기능은 어떻게 작동할까?(Demo, opencv, scikit-image)
  • 메신저 대화방 parser 만들기(kakaotalk, line, whatsapp)
  • 뉴욕타임즈에 article을 바탕으로 컴퓨터는 작가가 누구인지 추측할 수 있을까?(scikit-learn, nltk)
  • Captcha문자를 컴퓨터가 인식할 수 없을까?(pandas, lasagne, theano, keras, scikit-neuralnetwork)

Demo 에버노트의 영수증을 인식하는 기능은 어떻게 작동할까?


In [1]:
%matplotlib inline
from matplotlib import pyplot as plt, cm
from imutils.convenience import resize
from imutils.perspective import four_point_transform
from skimage.filters import threshold_adaptive
import cv2
import numpy as np

In [2]:
# Step 1: Edge Detection

# load the image and compute the ratio of the old height
# to the new height, clone it, and resize it
image = cv2.imread("./data/ReceiptSwiss.jpg")
ratio = image.shape[0] / 500.0
orig = image.copy()
image = resize(image, height = 500)
 
# convert the image to grayscale, blur it, and find edges in the image
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(gray, 75, 200)

# show the original image and the edge detected image
print "STEP 1: Edge Detection"
plt.figure(figsize=(16,12))
plt.subplot(121), plt.imshow(image, cmap = 'gray')
plt.title('Original Image')
plt.subplot(122), plt.imshow(edged, cmap = 'gray')
plt.title('Edge Image')


STEP 1: Edge Detection
Out[2]:
<matplotlib.text.Text at 0x10a643e10>

In [4]:
# Step 2: Use the edges in the image to find the contour (outline) representing the piece of paper being scanned.

# find the contours in the edged image, keeping only the
# largest ones, and initialize the screen contour

(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5]
 
# loop over the contours
for c in cnts:

	peri = cv2.arcLength(c, True) # arcLength 곡선의 길이를 계산
    
	approx = cv2.approxPolyDP(c, 0.02 * peri, True)

	if len(approx) == 4:
		screenCnt = approx
		break
 
# show the contour (outline) of the piece of paper
print "STEP 2: Find contours of paper"
cv2.drawContours(image, [screenCnt], -1, (0, 255, 0), 2)
plt.figure(figsize=(16,12))
plt.subplot(121), plt.imshow(orig, cmap = 'gray')
plt.title('Original Image')
plt.subplot(122), plt.imshow(image, cmap = 'gray')
plt.title('Edge Image')


STEP 2: Find contours of paper
Out[4]:
<matplotlib.text.Text at 0x113a42f10>