You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中用Tesseract识别照片白标签黑字5位数字并批量重命名?

解决方案:自动识别白底黑字标签5位数字并重命名图片

现存问题

  • 图像预处理效果不佳,OCR识别准确率低
  • 无法从标签的其他文本中分离出唯一的大字体5位数字(标签包含其他数字,目标数字可能重复)
  • 无法自动检测图像方向,需手动调整旋转角度
  • 未实现识别完成后自动重命名图片的功能

优化后完整代码

library(tesseract)
library(magick)
library(stringr)
library(dplyr)

# 初始化OCR引擎,仅保留数字字符
ocr_engine <- tesseract(options = list(
  tessedit_char_whitelist = "0123456789",
  load_system_dawg = FALSE,
  load_freq_dawg = FALSE
))

# 图像预处理函数:校正方向、增强对比度、去噪裁剪
preprocess_image <- function(img_path) {
  image_read(img_path) %>%
    # 自动校正图像旋转方向
    image_orient("auto") %>%
    # 转换为灰度图
    image_convert(type = "Grayscale") %>%
    # 阈值处理,强化白底黑字对比
    image_threshold(type = "white", threshold = "20%") %>%
    # 去噪处理
    image_reducenoise(5) %>%
    # 裁剪边缘无关区域
    image_trim(fuzz = 20) %>%
    # 放大图像提升OCR识别精度
    image_resize("2000x")
}

# 提取大字体5位数字函数:基于字符尺寸筛选目标数字
extract_large_5digit <- function(img) {
  # 获取OCR识别的详细数据(含字符边界框尺寸)
  ocr_data <- ocr_data(img, engine = ocr_engine)
  
  # 计算字符平均高度,筛选出高度超过平均值1.5倍的大字体字符
  avg_height <- mean(ocr_data$height, na.rm = TRUE)
  large_chars <- ocr_data %>%
    filter(height > avg_height * 1.5) %>%
    arrange(left)
  
  # 拼接大字体字符,提取连续5位数字
  large_text <- str_c(large_chars$text, collapse = "")
  target_num <- str_extract(large_text, "\\d{5}")
  
  return(target_num)
}

# 批量处理重命名函数:遍历文件夹图片完成识别与重命名
batch_rename_images <- function(folder_path) {
  # 获取文件夹内所有图片文件(支持jpg/jpeg/png格式)
  img_files <- list.files(folder_path, pattern = "\\.(jpg|jpeg|png)$", full.names = TRUE)
  
  for (file in img_files) {
    tryCatch({
      processed_img <- preprocess_image(file)
      target_num <- extract_large_5digit(processed_img)
      
      if (!is.na(target_num)) {
        # 构造新文件名,重复数字添加计数器后缀避免覆盖
        new_path <- file.path(folder_path, paste0(target_num, "_", basename(file)))
        counter <- 1
        while (file.exists(new_path)) {
          new_path <- file.path(folder_path, paste0(target_num, "_", counter, "_", basename(file)))
          counter <- counter + 1
        }
        # 执行重命名
        file.rename(file, new_path)
        cat("已重命名:", basename(file), "→", basename(new_path), "\n")
      } else {
        cat("未识别到目标数字:", basename(file), "\n")
      }
    }, error = function(e) {
      cat("处理出错:", basename(file), "→", e$message, "\n")
    })
  }
}

# 使用示例:替换为你的图片文件夹路径
batch_rename_images("path/to/your/image/folder")

关键改进说明

  1. 自动方向校正:通过image_orient("auto")调用ImageMagick自动旋转功能,无需手动调整角度
  2. 优化预处理流程:改用image_threshold替代image_level,精准强化白底黑字对比;调整去噪、裁剪参数减少干扰
  3. 基于字体大小筛选目标数字:利用ocr_data获取字符边界框高度,筛选出大字体字符后提取5位连续数字,避免误识别其他小字体数字
  4. 批量处理与重命名:遍历指定文件夹内所有图片,自动完成识别与重命名;针对重复数字添加计数器后缀,避免文件覆盖

内容的提问来源于stack exchange,提问作者gvash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:07:50