前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【图片区域识别教程】如何批量区域识别图片文字,并用文字内容来批量改名,基于WPF和腾讯OCR的详细步骤教程

【图片区域识别教程】如何批量区域识别图片文字,并用文字内容来批量改名,基于WPF和腾讯OCR的详细步骤教程

原创
作者头像
不负众望
发布2025-03-06 09:14:55
发布2025-03-06 09:14:55
1600
代码可运行
举报
运行总次数:0
代码可运行

一、项目应用背景

  1. 电商商品管理:电商平台拥有大量商品图片,图片中包含商品名称、型号、价格等信息。通过批量区域识别图片文字,提取关键信息用于图片重命名,能使商品图片管理更加规范有序,方便运营人员快速查找和使用,提升商品信息管理效率。例如,将一张包含 “耐克运动鞋,型号 AJ1,价格 899 元” 文字的图片,识别文字后重命名为 “耐克_AJ1_899 元.jpg”,便于在海量图片中精准定位商品。

二、基于 WPF 和腾讯云 OCR 的详细步骤

(一)准备工作

  1. 确认环境配置
    • 已安装并配置好 Visual Studio,且创建了 WPF 应用程序项目。确保开发环境能正常运行 WPF 相关代码。
    • 完成腾讯云 SDK 的配置工作。在腾讯云官网下载对应语言(如 C#)的 SDK,并在 Visual Studio 项目中通过 NuGet 包管理器安装腾讯云 OCR 相关依赖包,同时获取并妥善保存腾讯云的密钥,用于后续认证。
  2. 引入图片处理相关库
    • 若需对图片格式进行转换、裁剪等预处理操作,可引入如 ImageSharp 库。在 Visual Studio 项目中,通过 NuGet 包管理器搜索并安装 ImageSharp 库,为后续可能的图片预处理工作提供支持。

(二)批量加载图片

  1. 在 WPF 界面添加功能
    • 在原有的 WPF 界面 XAML 文件中,添加一个按钮用于选择存放图片的文件夹。代码如下:
代码语言:javascript
代码运行次数:0
复制
<Button Content="Select Image Folder" HorizontalAlignment="Left" Margin="10,100,0,0" VerticalAlignment="Top" Width="120" Click="SelectImageFolder_Click"/>
  • 在对应的后台代码文件(如 MainWindow.xaml.cs)中,定义变量存储所选文件夹路径,并编写按钮点击事件处理方法:
代码语言:javascript
代码运行次数:0
复制
private string imageFolderPath;private void SelectImageFolder_Click(object sender, RoutedEventArgs e){    FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();    if (folderBrowserDialog.ShowDialog() == DialogResult.OK)    {        imageFolderPath = folderBrowserDialog.SelectedPath;        ResultTextBox.Text += $"Selected image folder: {imageFolderPath}\n";    }}
  1. 获取图片文件列表
    • 在开始处理图片的事件方法(假设为StartProcessing_Click)中,添加代码获取所选文件夹及其子文件夹中的所有符合格式要求的图片文件。腾讯云 OCR 服务支持多种常见图片格式,如 JPEG、PNG 等。示例代码如下:
代码语言:javascript
代码运行次数:0
复制
string[] imageFiles = Directory.GetFiles(imageFolderPath, "*.*", SearchOption.AllDirectories)                              .Where(file => file.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||                                             file.EndsWith(".jpeg", StringComparison.OrdinalIgnoreCase) ||                                             file.EndsWith(".png", StringComparison.OrdinalIgnoreCase)).ToArray();

(三)批量区域识别图片文字

  1. 定义区域识别参数
    • 腾讯云 OCR 服务允许指定区域进行文字识别。确定区域识别参数有两种方式:
      • 通过配置文件:创建一个配置文件,如ocr_config.json,定义区域的坐标和尺寸信息。示例内容如下:
代码语言:javascript
代码运行次数:0
复制
{    "region": {        "x": 100,        "y": 200,        "width": 300,        "height": 150    }}

在代码中读取该配置文件的方法如下:

代码语言:javascript
代码运行次数:0
复制
using System.IO;using System.Text.Json;public class OcrRegionConfig{    public Region Region { get; set; }}public class Region{    public int X { get; set; }    public int Y { get; set; }    public int Width { get; set; }    public int Height { get; set; }}public OcrRegionConfig LoadOcrConfig(){    string configPath = "ocr_config.json";    if (File.Exists(configPath))    {        string json = File.ReadAllText(configPath);        return JsonSerializer.Deserialize<OcrRegionConfig>(json);    }    return null;}
  • 通过 WPF 界面输入框:在 WPF 界面添加四个文本框,分别用于输入区域的 X 坐标、Y 坐标、宽度和高度。同时添加一个按钮,点击按钮触发获取输入值并设置区域参数的操作。
  1. 修改识别方法以支持区域识别
    • 在原有的RecognizeTextFromPdfPage方法基础上,创建新的方法RecognizeTextFromImage来支持图片区域识别。示例代码如下:
代码语言:javascript
代码运行次数:0
复制
public async Task<string> RecognizeTextFromImage(string imagePath, Region region){    byte[] fileBytes = File.ReadAllBytes(imagePath);    string base64File = Convert.ToBase64String(fileBytes);    Credential cred = new Credential    {        SecretId = "YOUR_SECRET_ID",        SecretKey = "YOUR_SECRET_KEY"    };    ClientProfile clientProfile = new ClientProfile();    HttpProfile httpProfile = new HttpProfile();    httpProfile.Endpoint = "ocr.tencentcloudapi.com";    clientProfile.HttpProfile = httpProfile;    OcrClient client = new OcrClient(cred, "ap-guangzhou", clientProfile);    GeneralBasicOCRRequest req = new GeneralBasicOCRRequest();    req.ImageBase64 = base64File;    if (region != null)    {        req.Region = new Region        {            X = region.X,            Y = region.Y,            Width = region.Width,            Height = region.Height        };    }    GeneralBasicOCRResponse resp = await client.GeneralBasicOCR(req);    string recognizedText = "";    foreach (var textDetection in resp.TextDetections)    {        recognizedText += textDetection.DetectedText + " ";    }    return recognizedText.Trim();}
  1. 批量识别图片文字
    • 在StartProcessing_Click方法中,遍历图片文件列表,调用修改后的识别方法进行区域识别。示例代码如下:
代码语言:javascript
代码运行次数:0
复制
OcrRegionConfig config = LoadOcrConfig();List<ImageInfo> imageInfos = new List<ImageInfo>();foreach (string imageFile in imageFiles){    string recognizedText = await RecognizeTextFromImage(imageFile, config?.Region);    imageInfos.Add(new ImageInfo { FilePath = imageFile, RecognizedText = recognizedText });}

这里ImageInfo是一个自定义的数据结构,用于存储图片路径和识别出的文字,定义如下:

代码语言:javascript
代码运行次数:0
复制
public class ImageInfo{    public string FilePath { get; set; }    public string RecognizedText { get; set; }}

(四)用识别文字内容批量改名

  1. 修改重命名方法
    • 原有的RenameFileBasedOnText方法是针对 PDF 文件的,现在创建新的RenameImageBasedOnText方法适用于图片文件。示例代码如下:
代码语言:javascript
代码运行次数:0
复制
public void RenameImageBasedOnText(string imagePath, string recognizedText){    string folderPath = Path.GetDirectoryName(imagePath);    string fileExtension = Path.GetExtension(imagePath);    string newFileName = $"{ExtractKeyInfo(recognizedText)}{fileExtension}";    string newFilePath = Path.Combine(folderPath, newFileName);    File.Move(imagePath, newFilePath);}

其中ExtractKeyInfo方法用于从识别出的文字中提取关键信息作为文件名的一部分,需要根据实际需求编写提取逻辑,例如通过正则表达式匹配。

2. 批量重命名图片

  • 在StartProcessing_Click方法中,遍历imageInfos列表,调用重命名方法对图片进行改名。示例代码如下:
代码语言:javascript
代码运行次数:0
复制
foreach (var imageInfo in imageInfos){    RenameImageBasedOnText(imageInfo.FilePath, imageInfo.RecognizedText);}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、项目应用背景
  • 二、基于 WPF 和腾讯云 OCR 的详细步骤
    • (一)准备工作
    • (二)批量加载图片
    • (三)批量区域识别图片文字
    • (四)用识别文字内容批量改名
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档