Sunday, August 22, 2010

ZXing 바코드 라이브러리

35.ZXing 바코드 라이브러리

ZXing 바코드 라이브러리

현재 최신 버전 1.4

Multi-format 1D/2D barcode image processing library with clients for Android, Java

공식 사이트

http://code.google.com/p/zxing/

zxing 이라는 거..

휴대폰 카메라랑 바코드 구독 장치를 서버에 연결하지 않고 사용.

오른쪽 상단에 다운 받을수 있음

지원 바코드 종류

  • UPC-A and UPC-E
  • EAN-8 and EAN-13
  • Code 39
  • Code 128
  • QR Code
  • Data Matrix ('alpha' quality)
  • PDF 417 ('alpha' quality)
  • ITF

데자와 캔 음료

8801097481015

Format: EAN_13

Type: PRODUCT

Getting Started

http://code.google.com/p/zxing/wiki/GettingStarted

사용하려면 이 문서를 먼저 봐야 할듯 함

JavaDoc

http://zxing.org/w/docs/javadoc/index.html

SVN 경로

http://zxing.googlecode.com/svn/

카메라를 이용한 바코드 인식 문의 드립니다..

http://www.androidpub.com/11653

-안드로이드에서 바코드 인식 방법

1. 카메라로 바코드를 찍고,
2. 찍힌 이미지에서 바코드의 위치를 정확히 찾고( 화면 가운데에 바코드가 오는 것을 가정하면 일이 좀 줄어들고요. )
3. 바코드 타입( CODE128, CODE39, EAN13 등의 여러가지 종류가 있어요. )별로 맞는 바코드인지 테스트합니다.
4. 특정 바코드 타입으로 분석해서 문제없이 해석이 되면, 바코드->숫자 변환 과정이 끝납니다.
5. 이 숫자는 책의 ISBN 번호인 경우도 있고, 과자의 상품번호인 경우도 있는데, DB를 검색해서 해당 제품의 정보를 받아와서 보여줍니다.

직접 만들려면, 이미지 처리해서 깨끗한 바코드 이미지로 변환하는 방법, 바코드 타입별로 분석하는 방법을 공부해야 합니다.

-동영상

바코드를 찍어서 바로 구글 안드로이드 마켓에 연결하여, 해당 제품을 검색할 수 있게 한다.

http://www.youtube.com/watch?v=gu6k4dFtf-U

ZXing 설정 순서

아무튼 순서 정리!

zxing 에서 core를 ant 를 이용하여 컴파일

core.jar 이 생성되는데 이걸 프로젝트에 추가 해 준다.

프로젝트를 선택하고 Properties 설정 화면으로 간다.

Java Build Path 로 이동

Libraries 탭 선택

Add External JARs버튼 클릭 해서 core.jar 를 추가 해 준다.

svn에서 받은 소스중 androidtest 프로젝트를 참고 하여 작성 한다

컴파일한 파일 첨부

zxing1.4core.jar

ZXing 사용 순서

여러가지 방법이 있으나 기본 기능인 바코드찍는 화면과 찍고 나면 결과 값을 받는 기능을 적음

아래의 코드가 실행되면 바코드 찍는 화면이 나타난다. (기본적으로 Activity를 띄울 때 startActivity를 사용하나 결과값을 받기 위해 startActivityForResult 를 사용한다.

  1. Intent intent = new Intent("com.google.zxing.client.android.SCAN");

  2. startActivityForResult(intent, 0);

  1. @Override
  2. public void onActivityResult(int requestCode, int resultCode, Intent intent)
  3. {
  4. if (requestCode == 0)
  5. {
  6. if (resultCode == RESULT_OK)
  7. {
  8. String contents = intent.getStringExtra("SCAN_RESULT");
  9. String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
  10. showDialog(R.string.result_succeeded, "Format: " + format + "\nContents: " + contents);
  11. }
  12. else if (resultCode == RESULT_CANCELED)
  13. {
  14. showDialog(R.string.result_failed, getString(R.string.result_failed_why));
  15. }
  16. }
  17. }
  18. private void showDialog(int title, String message)
  19. {
  20. AlertDialog.Builder builder = new AlterDialog.Builder(this);
  21. builder.setTitle(title);
  22. builder.setMessage(message);
  23. builder.setPositiveButton("OK", null);
  24. builder.show();
  25. }

ZXingTestActivity

androidtest: Android test app

이 프로젝트의 소스를 참고해보면 좋다.

참고

ANT

ANT를 먼저 사용 할 수 있어야 함

환경변수에 ANT관련 설정 해 주어야 함

ANT를 사용하려면 javac를 사용해야 되기 때문에 환경변수에서 JAVA 경로도 지정해 주어야 됨

build.xml:64: taskdef class com.android.ant.SetupTask cannot be found 오류

build.properties 에 android-home 경로 지정 수정해 주어야 됨

-> 안되네 -_-; 그러면 환경변수에서 android lib 경로를 직접 지정

build.xml:75: Unable to resolve target 'Google Inc.:Google APIs:4'

또 다른 오류 발생 -_-; 짜증

기타

ZXing 1.3 으로 해보니

tools/aapt.exe 가 없다고 안됨 -_-; 이건 언제적 버전에 있던 프로그램이지;;

ZXing 1.4는 안드로이드 1.6 이상은 되어야 쓸 수 있는 코드들이 다수 보임

ZXing 1.3을 사용해보고 있음

여기 있는 예제는 1.4에서도 잘 됨. 단 Android SDK 1.6에서만 되는 코드 있는 예제는 1.5에서 안됨.

2010-01-11 21:59 에 김준호님이 마지막으로 수정

댓글 (6)

  • 알미렌

    좋은 예제 감사합니다. 그런데 다름이 아니오라 혹시 core.jar 컴파일 하신거 받을수 있을까요? 전 계속해서 에러가 발생해서 컴파일이 안되던데 계속해서 javac를 못찾는다는 에러가 나더군요; 환경변수에 추가하고 build.xml 을 수정을 하여도 컴파일이 안되는;;;

    2010-01-11 16:33
  • junho85

    컴파일한 파일을 첨부해 두었습니다. 아마 path 지정이 잘못된거 같은데 다시 확인해 보세요.

    2010-01-11 21:59
  • 제냐

    안녕하세요. Zxing을 이용해 간단한 어플하나 만들어보려고 하는데 많은 어려움을 겪고 있습니다. ant를 설치 하려는데 계속 Buildfile: build.xml does not exist! Build failed 메세지가 뜨네요. 어떻게 해야 하는지 좀 알려주실수 있나요? 괜찮으시다면 이메일 연락 가능한지 궁금합니다.

    2010-03-06 18:37
  • junho85

    @제냐 build.xml does not exist! 메시지는 build.xml 를 못찾아서 그러는거 같은데 build.xml 파일이 제 위치에 있는지 확인해 보세요.

    2010-03-09 21:47
  • topspin

    C++ library 도 있나요?

    2010-07-23 14:58
  • 김준호

    @topspin : http://code.google.com/p/zxing/source/browse/trunk/cpp/magick/src/example.cpp 이걸 한번 참고해 보세요.

    2010-07-23 18:32