ultimateALPR-SDK
ultimateALPR-SDK 是一款基于深度学习的高性能自动车牌识别(ANPR/ALPR)开源工具,旨在为各类硬件提供极速且精准的车牌识别解决方案。它有效解决了传统识别方案依赖昂贵专用 GPU 或云端计算导致的成本高、延迟大及隐私风险等问题,让完整的智能交通系统(ITS)功能得以在摄像头等终端设备上离线运行。
该工具非常适合嵌入式开发者、计算机视觉研究人员以及需要构建低成本交通监控系统的工程师使用。其核心亮点在于卓越的跨平台适应能力与极致的优化效率:不仅支持 Linux、Windows、Android 等多种操作系统,还能在 ARM、x86 架构以及 NVIDIA Jetson、树莓派等资源受限设备上流畅运行。通过利用 SIMD ARM NEON 优化、定点数学运算及多线程技术,ultimateALPR-SDK 甚至能在低价位 ARM 设备上实现高达 64fps 的识别速度。此外,它还集成了夜间图像增强、车辆颜色识别、车型判断及车速估算等高级功能,并兼容 TensorFlow、TensorRT、OpenVINO 等多种主流推理框架,提供 C++、Python、Java 等丰富的开发接口,是打造高效端侧视觉应用的理想选择。
使用场景
某智慧停车运营商计划在地下车库入口部署基于廉价 ARM 开发板(如 Raspberry Pi 或 Jetson Nano)的本地化车牌识别系统,以替代昂贵的高性能服务器方案。
没有 ultimateALPR-SDK 时
- 硬件成本高昂:传统算法在低算力设备上运行缓慢,被迫采购配备独立 GPU 的工控机,导致单点部署成本激增。
- 夜间识别率低:车库入口光线昏暗,普通开源库缺乏专门的夜视图像增强(IENV)功能,导致大量车牌无法识别或误识。
- 依赖云端延迟大:为弥补本地算力不足,需将视频流上传至云端处理,不仅产生持续带宽费用,还因网络波动造成开闸延迟。
- 多语种支持困难:面对包含中文、韩文等多字符车牌时,现有方案往往需要针对不同地区维护多套模型,集成复杂度极高。
使用 ultimateALPR-SDK 后
- 边缘设备高性能运行:利用其针对 ARM NEON 指令集的极致优化,在百元级开发板上即可实现 64fps 的实时识别,无需额外 GPU。
- 全天候精准识别:内置的夜视图像增强技术自动优化暗光画面,结合深度学习模型,显著提升夜间及逆光环境下的车牌捕获率。
- 纯本地化处理:所有计算均在设备端完成,彻底消除云端依赖,既节省了带宽与维护成本,又实现了毫秒级开闸响应。
- 一站式多字符支持:原生支持拉丁、中文、韩文等多字符集,一套 SDK 即可覆盖全球不同地区的车牌识别需求,大幅简化开发流程。
ultimateALPR-SDK 通过将高性能深度学习推理下沉至低成本边缘设备,帮助企业在零云端依赖的前提下,构建了低成本、高实时且全天候可靠的智能交通系统。
运行环境要求
- Android
- Linux (包括 Raspbian OS)
- Windows
- NVIDIA Jetson
- 非必需
- 支持通过 CUDA、NVIDIA TensorRT 和 Intel OpenVINO 进行加速
- 在高端 NVIDIA GPU (如 Tesla V100) 上性能最佳,但引擎设计为可在纯 CPU (利用 SIMD ARM NEON 优化) 上运行,无需专用 GPU
未说明

