在我的工作中,我有时必须使用一些打印的源代码并手动将源代码输入到文本编辑器中。不要问为什么。
显然,输入它需要很长时间并且总是有额外的时间来调试输入错误(oops错过了“$”符号)。
我决定尝试一些OCR解决方案,如:
我觉得源代码很容易OCR,因为字体是无衬线和等宽字体。
你们有没有找到一个在源代码上运行良好的优秀OCR解决方案?
也许我只需要一个更好的OCR解决方案(不一定是源代码特定的)?
答案 0 :(得分:5)
使用OCR,目前有三种选择:
我很少做OCR,但我发现花费150美元购买商业软件可以减轻浪费时间。
答案 1 :(得分:3)
今天存在两个新选项(问题提出后几年):
<强> 1)。强>
Windows 10附带了Microsoft的OCR引擎。
它在命名空间中:
Windows.Media.Ocr.OcrEngine
https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.ocr
Github还有一个例子:
https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/OCR
你需要VS2015来编译这些东西。或者,如果您想使用旧版本的Visual Studio,则必须通过传统COM调用它,然后阅读Codeproject上的这篇文章:http://www.codeproject.com/Articles/262151/Visual-Cplusplus-and-WinRT-Metro-Some-fundamentals
OCR质量非常好。然而,如果文字太小,你必须放大图像。您可以通过Windows Update下载世界上存在的每种语言 - 即使是手写!
<强> 2)。强>
另一种选择是使用Office的OCR库。它是一个COM DLL。它在Office 2003,2007和Vista中可用,但已在Office 2010中删除。
http://www.codeproject.com/Articles/10130/OCR-with-Microsoft-Office
缺点是每个Office安装都支持少量语言。例如,西班牙语Office支持西班牙语,英语,葡萄牙语和法语。但是我注意到,如果你使用西班牙语或英语作为OCR语言来检测西班牙文本,那几乎没有什么区别。
如果将图像转换为灰度,则可获得更好的效果。 认可还可以,但它并不能让我满意。虽然Tesseract需要更多的图像预处理才能获得这些结果,但它产生的误差几乎和Tesseract一样多。
答案 2 :(得分:1)
打印文本vs手写通常更容易进行OCR,但这一切都取决于你的源图像,我通常会发现以PNG格式捕获,减少颜色(灰度最好)并进行一些手动清理(删除因扫描等造成的图像噪声)效果最佳。
大多数OCR在性能和准确性方面都相似。具有训练/纠正能力的OCR最好。
答案 3 :(得分:1)
总的来说,我发现FineReader给出了非常好的结果。通常所有产品都有试用版。尽你所能。
现在,程序源代码可能很棘手:
答案 4 :(得分:1)
OCRopus也是一个很好的开源选项。但就像Tesseract一样,有一个相当陡峭的学习曲线可以有效地使用和集成。
答案 5 :(得分:1)
试试http://www.free-ocr.com/。当我的IDE在编辑器会话中崩溃而没有警告时,我用它来从屏幕抓取中恢复源代码。它显然取决于您在编辑器中使用的字体(我在Delphi中使用Courier New 10pt)。我试图使用谷歌文档,当你上传图片时它会OCR图像 - 而谷歌文档在扫描文档方面相当不错,但由于某种原因,它在失败的Pascal源文件上失败了。
FreeOCR的一个例子:输入图像:
给出了这个:
begin
FileIDToDelete := FolderToClean + 5earchRecord.Name ;
Inc (TotalFilesFound) ;
if (DeleteFile (PChar (FileIDToDelete))) then
begin
Log5tartupError (FormatEx (‘%s file %s deleted‘, [Annotation, Fi eIDToDelete])) ;
Inc (TotalFilesDeleted) ;
end
else
begin
Log5tartupError (FormatEx (‘Error deleting %s file %s‘, [Annotat'on, FileIDToDelete])) ;
Inc (TotalFilesDeleteErrors) ;
end ;
end ;
FindResult := 5ysUtils.FindNext (5earchRecord) ;
end ;
因此,替换缩进是大部分工作,然后将所有5
更改为大写S
。它也被80列标记处的垂直线弄糊涂了。幸运的是,编译器会拾取大多数错误(除了引用字符串中的错误)。
令人遗憾的是,FreeOCR没有源代码&#34;选项,其中空格被视为重要空格。
提示:如果您的来源包含语法高亮显示,请确保在上传之前将图像保存为灰度。
答案 6 :(得分:1)
Google Drive的内置OCR对我来说效果很好。只需将扫描结果转换为PDF,然后上传到Google云端硬盘,然后选择“使用...打开Google文档”即可。颜色和文字大小有些奇怪,但仍然包括分号等。
纯文本版本:
#include <stdio.h> int main(void) {
char word[51]; int contains = -1; int i = 0; int length = 0; scanf("%s", word); while (word[length] != "\0") i ++; while ((contains == 1 || contains == 2) && word[i] != "\0") {
if (word[i] == "t" || word[i] == "T") {
if (i <= length / 2) {
contains = 1; } else contains = 2;
return 0;