{"_id":"@blokcert/node-red-contrib-plate-crop","_rev":"6-a7ccf60cae155b60ddcd6672211183a1","name":"@blokcert/node-red-contrib-plate-crop","dist-tags":{"latest":"2.2.0"},"versions":{"1.0.0":{"name":"@blokcert/node-red-contrib-plate-crop","version":"1.0.0","keywords":["node-red","license-plate","anpr","yolo","onnx"],"license":"MIT","_id":"@blokcert/node-red-contrib-plate-crop@1.0.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"dist":{"shasum":"bb734fd7df3dc213ad0f47372907eb9874afa74c","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-plate-crop/-/node-red-contrib-plate-crop-1.0.0.tgz","fileCount":7,"integrity":"sha512-Zb9ZRQEPOXNpY4zEhv7Yc48K26QXrSyFK/qxaY2CwCzipaymmVZk0LtXXSZAxonXi0+BvABIF2l/WBkDyXzyhA==","signatures":[{"sig":"MEUCICXayo0oHC2nMWLEpMUhCRkK9dX889NGet3kgzTm0WOUAiEAs9912ixaFNnB4L0H2q7C3SepD9Y9uSOXYAFjcjQBYH8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67518097},"engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"plate-crop":"plate-crop.js"}},"_npmVersion":"11.4.2","description":"Node-RED node：輸入車牌圖 base64，輸出裁切後車牌 base64（YOLO ONNX，自帶 onnxruntime）","directories":{},"_nodeVersion":"24.4.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-plate-crop_1.0.0_1783495644543_0.08339094076154963","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@blokcert/node-red-contrib-plate-crop","version":"1.0.2","keywords":["node-red","license-plate","anpr","yolo","onnx"],"license":"MIT","_id":"@blokcert/node-red-contrib-plate-crop@1.0.2","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"dist":{"shasum":"816c7380fee28e80cb04ba893058c77f134c64eb","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-plate-crop/-/node-red-contrib-plate-crop-1.0.2.tgz","fileCount":8,"integrity":"sha512-I4jHpInoesw+FvqNDRMET3JKG1N28PzYr5JrtAlzMIDsfKpoU4B8CZaES3FSXwfta5tP/bggJnJqRokgOUApaA==","signatures":[{"sig":"MEQCIEtGNJjtt0FhYt1SyK+zzpYINm9KrX6cJZrY6OBRcnC6AiAcubH5s6f9VDRpkdLG2aeuLmVnBpwoWUBZ9XDfTy7Oxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136041773},"engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"plate-crop":"plate-crop.js"}},"_npmVersion":"11.4.2","description":"Node-RED node：輸入車牌圖 base64，輸出裁切後車牌 base64（YOLO ONNX，自帶 onnxruntime）","directories":{},"_nodeVersion":"24.4.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-plate-crop_1.0.2_1783496443133_0.8474161748597013","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@blokcert/node-red-contrib-plate-crop","version":"1.1.0","keywords":["node-red","license-plate","anpr","yolo","onnx"],"license":"MIT","_id":"@blokcert/node-red-contrib-plate-crop@1.1.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"dist":{"shasum":"74ab6e85f0edc4f7c579c7f246c27610956536ab","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-plate-crop/-/node-red-contrib-plate-crop-1.1.0.tgz","fileCount":9,"integrity":"sha512-7bcGthm552v2xcSMu8zPSb3JqwXvgxe+Sagwss/b1ZVyIljPsf4xpiTD9efDsvGuKkiKqli3RomXDSG7ht3URw==","signatures":[{"sig":"MEUCIEH730eZnXQnND4v3GhAbXkafiFzzwm17MHtQ3Gs9fgFAiEA5uqp/B2VW3DVkgtSeuFRE3gHhv4yWLXBKRuIt5M0264=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148282235},"engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"plate-crop":"plate-crop.js"}},"_npmVersion":"11.4.2","description":"Node-RED node：輸入車牌圖 base64，輸出裁切後車牌 base64（YOLO ONNX，自帶 onnxruntime）","directories":{},"_nodeVersion":"24.4.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-plate-crop_1.1.0_1783498698174_0.35770489929649774","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@blokcert/node-red-contrib-plate-crop","version":"2.0.0","keywords":["node-red","license-plate","anpr","yolo","onnx"],"license":"MIT","_id":"@blokcert/node-red-contrib-plate-crop@2.0.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"dist":{"shasum":"b04c1b117d0b44c8183131029a3cbad17146f64e","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-plate-crop/-/node-red-contrib-plate-crop-2.0.0.tgz","fileCount":9,"integrity":"sha512-2kzQ2KJmJnft4wAEJLr0jcG79Wy63kZlbBOtji24gC55uvTjXaUU5NYckxrRr0YO22JwLlwFb/lKFOw8+RZl4Q==","signatures":[{"sig":"MEUCIQDwhUU9RsTzuumfLfQyKWZc/5gWVh0lVYBiljEBuCfVAAIgJYDXjLLSbEE+2MPpYvKvbZiBgZAcsU/MIwctNZ0i5qg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148284316},"engines":{"node":">=18"},"scripts":{"test":"node --test"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"plate-crop":"plate-crop.js"}},"_npmVersion":"11.4.2","description":"Node-RED node：輸入車牌圖 base64，輸出裁切後車牌 base64（YOLO ONNX，自帶 onnxruntime）","directories":{},"_nodeVersion":"24.4.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-plate-crop_2.0.0_1783502374125_0.21654301813305254","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@blokcert/node-red-contrib-plate-crop","version":"2.1.0","keywords":["node-red","license-plate","anpr","yolo","onnx"],"license":"MIT","_id":"@blokcert/node-red-contrib-plate-crop@2.1.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"dist":{"shasum":"4d540e86d50e8089ca2ddb58139afee3533a3396","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-plate-crop/-/node-red-contrib-plate-crop-2.1.0.tgz","fileCount":9,"integrity":"sha512-bmpbPx3XBE6OS50YxZUem8TN9F1adNmYhfbWQg1ud7bbmSH9knqFiA8mleRfCToP1kjPgvqQ7l8x2lpc0xfxSg==","signatures":[{"sig":"MEUCIADicwoxQYkypJYtiIJGxZTZXBXW6MLfDyKQ7Xht44DjAiEA1HmH3G1eW5tFLfial3eRj9Z9ZIT9NqxwXzdu67ggarg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79763847},"engines":{"node":">=18"},"gitHead":"69489048bb0398fa3b1843eca0257cb63881bd1b","scripts":{"test":"node --test","postinstall":"node lib/assemble.js"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"plate-crop":"plate-crop.js"}},"_npmVersion":"11.4.2","description":"Node-RED node：輸入車牌圖（Buffer/base64），輸出裁切後車牌（YOLO ONNX，自帶 onnxruntime 與模型）","directories":{},"_nodeVersion":"24.4.1","dependencies":{"@blokcert/plate-crop-fp32-p0":"^1.0.0","@blokcert/plate-crop-fp32-p1":"^1.0.0","@blokcert/plate-crop-fp32-p2":"^1.0.0","@blokcert/plate-crop-fp32-p3":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-plate-crop_2.1.0_1783563942554_0.4551783325754222","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@blokcert/node-red-contrib-plate-crop","version":"2.2.0","description":"Node-RED node：輸入車牌圖（Buffer/base64），輸出裁切後車牌（YOLO ONNX，自帶 onnxruntime 與模型）","keywords":["node-red","license-plate","anpr","yolo","onnx"],"license":"MIT","publishConfig":{"access":"public"},"node-red":{"nodes":{"plate-crop":"plate-crop.js"}},"scripts":{"test":"node --test","postinstall":"node lib/assemble.js"},"dependencies":{"@blokcert/plate-crop-fp32-p0":"^1.0.0","@blokcert/plate-crop-fp32-p1":"^1.0.0","@blokcert/plate-crop-fp32-p2":"^1.0.0","@blokcert/plate-crop-fp32-p3":"^1.0.0"},"engines":{"node":">=18"},"_id":"@blokcert/node-red-contrib-plate-crop@2.2.0","gitHead":"1f1b984bb58170314218976647385b1819bab675","_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-uYK8MzXeSLxy8MuqsvJ4NcJySZT0rstxAMOw+vp9crRj9vNdmj4t8u7su0N4H/f9lQi8orSJ1yxPyu0dJMtQ6w==","shasum":"23d542770e56083b4c4abd67f2dff28906f10ac5","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-plate-crop/-/node-red-contrib-plate-crop-2.2.0.tgz","fileCount":9,"unpackedSize":80198570,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID1QvJJuMBlm42hGDVRioswIGy7se0yhoicHeJYA1d3gAiAnEvziw1stcqCXoHNRYs0SvdWZxY9J6CwBWu4ZxruISQ=="}]},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"directories":{},"maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-red-contrib-plate-crop_2.2.0_1783574557363_0.6324238691743389"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-08T07:27:24.443Z","modified":"2026-07-09T05:22:38.059Z","1.0.0":"2026-07-08T07:27:24.955Z","1.0.2":"2026-07-08T07:40:44.043Z","1.1.0":"2026-07-08T08:18:19.280Z","2.0.0":"2026-07-08T09:19:35.150Z","2.1.0":"2026-07-09T02:25:43.114Z","2.2.0":"2026-07-09T05:22:37.962Z"},"license":"MIT","keywords":["node-red","license-plate","anpr","yolo","onnx"],"description":"Node-RED node：輸入車牌圖（Buffer/base64），輸出裁切後車牌（YOLO ONNX，自帶 onnxruntime 與模型）","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"readme":"# @blokcert/node-red-contrib-plate-crop\n\nNode-RED 節點：輸入車牌圖片（Buffer 或 base64），偵測並裁切車牌，輸出裁切後的車牌圖。\n\n底層呼叫內附的 `yolo-plate` binary（Go + YOLO ONNX，binary 自帶 onnxruntime，目標機免安裝）。\n\n## 安裝\n\nNode-RED 編輯器 → 右上選單 → **節點管理（Manage palette）** → 安裝 → 搜尋\n`@blokcert/node-red-contrib-plate-crop`；或用指令：\n\n```bash\ncd ~/.node-red\nnpm install @blokcert/node-red-contrib-plate-crop\n```\n\n安裝完成後重啟 Node-RED，編輯器的 **function** 類別下會出現「車牌裁切」節點。\n\n> 已**內附兩個**車牌偵測模型，節點可切換，無需另外準備：\n> - **精準**（fp32，~260MB）：框最貼，推論約 1 秒。因 npm 單套件大小限制，\n>   以 4 個資料套件（`@blokcert/plate-crop-fp32-p0`~`p3`）分塊發佈，\n>   安裝時自動拼裝成 `models/plate-fp32.onnx`（含 sha256 校驗；若安裝時被跳過，首次使用會自動補拼）。\n> - **快速**（`models/plate-fast.onnx`，YOLOv8n，~12MB）：推論約 0.15 秒，框略鬆。\n\n## 使用\n\n1. 拉「車牌裁切」節點到流程。\n2. 雙擊設定：選**模型**（精準／快速／自訂路徑），並可指定**輸入／輸出屬性**與**輸出格式**。\n3. 上游把圖片放到**輸入屬性**（預設 `msg.payload`）——**Buffer**（原始 PNG/JPEG 位元組）\n   或 base64 字串（可含 `data:image/...;base64,` 前綴）皆可。\n4. 結果寫入**輸出屬性**（預設 `msg.payload`）：\n   - 裁切車牌 PNG，依**輸出格式**為 **Buffer**（預設）或 base64 字串\n   - 勾「全部車牌」：陣列\n   - 未偵測到車牌：輸出**原本圖片**（節點狀態顯示「無車牌」）\n\n### 設定項\n\n| 項目 | 說明 |\n|------|------|\n| 模型 | 內附「精準」／「快速」，或選「自訂路徑」填自己的 `.onnx` |\n| 輸入屬性 | 讀圖片（Buffer 或 base64）的 msg 屬性，預設 `payload`，支援巢狀如 `payload.image` |\n| 輸出屬性 | 寫結果的 msg 屬性，預設 `payload`，支援巢狀如 `result.plate` |\n| 輸出格式 | **Buffer**（預設）或 base64 字串 |\n| 信心門檻 | 對應 `-conf`，預設 0.25 |\n| 外擴像素 | 對應 `-pad`，裁切外擴，預設 0 |\n| 解析度 | 對應 `-imgsz`，留空＝模型預設(通常640)；填 960/1280 提升偵測信心（較慢） |\n| 遮罩屬性 | 讀遮罩多邊形的 msg 屬性，預設 `cropPath`；msg 沒有該屬性時不遮罩 |\n| 銳利化 | unsharp mask 的 sigma（建議 1-10），留空關閉 |\n| 自動對比 | 勾選啟用 1%~99% 亮度百分位拉伸 |\n| 全部車牌 | 對應 `-all`，勾選輸出所有車牌 |\n| binary 路徑 | 留空＝自動依平台選內附 binary |\n\n### 前處理（遮罩／銳利化／自動對比）\n\n偵測前依序套用：**遮罩 → 銳利化 → 自動對比**，裁切也從處理後的圖取出，\n可取代上游 sharp/canvas 的 ROI 前處理 function 節點。\n\n遮罩多邊形放在 `msg.cropPath`（屬性名可改），格式 `[{\"x\":..,\"y\":..},...]`\n（陣列或 JSON 字串皆可），多邊形**外**的區域塗黑（等效 sharp 的 `dest-in` 合成）：\n\n```js\n// 上游 function 節點（每台相機不同 ROI）\nmsg.cropPath = global.get(\"cameras.cp\" + msg.snap.cameraId + \".cropPath\");\nreturn msg;\n```\n\n> **v2.2.0**：新增前處理（遮罩／銳利化／自動對比）；無車牌時輸出原本圖片（原為 `null`）。\n> **v2.1.0**：內附「精準」模型由 int8 換回 **fp32**（快 ~2.3 倍、框相同），以分塊套件自動拼裝。\n> **v2.0.0 重大變更**：輸出預設由 base64 字串改為 **Buffer**；要維持舊行為請把「輸出格式」設為 base64。\n> 支援模型格式新增 YOLO26/YOLOv10 端到端輸出（`[1,300,6]`）。\n\n## 支援平台\n\n內附 binary：`linux-x64`（一般 x86 伺服器/PC，Node-RED 部署用）、`darwin-arm64`（mac 本機開發/測試）。\n兩者皆自帶 onnxruntime 1.26，目標機免安裝。\n其他平台請自行編譯 `yolo-plate`（見上層專案），並在節點設定「binary 路徑」指定。\n\n## 測試\n\n```bash\nnpm test        # 需要上層 plate.onnx 與一張範例圖，可用環境變數覆寫：\nPLATE_MODEL=/path/plate.onnx PLATE_IMG=/path/img.jpg npm test\n```\n","readmeFilename":"README.md"}