java+WebCam 识别二维码

2 篇文章 0 订阅
1 篇文章 0 订阅

项目中需要用到webcam摄像头去扫描二维码,网上找来相关的Demo拿来用,稍作修改去使用,在调试过程中遇到各种奇葩的错误,最终调试成功,摄像头成功扫描到二维码信息。下面总结一下:
调试过程中遇到的问题基本上是由于缺少java编译是需要的包文件,需要用到一下依赖的包:
webcam-capture-0.3.10.jar
zxing-1.6-core.jar
zxing-javase.jar
slf4j-simple-1.6.1.jar
slf4j-api-1.7.2.jar
bridj-0.7-20140918.jar
如果是在raspberry pi 卡片是电脑上使用还需要加载Driver驱动包,
webcam-capture-driver-v4l4j-0.3.11.jar
v4l4j-0.9.1-r507-sources.jar
此外需要在程序中加入如下代码:

 static { Webcam.setDriver(new V4l4jDriver()); }

如果不加入以上包和代码,程序会报如下错误:
这里写图片描述

依赖包下载连接(here)

代码如下:
WebcamQRDemo.java

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.image.BufferedImage;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;

import javax.swing.JFrame;
import javax.swing.JTextArea;

import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamPanel;
import com.github.sarxos.webcam.WebcamResolution;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.
                    BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

public class WebcamQRDemo extends JFrame implements Runnable, ThreadFactory {

private static final long serialVersionUID =6441489157408381878L;
private Executor executor =Executors.newSingleThreadExecutor(this);

    private Webcam webcam = null;
    private WebcamPanel wpanel = null;
    private JTextArea textarea = null;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new WebcamQRDemo();
    }
    public WebcamQRDemo() {
        super();

        setLayout(new FlowLayout());
        setTitle("Read QR / Bar Code With Webcam");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Dimension size = WebcamResolution.QVGA.getSize();

        webcam = Webcam.getWebcams().get(1);
        webcam.setViewSize(size);

        wpanel = new WebcamPanel(webcam);
        wpanel.setPreferredSize(size);

        textarea = new JTextArea();
        textarea.setEditable(false);
        textarea.setPreferredSize(size);

        add(wpanel);
        add(textarea);
        pack();

        setVisible(true);
        executor.execute(this);
    }
    @Override
    public Thread newThread(Runnable r) {
        // TODO Auto-generated method stub
        Thread t = new Thread(r, "example-runner");
        t.setDaemon(true);
        return t;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        do {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Result result = null;
            BufferedImage image = null;
            if (webcam.isOpen()) {
              if ((image = webcam.getImage()) == null) {
                    continue;
                }

                LuminanceSource source =new BufferedImageLuminanceSource( image) ;
                BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

                try {
                    result = new MultiFormatReader().decode(bitmap);
                } catch (NotFoundException e) {
                // fall thru, it means there is no QR code in image
                }
            }
            if (result != null) {
                textarea.setText(result.getText());
                System.out.println(result.getText());
            }

        } while (true);
    }

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值