को संसाधित करने के लिए एंड्रॉइड असिंटास्क मैं कुछ लाइव वीडियो प्रोसेसिंग करने के प्रयास के लिए ओपनसीवी का उपयोग कर रहा हूं। चूंकि प्रसंस्करण काफी भारी है, इसलिए यह आउटपुट फ्रेम को काफी हद तक देरी करता है, जिससे लाइव स्ट्रीम चकाचौंध दिखती है।लाइव वीडियो फ्रेम
मैं कुछ प्रसंस्करण को AsyncTask में ऑफ़लोड करना चाहता हूं। मैंने कोशिश की है और यह वास्तव में वीडियो को बहुत आसान बनाता है। हालांकि, यह एक बार में बड़ी संख्या में कार्य शुरू होता है, और फिर वे धीरे-धीरे कुछ परिणामों के साथ वापस आना शुरू कर देंगे।
क्या इसे धीमा करने का कोई तरीका है, और परिणाम के लिए प्रतीक्षा करें, या तो सिंक्रनाइज़ कथन, या किसी अन्य विधि का उपयोग करके?
प्रत्येक कैमरा फ्रेम पर, मैं इन कार्यों में से एक शुरू करता हूं। DoImgProcessing लंबे प्रसंस्करण करता है और एक स्ट्रिंग परिणाम देता है।
private class LongOperation extends AsyncTask<Mat, Void, String> {
@Override
protected String doInBackground(Mat... params) {
Mat inputFrame = params[0];
cropToCenter(inputFrame);
return doImgProcessing(inputFrame);
}
@Override
protected void onPostExecute(String result) {
Log.d(TAG, "on post execute: "+result);
}
@Override
protected void onPreExecute() {
Log.d(TAG, "on pre execute");
}
}
public Mat onCameraFrame(Mat inputFrame) {
inputFrame.copyTo(mRgba);//this will be used for the live stream
LongOperation op = new LongOperation();
op.execute(inputFrame);
return mRgba;
}
मैं फ्रेम को डालने के लिए ब्लॉकिंगक्यू के साथ एक थ्रेड का उपयोग करता हूं। – njzk2
मैंने इनमें से कोई भी कभी नहीं लिखा है, अगर आप थोड़ा सा नमूना कोड – Jameo