본문 바로가기

ISBN

도서 바코드 사진 인식 프로그램 앞선 내용에서 바코드 사진을 인식해서 바이너리 데이터로 변환하는 과정을 거쳤다. 그래서 이번 내용에서는 Python으로 작성한 바코드 사진 인식 프로그램 소스코드를 소개하려고 한다. 인식 방법에 대한 간단한 알고리즘의 설명은 이미 앞선 강의에서 살펴보았으니 이 포스팅에서는 직접 제작한 소스코드만 첨부하도록 하겠다. Python에서 이미지를 관리하는 module이 기본적으로는 제공하지 않기 때문에, PIL 모듈을 설치해서 사용하였다. PIL 모듈을 설치하는 방법은 pip를 이용해서 간단하게 설치할 수 있으므로 따로 설명은 하지 않도록 하겠다. 여기서의 경우 도서 바코드 사진이 있는 링크의 주소를 입력하면 해당하는 이미지에서 바코드의 바이너리 데이터 정보를 리턴해주는 형태로 구현하였다. 만약 이미지로 사용하..
도서 바코드 인식기 프로그램 제작 (3) 앞선 포스팅에서 도서 바코드의 바이너리 데이터를 우리가 알아볼 수 있는 데이터인 ISBN으로 변환하는 알고리즘을 Java를 이용해서 구현해보았다. 그래서 이번에는 사진으로 찍은 바코드를 인식해서 바이너리 데이터로 변환하는 알고리즘을 짜보도록 하겠다.영상처리를 하는데 가장 자주 쓰이는 오픈 소스인 OpenCV를 이용해서 짜볼까 하다가 아직 이것을 다루는 방법을 잘 몰라서 일단은 Python으로 대충 구현을 하였다. 핵심 알고리즘의 부분은 다음과 같다. 도서 바코드를 보았을 때, 기준이 되는 선이 총 6개가 존재한다. 이 기준선은 다른 선에 비해서 아래쪽으로 좀 더 삐져 나와있는 것을 확인할 수 있다. 그래서 이것을 이용해서 기준선의 두께를 기준으로 빈 공간은 0을 표현하고 검은 색은 1을 표현한다고 했으므..
도서 바코드 인식기 프로그램 제작 (2) 앞서서 도서 바코드가 어떤 식으로 인코딩이 되어 있는지를 살펴보았다. 이번에는 앞선 내용을 통해서 도서 바코드를 디코딩해서 우리가 원하는 정보를 가져오는 방법에 대해서 살펴보도록 하겠다. 도서 바코드의 경우에는 첫 시작이 9이기 때문에 따로 이 숫자를 인식을 해줄 필요는 없었다. 만약 도서의 첫 시작 번호를 몰랐다면 숫자를 인식할 필요가 있는데, 그 이유는 도서 바코드에 사용하는 EAN-13이 맨 앞자리에 따라서 인코딩 방법이 달라지기 때문이다. (아무리 생각을 해보더라도 왜 앞자리에 따라서 인코딩 방법을 다르게 했는지 이해가 가지 않는다.... 그냥 바코드에 줄을 더 추가해서 맨 앞자리를 표현을 해주면 될텐데 말이다.) 처음에는 C++로 구현을 하려고 했으나, 그냥 구현하는 것이 약간 귀찮아서 그냥 J..
도서 바코드 인식기 프로그램 제작 (1) 대부분의 책에서 뒤쪽 표지를 보면 바코드가 붙어있는 것을 확인할 수 있다. 그리고 이 붙어있는 바코드를 바코드 리더기로 읽게 되면 자동으로 어떤 책인지에 대한 정보를 볼 수 있다. 바코드를 크게 나누면 1차원 바코드와 2차원 바코드로 나눌 수 있다. 도서에 사용되는 바코드의 경우에는 1차원 바코드에 해당하며, 2차원 바코드의 경우 우리가 잘 알고 있는 QR Code가 대표적인 예이다. 이 글의 목표는 도서 바코드 인식기를 만드는 것이기 때문에 2차원 바코드가 아닌 1차원 바코드에 대해서 다루도록 하겠다. "2차원 바코드에 대해서 다루는 것이 아니다...." "아래와 같은 1차원 바코드에 대해 다루는 것이다!!" 도서에 사용되는 1차원 바코드는 EAN-13 바코드(국제 상품 번호, International..