ホームページ  >  記事  >  ウェブフロントエンド  >  Node.jsバーコード認識プログラム構築アイデアを詳しく解説

Node.jsバーコード認識プログラム構築アイデアを詳しく解説

PHPz
PHPzオリジナル
2016-05-16 15:15:551697ブラウズ

この記事では、Dynamsoft Barcode Reader SDK をカプセル化し、Windows、Linux、および OS X をサポートするカスタム Node モジュールを構築する非常に簡単な方法を示し、これを統合する方法を示します。モジュールはオンライン バーコードを実装します。読書アプリ。

JavaScript を使用して複雑なサーバーサイド Web アプリケーションを開発することがますます便利になっているため、Web サイトの構築に Node を選択する Web 開発者がますます増えています。さまざまなプラットフォームで Node の機能を拡張するために、Node では開発者が C/C++ を使用して拡張機能を作成できるようにしています。

概要

Dynamsoft Barcode Reader は、Windows、Linux、および OS X 用のバーコード解析用の C/C++ 共有ライブラリを提供します。その最大の利点は、C/C++ API を拡張機能としてカプセル化できる限り、JavaScript、Python、Java、Ruby、PHP などのさまざまな高レベル プログラミング言語に適していることです。使用済み。プログラミング言語に関係なく、バーコードを解析するのに必要なコードは数行だけです。

1D/2D バーコード タイプをサポート

Code 39、Code 93、Code 128、Codabar、Interleaved 2 of 5、EAN-8、EAN-13、UPC- A、UPC-E、Industrial 2 of 5
QRCode
DataMatrix
PDF417

サポートされる画像タイプ

BMP、JPEG、PNG、GIF 、TIFF、PDF

ランタイム環境

Windows、Linux、Mac
Node v5.5.0

Node.js バーコード拡張機能

Node.js は、C/C++ で記述された動的にリンクされた共有オブジェクトを拡張します。このテクノロジーに慣れていない場合は、公式チュートリアルを読んでください。

拡張機能を作成します

dbr.cc という名前のファイルを作成し、メソッド DecodeFile を追加します:

#include#include#include "If_DBR.h"
#include "BarcodeFormat.h"
#include "BarcodeStructs.h"
#include "ErrorCode.h"
using namespace v8;
void DecodeFile(const FunctionCallbackInfo& args) {
}
void Init(Handleexports) {
NODE_SET_METHOD(exports, "decodeFile", DecodeFile);
}
NODE_MODULE(dbr, Init)

Parse JavaScript から渡されるパラメータ

Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
String::Utf8Value license(args[0]->ToString());
String::Utf8Value fileName(args[1]->ToString());
char *pFileName = *fileName;
char *pszLicense = *license;
__int64 llFormat = args[2]->IntegerValue();
Localcb = Local::Cast(args[3]);

バーコード画像を解析します:

int iMaxCount = 0x7FFFFFFF;
ReaderOptions ro = {0};
pBarcodeResultArray pResults = NULL;
ro.llBarcodeFormat = llFormat;
ro.iMaxBarcodesNumPerPage = iMaxCount;
DBR_InitLicense(pszLicense);
// Decode barcode image
int ret = DBR_DecodeFile(pFileName, &ro, &pResults);

は変換しますバーコードを文字列に変換:

const char * GetFormatStr(__int64 format)
{
if (format == CODE_39)
return "CODE_39";
if (format == CODE_128)
return "CODE_128";
if (format == CODE_93)
return "CODE_93";
if (format == CODABAR)
return "CODABAR";
if (format == ITF)
return "ITF";
if (format == UPC_A)
return "UPC_A";
if (format == UPC_E)
return "UPC_E";
if (format == EAN_13)
return "EAN_13";
if (format == EAN_8)
return "EAN_8";
if (format == INDUSTRIAL_25)
return "INDUSTRIAL_25";
if (format == QR_CODE)
return "QR_CODE";
if (format == PDF417)
return "PDF417";
if (format == DATAMATRIX)
return "DATAMATRIX";

return "UNKNOWN";
}

結果を v8 オブジェクトに変換:

LocalbarcodeResults = Array::New(isolate);
for (int i = 0; i < count; i++)
{
tmp = ppBarcodes[i];
Localresult = Object::New(isolate);
result->Set(String::NewFromUtf8(isolate, "format"), String::NewFromUtf8(isolate, GetFormatStr(tmp->llFormat)));
result->Set(String::NewFromUtf8(isolate, "value"), String::NewFromUtf8(isolate, tmp->pBarcodeData));
barcodeResults->Set(Number::New(isolate, i), result);
}

ビルド拡張機能

要件:

Windows: DBR for Windows、visual Studio、Python v2.7 がインストールされている必要があります。

Linux: インストールLinux 用 DBR。

Mac: DBR for Mac と Xcode をインストールします。

node-gyp をインストールします:

npm install -g node-gyp

作成マルチプラットフォーム コンパイル用の binding.gyp:

