본문 바로가기

분류 전체보기

(10)
이미지 OCR 이번에는 이미지에 있는 숫자를 인식해보겠다. 다음 그림은 컴퓨터에서 숫자를 그린 것이다. 여러 개의 글자가 적혀 있으므로 일단 문자가 어디 적혀 있는지 인식시켜야 한다 OpenCV로 텍스트영역 확인하기 import sys import numpy as np import cv2 # 이미지 읽어 들이기 --- (※ 1) im = cv2.imread('numbers.PNG') # 그레이스케일로 변환하고 블러를 걸고 이진화하기 --- (※2) gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (5, 5), 0) thresh = cv2.adaptiveThreshold(blur, 255, 1, 1, 11, 2) # 윤곽 추출하기 ---..
OpenCV로 얼굴인식하기 OpenCV는 ComputerVision 관련 프로그래밍을 쉽게 할 수 있도록 도와주는 open Library이다. OpenCV는 영상처리, 3D 구성, 추적,기계학습, 인식 그리고 딥러닝 까지 유용한 기능이 아주 많으며 상업적인 용도로도 무료이다 Haar 특징기반 다단계 분류자(Feature-based Cascade Classifiers)를 이용한 물체 검출은 Paul Viola와 Michael Jones이 2001년에 발표한 논문, “Rapid Object Detection using a Boosted Cascade of Simple Features”에서 제안된 효과적인 물체 검출방법 이다. 이는 검출할 대상이 되는 물체가 있는 이미지와 없는 이미지(각각을 Positive Image와 Negative..
규동 메뉴 이미지 판정하기 지금까지 배운 내용을 활용하여 규동 이미지를 판정할 것이다 스크래핑으로 이미지르 ㄹ수집하고, 데이터를 전처리/가공하고, 머신러닝으로 분석하는 방법까지 모두 활용할 것이다. 스크래핑부터 시작하기 이번 예제는 포토주(photozou) 라는 사이트에서 이미지를 가져올 것이다. 테스트로 규종 정보를 XML로 가져와보겠다. 포토주의 API는 인증 등이 따로 필요하지 않으므로 웹 브라우저에 입력하면 곧바로 XML을 확인할 수 있다. https://api.photozou.jp/rest/search_public.xml?keyword=牛丼 포토주의 썸네일 이미지 URL(thumnail_image_url)을 사용한다(120x120 픽셀) 또한 무한 반복으로 API를 계속 실행해 결과가 0이 나올 때까지 돌리겠다. impo..
CNN으로 이미지 분류하기 https://codegongbang.tistory.com/2?category=864829 이전에 CNN에 대해 살펴 봤는데, CNN은 신경망의 단점인 '층이 늘어나면 제대로 학습하지 못한다' 라는 문제를 입력층과 출력층 사이에 합성곱층과 풀링층을 넣어 보완한 것이다. 이번에는 Caltech 101데이터 세트를 사용해 색상 있는 이미지를 분류 할 것이다. Caltech 101 에는 101가지 종류의 카테고리로 분류된 이미지가 들어 있다. 분류하고 학습하는데 시간이 오래걸리므로 5가지 종류의 카테고리를 학습시키고 정확하게 분류할 수 있느지 테스트 해보자 랜덤으로 chair, camera, butterfly, elephant, flamingo 카테고리 이미지를 이용하겠다. 각 카테고리에는 이미지가 60장정도..
유사한 이미지 판별 그리고 Average Hash 형태 인식을 이용하여 이미지 데이터를 인식하고 이와 비슷한 이미지를 찾아낼 수 있다. 이에 관련해 간단한 방법이 있다 바로 average hash이다 Average Hash average hash는 이미지를 비교가능한 해시 값으로 나타낸 것이다, 해시 함수 MD5, SHA256등을 이용하면 데이터 값을 간단한 해시 값으로 변환가능하다 하지만 이러한 함수들은 같은 이미지를 찾는데 유용하지만 유사한 이미지를 찾는데 사용불가하다. 구체적인 방법으로는 이미지 크기를 8x8로 축소한다. 색을 그레이스케일로 변환한다. 이미지의 각 픽셀의 평균을 계산한다. 각 픽셀의 어두운 정도가 평균보다 크면 1, 평균보다 작으면 0으로 입력한다. 위와 같은 방식으로 이미지의 형태를 나타내는 64비트 해시 값을 구할 수 있다. 이..
간단한 챗봇 만들기 이전에 배운 내용을 토대로 간단한 형태의 챗봇을 구현하였다. 문장을 생성하는 알고리즘은 마르코브체인을 이용한 확률기반형 코드를 이용하였고 cgi모듈을 이용한 웹상에서 챗봇과 대화하는 환경을 구현하였다. 사지방 컴퓨터 환경이 재부팅 할떄마다 초기화되어 이제부터 실제로 구현하는것 보다는 이론과 코드분석 중심으로 공부를 해야겠다. chatbot.py #!/usr/bin/env python3 import cgi from botengine import make_reply # 입력 양식의 글자 추출하기 --- (※1) form = cgi.FieldStorage() # 메인 처리 --- (※2) def main(): m = form.getvalue("m", default="") if m == "" : show_for..
RNN 그리고 LSTM 그리고 문장만들 이전 마르코프성질이라는 확률론적 방법을 사용하였다면 이번에는 딥러닝을 이용해 문장을 구현 할 것이다. RNN의 기본구조 RNN은 히든 노드가 방향을 가진 엣지로 연결돼 순환구조를 이루는(directed cycle) 인공신경망의 한 종류이다. 음성, 문자 등 순차적으로 등장하는 데이터 처리에 적합한 모델로 알려져 있다. 위 그림에서도 알 수 있듯이 시퀸스 길이에 관계없이 인풋과 아웃풋을 받아들일 수 있는 네트워크 구조이기 때문에 필요에 따라 다양하고 유연하게 구조를 만들 수 있다는 점이 RNN의 가장 큰 장점이다. 위 그림이 RNN의 기본구조이다 녹색박스는 히든 state h_t 를 의미하고 빨간 박스는 인풋 x, 파란 박스는 아웃풋 y이다. 현재 상태의 히든 state h_t 는 직전 시점의 히든 sta..
마르코프 체인으로 문장 생성하기 이번에는 프로그램으로 뭊낭을 자동으로 생성해 보겠다. 자연 언어 분석을 활용하는 예로 마르코프 체인과 머신러닝으로 문장을 생성하는 LSTM/PNN을 사용해 볼것이다. 정밀도가 높은 문장을 구현하는 것은 아직 어렵겠지만 나름 그럴듯한 문장정도는 구현 할 수 있다. 마르코프 체인 마르코프 체인은 확률을 기반으로 문장을 이어 붙여 나가는 방법이다. 마르코프 성질이란 과거의 상태를 무시하고, 현재의 상태만을 기바능로 다음 상태를 선택하는 것을 의미한다. 문장을 만드는 과정을 정리하면 다음과 같다. 문장을 단어로 분할(형태소 분석)한다. 단어의 전휴 연결을 딕셔너리에 등록한다. 사전을 사용해 임의의 문장을 생성한다. 예를 들어 개와 관련된 속담을 딕셔너리에 등록했다고 해보자. 개|도|닷새|가|되면|주인|을|안다|..