본문 바로가기

전체 글

(53)
파이썬을 이용한 이미지에서 텍스트 추출(Deep learning, python, pytesseract, PIL, mac, OCR 라이브러리) 파이썬을 이용해 크롤링을 하다보면 이미지 파일에 있는 텍스트를 추출해야할 경우들이 있다. 텍스트 인식을 위한 오픈소스인 Tesseract과 파이썬을 이용해서 이미지의 텍스트를 추출해보았다. from PIL import Image from pytesseract import * class Test: def __init__(self, path:str): test_img_path = path test_img = Image.open(test_img_path) img_txt = image_to_string(test_img, lang='eng+kor', config='--psm 1 -c preserve_interword_spaces=1') with open('test_sample(2).txt', 'w', encodi..
TDD와 단위 테스트의 차이 1.TDD TDD는 테스트가 주도하는 개발을 이야기한다. 테스트 코드를 먼저 작성하는 것부터 시작한다. 레드 그린 사이클 : 항상 실패하는 테스트를 먼저 작성하고(RED) 테스트가 통과하는 프로덕션 코드를 작성하고(GREEN) 테스트가 통과하면 프로덕션 코드를 리펙토링한다(Refactor) 2. 단위 테스트 TDD의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 이야기 한다. TDD와 달리 테스트 코드를 꼭 먼저 작성해야하는 것도 아니고, 리펙토링도 포함하지 않는다. 순수하게 테스트 코드만 작성하는 것을 이야기한다. 3. 테스트 코드를 작성해야하는 이유 1) 단위 테스트는 개발단계 초기에 문제를 발견하게 도와준다. 2) 단위 테스트는 개발자가 나중에 코드를 리펙토링하거나 라이브러리 업그레이드 ..
KSUG 2019년 하반기 세미나 후기 1. 참가 신청 및 정보 이번 ksug 세미나는 장소가 협소한 관계로 선발 인원 수에 제한(90명)이 있었습니다. ksug 세미나 페이지 에서 티켓 구매를 누르면 네이버 예약으로 넘어가서 신청할 수 있었는데 1분만에 매진이 완료가 될 정도로 경쟁률이 높았습니다. 팁을 드리자면 저는 웹툰 보려고 네이버 페이 포인트를 충전해놨었는데 이번 티켓팅에 유용하게 썼습니다. (물론 내년에도 업체에서 네이버 예약을 쓴다면 유효한 팁이겠죠?) 2. 세미나 내용(키워드 위주 정리) “코드를 테스트하는 다양한 방법” - 백기선 님 JUnit 5 달라진 점 @DisplayName() - 메소드의 이름을 설정할 수 있다. assertAll() assertThrow() @ignore -> @Disabled JUnit4에서 지원하..
자바 스레드 기초 멀티태스킹이란? 멀티태스킹(multitasking)이란 다수의 작업을 동시에 처리하는 것을 말한다. 일상 생활에서의 예시를 들어 설명하자면, 노래를 들으면서 운동을 하는 행위, 기타를 치면서 노래를 부르는 행위, 울면서 웃는 행위 등으로 생각하면 쉽겠다. 윈도우 운영체제의 미디어 플레이어는 오디오를 출력하는 태스크와 스크린에 동영상을 출력하는 태스크(재생하는 화면), 그리고 사용자의 키와 마우스 입력을 처리하는 태스크 등 최소한 3개의 태스크가 동시에 실행되고 있다. 만일 이 3개의 태스크를 순차적으로 실행하면 오디오나 비디오가 간헐적으로 끊어지는 일이 발생할 수 있다. 하나의 프로그램에 여러 작업(태스크)를 구현하는 멀티 태스킹을 이용하면, 실행 중에 여러 작업(태스크)를 동시에 실행시켜 프로그램이 효..
제네릭 Java 5부터 제네릭(Generic) 타입이 새로 추가되었는데, 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있게 되었다. 제네릭은 컬렉션, 람다식, 스트림, NIO에서 널리 사용되므로 확실히 이해해 두어야 한다. 또 API 도큐먼트를 보면 제네릭 표현이 많기 때문에 제네릭을 이해하지 못하면 API 도큐먼트를 정확히 이해할 수 없다. 제네릭은 클래스와 인터페이스, 그리고 메소드를 정의할 때 타입(type)을 파라미터로 사용할 수 있도록 한다. 타입 파라미터는 코드 작성시 구체적인 타입으로 대체되어 다양한 코드를 생성하도록 해준다. 제네릭을 사용하는 코드는 비제네릭 코드에 비해 다음과 같은 이점을 가지고 있다. 1. 컴파일시 강한 타입 체크를 할 수 있다 자..
overriding, overloading 차이점 다형성: 사용편의성 객체 지향에서 다형성이라고 하면 오버라이딩, 오버로딩 이라고 할 수 있다. 물론 상위 클래스와 하위 클래스 사이에서도 다형성을 이야기할 수 있고, 인터페이스와 그것의 구현 클래스 사이에서도 다형성을 이야기할 수 있지만 가장 기본은 오버라이딩과 오버로딩이라고 할 수 있다. 오버라이딩? 오버로딩? 오버라이딩 : 같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 재정의 오버로딩 : 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의 ride : 올라타다 -> 상위 클래스의 메서드를 올라타다? load : 적재하다 -> 다수의 메서드를 나란히 옆으로 적재한다? public class Animal{ public String name; public void showNa..
StringBuffer, StringBuilder 비교 문자열을 저장하는 String은 내부의 문자열을 수정할 수 없다. 예를 들어 String의 replace() 메소드는 내부의 문자를 대치하는 것이 아니라, 대치된 새로운 문자열을 리턴한다. String 객체를 + 연산할 경우에도 마찬가지다. String data = "ABC"; data += "DEF"; "ABC"에 "DEF"가 추가되었기 때문에 한 개의 String 객체가 사용되었다고 생각할 수 있지만, String 객체는 내부 데이터를 수정할 수 없으므로, "ABC"에 "DEF"가 추가된 "ABCDEF"라는 새로운 String 객체가 생성된다. 그리고 data 변수는 새로운 String객체를 참조하게 된다. 문자열을 결합하는 + 연산자를 많이 사용하면 할수록 그만큼 String객체의 수가 늘어나기 때..
스프링 입문을 위한 자바 객체 지향의 원리와 이해 -1장 어셈블리어 C 자바 개발자의 코딩 일상 단어 사용 수학적 기호 사용 수학적 기호 사용 소스 파일 기종마다 하나씩 기종이 몇 개든 단 하나 기종이 몇 개든 단 하나 목적 파일 어셈블리어로 기계어 생성 컴파일러로 해당 운영체제용 기계어 생성 기종이 몇 개든 단 하나의 JVM용 기계어 생성 기계어 비교 기계어랑 1:1 대응하는 니모닉 기계어와 m:n 대응하는 수학적 기호 기계어와 m:n 대응하는 수학적 기호 비고 기종별 어셈블러 필요 기종별 컴파일러 필요 단 하나의 컴파일러만 필요 기종별 JRE 세팅 필요(한번만 설치해주면 됨) [표 어셈블리어, C, 자바 비교] 당신은 CBD, SOA가 어려운가? 객체 지향의 4대 틍성을 누군가에게 설명할 수 있는가? 스프링 프레임워크는 사상이면서 또 단일 제품이다. 느낀 ..