11个不稳定版本 (4个破坏性版本)
0.5.0 | 2023年7月29日 |
---|---|
0.4.1 | 2023年3月11日 |
0.4.0 | 2022年11月27日 |
0.3.0 | 2021年11月3日 |
0.1.1 | 2019年5月4日 |
#144 in 图像
每月324次 下载
用于 6 crate
130KB
3K SLoC
Bardecoder
用100% Rust编写的检测和解码QR码
背景
这个库是在查看Not Yet Awesome Rust列表后出现的。它力求模块化,以便可以相互替换具有不同强度、速度和鲁棒性的算法。
如何使用
将以下内容添加到您的Cargo.toml
[dependencies]
bardecoder = "0.5"
image = "0.24"
快速
最快的方式是使用内置的默认解码器。这在绝大多数情况下都会工作,但请注意以下提示。
fn main() {
let img = image::open("<<image location>>").unwrap();
// Use default decoder
let decoder = bardecoder::default_decoder();
let results = decoder.decode(&img);
for result in results {
println!("{}", result.unwrap());
}
}
修改
如果您想有一些自定义性,可以从默认构建器开始。它将预先填充默认组件,但您可以将任何组件替换为修改后的参数。
use bardecoder;
use bardecoder::prepare::BlockedMean;
use image;
fn main() {
let img = image::open("<<image location>>").unwrap();
// Use default decoder builder
let mut db = bardecoder::default_builder();
// Use some different arguments in one of the default components
db.prepare(Box::new(BlockedMean::new(7, 9)));
// Build the actual decoder
let decoder = db.build();
let results = decoder.decode(&img);
for result in results {
println!("{}", result.unwrap());
}
}
您也可以从一个完全空的构建器开始,但请注意,如果任何组件缺失,build()
函数将Panic!
。
use bardecoder::DecoderBuilder;
let mut decoder_builder = DecoderBuilder::new();
高级
如果您想彻底疯狂,您还可以为各种组件提供自己的实现。自行承担风险!
use bardecoder;
use bardecoder::prepare::BlockedMean;
use bardecoder::detect::{Detect, Location};
use image;
use image::GrayImage;
struct MyDetector {}
impl MyDetector {
pub fn new() -> MyDetector {
MyDetector {}
}
}
impl Detect<GrayImage> for MyDetector {
fn detect(&self, prepared: &GrayImage) -> Vec<Location> {
vec![]
}
}
fn main() {
let img = image::open("<<image location>>").unwrap();
// Use default decoder builder
let mut db = bardecoder::default_builder();
// Use some different arguments in one of the default components
db.prepare(Box::new(BlockedMean::new(7, 9)));
// Use your homemade Detector!
db.detect(Box::new(MyDetector::new()));
// Build the actual decoder
let decoder = db.build();
let results = decoder.decode(&img);
for result in results {
println!("{}", result.unwrap());
}
}
提示
尽管这个库可以处理各种QR图像,但以下是一些优化结果的小提示
- 保持源图像的分辨率低一些,比如在400x300到800x600像素之间。任何更高的分辨率,检测代码都会相当耗时。
- 保持QR码居中并放大。
- 保持QR码无错误,无论是故意的还是偶然的。虽然QR码具有自纠正功能,但实际纠正并不便宜。然而,在开始这个过程之前,很容易检测到QR码是无错误的,因此在这种情况下会提前退出。
功能
Bardecoder
公开以下功能,以便在项目中使用
-
debug-images
: 一些默认组件将在<tmp>/bardecoder-debug-images
文件夹中输出调试图像,其中<tmp>
是默认的操作系统临时文件夹。这可以帮助直观地了解算法正在做什么。请注意,某些组件(例如QRExtractor
)会输出大量的图像,所以请务必不要使用这个功能,除非想查看出错时发生了什么。 -
fail-on-warnings
: 虽然其主要用途是针对travis-ci
,但如果您喜欢这样的功能。
支持
如果您发现这个库无法解码的带有二维码的图像,请提出一个 问题。请包括图像和您尝试解码的代码(特别是当使用 修改 方法时)。我会尽力改进算法,但不能保证100%成功,尤其是对于更复杂的二维码。
贡献
如果您发现了一个小错误并能自己修复,请随时提交一个 pull request。对于更大的重构和更根本的问题,请提交一个 工单,概述问题和潜在解决方案。
依赖项
~6MB
~83K SLoC