android:从图像中提取文本[关闭]
Posted
技术标签:
【中文标题】android:从图像中提取文本[关闭]【英文标题】:android: Extract Text from Image [closed] 【发布时间】:2011-09-03 04:42:36 【问题描述】:我正在开发一个需要将 jpeg 图像转换为文本的应用程序,以便我可以识别图像中写入的文本。请给我一个指导来做到这一点。
【问题讨论】:
android OCR? 的可能重复项 Google 最近发布了一个 OCR API 来实现这一点:developers.google.com/vision/text-overview 【参考方案1】:摘自Making OCR app using Tesseract.
注意:这些说明适用于 Android SDK r19 和 Android NDK r7c。在 64 位 Ubuntu 上,您可能需要安装 ia32-libs 32 位兼容性库。您还需要添加适当的 PATH 变量。
下载源代码或克隆此git repository。该项目包含用于编译 Tesseract、Leptonica 和 JPEG 库以在 Android 上使用的工具。它包含一个 Eclipse Android 库项目,该项目提供了一个 Java API,用于访问本机编译的 Tesseract 和 Leptonica API。你不需要眼睛 - 两个代码,你可以不用它。
使用这些命令构建这个项目(这里,tess-two 是 tess-two 中的目录 - 与 tess-two-test 处于同一级别):
cd <project-directory>/tess-two
ndk-build
android update project --path .
ant release
现在将项目作为库导入 Eclipse。
File -> Import -> Existing Projects into workspace -> tess-two directory<code>. Right click the project, Android Tools -> Fix Project Properties. Right click -> Properties -> Android -> Check Is Library
将您的项目配置为使用 tess-two 项目作为库项目:
Right click your project name -> Properties -> Android -> Library -> Add, and choose tess-two.
您现在可以使用该库对任何图像进行 OCR。
首先,我们需要获取图片本身。为此,我在这里找到了一个简单的代码来捕获图像。有了位图后,我们只需要执行相对容易的 OCR。请务必通过执行以下操作来更正旋转和图像类型:
// _path = path to the image to be OCRed
ExifInterface exif = new ExifInterface(_path);
int exifOrientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
int rotate = 0;
switch (exifOrientation)
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
if (rotate != 0)
int w = bitmap.getWidth();
int h = bitmap.getHeight();
// Setting pre rotate
Matrix mtx = new Matrix();
mtx.preRotate(rotate);
// Rotating Bitmap & convert to ARGB_8888, required by tess
bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
现在我们在位图中有了图像,我们可以简单地使用 TessBaseAPI 来运行 OCR,如下所示:
TessBaseAPI baseApi = new TessBaseAPI();
// DATA_PATH = Path to the storage
// lang = for which the language data exists, usually "eng"
baseApi.init(DATA_PATH, lang);
// Eg. baseApi.init("/mnt/sdcard/tesseract/tessdata/eng.traineddata", "eng");
baseApi.setImage(bitmap);
String recognizedText = baseApi.getUTF8Text();
baseApi.end();
(You can download the language files from [here][2] and put them in a directory on your device – manually or by code)
现在您已经在变量 RecognizedText 中获得了 OCRed 文本,您几乎可以用它做任何事情——翻译、搜索,任何事情!附言。您可以通过偏好添加各种语言支持,然后从here 下载所需的语言数据文件。您甚至可以将它们放在 assets 文件夹中,然后在启动时将它们复制到 SD 卡中。
疑难解答
关于更新 PATH - 您需要更新 PATH 变量才能使命令运行,否则您会看到找不到命令错误。对于 Android SDK,将 SDK 的工具和平台工具目录的位置添加到 PATH 环境变量中。对于 Android NDK,使用相同的过程将 android-ndk 目录添加到 PATH 变量中。 Maven-ising – 查看 James Elsey 的 post。他还提到他在 Windows 上运行它没有任何问题。 您也可以在此页面上尝试 Ctrl+F-ing 您的问题,可能有人已经遇到过并在 cmets 中发布了解决方案。【讨论】:
这不是您写的 - 请明确说明您是从博文(您确实添加了链接)中复制的,以免被视为抄袭。 之前我会立即发布链接,但 Stack Overflow 的一位成员告诉我将任何链接的数据放入答案中,以防链接不起作用。 是的。不要发布仅链接的答案。不要将其他人的内容作为自己的内容发布。以上是关于android:从图像中提取文本[关闭]的主要内容,如果未能解决你的问题,请参考以下文章