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

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

May 16, 2016 pm 03:15 PM
node.js

この記事では、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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

最適な Node.js Docker イメージを選択する方法について話しましょう。 最適な Node.js Docker イメージを選択する方法について話しましょう。 Dec 13, 2022 pm 08:00 PM

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Nov 16, 2022 pm 08:34 PM

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Nov 29, 2022 pm 08:44 PM

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

Nodeのイベントループについて話しましょう Nodeのイベントループについて話しましょう Apr 11, 2023 pm 07:08 PM

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

ノードがnpmコマンドを使用できない場合はどうすればよいですか? ノードがnpmコマンドを使用できない場合はどうすればよいですか? Feb 08, 2023 am 10:09 AM

ノードが npm コマンドを使用できない理由は、環境変数が正しく設定されていないためです。解決策は次のとおりです: 1. 「システムのプロパティ」を開きます; 2. 「環境変数」->「システム変数」を見つけて、環境を編集します。変数; 3.nodejs フォルダーの場所を見つけます; 4.「OK」をクリックします。

See all articles