[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"tool-DoubangoTelecom--ultimateALPR-SDK":3,"similar-DoubangoTelecom--ultimateALPR-SDK":132},{"id":4,"github_repo":5,"name":6,"description_en":7,"description_zh":8,"ai_summary_zh":9,"readme_en":10,"readme_zh":11,"quickstart_zh":12,"use_case_zh":13,"hero_image_url":14,"owner_login":15,"owner_name":16,"owner_avatar_url":17,"owner_bio":16,"owner_company":18,"owner_location":19,"owner_email":16,"owner_twitter":20,"owner_website":21,"owner_url":22,"languages":23,"stars":56,"forks":57,"last_commit_at":58,"license":59,"difficulty_score":60,"env_os":61,"env_gpu":62,"env_ram":63,"env_deps":64,"category_tags":72,"github_topics":75,"view_count":96,"oss_zip_url":16,"oss_zip_packed_at":16,"status":97,"created_at":98,"updated_at":99,"faqs":100,"releases":131},8903,"DoubangoTelecom\u002FultimateALPR-SDK","ultimateALPR-SDK","World's fastest ANPR \u002F ALPR implementation for CPUs, GPUs, VPUs and NPUs using deep learning (Tensorflow, Tensorflow lite, TensorRT, OpenVX, OpenVINO). Multi-Charset (Latin, Korean, Chinese) & Multi-OS (Jetson, Android, Raspberry Pi, Linux, Windows) & Multi-Arch (ARM, x86).","ultimateALPR-SDK 是一款基于深度学习的高性能自动车牌识别（ANPR\u002FALPR）开源工具，旨在为各类硬件提供极速且精准的车牌识别解决方案。它有效解决了传统识别方案依赖昂贵专用 GPU 或云端计算导致的成本高、延迟大及隐私风险等问题，让完整的智能交通系统（ITS）功能得以在摄像头等终端设备上离线运行。\n\n该工具非常适合嵌入式开发者、计算机视觉研究人员以及需要构建低成本交通监控系统的工程师使用。其核心亮点在于卓越的跨平台适应能力与极致的优化效率：不仅支持 Linux、Windows、Android 等多种操作系统，还能在 ARM、x86 架构以及 NVIDIA Jetson、树莓派等资源受限设备上流畅运行。通过利用 SIMD ARM NEON 优化、定点数学运算及多线程技术，ultimateALPR-SDK 甚至能在低价位 ARM 设备上实现高达 64fps 的识别速度。此外，它还集成了夜间图像增强、车辆颜色识别、车型判断及车速估算等高级功能，并兼容 TensorFlow、TensorRT、OpenVINO 等多种主流推理框架，提供 C++、Python、Java 等丰富的开","ultimateALPR-SDK 是一款基于深度学习的高性能自动车牌识别（ANPR\u002FALPR）开源工具，旨在为各类硬件提供极速且精准的车牌识别解决方案。它有效解决了传统识别方案依赖昂贵专用 GPU 或云端计算导致的成本高、延迟大及隐私风险等问题，让完整的智能交通系统（ITS）功能得以在摄像头等终端设备上离线运行。\n\n该工具非常适合嵌入式开发者、计算机视觉研究人员以及需要构建低成本交通监控系统的工程师使用。其核心亮点在于卓越的跨平台适应能力与极致的优化效率：不仅支持 Linux、Windows、Android 等多种操作系统，还能在 ARM、x86 架构以及 NVIDIA Jetson、树莓派等资源受限设备上流畅运行。通过利用 SIMD ARM NEON 优化、定点数学运算及多线程技术，ultimateALPR-SDK 甚至能在低价位 ARM 设备上实现高达 64fps 的识别速度。此外，它还集成了夜间图像增强、车辆颜色识别、车型判断及车速估算等高级功能，并兼容 TensorFlow、TensorRT、OpenVINO 等多种主流推理框架，提供 C++、Python、Java 等丰富的开发接口，是打造高效端侧视觉应用的理想选择。","  - [Getting started](#getting-started)\n  - [Android](#android)\n  \t- [Sample applications](#sample-applications-android)\n\t\t- [Benchmark](#sample-application-benchmark-android) (**Java**)\n\t\t- [VideoParallel](#sample-application-videoparallel-android) (**Java**)\n\t\t- [VideoSequential](#sample-application-videosequential-android) (**Java**)\n\t\t- [ImageSnap](#sample-application-imagesnap-android) (**Java**)\n\t- [Trying the samples](#trying-the-samples-android)\n\t- [Adding the SDK to your project](#adding-the-sdk-to-your-project-android)\n\t- [Using the Java API](#using-the-java-api-android)\n - [Raspberry Pi (Raspbian OS), Linux, NVIDIA Jetson, Windows and others](#others)\n \t- [Sample applications](#sample-applications-others)\n\t\t- [Benchmark](#sample-application-benchmark-others) (**C++**)\n\t\t- [Recognizer](#sample-application-recognizer-others) (**C++**, **C#**, **Java** and **Python**)\n\t- [Using the C++ API](#using-the-cpp-api-others)\n - [Getting help](#technical-questions)\n  \n - Online web demo at https:\u002F\u002Fwww.doubango.org\u002Fwebapps\u002Falpr\u002F\n - Full documentation for the SDK at https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F\n - Supported languages (API): **C++**, **C#**, **Java** and **Python**\n - Open source Computer Vision Library: https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002Fcompv\n  \n\u003Chr \u002F>\n\n**Keywords:** `Image Enhancement for Night-Vision (IENV)`, `License Plate Recognition (LPR)`, `License Plate Country Identification (LPCI)`, `Vehicle Color Recognition (VCR)`, `Vehicle Make Model Recognition (VMMR)`, `Vehicle Body Style Recognition (VBSR)`, `Vehicle Direction Tracking (VDT)` and `Vehicle Speed Estimation (VSE)`\n\n\u003Chr \u002F>\n  \nHave you ever seen a deep learning based [ANPR\u002FALPR (Automatic Number\u002FLicense Plate Recognition)](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAutomatic_number-plate_recognition)  engine running at **64fps on a $99 ARM device** ([Khadas VIM3](https:\u002F\u002Fwww.khadas.com\u002Fvim3), 720p video resolution)? \u003Cbr \u002F>\n\n**UltimateALPR** is the fastest ANPR\u002FALPR implementation you'll find on the market. Being fast is important but being accurate is crucial. \n\nWe use state of the art deep learning techniques to offer unmatched accuracy and precision. As a comparison this is **#33 times faster than** [OpenALPR on Android](https:\u002F\u002Fgithub.com\u002FSandroMachado\u002Fopenalpr-android).\n(see [benchmark section](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FBenchmark.html) for more information).\n\nNo need for special or dedicated GPUs, everything is running on CPU with **SIMD ARM NEON** optimizations, fixed-point math operations and multithreading.\nThis opens the doors for the possibilities of running fully featured [ITS (Intelligent Transportation System)](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_transportation_system) solutions on a camera without soliciting a cloud. \nBeing able to run all ITS applications on the device **will significantly lower the cost to acquire, deploy and maintain** such systems. \nPlease check [Device-based versus Cloud-based solution](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FDevice-based_versus_Cloud-based_solution.html) section for more information about how this would reduce the cost.\n\nThe next [video](https:\u002F\u002Fdoubango.org\u002Fvideos\u002Fanpr\u002Fhighway-x264.mp4) shows the [Recognizer sample](#sample-application-recognizer-others) running on Windows: \u003Cbr \u002F>\n[![Recognizer Running on Windows](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FDoubangoTelecom_ultimateALPR-SDK_readme_86ce10261ba4.jpg)](https:\u002F\u002Fdoubango.org\u002Fvideos\u002Fanpr\u002Fhighway-x264.mp4)\n\u003Chr \u002F>\n\nThe code is accelerated on **CPU**, **GPU**, **VPU** and **FPGA**, thanks to [CUDA](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-toolkit), [NVIDIA TensorRT](https:\u002F\u002Fdeveloper.nvidia.com\u002Ftensorrt) and [Intel OpenVINO](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Fopenvino-toolkit\u002Fhardware.html).\n\nIn addition to [License Plate Recognition (LPR)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-licenseplaterecognition) we support [Image Enhancement for Night-Vision (IENV)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#image-enhancement-for-night-vision-ienv), [License Plate Country Identification (LPCI)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-licenseplatecountryidentification), [Vehicle Color Recognition (VCR)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-vehiclecolorrecognition), [Vehicle Make Model Recognition (VMMR)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-vehiclemakemodelrecognition), [Vehicle Body Style Recognition (VBSR)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#vehicle-body-style-recognition-vbsr), [Vehicle Direction Tracking (VDT)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-vehicledirectiontracking) and [Vehicle Speed Estimation (VSE)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-vehiclespeedestimation).\n\n\nOn high-end NVIDIA GPUs like the **Tesla V100 the frame rate is 315 fps which means 3.17 millisecond inference time**. On high-end CPUs like **Intel Xeon the maximum frame rate could be up to 237fps**, thanks to [OpenVINO](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Fopenvino-toolkit\u002Fhardware.html). On low-end CPUs like the **Raspberry Pi 4 the average frame rate is 12fps**.\n\nDon't take our word for it, come check our implementation. **No registration, license key or internet connection is required**, just clone the code and start coding\u002Ftesting. Everything runs on the device, no data is leaving your computer. \nThe code released here comes with many ready-to-use samples for [Android](#sample-applications-android), [Raspberry Pi](#sample-applications-others), [Linux](#sample-applications-others) and [Windows](#sample-applications-others) to help you get started easily. \n\nYou can also check our online [cloud-based implementation](https:\u002F\u002Fwww.doubango.org\u002Fwebapps\u002Falpr\u002F) (*no registration required*) to check out the accuracy and precision before starting to play with the SDK.\n\nPlease check full documentation at https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F\n\n\u003Ca name=\"getting-started\">\u003C\u002Fa>\n# Getting started # \nThe SDK works on [many platforms](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FArchitecture_overview.html#supportedoperatingsystems) and comes with support for many [programming languages](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FArchitecture_overview.html#supportedprogramminglanguages) but the next sections focus on [Android](#android), [Raspberry Pi, Linux and Windows](#others). \n\n\u003Ca name=\"android\">\u003C\u002Fa>\n# Android #\n\nThe next sections are about Android and Java API.\n\n\u003Ca name=\"sample-applications-android\">\u003C\u002Fa>\n## Sample applications (Android) ##\nThe source code comes with #4 Android sample applications: [Benchmark](#sample-application-benchmark-android), [VideoParallel](#sample-application-videoparallel-android), [VideoSequential](sample-application-videosequential-android) and [ImageSnap](sample-application-imagesnap-android).\n\n\u003Ca name=\"sample-application-benchmark-android\">\u003C\u002Fa>\n### Benchmark (Android) ###\nThis application is used to check everything is ok and running as fast as expected. \nThe information about the maximum frame rate (**237fps** on Intel Xeon, **64fps** on Khadas VIM3 and **12fps** on Raspberry Pi 4) could be checked using this application. \nIt's open source and doesn't require registration or license key.\n\n\u003Ca name=\"sample-application-videoparallel-android\">\u003C\u002Fa>\n### VideoParallel (Android) ###\nThis application should be used as reference code by any developer trying to add ultimateALPR to their products. It shows how to detect and recognize license plates in realtime using live video stream from the camera.\nPlease check [Parallel versus sequential processing section](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FParallel_versus_sequential_processing.html#parallelversussequentialprocessing) for more info about parellel mode.\n\n\u003Ca name=\"sample-application-videosequential-android\">\u003C\u002Fa>\n### VideoSequential (Android) ###\nSame as VideoParallel but working on sequential mode which means slower. This application is provided to ease comparing the modes: Parallel versus Sequential.\n\n\u003Ca name=\"sample-application-imagesnap\">\u003C\u002Fa>\n### ImageSnap (Android) ###\nThis application reads and display the live video stream from the camera but only recognize an image from the stream on demand.\n\n\u003Ca name=\"trying-the-samples-android\">\u003C\u002Fa>\n## Trying the samples (Android) ##\nTo try the sample applications on Android:\n 1. Open Android Studio and select \"Open an existing Android Studio project\"\n![alt text](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F_images\u002Fandroid_studio_open_existing_project.jpg \"Open an existing Android Studio project\")\n\n 2. Navigate to **ultimateALPR-SDK\u002Fsamples**, select **android** folder and click **OK**\n![alt text](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F_images\u002Fandroid_studio_select_samples_android.jpg \"Select project\")\n\n 3. Select the sample you want to try (e.g. **videoparallel**) and press **run**. Make sure to have the device on **landscape mode** for better experience.\n![alt text](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F_images\u002Fandroid_studio_select_samples_videoparallel.jpg \"Select sample\")\n            \n\u003Ca name=\"adding-the-sdk-to-your-project-android\">\u003C\u002Fa>\n## Adding the SDK to your project (Android) ##\nThe SDK is distributed as an Android Studio module and you can add it as reference or you can also build it and add the AAR to your project. But, the easiest way to add the SDK to your project is by directly including the source.\n\nIn your *build.gradle* file add:\n\n```python\nandroid {\n\n      # This is the block to add within \"android { } \" section\n      sourceSets {\n         main {\n             jniLibs.srcDirs += ['path-to-your-ultimateALPR-SDK\u002Fbinaries\u002Fandroid\u002FjniLibs']\n             java.srcDirs += ['path-to-your-ultimateALPR-SDK\u002Fjava\u002Fandroid']\n             assets.srcDirs += ['path-to-your-ultimateALPR-SDK\u002Fassets\u002Fmodels']\n         }\n      }\n}\n```\n\n\u003Ca name=\"using-the-java-api-android\">\u003C\u002Fa>\n## Using the Java API (Android) ##\n\nIt's hard to be lost when you try to use the API as there are only 3 useful functions: init, process and deInit.\n\nThe C++ API is defined [here](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002Fcpp-api.html).\n\n```java\n\n\timport org.doubango.ultimateAlpr.Sdk.ULTALPR_SDK_IMAGE_TYPE;\n\timport org.doubango.ultimateAlpr.Sdk.UltAlprSdkEngine;\n\timport org.doubango.ultimateAlpr.Sdk.UltAlprSdkParallelDeliveryCallback;\n\timport org.doubango.ultimateAlpr.Sdk.UltAlprSdkResult;\n\n\tfinal static String CONFIG = \"{\" +\n\t\t\"\\\"debug_level\\\": \\\"info\\\",\" + \n\t\t\"\\\"gpgpu_enabled\\\": true,\" + \n\t\t\"\\\"openvino_enabled\\\": true,\" +\n\t\t\"\\\"openvino_device\\\": \\\"CPU\\\",\" +\n\n\t\t\"\\\"detect_minscore\\\": 0.1,\" + \n\t\t\"\\\"detect_quantization_enabled\\\": true,\" + \n\t\t\n\t\t\"\\\"pyramidal_search_enabled\\\": true,\" +\n\t\t\"\\\"pyramidal_search_sensitivity\\\": 0.28,\" +\n\t\t\"\\\"pyramidal_search_minscore\\\": 0.5,\" +\n\t\t\"\\\"pyramidal_search_quantization_enabled\\\": true,\" +\n\n\t\t\"\\\"klass_lpci_enabled\\\": true,\" +\n\t\t\"\\\"klass_vcr_enabled\\\": true,\" +\n\t\t\"\\\"klass_vmmr_enabled\\\": true,\" +\n\n\t\t\"\\\"recogn_score_type\\\": \\\"min\\\",\" + \n\t\t\"\\\"recogn_minscore\\\": 0.3,\" + \n\t\t\"\\\"recogn_rectify_enabled\\\": false,\" + \n\t\t\"\\\"recogn_quantization_enabled\\\": true\" + \n\t\"}\";\n\n\t\u002F**\n\t* Parallel callback delivery function used to notify about new results.\n\t* This callback will be called few milliseconds (before next frame is completely processed)\n\t* after process function is called.\n\t*\u002F\n\tstatic class MyUltAlprSdkParallelDeliveryCallback extends UltAlprSdkParallelDeliveryCallback {\n\t\t@Override\n\t\tpublic void onNewResult(UltAlprSdkResult result) { }\n\t}\n\n\tfinal MyUltAlprSdkParallelDeliveryCallback mCallback = new MyUltAlprSdkParallelDeliveryCallback(); \u002F\u002F set to null to disable parallel mode\n\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState);\n\t\t\n\n\t\t\u002F\u002F Initialize the engine\n\t\tassert UltAlprSdkEngine.init(\n\t\t\t\tgetAssets(),\n\t\t\t\tCONFIG,\n\t\t\t\tmCallback\n\t\t).isOK();\n\t}\n\n\t\u002F\u002F Camera listener: https:\u002F\u002Fdeveloper.android.com\u002Freference\u002Fandroid\u002Fmedia\u002FImageReader.OnImageAvailableListener\n\tfinal ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {\n\n\t\t@Override\n\t\tpublic void onImageAvailable(ImageReader reader) {\n\t\t\t\ttry {\n\t\t\t\t    final Image image = reader.acquireLatestImage();\n\t\t\t\t    if (image == null) {\n\t\t\t\t        return;\n\t\t\t\t    }\n\n\t\t\t\t    \u002F\u002F ANPR\u002FALPR recognition\n\t\t\t\t    final Image.Plane[] planes = image.getPlanes();\n\t\t\t\t    final UltAlprSdkResult result = UltAlprSdkEngine.process(\n\t\t\t\t        ULTALPR_SDK_IMAGE_TYPE.ULTALPR_SDK_IMAGE_TYPE_YUV420P,\n\t\t\t\t        planes[0].getBuffer(),\n\t\t\t\t        planes[1].getBuffer(),\n\t\t\t\t        planes[2].getBuffer(),\n\t\t\t\t        image.getWidth(),\n\t\t\t\t        image.getHeight(),\n\t\t\t\t        planes[0].getRowStride(),\n\t\t\t\t        planes[1].getRowStride(),\n\t\t\t\t        planes[2].getRowStride(),\n\t\t\t\t        planes[1].getPixelStride()\n\t\t\t\t    );\n\t\t\t\t    assert result.isOK();\n\n\t\t\t\t    image.close();\n\n\t\t\t\t} catch (final Exception e) {\n\t\t\t\t   e.printStackTrace();\n\t\t\t\t}\n\t\t}\n\t};\n\n\t@Override\n\tpublic void onDestroy() {\n\t\t\u002F\u002F DeInitialize the engine\n\t\tassert UltAlprSdkEngine.deInit().isOK();\n\n\t\tsuper.onDestroy();\n\t}\n```\n\nAgain, please check the sample applications for [Android](#sample-applications-android), [Raspberry Pi, Linux and Windows](#sample-applications-others) and [full documentation](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F) for more information.\n\n\u003Ca name=\"others\">\u003C\u002Fa>\n# Raspberry Pi (Raspbian OS), Linux, NVIDIA Jetson, Windows and others #\n\n\u003Ca name=\"sample-applications-others\">\u003C\u002Fa>\n## Sample applications (Raspberry Pi, Linux, NVIDIA Jetson, Windows and others) ##\nThe source code comes with #2 [C++ sample applications](samples\u002Fc++): [Benchmark](#sample-application-benchmark-others) and [Recognizer](#sample-application-recognizer-others). These sample applications can be used on all supported platforms: **Android**, **Windows**, **Raspberry Pi**, **iOS**, **OSX**, **Linux**...\n\n\u003Ca name=\"sample-application-benchmark-others\">\u003C\u002Fa>\n### Benchmark (Raspberry Pi, Linux, NVIDIA Jetson, Windows and others) ###\nThis application is used to check everything is ok and running as fast as expected. \nThe information about the maximum frame rate (**237fps** on Intel Xeon, **47fps** on Snapdragon 855, **152fps** on Jetson NX, **64fps** on Khadas VIM3, **30fps** on Jetson nano and **12fps** on Raspberry Pi 4) could be checked using this application. \nIt's open source and doesn't require registration or license key.\n\nFor more information on how to build and run this sample please check [samples\u002Fc++\u002Fbenchmark](samples\u002Fc++\u002Fbenchmark\u002FREADME.md).\n\n\u003Ca name=\"sample-application-recognizer-others\">\u003C\u002Fa>\n### Recognizer (Raspberry Pi, Linux, NVIDIA Jetson, Windows and others) ###\nThis is a command line application used to detect and recognize a license plate from any JPEG\u002FPNG\u002FBMP image.\n\nFor more information on how to build and run this sample please check:\n - C++: [samples\u002Fc++\u002Frecognizer](samples\u002Fc++\u002Frecognizer\u002FREADME.md).\n - C#: [samples\u002Fcsharp\u002Frecognizer](samples\u002Fcsharp\u002Frecognizer\u002FREADME.md).\n - Java: [samples\u002Fjava\u002Frecognizer](samples\u002Fjava\u002Frecognizer\u002FREADME.md).\n - Python: [samples\u002Fpython\u002Frecognizer](samples\u002Fpython\u002Frecognizer\u002FREADME.md).\n\n\u003Ca name=\"using-the-cpp-api-others\">\u003C\u002Fa>\n## Using the C++ API ##\nThe C++ API is defined at https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002Fcpp-api.html.\n\n```cpp\n\t#include \u003CultimateALPR-SDK-API-PUBLIC.h> \u002F\u002F Include the API header file\n\n\t\u002F\u002F JSON configuration string\n\t\u002F\u002F More info at https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FConfiguration_options.html\n\tstatic const char* __jsonConfig =\n\t\"{\"\n\t\"\\\"debug_level\\\": \\\"info\\\",\"\n\t\"\\\"debug_write_input_image_enabled\\\": false,\"\n\t\"\\\"debug_internal_data_path\\\": \\\".\\\",\"\n\t\"\"\n\t\"\\\"num_threads\\\": -1,\"\n\t\"\\\"gpgpu_enabled\\\": true,\"\n\t\"\\\"openvino_enabled\\\": true,\"\n\t\"\\\"openvino_device\\\": \\\"CPU\\\",\"\n\t\"\"\n\t\"\\\"detect_roi\\\": [0, 0, 0, 0],\"\n\t\"\\\"detect_minscore\\\": 0.1,\"\n\t\"\"\n\t\"\\\"pyramidal_search_enabled\\\": true,\"\n\t\"\\\"pyramidal_search_sensitivity\\\": 0.28,\"\n\t\"\\\"pyramidal_search_minscore\\\": 0.3,\"\n\t\"\\\"pyramidal_search_min_image_size_inpixels\\\": 800,\"\n\t\"\"\n\t\"\\\"klass_lpci_enabled\\\": true,\"\n\t\"\\\"klass_vcr_enabled\\\": true,\"\n\t\"\\\"klass_vmm_enabled\\\": true,\"\n\t\"\"\n\t\"\\\"recogn_minscore\\\": 0.3,\"\n\t\"\\\"recogn_score_type\\\": \\\"min\\\"\"\n\t\"}\";\n\n\t\u002F\u002F Local variable\n\tUltAlprSdkResult result;\n\n\t\u002F\u002F Initialize the engine (should be done once)\n\tULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::init(\n\t\t__jsonConfig\n\t)).isOK());\n\n\t\u002F\u002F Processing (detection + recognition)\n\t\u002F\u002F Call this function for every video frame\n\tconst void* imageData = nullptr;\n\tULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::process(\n\t\t\tULTMICR_SDK_IMAGE_TYPE_RGB24,\n\t\t\timageData,\n\t\t\timageWidth,\n\t\t\timageHeight\n\t\t)).isOK());\n\n\t\u002F\u002F DeInit\n\t\u002F\u002F Call this function before exiting the app to free the allocate resources\n\t\u002F\u002F You must not call process() after calling this function\n\tULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::deInit()).isOK());\n```\n\nAgain, please check the [sample applications](#Sample-applications) for more information on how to use the API.\n\n\u003Ca name=\"technical-questions\">\u003C\u002Fa>\n # Technical questions #\n Please check our [discussion group](https:\u002F\u002Fgroups.google.com\u002Fforum\u002F#!forum\u002Fdoubango-ai) or [twitter account](https:\u002F\u002Ftwitter.com\u002Fdoubangotelecom?lang=en)\n","- [入门](#getting-started)\n  - [Android](#android)\n  \t- [示例应用](#sample-applications-android)\n\t\t- [基准测试](#sample-application-benchmark-android) (**Java**)\n\t\t- [VideoParallel](#sample-application-videoparallel-android) (**Java**)\n\t\t- [VideoSequential](#sample-application-videosequential-android) (**Java**)\n\t\t- [ImageSnap](#sample-application-imagesnap-android) (**Java**)\n\t- [试用示例](#trying-the-samples-android)\n\t- [将SDK添加到您的项目](#adding-the-sdk-to-your-project-android)\n\t- [使用Java API](#using-the-java-api-android)\n - [树莓派（Raspbian OS）、Linux、NVIDIA Jetson、Windows及其他](#others)\n \t- [示例应用](#sample-applications-others)\n\t\t- [基准测试](#sample-application-benchmark-others) (**C++**)\n\t\t- [识别器](#sample-application-recognizer-others) (**C++**、**C#**、**Java**和**Python**)\n\t- [使用C++ API](#using-the-cpp-api-others)\n - [获取帮助](#technical-questions)\n  \n - 在线Web演示：https:\u002F\u002Fwww.doubango.org\u002Fwebapps\u002Falpr\u002F\n - SDK完整文档：https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F\n - 支持的语言（API）：**C++**、**C#**、**Java**和**Python**\n - 开源计算机视觉库：https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002Fcompv\n  \n\u003Chr \u002F>\n\n**关键词:** `夜视图像增强 (IENV)`、`车牌识别 (LPR)`、`车牌国家\u002F地区识别 (LPCI)`、`车辆颜色识别 (VCR)`、`车辆品牌型号识别 (VMMR)`、`车辆车身样式识别 (VBSR)`、`车辆方向跟踪 (VDT)` 和 `车辆速度估计 (VSE)`\n\n\u003Chr \u002F>\n  \n您是否见过基于深度学习的[ANPR\u002FALPR（自动车牌识别）]引擎在**99美元的ARM设备上以64fps运行**（[Khadas VIM3](https:\u002F\u002Fwww.khadas.com\u002Fvim3)，720p视频分辨率）？ \u003Cbr \u002F>\n\n**UltimateALPR** 是市场上最快的ANPR\u002FALPR实现。速度快固然重要，但准确度才是关键。\n\n我们采用最先进的深度学习技术，提供无与伦比的准确性和精度。相比之下，它比[OpenALPR在Android上的实现](https:\u002F\u002Fgithub.com\u002FSandroMachado\u002Fopenalpr-android)快**33倍**。（更多信息请参阅[基准测试部分](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FBenchmark.html)）。\n\n无需专用或独立的GPU，所有计算均在CPU上完成，并结合了**SIMD ARM NEON**优化、定点数学运算和多线程处理。这为在摄像头端直接运行功能齐全的[ITS（智能交通系统）]解决方案打开了大门，而无需依赖云端。能够在设备端运行所有ITS应用，将显著降低此类系统的**采购、部署和维护成本**。有关如何降低成本的详细信息，请参阅[基于设备与基于云的解决方案](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FDevice-based_versus_Cloud-based_solution.html)一节。\n\n下一个[视频](https:\u002F\u002Fdoubango.org\u002Fvideos\u002Fanpr\u002Fhighway-x264.mp4)展示了[识别器示例](#sample-application-recognizer-others)在Windows上的运行情况：\u003Cbr \u002F>\n[![识别器在Windows上运行](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FDoubangoTelecom_ultimateALPR-SDK_readme_86ce10261ba4.jpg)](https:\u002F\u002Fdoubango.org\u002Fvideos\u002Fanpr\u002Fhighway-x264.mp4)\n\u003Chr \u002F>\n\n得益于[CUDA](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-toolkit)、[NVIDIA TensorRT](https:\u002F\u002Fdeveloper.nvidia.com\u002Ftensorrt)以及[Intel OpenVINO](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Fopenvino-toolkit\u002Fhardware.html)，该代码可在**CPU**、**GPU**、**VPU**和**FPGA**上加速运行。\n\n除了[车牌识别 (LPR)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-licenseplaterecognition)之外，我们还支持[夜视图像增强 (IENV)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#image-enhancement-for-night-vision-ienv)、[车牌国家\u002F地区识别 (LPCI)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-licenseplatecountryidentification)、[车辆颜色识别 (VCR)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-vehiclecolorrecognition)、[车辆品牌型号识别 (VMMR)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-vehiclemakemodelrecognition)、[车辆车身样式识别 (VBSR)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#vehicle-body-style-recognition-vbsr)、[车辆方向跟踪 (VDT)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-vehicledirectiontracking)以及[车辆速度估计 (VSE)](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FFeatures.html#features-vehiclespeedestimation)。\n\n在高端NVIDIA GPU（如Tesla V100）上，帧率可达315 fps，即每次推理仅需3.17毫秒。而在高端CPU（如Intel Xeon）上，得益于[OpenVINO](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Fopenvino-toolkit\u002Fhardware.html)，最大帧率可达237 fps。而在低端CPU（如Raspberry Pi 4）上，平均帧率约为12 fps。\n\n不妨亲自体验我们的实现。**无需注册、许可证密钥或互联网连接**，只需克隆代码并开始编码和测试即可。所有处理都在本地设备上完成，数据不会离开您的计算机。此处发布的代码附带大量现成的示例，适用于[Android](#sample-applications-android)、[树莓派](#sample-applications-others)、[Linux](#sample-applications-others)和[Windows](#sample-applications-others)，帮助您轻松入门。\n\n您还可以查看我们的在线[基于云的实现](https:\u002F\u002Fwww.doubango.org\u002Fwebapps\u002Falpr\u002F)（无需注册），在开始使用SDK之前先了解其准确性和精度。\n\n请查阅完整文档：https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F\n\n\u003Ca name=\"getting-started\">\u003C\u002Fa>\n# 入门 #\n该SDK支持[多种平台](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FArchitecture_overview.html#supportedoperatingsystems)，并提供对多种[编程语言](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FArchitecture_overview.html#supportedprogramminglanguages)的支持，但接下来的部分将重点介绍[Android](#android)以及[树莓派、Linux和Windows](#others)。\n\n\u003Ca name=\"android\">\u003C\u002Fa>\n# Android #\n\n以下内容主要针对Android平台及Java API。\n\n\u003Ca name=\"sample-applications-android\">\u003C\u002Fa>\n## 示例应用（Android） ##\n源代码包含4个Android示例应用：[基准测试](#sample-application-benchmark-android)、[VideoParallel](#sample-application-videoparallel-android)、[VideoSequential](#sample-application-videosequential-android)和[ImageSnap](#sample-application-imagesnap-android)。\n\n\u003Ca name=\"sample-application-benchmark-android\">\u003C\u002Fa>\n\n### 基准测试（Android） ###\n此应用程序用于检查一切是否正常运行，并确保其速度达到预期。通过该应用可以查看最大帧率信息（Intel Xeon 上为 **237fps**，Khadas VIM3 上为 **64fps**，树莓派 4 上为 **12fps**）。它是一个开源项目，无需注册或许可证密钥。\n\n\u003Ca name=\"sample-application-videoparallel-android\">\u003C\u002Fa>\n### VideoParallel（Android） ###\n任何希望在其产品中集成 ultimateALPR 的开发者都应将此应用用作参考代码。它展示了如何使用摄像头的实时视频流进行车牌的实时检测与识别。有关并行模式的更多信息，请参阅 [并行与串行处理章节](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FParallel_versus_sequential_processing.html#parallelversussequentialprocessing)。\n\n\u003Ca name=\"sample-application-videosequential-android\">\u003C\u002Fa>\n### VideoSequential（Android） ###\n与 VideoParallel 相同，但以串行模式运行，因此速度较慢。提供此应用是为了便于比较并行与串行两种模式。\n\n\u003Ca name=\"sample-application-imagesnap\">\u003C\u002Fa>\n### ImageSnap（Android） ###\n此应用会读取并显示来自摄像头的实时视频流，但仅在需要时从视频流中识别一张图像。\n\n\u003Ca name=\"trying-the-samples-android\">\u003C\u002Fa>\n## 在 Android 上试用示例应用 ##\n要在 Android 上试用示例应用：\n1. 打开 Android Studio，选择“打开现有 Android Studio 项目”。\n![alt text](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F_images\u002Fandroid_studio_open_existing_project.jpg \"打开现有 Android Studio 项目\")\n\n2. 导航到 **ultimateALPR-SDK\u002Fsamples**，选择 **android** 文件夹并点击 **确定**。\n![alt text](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F_images\u002Fandroid_studio_select_samples_android.jpg \"选择项目\")\n\n3. 选择您想要试用的示例（例如 **videoparallel**），然后点击“运行”。为了获得更好的体验，请确保设备处于 **横屏模式**。\n![alt text](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F_images\u002Fandroid_studio_select_samples_videoparallel.jpg \"选择示例\")\n            \n\u003Ca name=\"adding-the-sdk-to-your-project-android\">\u003C\u002Fa>\n## 将 SDK 添加到您的项目（Android） ##\nSDK 以 Android Studio 模块的形式分发，您可以将其作为引用添加，也可以构建它并将 AAR 文件添加到您的项目中。不过，最简单的方法是直接包含源代码来添加 SDK。\n\n在您的 *build.gradle* 文件中添加：\n\n```python\nandroid {\n\n      # 这是需要添加到 \"android { } \" 部分的代码块\n      sourceSets {\n         main {\n             jniLibs.srcDirs += ['path-to-your-ultimateALPR-SDK\u002Fbinaries\u002Fandroid\u002FjniLibs']\n             java.srcDirs += ['path-to-your-ultimateALPR-SDK\u002Fjava\u002Fandroid']\n             assets.srcDirs += ['path-to-your-ultimateALPR-SDK\u002Fassets\u002Fmodels']\n         }\n      }\n}\n```\n\n\u003Ca name=\"using-the-java-api-android\">\u003C\u002Fa>\n## 使用 Java API（Android） ##\n\n使用该 API 并不困难，因为它只有三个有用的方法：init、process 和 deInit。\n\nC++ API 的定义请参见 [此处](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002Fcpp-api.html)。\n\n```java\n\n\timport org.doubango.ultimateAlpr.Sdk.ULTALPR_SDK_IMAGE_TYPE;\n\timport org.doubango.ultimateAlpr.Sdk.UltAlprSdkEngine;\n\timport org.doubango.ultimateAlpr.Sdk.UltAlprSdkParallelDeliveryCallback;\n\timport org.doubango.ultimateAlpr.Sdk.UltAlprSdkResult;\n\n\tfinal static String CONFIG = \"{\" +\n\t\t\"\\\"debug_level\\\": \\\"info\\\",\" + \n\t\t\"\\\"gpgpu_enabled\\\": true,\" + \n\t\t\"\\\"openvino_enabled\\\": true,\" +\n\t\t\"\\\"openvino_device\\\": \\\"CPU\\\",\" +\n\n\t\t\"\\\"detect_minscore\\\": 0.1,\" + \n\t\t\"\\\"detect_quantization_enabled\\\": true,\" + \n\t\t\n\t\t\"\\\"pyramidal_search_enabled\\\": true,\" +\n\t\t\"\\\"pyramidal_search_sensitivity\\\": 0.28,\" +\n\t\t\"\\\"pyramidal_search_minscore\\\": 0.5,\" +\n\t\t\"\\\"pyramidal_search_quantization_enabled\\\": true,\" +\n\n\t\t\"\\\"klass_lpci_enabled\\\": true,\" +\n\t\t\"\\\"klass_vcr_enabled\\\": true,\" +\n\t\t\"\\\"klass_vmmr_enabled\\\": true,\" +\n\n\t\t\"\\\"recogn_score_type\\\": \\\"min\\\",\" + \n\t\t\"\\\"recogn_minscore\\\": 0.3,\" + \n\t\t\"\\\"recogn_rectify_enabled\\\": false,\" + \n\t\t\"\\\"recogn_quantization_enabled\\\": true\" + \n\t\"}\";\n\n\t\u002F**\n\t* 并行回调函数，用于通知新结果。\n\t* 此回调将在调用 process 函数后几毫秒内（即下一帧尚未完全处理之前）被调用。\n\t*\u002F\n\tstatic class MyUltAlprSdkParallelDeliveryCallback extends UltAlprSdkParallelDeliveryCallback {\n\t\t@Override\n\t\tpublic void onNewResult(UltAlprSdkResult result) { }\n\t}\n\n\tfinal MyUltAlprSdkParallelDeliveryCallback mCallback = new MyUltAlprSdkParallelDeliveryCallback(); \u002F\u002F 设置为 null 以禁用并行模式\n\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState);\n\t\t\n\n\t\t\u002F\u002F 初始化引擎\n\t\tassert UltAlprSdkEngine.init(\n\t\t\t\tgetAssets(),\n\t\t\t\tCONFIG,\n\t\t\t\tmCallback\n\t\t).isOK();\n\t}\n\n\t\u002F\u002F 摄像头监听器：https:\u002F\u002Fdeveloper.android.com\u002Freference\u002Fandroid\u002Fmedia\u002FImageReader.OnImageAvailableListener\n\tfinal ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {\n\n\t\t@Override\n\t\tpublic void onImageAvailable(ImageReader reader) {\n\t\t\t\ttry {\n\t\t\t\t    final Image image = reader.acquireLatestImage();\n\t\t\t\t    if (image == null) {\n\t\t\t\t        return;\n\t\t\t\t    }\n\n\t\t\t\t    \u002F\u002F ANPR\u002FALPR 识别\n\t\t\t\t    final Image.Plane[] planes = image.getPlanes();\n\t\t\t\t    final UltAlprSdkResult result = UltAlprSdkEngine.process(\n\t\t\t\t        ULTALPR_SDK_IMAGE_TYPE.ULTALPR_SDK_IMAGE_TYPE_YUV420P,\n\t\t\t\t        planes[0].getBuffer(),\n\t\t\t\t        planes[1].getBuffer(),\n\t\t\t\t        planes[2].getBuffer(),\n\t\t\t\t        image.getWidth(),\n\t\t\t\t        image.getHeight(),\n\t\t\t\t        planes[0].getRowStride(),\n\t\t\t\t        planes[1].ROWStride(),\n\t\t\t\t        planes[2].ROWStride(),\n\t\t\t\t        planes[1].getPixelStride()\n\t\t\t\t    );\n\t\t\t\t    assert result.isOK();\n\n\t\t\t\t    image.close();\n\n\t\t\t\t} catch (final Exception e) {\n\t\t\t\t   e.printStackTrace();\n\t\t\t\t}\n\t\t}\n\t};\n\n\t@Override\n\tpublic void onDestroy() {\n\t\t\u002F\u002F 反初始化引擎\n\t\tassert UltAlprSdkEngine.deInit().isOK();\n\n\t\tsuper.onDestroy();\n\t}\n```\n\n再次提醒，有关更多信息，请参阅适用于 [Android](#sample-applications-android)、[树莓派、Linux 和 Windows](#sample-applications-others) 的示例应用，以及完整的 [文档](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F)。\n\n\u003Ca name=\"others\">\u003C\u002Fa>\n# 树莓派（Raspbian OS）、Linux、NVIDIA Jetson、Windows 等 #\n\n\u003Ca name=\"sample-applications-others\">\u003C\u002Fa>\n\n## 示例应用（树莓派、Linux、NVIDIA Jetson、Windows 等） ##\n源代码附带 #2 [C++ 示例应用](samples\u002Fc++)：[基准测试](#sample-application-benchmark-others) 和 [识别器](#sample-application-recognizer-others)。这些示例应用可在所有支持的平台上使用：**Android**、**Windows**、**树莓派**、**iOS**、**OSX**、**Linux**……\n\n\u003Ca name=\"sample-application-benchmark-others\">\u003C\u002Fa>\n### 基准测试（树莓派、Linux、NVIDIA Jetson、Windows 等） ###\n此应用程序用于检查系统是否正常运行，并确保其速度达到预期。您可以通过该应用查看最大帧率信息（Intel Xeon 上为 **237fps**，Snapdragon 855 上为 **47fps**，Jetson NX 上为 **152fps**，Khadas VIM3 上为 **64fps**，Jetson Nano 上为 **30fps**，树莓派 4 上为 **12fps**）。\n\n该应用为开源软件，无需注册或许可证密钥。\n\n有关如何构建和运行此示例的更多信息，请参阅 [samples\u002Fc++\u002Fbenchmark](samples\u002Fc++\u002Fbenchmark\u002FREADME.md)。\n\n\u003Ca name=\"sample-application-recognizer-others\">\u003C\u002Fa>\n### 识别器（树莓派、Linux、NVIDIA Jetson、Windows 等） ###\n这是一个命令行应用程序，用于从任何 JPEG\u002FPNG\u002FBMP 图像中检测并识别车牌。\n\n有关如何构建和运行此示例的更多信息，请参阅：\n- C++：[samples\u002Fc++\u002Frecognizer](samples\u002Fc++\u002Frecognizer\u002FREADME.md)。\n- C#：[samples\u002Fcsharp\u002Frecognizer](samples\u002Fcsharp\u002Frecognizer\u002FREADME.md)。\n- Java：[samples\u002Fjava\u002Frecognizer](samples\u002Fjava\u002Frecognizer\u002FREADME.md)。\n- Python：[samples\u002Fpython\u002Frecognizer](samples\u002Fpython\u002Frecognizer\u002FREADME.md)。\n\n\u003Ca name=\"using-the-cpp-api-others\">\u003C\u002Fa>\n## 使用 C++ API ##\nC++ API 的定义位于 https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002Fcpp-api.html。\n\n```cpp\n\t#include \u003CultimateALPR-SDK-API-PUBLIC.h> \u002F\u002F 包含 API 头文件\n\n\t\u002F\u002F JSON 配置字符串\n\t\u002F\u002F 更多信息请参见 https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002FConfiguration_options.html\n\tstatic const char* __jsonConfig =\n\t\"{\"\n\t\"\\\"debug_level\\\": \\\"info\\\",\"\n\t\"\\\"debug_write_input_image_enabled\\\": false,\"\n\t\"\\\"debug_internal_data_path\\\": \\\".\\\",\"\n\t\"\"\n\t\"\\\"num_threads\\\": -1,\"\n\t\"\\\"gpgpu_enabled\\\": true,\"\n\t\"\\\"openvino_enabled\\\": true,\"\n\t\"\\\"openvino_device\\\": \\\"CPU\\\",\"\n\t\"\"\n\t\"\\\"detect_roi\\\": [0, 0, 0, 0],\"\n\t\"\\\"detect_minscore\\\": 0.1,\"\n\t\"\"\n\t\"\\\"pyramidal_search_enabled\\\": true,\"\n\t\"\\\"pyramidal_search_sensitivity\\\": 0.28,\"\n\t\"\\\"pyramidal_search_minscore\\\": 0.3,\"\n\t\"\\\"pyramidal_search_min_image_size_inpixels\\\": 800,\"\n\t\"\"\n\t\"\\\"klass_lpci_enabled\\\": true,\"\n\t\"\\\"klass_vcr_enabled\\\": true,\"\n\t\"\\\"klass_vmm_enabled\\\": true,\"\n\t\"\"\n\t\"\\\"recogn_minscore\\\": 0.3,\"\n\t\"\\\"recogn_score_type\\\": \\\"min\\\"\"\n\t\"}\";\n\n\t\u002F\u002F 局部变量\n\tUltAlprSdkResult result;\n\n\t\u002F\u002F 初始化引擎（只需执行一次）\n\tULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::init(\n\t\t__jsonConfig\n\t)).isOK());\n\n\t\u002F\u002F 处理（检测 + 识别）\n\t\u002F\u002F 对每一帧视频调用此函数\n\tconst void* imageData = nullptr;\n\tULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::process(\n\t\t\tULTMICR_SDK_IMAGE_TYPE_RGB24,\n\t\t\timageData,\n\t\t\timageWidth,\n\t\t\timageHeight\n\t\t)).isOK());\n\n\t\u002F\u002F 反初始化\n\t\u002F\u002F 在退出应用程序前调用此函数以释放已分配的资源\n\t\u002F\u002F 调用此函数后不得再调用 process()\n\tULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::deInit()).isOK());\n```\n\n再次提醒，有关如何使用 API 的更多信息，请参阅 [示例应用](#Sample-applications)。\n\n\u003Ca name=\"technical-questions\">\u003C\u002Fa>\n # 技术问题 #\n 请访问我们的 [讨论组](https:\u002F\u002Fgroups.google.com\u002Fforum\u002F#!forum\u002Fdoubango-ai) 或 [Twitter 账号](https:\u002F\u002Ftwitter.com\u002Fdoubangotelecom?lang=en)。","# ultimateALPR-SDK 快速上手指南\n\nultimateALPR 是一款基于深度学习的高性能自动车牌识别（ANPR\u002FALPR）引擎，支持在 CPU、GPU、VPU 和 FPGA 上加速运行。它无需联网或云端服务，完全在本地设备运行，适用于 Android、Linux、Windows、Raspberry Pi 等平台。\n\n## 环境准备\n\n### 系统要求\n- **Android**: Android Studio, API Level 21+\n- **Linux\u002FWindows\u002FRaspberry Pi**: \n  - 操作系统：Ubuntu 18.04+, Raspbian, Windows 10+\n  - 编译器：GCC\u002FG++ (C++11 或更高版本) 或对应语言的运行时环境\n  - 可选加速库：CUDA (NVIDIA GPU), TensorRT, Intel OpenVINO\n\n### 前置依赖\n- **Android**: 无特殊依赖，SDK 包含所需 JNI 库\n- **其他平台**:\n  - CMake 3.10+\n  - Git\n  - Python 3.x (如需使用 Python API)\n  - .NET Core (如需使用 C# API)\n\n> **注意**：本项目为纯本地运行，无需注册、License Key 或互联网连接。\n\n## 安装步骤\n\n### 方式一：Android 项目集成\n\n1. 克隆仓库：\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002FultimateALPR-SDK.git\n```\n\n2. 在 Android Studio 中打开项目：\n   - 选择 `File` -> `Open`\n   - 导航至 `ultimateALPR-SDK\u002Fsamples\u002Fandroid` 目录\n   - 选择示例应用（如 `videoparallel`）并点击 `OK`\n\n3. 将 SDK 添加到你的项目：\n   在你的 `build.gradle` 文件中添加以下配置：\n\n```gradle\nandroid {\n    sourceSets {\n        main {\n            jniLibs.srcDirs += ['path-to-your-ultimateALPR-SDK\u002Fbinaries\u002Fandroid\u002FjniLibs']\n            java.srcDirs += ['path-to-your-ultimateALPR-SDK\u002Fjava\u002Fandroid']\n            assets.srcDirs += ['path-to-your-ultimateALPR-SDK\u002Fassets\u002Fmodels']\n        }\n    }\n}\n```\n> 请将 `path-to-your-ultimateALPR-SDK` 替换为实际路径。\n\n### 方式二：其他平台 (Linux\u002FWindows\u002FRaspberry Pi)\n\n1. 克隆仓库：\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002FultimateALPR-SDK.git\ncd ultimateALPR-SDK\n```\n\n2. 编译示例程序（以 C++ 为例）：\n```bash\nmkdir build && cd build\ncmake ..\nmake -j4\n```\n\n3. 运行示例：\n```bash\n# 运行识别器示例\n.\u002Fsamples\u002Fcpp\u002Frecognizer --input=video.mp4\n```\n\n## 基本使用\n\n### Android (Java API)\n\n核心流程仅需三个步骤：初始化 (`init`)、处理 (`process`) 和销毁 (`deInit`)。\n\n```java\nimport org.doubango.ultimateAlpr.Sdk.ULTALPR_SDK_IMAGE_TYPE;\nimport org.doubango.ultimateAlpr.Sdk.UltAlprSdkEngine;\nimport org.doubango.ultimateAlpr.Sdk.UltAlprSdkParallelDeliveryCallback;\nimport org.doubango.ultimateAlpr.Sdk.UltAlprSdkResult;\n\n\u002F\u002F 配置 JSON 字符串\nfinal static String CONFIG = \"{\" +\n    \"\\\"debug_level\\\": \\\"info\\\",\" + \n    \"\\\"gpgpu_enabled\\\": true,\" + \n    \"\\\"openvino_enabled\\\": true,\" +\n    \"\\\"openvino_device\\\": \\\"CPU\\\",\" +\n    \"\\\"detect_minscore\\\": 0.1,\" + \n    \"\\\"detect_quantization_enabled\\\": true,\" + \n    \"\\\"pyramidal_search_enabled\\\": true,\" +\n    \"\\\"pyramidal_search_sensitivity\\\": 0.28,\" +\n    \"\\\"pyramidal_search_minscore\\\": 0.5,\" +\n    \"\\\"pyramidal_search_quantization_enabled\\\": true,\" +\n    \"\\\"klass_lpci_enabled\\\": true,\" +\n    \"\\\"klass_vcr_enabled\\\": true,\" +\n    \"\\\"klass_vmmr_enabled\\\": true,\" +\n    \"\\\"recogn_score_type\\\": \\\"min\\\",\" + \n    \"\\\"recogn_minscore\\\": 0.3,\" + \n    \"\\\"recogn_rectify_enabled\\\": false,\" + \n    \"\\\"recogn_quantization_enabled\\\": true\" + \n\"}\";\n\n\u002F\u002F 定义回调处理结果\nstatic class MyUltAlprSdkParallelDeliveryCallback extends UltAlprSdkParallelDeliveryCallback {\n    @Override\n    public void onNewResult(UltAlprSdkResult result) {\n        \u002F\u002F 在此处处理识别结果，例如获取车牌号\n        if (result != null && result.text != null) {\n            Log.d(\"ALPR\", \"识别结果：\" + result.text);\n        }\n    }\n}\n\nfinal MyUltAlprSdkParallelDeliveryCallback mCallback = new MyUltAlprSdkParallelDeliveryCallback();\n\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    \n    \u002F\u002F 1. 初始化引擎\n    assert UltAlprSdkEngine.init(\n            getAssets(),\n            CONFIG,\n            mCallback\n    ).isOK();\n    \n    \u002F\u002F 2. 处理图像帧 (在相机回调中调用)\n    \u002F\u002F UltAlprSdkEngine.process(imageData, width, height, ULTALPR_SDK_IMAGE_TYPE.NV21);\n    \n    \u002F\u002F 3. 销毁引擎 (在 onDestroy 中调用)\n    \u002F\u002F UltAlprSdkEngine.deInit();\n}\n```\n\n### 其他平台 (C++ API 简述)\n\n```cpp\n#include \"UltAlprSdk.h\"\n\nint main() {\n    std::string config = R\"({\n        \"debug_level\": \"info\",\n        \"gpgpu_enabled\": true,\n        \"detect_minscore\": 0.1\n    })\";\n\n    \u002F\u002F 初始化\n    if (!UltAlprSdk::init(config)) {\n        return -1;\n    }\n\n    \u002F\u002F 处理图像 (伪代码)\n    \u002F\u002F UltAlprSdk::process(imageData, width, height, callback);\n\n    \u002F\u002F 销毁\n    UltAlprSdk::deInit();\n    return 0;\n}\n```\n\n> **提示**：更多详细文档请访问 [官方文档](https:\u002F\u002Fwww.doubango.org\u002FSDKs\u002Fanpr\u002Fdocs\u002F)，在线演示可访问 [Web Demo](https:\u002F\u002Fwww.doubango.org\u002Fwebapps\u002Falpr\u002F)。","某智慧停车运营商计划在地下车库入口部署基于廉价 ARM 开发板（如 Raspberry Pi 或 Jetson Nano）的本地化车牌识别系统，以替代昂贵的高性能服务器方案。\n\n### 没有 ultimateALPR-SDK 时\n- **硬件成本高昂**：传统算法在低算力设备上运行缓慢，被迫采购配备独立 GPU 的工控机，导致单点部署成本激增。\n- **夜间识别率低**：车库入口光线昏暗，普通开源库缺乏专门的夜视图像增强（IENV）功能，导致大量车牌无法识别或误识。\n- **依赖云端延迟大**：为弥补本地算力不足，需将视频流上传至云端处理，不仅产生持续带宽费用，还因网络波动造成开闸延迟。\n- **多语种支持困难**：面对包含中文、韩文等多字符车牌时，现有方案往往需要针对不同地区维护多套模型，集成复杂度极高。\n\n### 使用 ultimateALPR-SDK 后\n- **边缘设备高性能运行**：利用其针对 ARM NEON 指令集的极致优化，在百元级开发板上即可实现 64fps 的实时识别，无需额外 GPU。\n- **全天候精准识别**：内置的夜视图像增强技术自动优化暗光画面，结合深度学习模型，显著提升夜间及逆光环境下的车牌捕获率。\n- **纯本地化处理**：所有计算均在设备端完成，彻底消除云端依赖，既节省了带宽与维护成本，又实现了毫秒级开闸响应。\n- **一站式多字符支持**：原生支持拉丁、中文、韩文等多字符集，一套 SDK 即可覆盖全球不同地区的车牌识别需求，大幅简化开发流程。\n\nultimateALPR-SDK 通过将高性能深度学习推理下沉至低成本边缘设备，帮助企业在零云端依赖的前提下，构建了低成本、高实时且全天候可靠的智能交通系统。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FDoubangoTelecom_ultimateALPR-SDK_86ce1026.jpg","DoubangoTelecom",null,"https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FDoubangoTelecom_16c40312.png","Doubango Telecom","Paris (France)","doubangotelecom","https:\u002F\u002Fwww.doubango.org\u002F","https:\u002F\u002Fgithub.com\u002FDoubangoTelecom",[24,28,32,36,40,44,48,52],{"name":25,"color":26,"percentage":27},"C++","#f34b7d",73.7,{"name":29,"color":30,"percentage":31},"Java","#b07219",11.1,{"name":33,"color":34,"percentage":35},"C#","#178600",9.2,{"name":37,"color":38,"percentage":39},"Python","#3572A5",3.2,{"name":41,"color":42,"percentage":43},"Perl","#0298c3",1.7,{"name":45,"color":46,"percentage":47},"Batchfile","#C1F12E",0.7,{"name":49,"color":50,"percentage":51},"Shell","#89e051",0.4,{"name":53,"color":54,"percentage":55},"CMake","#DA3434",0,714,176,"2026-04-11T17:39:59","NOASSERTION",4,"Android, Linux (包括 Raspbian OS), Windows, NVIDIA Jetson","非必需。支持通过 CUDA、NVIDIA TensorRT 和 Intel OpenVINO 进行加速。在高端 NVIDIA GPU (如 Tesla V100) 上性能最佳，但引擎设计为可在纯 CPU (利用 SIMD ARM NEON 优化) 上运行，无需专用 GPU。","未说明",{"notes":65,"python":66,"dependencies":67},"该 SDK 专为嵌入式设备和边缘计算设计，无需联网或云端即可运行。支持多种编程语言（C++, C#, Java, Python）。在低端 CPU（如 Raspberry Pi 4）上可达 12fps，在高端 CPU（如 Intel Xeon 配合 OpenVINO）上可达 237fps。无需注册、许可证密钥或互联网连接即可使用示例代码。","支持 Python API，具体版本要求未说明",[68,69,70,71],"OpenCV (compv)","CUDA (可选，用于 GPU 加速)","NVIDIA TensorRT (可选，用于 GPU 加速)","Intel OpenVINO (可选，用于 CPU 加速)",[73,74],"插件","开发框架",[76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],"artificial-intelligence","alpr","anpr","anpr-sdk","machine-learning","deep-learning","license-plate","license-plate-recognition","license-plate-detection","raspberry-pi","android","linux","windows","openvino","tensorflow","jetson","jetson-nano","khadas-vims-boards","amlogic-npu","khadas-vim3",2,"ready","2026-03-27T02:49:30.150509","2026-04-18T14:13:36.771167",[101,106,111,116,121,126],{"id":102,"question_zh":103,"answer_zh":104,"source_url":105},39919,"调用 DeInit 后内存使用量为何没有下降？","内存池是按线程分配的。每个线程会先分配最小内存，处理图像时增长到一定量后停止。如果您将配置参数 `num_threads` 设置为 1（而不是 -1），内存差异应该会很小。维护者已更新代码以在 deInit 后回收每个线程的内存，建议升级到 v3.3.3 或更高版本以解决此问题。此外，建议在循环结束时显式调用 `image.Dispose()`。","https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002FultimateALPR-SDK\u002Fissues\u002F152",{"id":107,"question_zh":108,"answer_zh":109,"source_url":110},39920,"为什么首次检测速度慢或 JSON 中的持续时间不准确？","第一次调用总是较慢，因为需要加载和初始化模型。JSON 结果中的持续时间往往不能反映真实速度。要获取真实的性能数据，请使用官方提供的 benchmark 应用程序。如果没有配备 CUDA 的 GPU，建议启用 OpenVINO 进行测试。参考文档：samples\u002Fc++\u002Fbenchmark\u002FREADME.md。","https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002FultimateALPR-SDK\u002Fissues\u002F125",{"id":112,"question_zh":113,"answer_zh":114,"source_url":115},39921,"如何在 Azure Functions 或云环境中激活运行时密钥（Runtime Key）？","许可证与实例绑定，只要不终止实例就有效。对于 Azure Functions，支持情况取决于具体环境，激活失败可能意味着不支持。如果要在生产环境部署，需遵循文档使用主密钥激活运行时密钥：`.\u002FruntimeKey --type azure-instance --assets ..\u002F..\u002F..\u002Fassets`。注意：开发或测试环境通常使用试用版即可，生产环境才需要正式授权。如有特定激活问题，建议直接联系支持团队。","https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002FultimateALPR-SDK\u002Fissues\u002F282",{"id":117,"question_zh":118,"answer_zh":119,"source_url":120},39922,"为什么同样的许可证密钥在示例程序中有效，但在自己的代码中无效？","这通常是因为配置文件中的 JSON 格式错误。检查日志，您可能会发现 JSON 字符串过早闭合（例如多了一个 `}`），导致后续的 token 数据被忽略。请确保 JSON 结构完整且正确，不要在不该结束的地方关闭大括号。","https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002FultimateALPR-SDK\u002Fissues\u002F184",{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},39923,"在 Jetson Nano (2GB RAM) 上运行 prepare.sh 时进程被杀死（Killed）怎么办？","这是因为 2GB 内存不足以在设备上生成模型，导致内存溢出被系统杀死。解决方案是使用拥有更大内存的设备（如 4GB 版本的 Jetson Nano）来生成模型，然后将生成的模型文件复制到 2GB 的设备上使用。官方曾提供过预生成的模型供此类设备使用。","https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002FultimateALPR-SDK\u002Fissues\u002F173",{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},39924,"在 Raspberry Pi 上识别准确率较低（如 Q 识别为 0，Z 识别为 7）如何解决？","这是一个已知问题，已在 v3.7.0 版本中修复。如果您遇到字符识别混淆的问题，请将 SDK 升级到 v3.7.0 或更高版本。","https:\u002F\u002Fgithub.com\u002FDoubangoTelecom\u002FultimateALPR-SDK\u002Fissues\u002F151",[],[133,145,153,162,171,179],{"id":134,"name":135,"github_repo":136,"description_zh":137,"stars":138,"difficulty_score":139,"last_commit_at":140,"category_tags":141,"status":97},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[142,74,143,144],"Agent","图像","数据工具",{"id":146,"name":147,"github_repo":148,"description_zh":149,"stars":150,"difficulty_score":139,"last_commit_at":151,"category_tags":152,"status":97},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[74,143,142],{"id":154,"name":155,"github_repo":156,"description_zh":157,"stars":158,"difficulty_score":96,"last_commit_at":159,"category_tags":160,"status":97},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",159636,"2026-04-17T23:33:34",[74,142,161],"语言模型",{"id":163,"name":164,"github_repo":165,"description_zh":166,"stars":167,"difficulty_score":168,"last_commit_at":169,"category_tags":170,"status":97},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[142,73],{"id":172,"name":173,"github_repo":174,"description_zh":175,"stars":176,"difficulty_score":96,"last_commit_at":177,"category_tags":178,"status":97},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[74,143,142],{"id":180,"name":181,"github_repo":182,"description_zh":183,"stars":184,"difficulty_score":96,"last_commit_at":185,"category_tags":186,"status":97},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[73,142,143,74]]