快速开始
-
- Android
- 示例应用
- 基准测试 (Java)
- VideoParallel (Java)
- VideoSequential (Java)
- ImageSnap (Java)
- 试用示例
- 将SDK添加到您的项目
- 使用Java API
- 示例应用
- Android
支持的语言(API):C++、C#、Java和Python
关键词: 夜视图像增强 (IENV)、车牌识别 (LPR)、车牌国家/地区识别 (LPCI)、车辆颜色识别 (VCR)、车辆品牌型号识别 (VMMR)、车辆车身样式识别 (VBSR)、车辆方向跟踪 (VDT) 和 车辆速度估计 (VSE)
您是否见过基于深度学习的[ANPR/ALPR(自动车牌识别)]引擎在99美元的ARM设备上以64fps运行(Khadas VIM3,720p视频分辨率)?
UltimateALPR 是市场上最快的ANPR/ALPR实现。速度快固然重要,但准确度才是关键。
我们采用最先进的深度学习技术,提供无与伦比的准确性和精度。相比之下,它比OpenALPR在Android上的实现快33倍。(更多信息请参阅基准测试部分)。
无需专用或独立的GPU,所有计算均在CPU上完成,并结合了SIMD ARM NEON优化、定点数学运算和多线程处理。这为在摄像头端直接运行功能齐全的[ITS(智能交通系统)]解决方案打开了大门,而无需依赖云端。能够在设备端运行所有ITS应用,将显著降低此类系统的采购、部署和维护成本。有关如何降低成本的详细信息,请参阅基于设备与基于云的解决方案一节。
得益于CUDA、NVIDIA TensorRT以及Intel OpenVINO,该代码可在CPU、GPU、VPU和FPGA上加速运行。
除了车牌识别 (LPR)之外,我们还支持夜视图像增强 (IENV)、车牌国家/地区识别 (LPCI)、车辆颜色识别 (VCR)、车辆品牌型号识别 (VMMR)、车辆车身样式识别 (VBSR)、车辆方向跟踪 (VDT)以及车辆速度估计 (VSE)。
在高端NVIDIA GPU(如Tesla V100)上,帧率可达315 fps,即每次推理仅需3.17毫秒。而在高端CPU(如Intel Xeon)上,得益于OpenVINO,最大帧率可达237 fps。而在低端CPU(如Raspberry Pi 4)上,平均帧率约为12 fps。
不妨亲自体验我们的实现。无需注册、许可证密钥或互联网连接,只需克隆代码并开始编码和测试即可。所有处理都在本地设备上完成,数据不会离开您的计算机。此处发布的代码附带大量现成的示例,适用于Android、树莓派、Linux和Windows,帮助您轻松入门。
您还可以查看我们的在线基于云的实现(无需注册),在开始使用SDK之前先了解其准确性和精度。
请查阅完整文档:https://www.doubango.org/SDKs/anpr/docs/
入门
该SDK支持多种平台,并提供对多种编程语言的支持,但接下来的部分将重点介绍Android以及树莓派、Linux和Windows。
Android
以下内容主要针对Android平台及Java API。
示例应用(Android)
源代码包含4个Android示例应用:基准测试、VideoParallel、VideoSequential和ImageSnap。
基准测试(Android)
此应用程序用于检查一切是否正常运行,并确保其速度达到预期。通过该应用可以查看最大帧率信息(Intel Xeon 上为 237fps,Khadas VIM3 上为 64fps,树莓派 4 上为 12fps)。它是一个开源项目,无需注册或许可证密钥。
VideoParallel(Android)
任何希望在其产品中集成 ultimateALPR 的开发者都应将此应用用作参考代码。它展示了如何使用摄像头的实时视频流进行车牌的实时检测与识别。有关并行模式的更多信息,请参阅 并行与串行处理章节。
VideoSequential(Android)
与 VideoParallel 相同,但以串行模式运行,因此速度较慢。提供此应用是为了便于比较并行与串行两种模式。
ImageSnap(Android)
此应用会读取并显示来自摄像头的实时视频流,但仅在需要时从视频流中识别一张图像。
在 Android 上试用示例应用
要在 Android 上试用示例应用:
打开 Android Studio,选择“打开现有 Android Studio 项目”。

导航到 ultimateALPR-SDK/samples,选择 android 文件夹并点击 确定。

选择您想要试用的示例(例如 videoparallel),然后点击“运行”。为了获得更好的体验,请确保设备处于 横屏模式。

