2
我爲我的應用程序使用OpenCV,Vuforia和Tesseract(tess-two)。我的系統是這樣工作的:用多線程處理Android相機幀
- Vuforia檢測目標,並將全幀的OpenCV(JNI)
- OpenCV的獲取框架,並做了一些圖像處理,使其可讀的正方體(JNI)
- Tesseract(tess-two)從opencv獲取字節數組,並對圖像執行OCR處理(字節數組)
我的問題從第三部分開始。由於我的目標是實時拍攝相機畫面,所以我嘗試使用多線程來使UI平滑,並且不會導致實時相機視覺變慢。
我決定使用的AsyncTask的,像這樣:
public void getFromNative(final byte[] imagedata, final int width,final int height,final byte [] typeData, final int typeWidth,final int typeHeight) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ocr(imagedata, width, height,typeData,typeWidth,typeHeight);
return null;
}
}.execute();
}
這讓直播相機流比正常的,單個線程的方式平滑。但問題在於,由於實時攝像機幀的啓動,它啓動了很多AsyncTask,即使我將攝像機從目標轉離時,它也會繼續對先前創建的AsycnTask執行OCR,併爲它們一個接一個地返回結果。除了AsyncTask之外,我嘗試了IntenService,但結果是一樣的。
我想問問是否有辦法解決這個問題,並使過程更有效率。
感謝
謝謝你的建議,但我仍然沒有看到這麼多的性能增加,問題是特別是與沒有這麼好的相機和舊設備的設備。我在想也許這個解決方案使用的是不同於AsyncTask的多線程技術。 – koraxis
當設備相對穩定並且移動不太多時,我們只識別幀。此外,我們只分析那些我們確信(或多或少)會使圖片清晰的幀。 –