如何在Android项目中集成AWS Textract?已尝试添加AWS SDK
在Android项目中集成AWS Textract的步骤
1. 确认AWS SDK依赖配置
既然你已添加AWS SDK,需确保包含Textract相关依赖。在Module级别的build.gradle文件中检查以下依赖(版本可替换为最新稳定版):
implementation 'com.amazonaws:aws-android-sdk-core:2.74.0' implementation 'com.amazonaws:aws-android-sdk-textract:2.74.0' implementation 'com.amazonaws:aws-android-sdk-auth-core:2.74.0' implementation 'com.amazonaws:aws-android-sdk-auth-userpools:2.74.0'
2. 配置AWS身份凭证(推荐用Cognito身份池)
在项目的res/raw目录下创建awsconfiguration.json文件,填入你的Cognito身份池信息和Textract服务区域:
{ "CredentialsProvider": { "CognitoIdentity": { "Default": { "PoolId": "YOUR_COGNITO_POOL_ID", "Region": "YOUR_AWS_REGION" } } }, "Textract": { "Default": { "Region": "YOUR_AWS_REGION" } } }
注意:禁止硬编码AWS Access Key和Secret Key,Cognito身份池是Android端的安全凭证方案。
3. 初始化Textract客户端
在代码中(如Activity、ViewModel)初始化Textract异步客户端:
import com.amazonaws.AmazonServiceException; import com.amazonaws.mobile.client.AWSMobileClient; import com.amazonaws.regions.Region; import com.amazonaws.services.textract.AmazonTextractAsyncClient; import android.util.Log; // 初始化AWSMobileClient(建议在Application类中完成) AWSMobileClient.getInstance().initialize(getApplicationContext(), result -> { // 初始化Textract客户端 AmazonTextractAsyncClient textractClient = new AmazonTextractAsyncClient( AWSMobileClient.getInstance().getCredentialsProvider() ); textractClient.setRegion(Region.getRegion("YOUR_AWS_REGION")); // 保存客户端供后续使用 }, e -> Log.e("AWSMobileClient", "初始化失败: " + e.getMessage()));
4. 调用Textract识别文本
以识别本地图片为例,将图片转为字节数组后调用DetectDocumentText API:
import android.graphics.Bitmap; import android.graphics.BitmapFactory; import com.amazonaws.services.textract.model.DetectDocumentTextRequest; import com.amazonaws.services.textract.model.DetectDocumentTextResult; import com.amazonaws.services.textract.model.Document; import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; import android.util.Log; // 将本地图片转为字节数组 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[] imageBytes = stream.toByteArray(); // 创建识别请求 DetectDocumentTextRequest request = new DetectDocumentTextRequest() .withDocument(new Document().withBytes(ByteBuffer.wrap(imageBytes))); // 异步调用API textractClient.detectDocumentTextAsync(request, new AsyncHandler<>() { @Override public void onSuccess(DetectDocumentTextRequest request, DetectDocumentTextResult result) { // 处理识别结果 result.getBlocks().forEach(block -> { if ("LINE".equals(block.getBlockType())) { Log.d("TextractResult", "识别文本: " + block.getText()); } }); } @Override public void onError(Exception e) { if (e instanceof AmazonServiceException) { AmazonServiceException ase = (AmazonServiceException) e; Log.e("TextractError", "服务错误: " + ase.getErrorMessage() + " 错误码: " + ase.getErrorCode()); } else { Log.e("TextractError", "请求失败: " + e.getMessage()); } } });
关键注意事项
- 权限配置:在
AndroidManifest.xml中添加网络权限:
若读取本地图片,需根据Android版本处理<uses-permission android:name="android.permission.INTERNET" />READ_EXTERNAL_STORAGE或READ_MEDIA_IMAGES动态权限。 - 区域一致性:Cognito身份池、Textract服务的区域必须完全一致(如
us-east-1、ap-southeast-1)。 - 避免主线程阻塞:务必使用异步客户端调用API,防止应用出现ANR。
参考资源
- AWS官方Android SDK文档中关于Textract的集成说明
- AWS Samples提供的Android端Textract示例代码
内容的提问来源于stack exchange,提问作者Aakash Bhalani
相关产品推荐
相关产品推荐