将 SDK 添加到您的项目(Android)
SDK 以 Android Studio 模块的形式分发,您可以将其作为引用添加,也可以构建它并将 AAR 文件添加到您的项目中。不过,最简单的方法是直接包含源代码来添加 SDK。
在您的 build.gradle 文件中添加:
android {
# 这是需要添加到 "android { } " 部分的代码块
sourceSets {
main {
jniLibs.srcDirs += ['path-to-your-ultimateALPR-SDK/binaries/android/jniLibs']
java.srcDirs += ['path-to-your-ultimateALPR-SDK/java/android']
assets.srcDirs += ['path-to-your-ultimateALPR-SDK/assets/models']
}
}
}
使用 Java API(Android)
使用该 API 并不困难,因为它只有三个有用的方法:init、process 和 deInit。
C++ API 的定义请参见 此处。
import org.doubango.ultimateAlpr.Sdk.ULTALPR_SDK_IMAGE_TYPE;
import org.doubango.ultimateAlpr.Sdk.UltAlprSdkEngine;
import org.doubango.ultimateAlpr.Sdk.UltAlprSdkParallelDeliveryCallback;
import org.doubango.ultimateAlpr.Sdk.UltAlprSdkResult;
final static String CONFIG = "{" +
"\"debug_level\": \"info\"," +
"\"gpgpu_enabled\": true," +
"\"openvino_enabled\": true," +
"\"openvino_device\": \"CPU\"," +
"\"detect_minscore\": 0.1," +
"\"detect_quantization_enabled\": true," +
"\"pyramidal_search_enabled\": true," +
"\"pyramidal_search_sensitivity\": 0.28," +
"\"pyramidal_search_minscore\": 0.5," +
"\"pyramidal_search_quantization_enabled\": true," +
"\"klass_lpci_enabled\": true," +
"\"klass_vcr_enabled\": true," +
"\"klass_vmmr_enabled\": true," +
"\"recogn_score_type\": \"min\"," +
"\"recogn_minscore\": 0.3," +
"\"recogn_rectify_enabled\": false," +
"\"recogn_quantization_enabled\": true" +
"}";
/**
* 并行回调函数,用于通知新结果。
* 此回调将在调用 process 函数后几毫秒内(即下一帧尚未完全处理之前)被调用。
*/
static class MyUltAlprSdkParallelDeliveryCallback extends UltAlprSdkParallelDeliveryCallback {
@Override
public void onNewResult(UltAlprSdkResult result) { }
}
final MyUltAlprSdkParallelDeliveryCallback mCallback = new MyUltAlprSdkParallelDeliveryCallback(); // 设置为 null 以禁用并行模式
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化引擎
assert UltAlprSdkEngine.init(
getAssets(),
CONFIG,
mCallback
).isOK();
}
// 摄像头监听器:https://developer.android.com/reference/android/media/ImageReader.OnImageAvailableListener
final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
try {
final Image image = reader.acquireLatestImage();
if (image == null) {
return;
}
// ANPR/ALPR 识别
final Image.Plane[] planes = image.getPlanes();
final UltAlprSdkResult result = UltAlprSdkEngine.process(
ULTALPR_SDK_IMAGE_TYPE.ULTALPR_SDK_IMAGE_TYPE_YUV420P,
planes[0].getBuffer(),
planes[1].getBuffer(),
planes[2].getBuffer(),
image.getWidth(),
image.getHeight(),
planes[0].getRowStride(),
planes[1].ROWStride(),
planes[2].ROWStride(),
planes[1].getPixelStride()
);
assert result.isOK();
image.close();
} catch (final Exception e) {
e.printStackTrace();
}
}
};
@Override
public void onDestroy() {
// 反初始化引擎
assert UltAlprSdkEngine.deInit().isOK();
super.onDestroy();
}
再次提醒,有关更多信息,请参阅适用于 Android、树莓派、Linux 和 Windows 的示例应用,以及完整的 文档。
树莓派(Raspbian OS)、Linux、NVIDIA Jetson、Windows 等
示例应用(树莓派、Linux、NVIDIA Jetson、Windows 等)
源代码附带 #2 C++ 示例应用:基准测试 和 识别器。这些示例应用可在所有支持的平台上使用:Android、Windows、树莓派、iOS、OSX、Linux……
基准测试(树莓派、Linux、NVIDIA Jetson、Windows 等)
此应用程序用于检查系统是否正常运行,并确保其速度达到预期。您可以通过该应用查看最大帧率信息(Intel Xeon 上为 237fps,Snapdragon 855 上为 47fps,Jetson NX 上为 152fps,Khadas VIM3 上为 64fps,Jetson Nano 上为 30fps,树莓派 4 上为 12fps)。
该应用为开源软件,无需注册或许可证密钥。
有关如何构建和运行此示例的更多信息,请参阅 samples/c++/benchmark。
识别器(树莓派、Linux、NVIDIA Jetson、Windows 等)
这是一个命令行应用程序,用于从任何 JPEG/PNG/BMP 图像中检测并识别车牌。
有关如何构建和运行此示例的更多信息,请参阅:
- C++:samples/c++/recognizer。
- C#:samples/csharp/recognizer。
- Java:samples/java/recognizer。
- Python:samples/python/recognizer。
使用 C++ API
C++ API 的定义位于 https://www.doubango.org/SDKs/anpr/docs/cpp-api.html。
#include <ultimateALPR-SDK-API-PUBLIC.h> // 包含 API 头文件
// JSON 配置字符串
// 更多信息请参见 https://www.doubango.org/SDKs/anpr/docs/Configuration_options.html
static const char* __jsonConfig =
"{"
"\"debug_level\": \"info\","
"\"debug_write_input_image_enabled\": false,"
"\"debug_internal_data_path\": \".\","
""
"\"num_threads\": -1,"
"\"gpgpu_enabled\": true,"
"\"openvino_enabled\": true,"
"\"openvino_device\": \"CPU\","
""
"\"detect_roi\": [0, 0, 0, 0],"
"\"detect_minscore\": 0.1,"
""
"\"pyramidal_search_enabled\": true,"
"\"pyramidal_search_sensitivity\": 0.28,"
"\"pyramidal_search_minscore\": 0.3,"
"\"pyramidal_search_min_image_size_inpixels\": 800,"
""
"\"klass_lpci_enabled\": true,"
"\"klass_vcr_enabled\": true,"
"\"klass_vmm_enabled\": true,"
""
"\"recogn_minscore\": 0.3,"
"\"recogn_score_type\": \"min\""
"}";
// 局部变量
UltAlprSdkResult result;
// 初始化引擎(只需执行一次)
ULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::init(
__jsonConfig
)).isOK());
// 处理(检测 + 识别)
// 对每一帧视频调用此函数
const void* imageData = nullptr;
ULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::process(
ULTMICR_SDK_IMAGE_TYPE_RGB24,
imageData,
imageWidth,
imageHeight
)).isOK());
// 反初始化
// 在退出应用程序前调用此函数以释放已分配的资源
// 调用此函数后不得再调用 process()
ULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::deInit()).isOK());
再次提醒,有关如何使用 API 的更多信息,请参阅 示例应用。
技术问题
请访问我们的 讨论组 或 Twitter 账号。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
