Node.jsに基づくバーコード認識プログラムを構築する.


この記事では、Windows、Linux、OS XをサポートするDynampsoft Barrcorde Reader SDKをカプセル化し、このモジュールをどのように統合してオンラインのバーコード読み取りアプリケーションを実現するかを実証する非常に簡単な方法を示します.
JavaScriptを使って複雑なサーバ端末のWebアプリケーションを開発するために、Nodeを選んでウェブサイトを構築するWeb開発者が増えています.異なるプラットフォームの下でNodeの機能を拡張するために、Nodeは開発者がC/C++を使って拡張を作成することを許可する.
紹介する
Dynampsoft Barcode ReaderはWindows、Linux、OS Xにバーコード解析のC/C++共有ライブラリを提供します.その最大の利点は、JavaScript、Python、Java、Ruby、PHPなど、多種類の高級プログラミング言語に適用されます.C/C++APIを一つの拡張としてカプセル化して使えばいいです.どんなプログラミング言語でも、結局は簡単なコードだけでバーコードの解析ができます.
1 D/2 Dバーコードタイプ対応
  • Code 39、Code 93、Code 128、Codabar、Interleaved 2 of 5、EAN-8、EAN-13、UC-A、UPC-E、Industral 2 of 5
  • QRCode
  • Data Matrix
  • PDF 177
  • 画像のタイプをサポートします.
  • BMP、JPEG、PNG、GIF、TIFF、PDF
  • 実行環境
  • Windows、Linux&Mac
  • Node
  • Node.jsバーコード拡張
    ノード.js拡張は、C/C++で作成された動的リンクの共有オブジェクトを使用する.この分野の技術に触れていなければ、読むことができます. 公式教程 .
    拡張機能を作成
    dbcというファイルを作成し、メソッドDecodeFileを追加します.
    #include 
    #include 
    #include "If_DBR.h"
    #include "BarcodeFormat.h"
    #include "BarcodeStructs.h"
    #include "ErrorCode.h"
    
    using namespace v8;
    
    void DecodeFile(const FunctionCallbackInfo& args) {
    
    }        //                   :619586920       ,      
    
    void Init(Handle exports) {
        NODE_SET_METHOD(exports, "decodeFile", DecodeFile);
    }
    
    NODE_MODULE(dbr, Init)
    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();
    Local cb = 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";
    }
    結果をv 8オブジェクトに変換:
    Local barcodeResults = Array::New(isolate);
    
    for (int i = 0; i  result = 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);
    }           //                   :619586920       ,      
    拡張機能を構築
    要求:
  • Windows:インストールが必要です. DBR for Windows,Visual Studio,and Python.
  • Linux:インストール DBR for Linux.
  • Mac:インストール DBR for Mac 和 Xcode.
  • node-gypをインストールする:
    npm install -g node-gyp
    作成 binding.gyp マルチプラットフォームのコンパイルに使用します.
    {
      "targets": [
        {
          'target_name': "dbr",
          'sources': [ "dbr.cc" ],
          'conditions': [
              ['OS=="linux"', {
                'defines': [
                  'LINUX_DBR',
                ],
                'include_dirs': [
                    "/home/xiao/Dynamsoft/BarcodeReader4.0/Include"
                ],
                'libraries': [
                    "-lDynamsoftBarcodeReaderx64", "-L/home/xiao/Dynamsoft/BarcodeReader4.0/Redist"
                ],
                'copies': [
                {
                  'destination': 'build/Release/',
                  'files': [
                    '/home/xiao/Dynamsoft/BarcodeReader4.0/Redist/libDynamsoftBarcodeReaderx64.so'
                  ]
                }]
              }],
              ['OS=="win"', {
                'defines': [
                  'WINDOWS_DBR',
                ],
                'include_dirs': [
                    "F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Include"
                ],
                'libraries': [
                    "-lF:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Lib/DBRx64.lib"
                ],
                'copies': [
                {
                  'destination': 'build/Release/',
                  'files': [
                    'F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Redist/DynamsoftBarcodeReaderx64.dll'
                  ]
                }]
              }],
              ['OS=="mac"', {
                'defines': [
                  'MAC_DBR',
                ],
                'include_dirs' : [
                    "/Applications/Dynamsoft/Barcode/ Reader/ 4.1/Include"
                ],
                'libraries': [
                    "-lDynamsoftBarcodeReader"
                ]
              }]
          ]
        }                 //                   :619586920       ,      
      ]
    }
    DRBインストールディレクトリをあなたのマシンの実際のディレクトリに置き換えます.
    構成環境:
    node-gyp configure
    Macで下記のエラーに遭遇できます.
    error: xcodeselect: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
    解決策は:
    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('formidable');
    var util = require('util');
    var express = require('express');
    var fs = require('fs');
    var app = express();
    var path = require('path');
    var dbr = require('./build/Release/dbr');
    var http = require('http');
    
    fs.readFile('./license.txt', 'utf8', 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(2019, function() {
        var host = server.address().address;
        var port = server.address().port;
        console.log('listening at http://%s:%s', host, port);
      });
    });
    使用 Formidable フォームから画像データを抽出します.
    app.post('/upload', function(req, res) {
        var form = new formidable.IncomingForm();
        form.parse(req, function(err, fields, files) {
          var dir = 'uploads';
    
          fs.mkdir(dir, function(err) {
            var flag = fields.uploadFlag;
            var barcodeType = parseInt(fields.barcodetype);
    
            console.log('flag: ' + flag);
    
            if (flag === '1') { // 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, 'tmp.jpg');
              var tmp = fs.createWriteStream(tmpFileName);
              var url = fields.fileToDownload;
              console.log('url: ' + url);
              http.get(url, function(response) {
                response.pipe(tmp);
                tmp.on('finish', function() {
                  tmp.close(function() {
    
                  });
                });
              });
            }                 //                   :619586920       ,      
          });
    
        });
      });
    バーコードモジュールを導入して画像ファイルを解析します.
    decodeBarcode(res, license, tmpFileName, barcodeType);
    実行アプリケーション:
    node server.js
    アクセス http://localhost:2019/index.htm:
    Windows、Linux、Macの下でバーコード読み取りアプリケーションを構築するなら、直接にサンプルプログラムをダウンロードすることができます. Dynamsoft Barcode Readerは直接問い合わせもできます[email protected].
    今回は無料の学習圏を紹介します.中はモバイルアプリの開発、css、html、webpack、vue node anglar及び面接リソースなどをまとめています.資料を入手する