Je travaille sur ce projet basé sur TensorFlow.
Je veux juste former un modèle OCR avec attention_ocr basé sur mes propres jeux de données, mais je ne sais pas comment stocker mes images et ma vérité au sol dans le même format que les jeux de données FSNS.
Est-ce que quelqu'un travaille également sur ce projet ou sait comment résoudre ce problème?
Le format de données pour stocker la formation/le test est défini dans le document FSNS https://arxiv.org/pdf/1702.03970.pdf (Tableau 4).
Pour stocker des fichiers tfrecord avec tf.Example protos, vous pouvez utiliser tf.python_io.TFRecordWriter . Il y a un bon tutoriel , un réponse existant sur le stackoverflow et un short Gist .
Supposons que vous avez un numpy ndarray img
qui contient des images num_of_views
côte à côte (voir la figure 3 dans le papier ): et un texte correspondant dans une variable text
. Vous devrez définir une fonction pour convertir une chaîne unicode en une liste d'identificateurs de caractère complétée à une longueur fixe et non complétée. Par exemple:
char_ids_padded, char_ids_unpadded = encode_utf8_string(
text='abc',
charset={'a':0, 'b':1, 'c':2},
length=5,
null_char_id=3)
le résultat devrait être:
char_ids_padded = [0,1,2,3,3]
char_ids_unpadded = [0,1,2]
Si vous utilisez les fonctions _int64_feature
et _bytes_feature
définies dans le Gist , vous pouvez créer un proto compatible FSNS avec exemple avec le fragment suivant:
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)
}
))
Vous ne devez pas utiliser directement le code ci-dessous:
"'image/encoded': _bytes_feature(img.tostring()),"
Dans mon code, j'ai écrit ceci:
_,jpegVector = cv2.imencode('.jpeg',img)
imgStr = jpegVector.tostring()
'image/encoded': _bytes_feature(imgStr)