QuaggaJS+αでかんたんバーコードリーダ&メーカ
QuaggaJS、BarcodeCoderとは!?
QuaggaJSとBarcodeCoderを利用する事で、簡単にバーコードを扱う事ができます。
これらのライブラリを利用し、バーコードリーダ&メーカを作ってみます。
ライブラリ | 用途 |
---|---|
QuaggaJS | バーコードを検出します |
jQuery、Barcode Coder | バーコードを生成します |
プロジェクトを用意する
次の様にプロジェクトを作ります。
MyProject01/
├ index.html (プログラムを起動するファイルです)
├ custom.css (CSSを記述するファイルです)
├ main.js (メインのプログラムを記述するファイルです)
HTMLファイルを用意する
では、作っていきましょう。
用意したHTMLファイルには次のコードを記述します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./images/favicon.ico">
<title>QuaggaJS</title>
<!-- CSS -->
<link rel="stylesheet" href="./custom.css">
</head>
<body>
<div id="my_container">
<div id="my_inner">
<div>= QuaggaJS =</div>
<div>
<button id="my_start">Start</button>
<button id="my_stop">Stop</button>
</div>
<div id="my_quagga"></div>
<div id="my_result">***</div>
<div id="my_barcode">
<div>***</div>
</div>
</div>
</div>
<!-- JavaScript -->
<script src="//code.jquery.com/jquery-3.6.1.min.js"></script>
<script src="//unpkg.com/@ericblade/quagga2@1.7.4/dist/quagga.min.js"></script>
<script src="//cdn.jsdelivr.net/gh/mtaketani113/jquery-barcode@master/jquery-barcode.js"></script>
<script src="./main.js"></script>
</body>
</html>
HTMLでは、3つのライブラリを読み込んでいます。
(Barcode Coderは、jQueryのプラグインとして動作します)
CSSファイルを用意する
次はCSSファイルです。
こちらは特に説明することはありませんね。
/* CSS */
html, body{
width: 100%; height: 100%;
margin: 0px; padding: 0px;
}
#my_container{
width: 100%; height: 100%;
display: flex; flex-flow: wrap;
justify-content: space-around;
align-items: center;
}
#my_inner{
margin: 0px; padding: 10px 10px;
border-radius: 20px;
background-color: gray; color: white;
font-size: 2rem; text-align: center;
}
#my_quagga{
width: 320px; height: 240px;
margin: 5px; padding: 0px;
position: relative;
background-color: silver;
}
#my_quagga video{
width: 100%; height: 100%;
position: absolute;
top: 0px; left: 0px;
}
#my_quagga canvas{
width: 100%; height: 100%;
position: absolute;
top: 0px; left: 0px;
}
#my_result{
width: 100%; height: 100%;
font-size: 1rem; text-align: center;
}
#my_barcode{
width: 100%; height: 100%;
display: flex; flex-flow: wrap;
justify-content: space-around;
align-items: center;
}
JavaScriptファイルを用意する
いよいよメインの処理です。
JavaScriptファイルには次のコードを記述します。(今回の完成コードです)
console.log("main.js!!");
$(document).ready(()=>{
console.log("Ready!!");
});
$("#my_start").click(()=>{
console.log("Start!!");
// Quagga
Quagga.init({
inputStream: {
name : "Live",
type : "LiveStream",
target: document.getElementById("my_quagga")
},
decoder: {
readers: ["ean_reader"]
}
}, err=>{
if(err){
console.log(err);
return;
}
console.log("Initialization finished!!");
Quagga.start();
});
Quagga.onProcessed(result=>{
if(result == null) return;
if(typeof(result) != "object") return;
if(result.boxes == undefined) return;
const ctx = Quagga.canvas.ctx.overlay;
const canvas = Quagga.canvas.dom.overlay;
ctx.clearRect(0, 0, parseInt(canvas.width), parseInt(canvas.height));
Quagga.ImageDebug.drawPath(result.box,
{x: 0, y: 1}, ctx, {color: "blue", lineWidth: 5});
});
Quagga.onDetected(result=>{
console.log(result.codeResult.code);
$("#my_result").text(result.codeResult.code);
$("#my_barcode div").barcode(result.codeResult.code, "ean13");
});
});
$("#my_stop").click(()=>{
console.log("Stop!!");
Quagga.stop();
});
コードの解説
上記のコードについて、次の順番で解説を進めます。
- QuaggaJSの初期化
- バーコード検出処理
- 検出結果の取得とバーコード表示
1,QuaggaJSの初期化
"QuaggaJS.init()"でライブラリを初期化します。
第一引数にはコンフィグとして、主に次の設定を指定します。
ライブラリ | 用途 |
---|---|
target | キャプチャ映像を表示するID |
decoder | バーコードの種類 |
次に第二引数のコールバックが実行されます。
エラーメッセージが無い場合、"Quagga.start()"を実行します。
// Quagga
Quagga.init({
inputStream: {
name : "Live",
type : "LiveStream",
target: document.getElementById("my_quagga")// キャプチャ画像
},
decoder: {
readers: ["ean_reader"]// バーコードの種類
}
}, err=>{
if(err){
console.log(err);
return;
}
console.log("Initialization finished!!");
Quagga.start();// バーコード検知を開始する
});
2,バーコード検出処理
"QuaggaJS.onProcessed()"では、バーコードの検出結果を取得します。
"result"には解析結果が格納されますが、未検出の場合は"null"です。
"result.box"にはバーコードの矩形情報が格納されるので、
この情報を利用し、"Quagga.ImageDebug.drawPath()"で描画するだけです。
Quagga.onProcessed(result=>{
if(result == null) return;// 未検出の場合
if(typeof(result) != "object") return;
if(result.boxes == undefined) return;
const ctx = Quagga.canvas.ctx.overlay;
const canvas = Quagga.canvas.dom.overlay;
ctx.clearRect(0, 0, parseInt(canvas.width), parseInt(canvas.height));
Quagga.ImageDebug.drawPath(result.box,
{x: 0, y: 1}, ctx, {color: "blue", lineWidth: 5});// 結果を描画
});
3,検出結果の取得とバーコード表示
"Quagga.onDetected()"では具体的な検出結果を取得する事ができます。
検出結果は、"result.codeResult.code"に格納されています。
最後にこの結果を元に、"barcode()"を実行して表示します。(表示はあっさりですね)
Quagga.onDetected(result=>{
console.log(result.codeResult.code);
$("#my_result").text(result.codeResult.code);
$("#my_barcode div").barcode(result.codeResult.code, "ean13");// バーコードを表示
});
いとも簡単にバーコードメーカ&リーダが完成しました。(やりました!!)
最後に
以前、QRコードリーダ&メーカを調べていたので、「バーコードもあるのでは?」と思い立って調べてみました。(あっさり見つかりましたw)
QRコードよりもバーコードの方がより身近にあるので、応用次第でちょっとしたゲームも作れるかもしれませんね!!
ここまで読んでいただき有難うございました。
Discussion