2017-06-08 6 views
2

Ich arbeite an diesem project basierend auf TensorFlow.Wie erstellt man einen Datensatz im selben Format wie der FSNS-Datensatz?

Ich möchte nur ein OCR-Modell von attention_ocr basierend auf meinen eigenen Datensätzen trainieren, aber ich weiß nicht, wie ich meine Bilder und Grundwahrheiten im selben Format wie FSNS-Datensätze speichern soll.

Gibt es jemand auch an diesem Projekt arbeiten, oder weiß, wie dieses Problem zu lösen: - D

+0

waren Sie in der Lage für Sie diese Arbeit zu bekommen? Können Sie das Skript teilen, mit dem Sie Ihre eigenen Daten vorbereitet haben? – Roger

+0

Entschuldigung, ich habe den Prozess der Erstellung von Datensätzen nicht basierend auf meinen eigenen Bildern reproduziert. Ich bin in diesem Problem stecken geblieben. https://stackoverflow.com/questions/45093932/invalidargumentterror-when-traing-attention-ocr-assign-requires-shapes-of-both –

Antwort

7

Das Datenformat für die Ausbildung/Test-Speicherung in der FSN Papier https://arxiv.org/pdf/1702.03970.pdf (Tabelle 4) definiert ist.

Um Tfrecord-Dateien mit tf.Example-Protos zu speichern, können Sie tf.python_io.TFRecordWriter verwenden. Es gibt a nice tutorial, eine bestehende answer on the stackoverflow und eine short gist.

Angenommen, es soll eine numpy ndarray img haben, die Bilder gespeichert num_of_views Seite-an-Seite (siehe Figur 3 in der paper.): enter image description here und einen entsprechenden Text in einer Variablen text. Sie müssen eine Funktion definieren, um eine Unicode-Zeichenfolge in eine Liste von Zeichen-IDs zu konvertieren, die auf eine feste Länge aufgefüllt und ebenfalls nicht gepolstert sind. Zum Beispiel:

char_ids_padded, char_ids_unpadded = encode_utf8_string(
    text='abc', 
    charset={'a':0, 'b':1, 'c':2}, 
    length=5, 
    null_char_id=3) 

sollte das Ergebnis sein:

char_ids_padded = [0,1,2,3,3] 
char_ids_unpadded = [0,1,2] 

Wenn Sie Funktionen verwenden _int64_feature und _bytes_feature in der definierten gist können Sie einen FSN kompatibel tf.Example Proto mit einem folgenden Ausschnitt erstellen:

char_ids_padded, char_ids_unpadded = encode_utf8_string(
    text, charset, length, null_char_id) 
example = tf.train.Example(features=tf.train.Features(
    feature={ 
    'image/format': _bytes_feature("PNG"), 
    'image/encoded': _bytes_feature(img.tostring()), 
    'image/class': _int64_feature(char_ids_padded), 
    'image/unpadded_class': _int64_feature(char_ids_unpadded), 
    'height': _int64_feature(img.shape[0]), 
    'width': _int64_feature(img.shape[1]), 
    'orig_width': _int64_feature(img.shape[1]/num_of_views), 
    'image/text': _bytes_feature(text) 
    } 
)) 
+0

Hallo, Gorban, thx viel für Ihre Antwort. Es gibt zwei weitere Fragen: 1. Funktioniert es bei chinesischen Datensätzen? 2.Wenn in einem Bild mehrere Groundtruths (mehr Textsegmente) vorhanden sind, funktioniert das auch? –

+0

1. Es funktioniert mit jeder Sprache 2. Es funktioniert nicht für mehrere nicht miteinander verwandte Text Regionen –

+0

Thx viel für Ihre Antwort! –

0

sollten Sie den folgenden Code nicht direkt verwenden:

"'image/encoded': _bytes_feature(img.tostring())," 

in meinem Code, ich writed wie folgt:

_,jpegVector = cv2.imencode('.jpeg',img) 
    imgStr = jpegVector.tostring() 
    'image/encoded': _bytes_feature(imgStr) 
Verwandte Themen