This tutorial shows how to recognize text from an image in an Android Java application using the LEADTOOLS SDK.
Overview | |
---|---|
Summary | This tutorial covers how to extract text from an image in an Android Java application. |
Completion Time | 20 minutes |
Android Studio Project | Download tutorial project (162 KB) |
Platform | Android (Java) |
IDE | Android Studio |
Runtime License | Download LEADTOOLS |
Get familiar with the basic steps of creating a project by reviewing the Add References and Set a License and Android - Get Started with Maven tutorials, before working on the Recognize Text from Images with OCR - Android Java tutorial.
In Android Studio, create a new Android (Java) project, and add the Artifacts.
The License unlocks the features needed for the project. It must be set before any toolkit function is called. For details, including tutorials for different platforms, refer to Setting a Runtime License.
There are two types of runtime licenses:
Note
Adding LEADTOOLS local references and setting a license are covered in more detail in the Add References and Set a License tutorial.
In the Project Explorer window, open the activity_main.xml
file found in the app/src/main/res/layout
directory. Below the RasterImageViewer XML code add a new RUN OCR
button.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1.0"
android:background="@android:color/black">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Select Image From Gallery"
android:onClick="onSelectImage"/>
<leadtools.controls.RasterImageViewer
android:id="@+id/rasterimageviewer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight=".96"
android:background="@android:color/white"/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Run OCR"
android:onClick="ocr"/>
</LinearLayout>
In MainActivity.java
, add the following import statements before the MainActivity class:
import leadtools.ocr.OcrEngine;
import leadtools.ocr.OcrEngineManager;
import leadtools.ocr.OcrEngineType;
import leadtools.ocr.OcrImageSharingMode;
import leadtools.ocr.OcrPage;
import leadtools.ocr.OcrPageCharacters;
import leadtools.ocr.OcrWord;
import leadtools.ocr.OcrZoneCharacters;
Add the following member variables to the MainActivity class:
private OcrEngine ocrEngine;
private StringBuilder sb;
Update the onCreate()
function as shown below:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Load LEADTOOLS native libraries
try{
Platform.setLibPath(sharedLibsPath);
Platform.loadLibrary(LTLibrary.LEADTOOLS);
Platform.loadLibrary(LTLibrary.CODECS);
Platform.loadLibrary(LTLibrary.OCR);
}
catch(Exception ex) {
Log.d(TAG,"Failed to load LEADTOOLS Native libraries" );
}
sb = new StringBuilder();
String demoBaseDir = getFilesDir().toString();
if (!demoBaseDir.endsWith("/"))
demoBaseDir += "/";
String ocrLanguageFileDir = demoBaseDir + "/OCRRuntime/";
String substitutionFontsDir = demoBaseDir + "/SubstitutionFonts/";
if (!Utils.copyOcrRuntimeFiles(this, ocrLanguageFileDir)) {
Log.d(TAG, "Failed to copy OCR Language Files");
finish();
}
if (!Utils.copyAssetsFiles(this, "substitution_fonts", substitutionFontsDir)) {
Log.d(TAG, "Failed to copy Substitution Fonts");
finish();
}
try {
//Set Substitution Fonts path and startup the OCR Engine
RasterDefaults.setResourceDirectory(LEADResourceDirectory.FONTS, substitutionFontsDir);
ocrEngine = OcrEngineManager.createEngine(OcrEngineType.LEAD);
ocrEngine.startup(null, null, null, ocrLanguageFileDir);
} catch (Exception e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
if (!ocrEngine.isStarted()) {
Toast.makeText(this, "OCR Engine was not started successfully", Toast.LENGTH_LONG).show();
}
}
Create a ocr(View v)
function to allow the parsing of files. Add the below code:
public void ocr(View v )
{
RasterImage image = mViewer.getImage();
if(image != null)
{
OcrPage ocrPage = ocrEngine.createPage(image, OcrImageSharingMode.AUTO_DISPOSE);
ocrPage.recognize(null);
OcrPageCharacters ocrpageCharacters = ocrPage.getRecognizedCharacters();
for (OcrZoneCharacters ocrzonechar: ocrpageCharacters)
{
Collection<OcrWord> words = ocrzonechar.getWords();
for (OcrWord word: words)
{
sb.append(word.getValue());
sb.append(" ");
}
}
Toast.makeText(this, sb.toString(), Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "No File is loaded", Toast.LENGTH_LONG).show();
}
}
Press Shift + F10 to run the application. Follow the steps below to test the application.
SELECT IMAGE FROM GALLERY
to load in an image.Select the RUN OCR
button to read the image and output the results.
This tutorial showed how to run OCR recognition on an image.