如何在 Google 示例 Android 代码中 return 来自 OCR Detector.Processor 的数据
How to return data from OCR Detector.Processor in Google sample Android code
在此sample Android program中,设备的摄像头用于通过com.google.android.gms:play-services-vision
库执行光学字符识别。
在 visionSamples\ocr-codelab\ocr-reader-complete\app\src\main\java\com\google\android\gms\samples\vision\ocrreader\OcrDetectorProcessor.receiveDetections()
中,我能够看到使用日志记录识别的文本:
Log.d("OcrDetectorProcessor", "Text detected! " + item.getValue());
以上过程由OcrCaptureActivity
启动:
TextRecognizer textRecognizer.setProcessor(new OcrDetectorProcessor(mGraphicOverlay));
CameraSource mCameraSource = new CameraSource.Builder(getApplicationContext(), textRecognizer)/* snip */.build();
CameraSourcePreview mPreview = (CameraSourcePreview) findViewById(R.id.preview);
mPreview.start(mCameraSource, mGraphicOverlay);
所以我们看到上面的一组 "stuff" 不是启动 activity 的典型方法。
这个问题是关于如何将 OcrDetectorProcessor
返回 OcrCaptureActivity
的结果。
我尝试将 onActivityResult()
添加到 OcrCaptureActivity
, 但它没有触发:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.v(TAG, ">>>>>>> OnActivityResult intent: " + data);
}
因为 OcrDetectorProcessor
不是 Activity
,我不能简单地创建一个新的 Intent 并使用 setResult()
方法。
有一个 OcrDetectorProcessor.release()
方法,它在正确的时间运行(当按下 Android 后退按钮时),但我不确定如何让它与父进程通信.
一般你需要做的是保存对OcrDetectorProcessor
的引用,然后编写一个数据检索方法并从OcrCaptureActivity
调用它。
所以对您的 'onCreate()' 进行此更改:
//TextRecognizer textRecognizer.setProcessor(new OcrDetectorProcessor(mGraphicOverlay));
mDetectorProcessor = new OcrDetectorProcessor(mGraphicOverlay);
TextRecognizer textRecognizer.setProcessor(mDetectorProcessor);
然后在你的OcrDetectorProcessor
class中添加一个数据检索方法,returns你选择的实例变量:
public int[] getResults() {
return new int[] {mFoundResults.size(), mNotFoundResults.size()};
}
然后把这个方法添加到OcrCaptureActivity()
:
@Override
public void onBackPressed() {
int[] results = mDetectorProcessor.getResults();
Log.v(TAG, "About to finish OCR. Setting extras.");
Intent data = new Intent();
data.putExtra("totalItemCount", results[0]);
data.putExtra("newItemCount", results[1]);
setResult(RESULT_OK, data);
finish();
super.onBackPressed(); // Needs to be down here
}
在此sample Android program中,设备的摄像头用于通过com.google.android.gms:play-services-vision
库执行光学字符识别。
在 visionSamples\ocr-codelab\ocr-reader-complete\app\src\main\java\com\google\android\gms\samples\vision\ocrreader\OcrDetectorProcessor.receiveDetections()
中,我能够看到使用日志记录识别的文本:
Log.d("OcrDetectorProcessor", "Text detected! " + item.getValue());
以上过程由OcrCaptureActivity
启动:
TextRecognizer textRecognizer.setProcessor(new OcrDetectorProcessor(mGraphicOverlay));
CameraSource mCameraSource = new CameraSource.Builder(getApplicationContext(), textRecognizer)/* snip */.build();
CameraSourcePreview mPreview = (CameraSourcePreview) findViewById(R.id.preview);
mPreview.start(mCameraSource, mGraphicOverlay);
所以我们看到上面的一组 "stuff" 不是启动 activity 的典型方法。
这个问题是关于如何将 OcrDetectorProcessor
返回 OcrCaptureActivity
的结果。
我尝试将 onActivityResult()
添加到 OcrCaptureActivity
, 但它没有触发:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.v(TAG, ">>>>>>> OnActivityResult intent: " + data);
}
因为 OcrDetectorProcessor
不是 Activity
,我不能简单地创建一个新的 Intent 并使用 setResult()
方法。
有一个 OcrDetectorProcessor.release()
方法,它在正确的时间运行(当按下 Android 后退按钮时),但我不确定如何让它与父进程通信.
一般你需要做的是保存对OcrDetectorProcessor
的引用,然后编写一个数据检索方法并从OcrCaptureActivity
调用它。
所以对您的 'onCreate()' 进行此更改:
//TextRecognizer textRecognizer.setProcessor(new OcrDetectorProcessor(mGraphicOverlay));
mDetectorProcessor = new OcrDetectorProcessor(mGraphicOverlay);
TextRecognizer textRecognizer.setProcessor(mDetectorProcessor);
然后在你的OcrDetectorProcessor
class中添加一个数据检索方法,returns你选择的实例变量:
public int[] getResults() {
return new int[] {mFoundResults.size(), mNotFoundResults.size()};
}
然后把这个方法添加到OcrCaptureActivity()
:
@Override
public void onBackPressed() {
int[] results = mDetectorProcessor.getResults();
Log.v(TAG, "About to finish OCR. Setting extras.");
Intent data = new Intent();
data.putExtra("totalItemCount", results[0]);
data.putExtra("newItemCount", results[1]);
setResult(RESULT_OK, data);
finish();
super.onBackPressed(); // Needs to be down here
}