Attualmente sto giocando con OCR su Android. Perciò ho scritto una piccola app con un'anteprima di Camera e ora sto alimentando le immagini di tessearact (tess-two) dal mio metodo onPreviewFrame. Ora voglio visualizzare i reticoli rilegati dall'OCR sulla mia anteprima della fotocamera. TessBaseAPI fornisce metodi che restituiscono caselle di caratteri/parole. Il tipo dell'oggetto restituito è Pixa, come nella libreria leptonica fornita con tess-two.Tesseract di Android OCR: utilizzo di dati da oggetti Pixa per visualizzare caselle di delimitazione
Quindi la mia domanda è: Come faccio ad avere le coordinate utilizzabili che posso usare per disegnare i rettangoli di selezione sulla mia macchina fotografica anteprima dagli oggetti Pixa restituiti da getCharacters() o estraiParole() dalla TessBaseAPI?
GetCharacters() and getWords() in the BaseAPI
Importante:
Perché le anteprime supportati solo immagine-formato è YUV N21 e come lontano da quello che ho letto il tess-API richiede ARGB_8888 Bitmap I avere la seguente soluzione alternativa nel mio metodo onPreviewFrame appena prima di alimentare la bitmap su TessAPI: (Sto anche ruotando di 90 gradi in senso orario perché sto usando la fotocamera con orientamento verticale, ma le fotocamere previe telai W sono disponibili in paesaggio)
//byte[] bmpdata <- the image in a byte array (NV21 Imageformat) in onPreviewFrame
YuvImage yuvimage = new YuvImage(bmpdata,ImageFormat.NV21,width,height,null);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Rect rect = new Rect(0, 0, width, height);
yuvimage.compressToJpeg(rect, 100, outStream);
Bitmap bmp = BitmapFactory.decodeByteArray(outStream.toByteArray(),0,outStream.size());
Matrix mtx = new Matrix();
mtx.preRotate(90);
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mtx, false);
bmp = bmp.copy(Bitmap.Config.ARGB_8888, true);
TessTBaseApi.setImage(bmp);
Quindi, in pratica, ho comprimere il byte NV21 [] Ho avuto dalla telecamera in un YuvImage, poi in un jpeg, e da lì in una bitmap. Ho cercato il web molto per la soluzione su come ottenere bitmap/jpeg dall'array NV21 e questo è stato il più semplice che ho trovato. Questa bitmap verrà inviata agli strumenti tesseract OCR. Questo mi porta alla mia seconda domanda:
Come, dopo queste compressioni e una rotazione di 90 gradi, trovo dove devo disegnare le finestre sullo schermo? (relativo a prima delle compressioni e della rotazione)
Questo potrebbe non essere il migliore o anche un buon modo per fornire l'OCR con fotogrammi live, apprezzo moltissimo commenti, altre soluzioni o suggerimenti di ottimizzazione.
Ho iniziato questo progetto due giorni fa e sono un principiante nella programmazione per android e ocr. Durante questi due giorni questa pagina mi ha aiutato molto e ha risposto a domande che avevo finora molto bene, quindi grazie per questo e grazie in anticipo per avermi aiutato con il mio problema attuale. Se ti piacerebbe vedere più codice o avere domande, fornirò e sarò lieto di rispondere a qualsiasi cosa io possa.
Saluti
È possibile navigare attraverso l'intero codice sorgente API su github trogolo della classe e GetCharacters Pixa() link, cant inserire altri collegamenti ipertestuali.
grazie, esattamente quello che stavo cercando! È un peccato che non ti abbia mai superato. – Jones