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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:02:39