CAFE

과제-바코드 생성과 인식

작성자한창호|작성시간15.04.07|조회수3,848 목록 댓글 0


바코드 생성과 인식 프로그램을 만들어보자.

 

1. 바코드 생성


- 바코드 이해  첨부파일 3. 유통정보기술.ppt 


- EAN-13 코드:     국제 상품 번호(위키백과)


시작 부호 

 LG 코드

 중간부호

 R 코드 (6번째 check digit)

 끝 부호

 101

 6자리 x 7비트

 01010

 6자리 x 7비트

 101

 긴 세로선

아래 숫자 표시 

긴 세로선

 아래 숫자 표시 

 긴 세로선



- Check Digit 계산공식

https://mathspig.wordpress.com/tag/how-to-calculate-the-check-digit-on-a-barcode/  


      CheckDig = (10 - [ (3* 홀수번째합 + 짝수번째합) % 10 ] ) %10

 

- 바코드 생성기 Program 종류

http://www.barcodefor.us/barcode-generator/korean/barcode-label-maker-software.html


- 바코드 생성 사이트

http://www.terryburton.co.uk/barcodewriter/generator/


생성 프로그램 예제

 - Combo Box에서 코드를 선택하고,

 - Edit 박스에서 만들 데이터를 입력받아 코드를 생성한다.

 - 생성된 코드는 bmp파일로 저장한다.




 - 다음 소스는 완성된 소스가 아니다. 다만 약간의 방법론 들을 적어 놓았기에 참고하여 EAN-13코드와 ISBN 코드를 생성할 수 있는 프로그램을 직접 만들어 본다.




 // "코드생성" 버튼을 눌렀을 때의 처리 함수이다.

void CBarcode2Dlg::OnBnClickedButton1()
{

 UpdateData(TRUE);
 AfxMessageBox(m_CodeStr);
 int sel = m_CbList.GetCurSel();  // 콤보박스:  0: EAN-13,  1: ISBN, 2: UPS 선택
 if (sel == 0) {
  // 코드를 화면에 출력
  CString digCode = GenBarCode_EAN13(m_CodeStr);
  UpdateData(FALSE);
  // 화면그리기
  drawBarcode(digCode);
 }
}


// EAN-13 코드 중 L코드로 생성하는 테스트 함수이다.

char *LCode[10] = {
 "0001101", "0011001", "0010011", "0111101", "0100011",
 "0110001", "0101111", "0111011", "0110111", "0001011" };


CString CBarcode2Dlg::GenBarCode_EAN13(CString str)
{
 CString encode;

 for (int i = 0; i < str.GetLength(); i++) {
  encode += LCode[str[i] - '0'];
 }
 return encode;
}


// 바코드를 테스트로 그리는 함수이다. 바코드의 간격을 자동 계산한다.

void CBarcode2Dlg::drawBarcode(CString code)
{
 CDC* pDC = m_View.GetDC();
 CRect rect;
 int len = code.GetLength();  // 총 코드 수
 m_View.GetClientRect(&rect);
 pDC->FillSolidRect(rect, RGB(255, 255, 255));  // 배경 지우기
 float gap = (float)(rect.right-rect.left)/(len);
 for (int i = 0; i <len; i++) {
  if (code[i] == '1')
   pDC->FillSolidRect( rect.left + (int)((float)i * gap), rect.top, gap+1, rect.Height(), RGB(0, 0, 0));
 }
}



2. 바코드 인식


  - EAN-13 코드 / ISBN 코드

  - bmp 파일로 읽어 바코드를 인식한다. (테스트 10개 이상)

  - web Cam 영상으로 읽어 바코드를 인식한다.


*  알고리즘 구현 방법

  - 노이즈 제거 (Median 필터, 평균 이동 필터 등)

  - 허프변환으로 직선의 각도를 알아낸다.  (고속처리를 위해 몇개의 점을 획득하고 직선의 방정식으로 각도를 추출한다.)

  - 영상 회전

  - 세로축 중심 위치를 알아낸다.

  - 바 두께를 알아낸다. (x축으로 스캔하여 시작과 끝부분 위치를 개수로 나눈다.)

  - 코드화 한다. (10101.... 00101)



3. 평가방법


1) 이론설명 - 바코드 원리 및 종류, ISBN 규격, 검출, 생성, Check Digit

2) 사용기술 - 영상처리, 영상획득, 전처리, 직선방정식, 회전, 노이즈제거, Check Digit

3) 실행결과 - 충분한 시료로 테스트, 완성도, 에러율

 

 

4. 참고자료

 


- 국제표준 도서번호 (ISBN) 코드 

 

(EAN-13코드) 국제 표준 도서 번호(위키백과) 와 (EAN-5 코드) 한국표준부가기호


EAN-13 코드 

EAN-5 코드 


International Standard Book Number (WikiPedia)

국제 표준 도서 번호(위키백과)

ISBN(국제표준서지번호) http://topamin.co.kr/doc_isbn.htm

서지정보유통지원시스템 (ISBN 온라인 신청)

한국연속간행물번호 - The International ISBN Agency

한국표준부가기호 (EAN-5) - https://en.wikipedia.org/wiki/EAN_5


- EAN-5 코드  (위키백과

 

 이 코드는 5개의 코드를 checksum을 구해서 해당 코드 패턴을 정한다. (예, checksum=0, -> GGLLL 패턴), 그리고, 해당 G, L 코드의 숫자를 이용해서 코드를 생성한다.

 주의할 점은 시작 코드가 존재한다.





- 바코드 code128

http://en.wikipedia.org/wiki/Code_128

 


- UPC 코드: 범용 상품 부호(위키백과)




다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