using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Tesseract;
namespace TesseractImageToText
{
internal class Program
{
static void Main(string[] args)
{
string inputFilePath = @"C:\Users\admin\Downloads\images_org.tsv"; // 输入 TSV 文件路径
string outputFilePath = @"C:\Users\admin\Downloads\images_result.tsv"; // 输出 TSV 文件路径
// 打开输入文件进行读取
using (StreamReader reader = new StreamReader(inputFilePath))
{
// 创建用于写入的输出文件
using (StreamWriter writer = new StreamWriter(outputFilePath))
{
// 读取输入文件内容直到文件结束
while (!reader.EndOfStream)
{
// 读取一行内容
string line = reader.ReadLine();
// 使用制表符 '\t' 分隔行内容成字段
string[] fields = line.Split('\t');
// 确保文件包含三列数据
if (fields.Length >= 3)
{
// 读取前三列数据
string column1 = fields[0];
string column2 = fields[1];
string column3 = fields[2];
// 添加新列数据(这里假设新列数据是每行的索引)
string newColumn = string.Empty;
if (column2.StartsWith("https"))
{
newColumn = GetTextFromImage(column2);
}
else
{
newColumn = "ResultText";
}
// 写入新的行数据到输出文件
writer.WriteLine($"{column1}\t{column2}\t{column3}\t{newColumn}");
}
else
{
// 如果行数据少于三列,直接写入原始行数据到输出文件
writer.WriteLine(line);
}
}
}
}
Console.WriteLine("TSV 文件处理完成。");
}
static string GetTextFromImage(string imageUrl)
{
Bitmap bitmap;
using (WebClient client = new WebClient())
{
using (var stream = client.OpenRead(imageUrl))
{
bitmap = new Bitmap(stream);
}
}
using (var engine = new TesseractEngine(@"C:\GitCode\tesseract\tessdata", "eng", EngineMode.Default))
{
using (var image = PixConverter.ToPix(bitmap))
{
using (var page = engine.Process(image))
{
string extractedText = page.GetText();
return extractedText.Replace(" ","").Replace("\n", "").Replace("\t", "");
}
}
}
}
}
}
使用Tesseract组件,.net Framework下运行,需要下载训练好的数据放到tessdata目录下,我这里只有eng和简体中文。