Windows 10下基于OCR识别批量重命名含文字图片文件的方法咨询
Windows 10下基于OCR识别批量重命名含文字图片文件的方法咨询
嗨,我来给你分享几个在Windows 10上实现这个需求的实用方案,不管你是偏好图形化操作还是愿意写点简单脚本,都能找到合适的路子!
方法一:PowerShell + Windows内置OCR(无额外软件依赖)
Windows 10 1903及以上版本自带了OCR引擎,不用额外下载第三方工具,用PowerShell就能搞定批量处理,步骤如下:
- 先确认内置OCR已启用:打开设置 > 应用 > 可选功能,检查是否有“光学字符识别”,如果没有就点击“添加功能”搜索安装。
- 复制下面的脚本,保存为
RenameImagesWithOCR.ps1:
# 加载Windows OCR相关的.NET程序集 Add-Type -AssemblyName Windows.Media.Ocr Add-Type -AssemblyName Windows.Storage Add-Type -AssemblyName System.Drawing # 替换为你的图片文件夹实际路径 $imageFolder = "C:\Your\Image\Folder" # 获取文件夹内的常见图片格式文件 $imageFiles = Get-ChildItem -Path $imageFolder -Include *.jpg,*.png,*.bmp -File foreach ($file in $imageFiles) { $bitmap = [System.Drawing.Bitmap]::FromFile($file.FullName) try { # 创建OCR引擎(使用系统默认语言) $ocrEngine = [Windows.Media.Ocr.OcrEngine]::TryCreateFromUserProfileLanguages() if ($ocrEngine) { # 将Bitmap转换为OCR支持的格式 $lockBits = $bitmap.LockBits( [System.Drawing.Rectangle]::FromLTRB(0,0,$bitmap.Width,$bitmap.Height), [System.Drawing.Imaging.ImageLockMode]::ReadOnly, [System.Drawing.Imaging.PixelFormat]::Format32bppArgb ) $softwareBitmap = [Windows.Graphics.Imaging.SoftwareBitmap]::CreateCopyFromBuffer( $lockBits.Scan0, [Windows.Graphics.Imaging.BitmapPixelFormat]::Bgra8, $bitmap.Width, $bitmap.Height ) $bitmap.UnlockBits($lockBits) # 执行OCR识别 $ocrResult = $ocrEngine.RecognizeAsync($softwareBitmap).AsTask().Result if ($ocrResult.Text -and $ocrResult.Text.Trim() -ne "") { # 过滤文件名非法字符 $cleanText = $ocrResult.Text.Trim() -replace '[<>:"/\\|?*]', '_' $newFilePath = Join-Path -Path $imageFolder -ChildPath "$cleanText$($file.Extension)" # 处理重名,自动加数字后缀 $counter = 1 while (Test-Path $newFilePath) { $newFilePath = Join-Path -Path $imageFolder -ChildPath "$cleanText_$counter$($file.Extension)" $counter++ } # 执行重命名 Rename-Item -Path $file.FullName -Destination $newFilePath Write-Host "✅ 已重命名: $($file.Name) -> $($newFilePath | Split-Path -Leaf)" } else { Write-Host "❌ 无法识别文件文本: $($file.Name)" } } else { Write-Host "⚠️ 无法创建OCR引擎,请检查语言包" } } finally { $bitmap.Dispose() } }
- 右键脚本文件,选择用PowerShell运行(权限不足就用管理员身份运行),等待执行完成即可。
方法二:IrfanView + OCR插件(图形化操作,适合新手)
如果你不想碰代码,这个图形化工具方案简单易上手:
- 下载安装IrfanView(轻量免费图片查看器),再下载对应版本的OCR插件(
IrfanView_OCR_plugin.exe)并安装。 - 打开IrfanView,点击顶部菜单文件 > 批量转换/重命名。
- 点击添加文件/目录,选中要处理的图片。
- 切换到批量重命名标签页,点击高级,在设置里选择OCR文本作为文件名(插件安装后才会显示)。
- 开启“替换非法字符为下划线”,点击预览确认新文件名,没问题就点击开始批量重命名。
方法三:Python脚本(灵活定制,适合有编程基础的用户)
要是你想自定义识别规则(比如提取特定区域文本、多语言适配),可以用Python结合Tesseract OCR实现:
- 安装Tesseract OCR:下载官方安装包,安装后建议将路径(比如
C:\Program Files\Tesseract-OCR)添加到系统环境变量PATH。 - 安装依赖库:打开命令提示符,执行
pip install pytesseract pillow。 - 编写脚本保存为
rename_images_ocr.py:
import os import re import pytesseract from PIL import Image # 替换为你的图片文件夹路径 IMAGE_FOLDER = r"C:\Your\Image\Folder" # 若Tesseract未加PATH,取消注释并填写完整路径 # pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' for filename in os.listdir(IMAGE_FOLDER): file_ext = os.path.splitext(filename)[1].lower() if file_ext in ['.png', '.jpg', '.jpeg', '.bmp']: file_path = os.path.join(IMAGE_FOLDER, filename) try: # OCR识别,lang参数:chi_sim=中文,eng=英文,可按需调整 with Image.open(file_path) as img: ocr_text = pytesseract.image_to_string(img, lang='chi_sim').strip() if ocr_text: # 过滤非法字符 clean_text = re.sub(r'[<>:"/\\|?*]', '_', ocr_text) new_file_name = f"{clean_text}{file_ext}" new_file_path = os.path.join(IMAGE_FOLDER, new_file_name) # 处理重名 counter = 1 while os.path.exists(new_file_path): new_file_name = f"{clean_text}_{counter}{file_ext}" new_file_path = os.path.join(IMAGE_FOLDER, new_file_name) counter += 1 os.rename(file_path, new_file_path) print(f"✅ 已重命名: {filename} -> {new_file_name}") else: print(f"❌ 无法识别图片文本: {filename}") except Exception as e: print(f"⚠️ 处理{filename}出错: {str(e)}")
- 在命令提示符进入脚本目录,执行
python rename_images_ocr.py即可。
实用小提示
- 提高识别率:若图片模糊、对比度低,可先批量调整亮度/对比度,或裁剪无关区域后再识别。
- 备份文件:批量操作前建议复制一份图片备份,避免意外。
- 语言适配:若图片是其他语言,记得安装对应OCR语言包(PowerShell在设置里添加,Tesseract需下载对应训练数据)。
备注:内容来源于stack exchange,提问作者Bumpcity




