安卓图片文字识别(OCR)主要通过以下两种方式实现:
步骤 | |
---|---|
添加依赖 | 在build.gradle 中添加tesseract 库(需自行编译或引用第三方封装) |
语言包配置 | 下载对应语言的.traineddata 文件,放入assets 目录 |
// 初始化Tesseract BaseAPI tesseract = new TessBaseAPI(); String language = "chi_sim"; // 简体中文 String dataPath = getFilesDir() + "/tesseract/"; // 语言包路径 tesseract.init(dataPath, language); // 设置待识别图片 Bitmap bitmap = ... // 获取图片Bitmap对象 tesseract.setImage(bitmap); // 执行识别 String result = tesseract.getUTF8Text(); tesseract.end();
操作 | 作用 | 代码片段 |
---|---|---|
灰度转换 | 减少色彩干扰 | Color.rgb(r, g, b) → 亮度值 |
二值化 | 增强对比度 | threshold = 128; 像素值 > threshold ? 255 : 0 |
降噪 | 去除噪点 | 高斯模糊或中值滤波 |
步骤 | |
---|---|
创建服务账号 | 在Google Cloud控制台启用Vision API |
下载密钥 | 生成服务账号JSON密钥文件 |
添加依赖 | implementation 'com.google.cloud:google-cloud-vision:2.0.0' |
// 加载API密钥 GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("path/to/key.json")) .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-vision")); // 创建客户端 ImageAnnotatorClient client = ImageAnnotatorClient.create(ImageAnnotatorSettings.newBuilder() .setCredentialsProvider(FixedCredentialsProvider.create(credentials)).build()); // 构造请求 ByteString imgBytes = ByteString.copyFrom(bitmapToByteArray(bitmap)); List<AnnotateImageRequest> requests = Arrays.asList( AnnotateImageRequest.of(imgBytes).setFeatures(Feature.FEATURE_TEXT_DETECTION) ); // 同步调用 BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); String text = response.getResponses(0).getTextAnnotations(0).getDescription();
权限类型 | 用途 | 声明方式 |
---|---|---|
存储权限 | 读取本地图片 | <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> |
网络权限 | 调用云端API | <uses-permission android:name="android.permission.INTERNET"/> |
动态权限申请示例:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE); }
问题 | 解决方案 |
---|---|
文字识别率低 | 增强图片对比度 使用高清图片 切换多语言包(如 eng+chi_sim ) |
云端API延迟高 | 启用异步调用 缓存识别结果 |
特殊符号无法识别 | 训练自定义Tesseract语言包 |
A1:
A2:
支持,但需注意:
FirebaseRealtimeDatabase
或LiveData
架构组件管理识别结果。