{
"targets": [
{
&#39;target_name&#39;: "dbr",
&#39;sources&#39;: [ "dbr.cc" ],
&#39;conditions&#39;: [
[&#39;OS=="linux"&#39;, {
&#39;defines&#39;: [
&#39;LINUX_DBR&#39;,
],
&#39;include_dirs&#39;: [
"/home/xiao/Dynamsoft/BarcodeReader4.0/Include"
],
&#39;libraries&#39;: [
"-lDynamsoftBarcodeReaderx64", "-L/home/xiao/Dynamsoft/BarcodeReader4.0/Redist"
],
&#39;copies&#39;: [
{
&#39;destination&#39;: &#39;build/Release/&#39;,
&#39;files&#39;: [
&#39;/home/xiao/Dynamsoft/BarcodeReader4.0/Redist/libDynamsoftBarcodeReaderx64.so&#39;
]
}]
}],
[&#39;OS=="win"&#39;, {
&#39;defines&#39;: [
&#39;WINDOWS_DBR&#39;,
],
&#39;include_dirs&#39;: [
"F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Include"
],
&#39;libraries&#39;: [
"-lF:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Lib/DBRx64.lib"
],
&#39;copies&#39;: [
{
&#39;destination&#39;: &#39;build/Release/&#39;,
&#39;files&#39;: [
&#39;F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Redist/DynamsoftBarcodeReaderx64.dll&#39;
]
}]
}],
[&#39;OS=="mac"&#39;, {
&#39;defines&#39;: [
&#39;MAC_DBR&#39;,
],
&#39;include_dirs&#39; : [
"/Applications/Dynamsoft/Barcode/ Reader/ 4.1/Include"
],
&#39;libraries&#39;: [
"-lDynamsoftBarcodeReader"
]
}]
]
}
]
}

DRB インストール ディレクトリをマシン上の実際のディレクトリに置き換えます。

ビルド環境を構成します:

node-gyp configure

Mac では、次のエラーが発生します:

エラー: xcode-select: エラー: ツール 'xcodebuild' には Xcode が必要ですが、アクティブな開発者ディレクトリ '/Library/Developer/CommandLineTools' はコマンド ライン ツール インスタンスです

解決策は次のとおりです:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

ビルド プロジェクト:

node-gyp build

オンライン バーコード解析

Node のバーコード解析モジュールの構築に成功し、簡単なバーコード読み取りアプリケーションを作成できるようになりました。

Express と Formidable をインストールします:

npm install Express
npm install formidable

Express を使用して簡単なアプリケーションを作成します:

var formidable = require(&#39;formidable&#39;);
var util = require(&#39;util&#39;);
var express = require(&#39;express&#39;);
var fs = require(&#39;fs&#39;);
var app = express();
var path = require(&#39;path&#39;);
var dbr = require(&#39;./build/Release/dbr&#39;);
var http = require(&#39;http&#39;);
fs.readFile(&#39;./license.txt&#39;, &#39;utf8&#39;, function(err, data) {
app.use(express.static(__dirname));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS");
res.header("Access-Control-Allow-Headers", "X-Requested-With, content-type");
res.header("Access-Control-Allow-Credentials", true);
next();
});
var server = app.listen(2016, function() {
var host = server.address().address;
var port = server.address().port;
console.log(&#39;listening at http://%s:%s&#39;, host, port);
});
});

Formidable を使用してフォームから画像データを抽出します:

app.post(&#39;/upload&#39;, function(req, res) {
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
var dir = &#39;uploads&#39;;
fs.mkdir(dir, function(err) {
var flag = fields.uploadFlag;
var barcodeType = parseInt(fields.barcodetype);
console.log(&#39;flag: &#39; + flag);
if (flag === &#39;1&#39;) { // read barcode image file
fs.readFile(files.fileToUpload.path, function(err, data) {
// save file from temp dir to new dir
var fileName = path.join(__dirname, dir, files.fileToUpload.name);
console.log(fileName);
fs.writeFile(fileName, data, function(err) {
if (err) throw err;

});
});
} else { // read barcode image url
var tmpFileName = path.join(__dirname, dir, &#39;tmp.jpg&#39;);
var tmp = fs.createWriteStream(tmpFileName);
var url = fields.fileToDownload;
console.log(&#39;url: &#39; + url);
http.get(url, function(response) {
response.pipe(tmp);
tmp.on(&#39;finish&#39;, function() {
tmp.close(function() {

});
});
});
}
});
});
});

画像ファイルを解析するためにバーコード モジュールをインポートします:

decodeBarcode(res, License, tmpFileName, barcodeType);

アプリケーションを実行します:

node server.js

http://localhost:2016/index.htm:

にアクセスします。上記は編集者が紹介した Node.js バーコード認識プログラム構築アイデアの詳細な説明です。参考になれば幸いです。みんな。

【おすすめ関連チュートリアル】

1. JavaScript ビデオチュートリアル
2. JavaScript オンラインマニュアル
3.ブートストラップ チュートリアル

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。