Zxing提高二维码图片识别成功率

因为要用到二维码解析,所以就使用了zxing的图片进行识别,开始时图片大小随意传输,有手机拍照图片,有手机截图图片,还有电脑截图图片,各种大小不一致,就导致zxing的识别率特别低。

后续想到了图片处理,测试了一些,目前使用512px的识别成功率比较高,目前程序识别成功率大概在95%以上。

下面上干货吧!

//图片像素按比例缩放
Image imagePic = Image.FromStream(stream);
Bitmap bmp = imagePic as Bitmap;
if (imagePic.Width > 512)
{
int zoomMultiple = imagePic.Width / 512;
int toWidth = 512;
int toHeight = imagePic.Height / zoomMultiple;
bmp = new Bitmap(toWidth, toHeight);
using (Graphics g = Graphics.FromImage(bmp))
{
	g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
	g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
	g.Clear(Color.Transparent);
	g.DrawImage(imagePic,
				new Rectangle(0, 0, toWidth, toHeight),
				new Rectangle(0, 0, imagePic.Width, imagePic.Height),
				GraphicsUnit.Pixel);
	imagePic.Dispose();
}

图片设置好之后进行识别就可以了

//第一种识别方式Zxing
var codes = new BarcodeReader
{
	AutoRotate = true,
	TryInverted = true,
	Options = new DecodingOptions
	{
		TryHarder = true
	}
}.DecodeMultiple(bmp);
if (codes != null)
{
	result.DataView = codes[0].Text;
	result.Code = Enum.ResultCode.DealSuccess;
	result.Message = "识别成功";
	return ReturnResp(result);
}
//第二种识别方式ZBar
using (ZBar.ImageScanner scanner = new ZBar.ImageScanner())
{
	var symbols = scanner.Scan(bmp);
	if (symbols.Count > 0 && symbols[0].Data.Length > 8)
	{
		result.DataView = symbols[0].Data;
		result.Code = Enum.ResultCode.DealSuccess;
		result.Message = "识别成功";
		return ReturnResp(result);
	}
}
//第三种识别方式Zxing
MultiFormatReader reader = new MultiFormatReader();
Dictionary<DecodeHintType, object> dictionary = new Dictionary<DecodeHintType, object> { { DecodeHintType.CHARACTER_SET, "UTF-8" } };
RGBLuminanceSource source = new RGBLuminanceSource(QrCode.Bitmap2Rgb(bmp), bmp.Width, bmp.Height);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Result resultVerify = reader.decode(bitmap, dictionary);
if (resultVerify != null)
{
	result.DataView = resultVerify.Text;
	result.Code = Enum.ResultCode.DealSuccess;
	result.Message = "识别成功";
	return ReturnResp(result);
}
string thoughtWorksResult = "";
//第四种识别方式thoughtWorks
try
{
	QRCodeDecoder decoder = new QRCodeDecoder();
	thoughtWorksResult = decoder.decode(new ThoughtWorks.QRCode.Codec.Data.QRCodeBitmapImage(bmp));
}
catch (Exception)
{
}
if (!string.IsNullOrEmpty(thoughtWorksResult))
{
	result.DataView = thoughtWorksResult;
	result.Code = Enum.ResultCode.DealSuccess;
	result.Message = "识别成功";
	return ReturnResp(result);
}
else
{
	result.Code = Enum.ResultCode.DealFail;
	result.Message = "识别失败";
}

好了识别目前还没想到更好的提高成功率的方法,找到再进行更新吧。

ZXing 是一种开源的二维码识别库。通过使用 ZXing 库,我们可以在 Android 或者 Java 应用程序中实现对二维码识别功能。在识别二维码过程中,我们首先需要使用手机摄像头捕获二维码的图像,然后将这个图像传递给 ZXing 库进行解码。ZXing 库会对图像进行处理,提取出其中的二维码信息,并返回给我们。 使用 ZXing 库进行二维码识别需要一些基本的步骤。首先,我们需要在项目中引入 ZXing 库的相关依赖,可以通过 Maven 或者直接下载库文件的方式引入。接下来,我们需要初始化识别器,并设置一些参数,例如识别图像的格式、识别所用的字符编码等等。然后,我们可以通过调用 ZXing 库的识别方法来识别二维码识别方法将返回一个 Result 对象,其中包含了二维码的内容、二维码的格式等信息。 在识别二维码的过程中,我们还可以对识别器进行一些额外的操作。例如,可以设置识别器在识别过程中的一些回调方法,以便在识别过程中进行一些特殊操作。此外,我们还可以对识别图像进行一些处理,例如旋转、裁剪等等,以提高识别的准确度。 总之,ZXing 是一个功能强大的开源二维码识别库。通过使用这个库,我们可以轻松地实现对二维码识别功能,并可以根据需要进行一些额外的操作。无论是在 Android 还是 Java 应用程序中,ZXing 都是一个值得使用的优秀工具。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值