如何在PowerShell中将内存流图像直接传入Tesseract OCR
解决方案:PowerShell中通过内存流向Tesseract传入图像执行OCR
Tesseract命令行工具不支持直接传入[System.Drawing.Image]对象,它仅接受文件路径或标准输入(stdin)作为图像输入源。要实现从内存流传递图像,核心思路是将内存中的图像数据通过管道输出到Tesseract的标准输入,具体步骤如下:
实现步骤
1. 准备依赖组件
确保以下文件都放在同一目录下(无需系统级安装):
tesseract.exe(Tesseract命令行二进制文件)- Tesseract运行所需的依赖DLL(如
liblept178.dll、libtesseract5.dll等) - 语言包文件(如
eng.traineddata,放在同级的tessdata子目录中)
2. 内存流图像转标准输入的PowerShell代码
如果你的内存流图像已经是[System.Drawing.Image]对象(即$OCRImage),可以先将其重新写入一个内存流(以PNG格式为例),再将流内容通过管道传给Tesseract:
# 1. 将Image对象写入新的内存流(PNG格式) $outputStream = New-Object System.IO.MemoryStream $OCRImage.Save($outputStream, [System.Drawing.Imaging.ImageFormat]::Png) $outputStream.Position = 0 # 重置流指针到起始位置 # 2. 将流的字节数组通过管道传给Tesseract $outputStream.ToArray() | ./tesseract.exe stdin stdout -l eng --psm 6
优化方案(直接使用原始内存流)
如果你的$MemStream_Image本身就是PNG/JPG等Tesseract支持的图像格式字节流,无需转成[System.Drawing.Image]对象,直接传递即可,效率更高:
# 重置原始内存流指针到起始位置 $MemStream_Image.Position = 0 # 直接将流内容传给Tesseract $MemStream_Image.ToArray() | ./tesseract.exe stdin stdout -l eng --psm 6
关键说明
- 命令中用
stdin代替原文件路径,告诉Tesseract从标准输入读取图像数据 - 确保传递的图像格式是Tesseract支持的(PNG、JPG、BMP等)
- 如果使用
System.Drawing相关类型时出现错误,可手动加载程序集:Add-Type -AssemblyName System.Drawing
内容的提问来源于stack exchange,提问作者AnonPowershellGuy1
相关产品推荐
相关产品推荐

