2017-05-04 1 views
1

J'ai besoin de conseils pour mon futur projet. Je suis en train de développer un projet OCR pour certains documents d'identité et pour cela j'ai déjà intégré card.io et tess-two et remplacé ces sources pour mon projet. Mais mon objectif principal est la caméra. J'utilise Camera1 qui est déjà implémenté dans la source card.io. Mais quand il s'agit de développeurs google, ils recommandent fortement Camera2. Quand j'essaie de lire mes documents, j'ai des problèmes de mise au point, de parties floues, etc. La plupart de mes algorithmes sont en partie native. Si quelqu'un a déjà expérimenté ces technologies, que pourriez-vous recommander? Si j'intègre mes codes de camera1 à camera2, puis-je obtenir de meilleurs résultats? Merci d'avoir lu ma grande question;)Intégration OCR à Camera2

Répondre

2

Je ne vais pas vous décrire comment utiliser API Camera2, vous devriez lire et essayer par vous-même.


Approche générale:

mettre en œuvre OnImageAvailableListener interface dans votre classe de gestionnaire de caméra

public final class CameraManager implements ImageReader.OnImageAvailableListener { 

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

créer ImageReader et avant initialize Caméra ouvert

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 add de votre imageReader à CaptureRequest.Builder après caméra ouvert

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

chaque poignée cadre dans analyzeFrame méthode

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

Quel api appareil photo que vous utilisez?

Camera2 API. Si j'intègre mes codes de camera1 à camera2, puis-je obtenir de meilleurs résultats

réponse courte est Non, vous obtiendrez les mêmes cadres pour faire face à

Si quelqu'un a déjà fait l'expérience avec ces technologies, ce qui pourrait vous recommandez?

Je vous recommande d'utiliser tess-two, faites attention sur OcrRecognizeAsyncTask

+0

Je l'ai déjà créé l'échantillon d'aperçu camera2 pour moi. Mais l'intégration de ma source de 1 à 2, va prendre trop de travail. Considérant les méthodes du côté natif aussi. C'est pourquoi j'ai besoin de quelqu'un qui a déjà testé OCR dans Camera2. – JavadKhan

+1

Il n'y a pas de moyen facile (passer l'objet caméra et obtenir des résultats), vous devez traiter chaque trame d'aperçu (extraire les données brutes, passer à une méthode native, obtenir des résultats). ** card.io ** n'est pas compatible avec mon approche, car il démarre sa propre activité avec le traitement de l'image et de la caméra. Mon entreprise fait l'OCR natif (C++), j'utilise NDK pour traiter chaque image en l'utilisant. –

+0

Quelle caméra API utilisez-vous? Pourriez-vous répondre à ma dernière question? "Si vous avez utilisé les deux api, avez-vous obtenu de meilleurs résultats lors de la lecture optique?" – JavadKhan