ウェブカメラで QRCode をスキャンし、デコードして JLabel に配置したいと考えています。スキャナは、有効な QRCode が取得されるまで継続的にスキャンする必要があります。私は日食を使用していますが、誰かが私を正しい方向に向けてくれますか?
試したウェブサイト:
- http://shashindrasri.blogspot.sg/2013_01_01_archive.html
- http://webcam-capture.sarxos.pl/
- & many more
私はアドバイスされたことに従いますが、最も近いものは次のとおりで、次のようなエラーが発生します。
- java.lang.UnsupportedClassVersionError: com/google/zxing/NotFoundException : Unsupported major.minor version 51.0
- Could not find the main class: boundary.Scanner. Program will exit.
- Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: C:\Users\Safety.Puss-HP\AppData\Local\Temp\javacpp403997126115\jniopencv_core.dll: Can't find dependent libraries
私が行ったインポート:
- webcam-capture-0.3.10-RC4
- slf4j-api-1.7.2
- bridj-0.7-20130703.103049-42
コード:
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 Scanner extends JFrame implements Runnable, ThreadFactory
{
private static final long serialVersionUID = 6441489157408381878L;
private Executor executor = Executors.newSingleThreadExecutor(this);
private Webcam webcam = null;
private WebcamPanel panel = null;
private JTextArea textarea = null;
public Scanner() {
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(0);
webcam.setViewSize(size);
panel = new WebcamPanel(webcam);
panel.setPreferredSize(size);
textarea = new JTextArea();
textarea.setEditable(false);
textarea.setPreferredSize(size);
add(panel);
add(textarea);
pack();
setVisible(true);
executor.execute(this);
}
@Override
public void run() {
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());
}
} while (true);
}
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r, "example-runner");
t.setDaemon(true);
return t;
}
public static void main(String[] args) {
new Scanner();
}
}