c# 调用图片模型识别微信二维码
模型地址:https://github.com/WeChatCV/opencv_3rdparty
[AllowAnonymous]
[HttpPost("process")]
public async Task<string> ProcessImage(IFormFile file)
{
if (file == null || file.Length == 0)
return ("No file uploaded");
// 创建保存目录
var uploadsFolder = Path.Combine(App.HostEnvironment.ContentRootPath, "Uploads");
if (!Directory.Exists(uploadsFolder))
Directory.CreateDirectory(uploadsFolder);
// 保存原始图片
var originalFilePath = Path.Combine(uploadsFolder, file.FileName);
using (var stream = new FileStream(originalFilePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
using var src = Cv2.ImRead(originalFilePath);
// 模型路径
string modelDir = Path.Combine(App.HostEnvironment.ContentRootPath, "opencv_wechat_qrcode");
string detectProto = Path.Combine(modelDir, "detect.prototxt");
string detectModel = Path.Combine(modelDir, "detect.caffemodel");
string srProto = Path.Combine(modelDir, "sr.prototxt");
string srModel = Path.Combine(modelDir, "sr.caffemodel");
// WeChatQRCode新版API
using var wechatQrcode = WeChatQRCode.Create(detectProto, detectModel, srProto, srModel);
wechatQrcode.DetectAndDecode(
src,
out Mat[] rects,
out string[] texts
);
if (rects.Length > 0 && texts.Length > 0 && !string.IsNullOrEmpty(texts[0]))
{
// 只取第一个二维码
var rect = rects[0];
// rect是4x2的点阵,取最小外接矩形
var points = new[]
{
new Point2f(rect.At<float>(0, 0), rect.At<float>(0, 1)),
new Point2f(rect.At<float>(1, 0), rect.At<float>(1, 1)),
new Point2f(rect.At<float>(2, 0), rect.At<float>(2, 1)),
new Point2f(rect.At<float>(3, 0), rect.At<float>(3, 1))
};
var boundingRect = Cv2.BoundingRect(points);
boundingRect.X = Math.Max(0, boundingRect.X);
boundingRect.Y = Math.Max(0, boundingRect.Y);
boundingRect.Width = Math.Min(src.Width - boundingRect.X, boundingRect.Width);
boundingRect.Height = Math.Min(src.Height - boundingRect.Y, boundingRect.Height);
using var qrRoi = new Mat(src, boundingRect);
var qrCodeFileName = $"QRCode_{DateTime.Now:yyyyMMddHHmmss}.png";
var qrCodePath = Path.Combine(uploadsFolder, qrCodeFileName);
Cv2.ImWrite(qrCodePath, qrRoi);
}
return "";
}

浙公网安备 33010602011771号