2017-05-04 88 views
1

我需要一些建議,爲我未來的項目。我正在開發一些ID文件的OCR項目,爲此我已經集成了card.io和tess-two,並且爲我的項目重寫了這些源代碼。但我的主要目的是關於相機。我使用已在card.io源代碼中實現的Camera1。但談到谷歌開發者時,他們強烈推薦Camera2。當我嘗試閱讀我的文檔時,出現了一些關於聚焦,模糊部分等問題。我的算法大部分都是在本機端。如果有人已經有了這些技術的經驗,你可以推薦些什麼?如果我將我的代碼從camera1集成到camera2,我可以獲得更好的結果嗎?感謝您閱讀我的大問題;)OCR集成到Camera2

回答

2

我不會描述你如何使用Camera2 API,你應該閱讀並嘗試通過你自己。


一般方法:

實施OnImageAvailableListener界面在你的相機管理器類

public final class CameraManager implements ImageReader.OnImageAvailableListener { 

@Override 
public synchronized void onImageAvailable(ImageReader reader) { 
    Image image = reader.acquireLatestImage(); 
    if (image != null) { 
     analyzeFrame(image); 
    } 
} 

創建ImageReader和初始化相機打開

前您 imageReaderCaptureRequest.Builder後相機的
private ImageReader imageReader; 
private void initialize() { 
    //I'm using YUV_420_888 for streaming 
    //you may use any supported format from: 
    //https://developer.android.com/reference/android/graphics/ImageFormat.html 
    imageReader = ImageReader.newInstance(PREVIEW_WIDTH, PREVIEW_HEIGHT, ImageFormat.YUV_420_888, 1); 
        imageReader.setOnImageAvailableListener(this, null); 
} 

附加表面打開

Surface imageSurface = imageReader.getSurface(); 
//... 
previewRequestBuilder.addTarget(imageSurface); 

處理每一幀analyzeFrame方法

private void analyzeFrame(Image image) { 
    //...<-- image processing 
    image.close(); 
} 

你使用哪種照相機API?

Camera2 API

如果我將我的代碼從camera1集成到camera2,我可以得到更好的 結果嗎?

簡短的答案是沒有,你會得到相同的幀處理

如果有人已經用這些技術經驗豐富,可以 你推薦什麼?

我建議你使用tess-two,在OcrRecognizeAsyncTask

+0

我已經創建camera2預覽樣本爲我留意。但是將我的來源從1整合到2將需要太多的工作。也考慮到本地方法。這就是爲什麼我需要一個已經在Camera2中測試過OCR的人。 – JavadKhan

+1

有沒有簡單的方法(傳遞相機對象和獲得結果),你應該處理每個預覽幀(提取原始數據,傳遞給一些本地方法,獲得結果)。 ** card.io **與我的方法不兼容,因爲它使用相機和圖像處理來啓動自己的活動。我的公司做原生(C++)OCR,我使用NDK來處理使用它的每一幀。 –

+0

您使用哪個相機api?你能回答我最後的主要問題嗎? 「如果你同時使用了api的,那麼在光學閱讀時你的結果是否更好?」 – JavadKhan