本文主要是介绍java+WebCam 识别二维码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
项目中需要用到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 stubnew 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);}@Overridepublic Thread newThread(Runnable r) {// TODO Auto-generated method stubThread t = new Thread(r, "example-runner");t.setDaemon(true);return t;}@Overridepublic void run() {// TODO Auto-generated method stubdo {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);}}
这篇关于java+WebCam 识别二维码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!