在我的工作中,我有时必须使用一些打印的源代码并手动将源代码输入到文本编辑器中.不要问为什么.
显然,输入它需要很长时间,总是有额外的时间来调试输入错误(oops错过了"$"符号).
我决定尝试一些OCR解决方案,例如:
考虑到字体是无衬线和等宽字体,我觉得源代码很容易OCR.
你们有没有找到一个在源代码上运行良好的好的OCR解决方案?
也许我只需要一个更好的OCR解决方案(不一定是源代码特定的)?
使用OCR,目前有三种选择:
我很少做OCR,但我发现花费150美元购买商业软件可以减轻浪费时间.
今天有两个新的选择(问了问题的几年后):
1.)
Windows 10附带了Microsoft的OCR引擎。
它在名称空间中:
Windows.Media.Ocr.OcrEngine
Run Code Online (Sandbox Code Playgroud)
https://msdn.microsoft.com/zh-CN/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 -一些基本原理
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安装都支持几种语言。例如,西班牙办事处安装了对西班牙语,英语,葡萄牙语和法语的支持。但是我注意到,如果您使用西班牙语或英语作为OCR语言来检测西班牙语文本,则几乎没有区别。
如果将图像转换为灰度,则可获得更好的结果。识别还可以,但我不满意。尽管Tesseract需要更多的图像预处理才能获得这些结果,但它产生的误差几乎与Tesseract一样多。
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;
Run Code Online (Sandbox Code Playgroud)