IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Chroniqueur Actualités
    Avatar de Patrick Ruiz
    Homme Profil pro
    Redacteur web
    Inscrit en
    Février 2017
    Messages
    2 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Redacteur web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2017
    Messages : 2 078
    Points : 56 313
    Points
    56 313
    Par défaut Une firme de sécurité lance JAB Code, un nouveau code-barre coloré à « haute capacité »
    Une firme de sécurité lance JAB Code, un nouveau code-barre coloré à « haute capacité »
    Soumis pour approbation comme standard ISO

    Pour se connecter à l’interface web de WhatsApp, l’application Android requiert de son utilisateur qu’il pointe la caméra de son dispositif mobile sur une espèce de carré sur fond blanc parsemé de modules noirs – un code QR (Quick Response).

    Nom : QR-code.png
Affichages : 9138
Taille : 10,6 Ko

    Ça, c’est pour la version traditionnelle (l’adjectif est utilisé dans ce contexte pour renvoyer au duo de couleurs noir et blanc) dont on fait usage jusqu’ici dans une panoplie d’autres domaines. Par le biais du site de l’Office allemand de la sécurité des systèmes d’information, Fraunhoher SIT livre ses avancées en la matière. L’institut de recherche propose une version colorée des codes QR ; le projet est connu sous le nom JAB Code (Just Another Bar Code) et publié sur GitHub sous licence publique générale limitée – LGPL 2.1. « JAB est un code matriciel coloré dont les symboles de base sont constitués de modules carrés disposés en grilles rectangulaires ou carrées », lit-on sur l’interface web de démonstration. Ci-dessous, un visuel de JAB Code généré à partir de l’application web fournie par l’entreprise.

    Nom : jabcode.png
Affichages : 5322
Taille : 4,0 Ko

    Sur le site de l’Office allemand de la sécurité des systèmes d’information, Fraunhofer SIT écrit : « la capacité de stockage des codes-barres monochromatiques 2D est limitée. Dans le but de permettre aux sceaux numériques de sauvegarder des informations additionnelles, le guide technique BSI TR-03137 définit Just Another Bar Code (JAB Code), un code à barres 2D coloré. En s’appuyant sur ces informations de couleur, la capacité de stockage du code à barres est améliorée de façon significative en comparaison à celle d’un code à barres monochrome de même taille. » Dans les chiffres, JAB Code permet un rapport de densité qui va jusqu’à 3x en comparaison au code QR monochrome.

    JAB Code n’est pas la première tentative d’introduction d’un code à barres polychrome. Dans cet univers, il fait suite à High Capacity Color Barcode (HCCB) de Microsoft. La firme de Redmond a procédé à son introduction en 2007. En 2015, Clive Hohberger a, après 10 années de recherche, pu obtenir l’introduction d’Ultracode comme spécification AIM. Aucune de ces alternatives aux codes à barres monochromes n’a décollé ; la faute à un manque d’intérêt des industriels alors qu’Ultracode offre une densité de stockage de 2x.

    JAB Code a fait l’objet d’une présentation lors de l’édition 2018 de la session plénière du comité ISO / IEC JTC1 SC31 auquel il est désormais soumis pour approbation. Les intervenants de la chaine sont donc en passe de voir atterrir un nouveau standard qu’il convient de connaître. Pour cela, à défaut de parcourir la riche documentation fournie par l’institut de recherche, les développeurs peuvent plonger directement dans le code C de la partie du standard chargée de l’encodage.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "jabcode.h"
    #include "jabwriter.h"
     
    jab_data* data = 0;
    jab_char* filename = 0;
    jab_int32 color_number = 0;
    jab_int32 symbol_number = 0;
    jab_int32 module_size = 0;
    jab_int32	master_symbol_width = 0;
    jab_int32 master_symbol_height= 0;
    jab_int32* symbol_positions = 0;
    jab_int32 symbol_positions_number = 0;
    jab_vector2d* 	symbol_versions = 0;
    jab_int32 symbol_versions_number = 0;
    jab_int32* symbol_ecc_levels = 0;
    jab_int32 symbol_ecc_levels_number = 0;
     
    void printUsage()
    {
        printf("\n");
        printf("jabcodeWriter (Version %s Build date: %s) - Fraunhofer SIT\n\n", VERSION, BUILD_DATE);
        printf("Usage:\n\n");
        printf("jabcodeWriter --input message-to-encode --output output-image(png) [options]\n");
        printf("\n");
        printf("--input\t\t\tInput data (message to be encoded).\n");
        printf("--input-file\t\tInput data file.\n");
        printf("--output\t\tOutput png file.\n");
        printf("--color-number\t\tNumber of colors (2, 4, 8, 16, 32, 64, 128, 256,\n\t\t\t"
    							 "default: 8).\n");
        printf("--module-size\t\tModule size in pixel (default: 10 pixels).\n");
        printf("--symbol-width\t\tMaster symbol width in pixel.\n");
        printf("--symbol-height\t\tMaster symbol height in pixel.\n");
        printf("--symbol-number\t\tNumber of symbols (1 - 61, default: 1).\n");
     
        printf("--ecc-level\t\tError correction levels (0 - 10, default: 8%%). If\n\t\t\t"
                      "different for each symbol, starting from master and\n\t\t\t"
    		  "then slave symbols (ecc0 ecc1 ecc2 ...). For master\n\t\t\t"
    		  "symbol, level 0 means using the default level, for\n\t\t\t"
    		  "slaves, it means using the same level as its host.\n");
     
        printf("--symbol-version\tSide-Version of each symbol, starting from master and\n\t\t\t"
    		  "then slave symbols (x0 y0 x1 y1 x2 y2 ...).\n");
     
        printf("--symbol-position\tSymbol positions (0 - 60), starting from master and\n\t\t\t"
    		  "then slave symbols (p0 p1 p2 ...). Only required for\n\t\t\t"
    		  "multi-symbol code.\n");
     
        printf("--help\t\t\tPrint this help.\n");
        printf("\n");
        printf("Example for 1-symbol-code: \n");
        printf("jabcodeWriter --input 'Hello world' --output test.png\n");
        printf("\n");
        printf("Example for 3-symbol-code: \n" );
        printf("jabcodeWriter --input 'Hello world' --output test.png --symbol-number 3 
                                           --symbol-position 0 3 2 --symbol-version 3 2 4 2 3 2\n");
        printf("\n");
    }
     
    jab_boolean parseCommandLineParameters(jab_int32 para_number, jab_char* para[])
    {
    	//first scan
    	for (jab_int32 loop=1; loop<para_number; loop++)
    	{
    		if (0 == strcmp(para[loop],"--input"))
            {
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", para[loop]);
    				return 0;
    			}
                jab_char* data_string = para[++loop];
                data = (jab_data *)malloc(sizeof(jab_data) + strlen(data_string) * sizeof(jab_char));
                if(!data)
                {
                    reportError("Memory allocation for input data failed");
                    return 0;
                }
    			data->length = strlen(data_string);
    			memcpy(data->data, data_string, strlen(data_string));
            }
            else if (0 == strcmp(para[loop],"--input-file"))
            {
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", para[loop]);
    				return 0;
    			}
                FILE* fp = fopen(para[++loop], "rb");
                if(!fp)
                {
    				reportError("Opening input data file failed");
                    return 0;
                }
    			jab_int32 file_size;
    			fseek(fp, 0, SEEK_END);
    			file_size = ftell(fp);
                data = (jab_data *)malloc(sizeof(jab_data) + file_size * sizeof(jab_char));
                if(!data)
                {
                    reportError("Memory allocation for input data failed");
                    return 0;
                }
                fseek(fp, 0, SEEK_SET);
                if(fread(data->data, 1, file_size, fp) != file_size)
                {
    				reportError("Reading input data file failed");
    				free(data);
    				fclose(fp);
    				return 0;
    			}
    			fclose(fp);
    			data->length = file_size;
            }
    		else if (0 == strcmp(para[loop],"--output"))
            {
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", para[loop]);
    				return 0;
    			}
                filename = para[++loop];
            }
            else if (0 == strcmp(para[loop],"--color-number"))
            {
    			char* option = para[loop];
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", option);
    				return 0;
    			}
                char* endptr;
    			color_number = strtol(para[++loop], &endptr, 10);
    			if(*endptr)
    			{
    				printf("Invalid or missing values for option '%s'.\n", option);
    				return 0;
    			}
                if(color_number != 2  && color_number != 4  && color_number != 8   && color_number != 16 &&
    			   color_number != 32 && color_number != 64 && color_number != 128 && color_number != 256)
                {
    				reportError("Invalid color number. Valid color number includes 2, 4, 8, 16, 32, 64, 128 and 256.");
    				return 0;
                }
            }
            else if (0 == strcmp(para[loop],"--module-size"))
            {
    			char* option = para[loop];
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", option);
    				return 0;
    			}
                char* endptr;
    			module_size = strtol(para[++loop], &endptr, 10);
    			if(*endptr || module_size < 0)
    			{
    				printf("Invalid or missing values for option '%s'.\n", option);
    				return 0;
    			}
            }
            else if (0 == strcmp(para[loop],"--symbol-width"))
            {
    			char* option = para[loop];
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", option);
    				return 0;
    			}
                char* endptr;
    			master_symbol_width = strtol(para[++loop], &endptr, 10);
    			if(*endptr || master_symbol_width < 0)
    			{
    				printf("Invalid or missing values for option '%s'.\n", option);
    				return 0;
    			}
            }
            else if (0 == strcmp(para[loop],"--symbol-height"))
            {
    			char* option = para[loop];
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", option);
    				return 0;
    			}
                char* endptr;
    			master_symbol_height = strtol(para[++loop], &endptr, 10);
    			if(*endptr || master_symbol_height < 0)
    			{
    				printf("Invalid or missing values for option '%s'.\n", option);
    				return 0;
    			}
            }
            else if (0 == strcmp(para[loop],"--symbol-number"))
            {
    			char* option = para[loop];
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", option);
                    return 0;
    			}
    			char* endptr;
    			symbol_number = strtol(para[++loop], &endptr, 10);
                if(*endptr)
    			{
    				printf("Invalid or missing values for option '%s'.\n", option);
    				return 0;
    			}
                if(symbol_number < 1 || symbol_number > MAX_SYMBOL_NUMBER)
                {
    				reportError("Invalid symbol number (must be 1 - 61).");
    				return 0;
                }
            }
    	}
     
    	//check input
        if(!data)
        {
    		reportError("Input data missing");
    		return 0;
        }
        else if(data->length == 0)
        {
    		reportError("Input data is empty");
    		return 0;
        }
        if(!filename)
        {
    		reportError("Output file missing");
    		return 0;
        }
        if(symbol_number == 0)
        {
    		symbol_number = 1;
        }
     
    	//second scan
        for (jab_int32 loop=1; loop<para_number; loop++)
        {
            if (0 == strcmp(para[loop],"--ecc-level"))
            {
    			char* option = para[loop];
                if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", option);
    				return 0;
    			}
                symbol_ecc_levels = (jab_int32 *)calloc(symbol_number, sizeof(jab_int32));
                if(!symbol_ecc_levels)
                {
                    reportError("Memory allocation for symbol ecc levels failed");
                    return 0;
                }
                for (jab_int32 j=0; j<symbol_number; j++)
                {
    				if(loop + 1 > para_number - 1)
    					break;
    				char* endptr;
    				symbol_ecc_levels[j] = strtol(para[++loop], &endptr, 10);
    				if(*endptr)
    				{
    					if(symbol_ecc_levels_number == 0)
    					{
    						printf("Value for option '%s' missing or invalid.\n", option);
    						return 0;
    					}
    					loop--;
    					break;
    				}
                    if(symbol_ecc_levels[j] < 0 || symbol_ecc_levels[j] > 10)
    				{
                        reportError("Invalid error correction level (must be 1 - 10).");
    					return 0;
    				}
    				symbol_ecc_levels_number++;
    			}
            }
            else if (0 == strcmp(para[loop],"--symbol-version"))
            {
    			char* option = para[loop];
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", option);
    				return 0;
    			}
                symbol_versions = (jab_vector2d *)calloc(symbol_number, sizeof(jab_vector2d));
                if(!symbol_versions)
                {
                    reportError("Memory allocation for symbol versions failed");
                    return 0;
                }
    			for(jab_int32 j=0; j<symbol_number; j++)
    			{
    				if(loop + 1 > para_number - 1)
    				{
    					printf("Too few values for option '%s'.\n", option);
    					return 0;
    				}
    				char* endptr;
    				symbol_versions[j].x = strtol(para[++loop], &endptr, 10);
    				if(*endptr)
    				{
    					printf("Invalid or missing values for option '%s'.\n", option);
    					return 0;
    				}
    				if(loop + 1 > para_number - 1)
    				{
    					printf("Too few values for option '%s'.\n", option);
    					return 0;
    				}
    				symbol_versions[j].y = strtol(para[++loop], &endptr, 10);
    				if(*endptr)
    				{
    					printf("Invalid or missing values for option '%s'.\n", option);
    					return 0;
    				}
    				if(symbol_versions[j].x < 1 || symbol_versions[j].x > 32 || symbol_versions[j].y < 1 || symbol_versions[j].y > 32)
    				{
    					reportError("Invalid symbol side version (must be 1 - 32).");
    					return 0;
    				}
    				symbol_versions_number++;
    			}
            }
            else if (0 == strcmp(para[loop],"--symbol-position"))
            {
    			char* option = para[loop];
    			if(loop + 1 > para_number - 1)
    			{
    				printf("Value for option '%s' missing.\n", option);
    				return 0;
    			}
                symbol_positions = (jab_int32 *)calloc(symbol_number, sizeof(jab_int32));
                if(!symbol_positions)
                {
                    reportError("Memory allocation for symbol positions failed");
                    return 0;
                }
                for(jab_int32 j=0; j<symbol_number; j++)
                {
    				if(loop + 1 > para_number - 1)
    				{
    					printf("Too few values for option '%s'.\n", option);
    					return 0;
    				}
    				char* endptr;
    				symbol_positions[j] = strtol(para[++loop], &endptr, 10);
    				if(*endptr)
    				{
    					printf("Invalid or missing values for option '%s'.\n", option);
    					return 0;
    				}
    				if(symbol_positions[j] < 0 || symbol_positions[j] > 60)
    				{
    					reportError("Invalid symbol position value (must be 0 - 60).");
    					return 0;
    				}
    				symbol_positions_number++;
                }
            }
        }
     
        //check input
        if(symbol_number == 1 && symbol_positions)
        {
    		if(symbol_positions[0] != 0)
    		{
    			reportError("Incorrect symbol position value for master symbol.");
    			return 0;
    		}
        }
    	if(symbol_number > 1 && symbol_positions_number != symbol_number)
        {
            reportError("Symbol position information is incomplete for multi-symbol code");
            return 0;
        }
        if (symbol_number > 1 && symbol_versions_number != symbol_number)
        {
    		reportError("Symbol version information is incomplete for multi-symbol code");
            return 0;
        }
        return 1;
    }
     
    void cleanMemory()
    {
    	if(data) free(data);
    	if(symbol_positions) free(symbol_positions);
    	if(symbol_versions)  free(symbol_versions);
    	if(symbol_ecc_levels)free(symbol_ecc_levels);
    }
     
    int main(int argc, char *argv[])
    {
        if(argc < 2 || (0 == strcmp(argv[1],"--help")))
    	{
    		printUsage();
    		return 1;
    	}
    	if(!parseCommandLineParameters(argc, argv))
    	{
    		return 1;
    	}
     
        //create encode parameter object
        jab_encode* enc = createEncode(color_number, symbol_number);
        if(enc == NULL)
        {
    		cleanMemory();
    		reportError("Creating encode parameter failed");
            return 1;
        }
        if(module_size > 0)
        {
    		enc->module_size = module_size;
        }
        if(master_symbol_width > 0)
        {
    		enc->master_symbol_width = master_symbol_width;
        }
        if(master_symbol_height > 0)
        {
    		enc->master_symbol_height = master_symbol_height;
        }
    	for(jab_int32 loop=0; loop<symbol_number; loop++)
    	{
    		if(symbol_ecc_levels)
    			enc->ecc_levels[loop] = symbol_ecc_levels[loop];
    		if(symbol_versions)
    			enc->symbol_versions[loop] = symbol_versions[loop];
    		if(symbol_positions)
    			enc->symbol_positions[loop] = symbol_positions[loop];
    	}
     
    	//generate JABCode
    	if(!generateJABCode(enc, data))
    	{
    		reportError("Creating jab code failed");
    		destroyEncode(enc);
    		cleanMemory();
    		return 1;
    	}
     
    	//save bitmap in image file
    	if(!saveImage(enc->bitmap, filename))
    	{
    		reportError("Saving png image failed");
    		destroyEncode(enc);
    		cleanMemory();
    		return 1;
    	}
    	destroyEncode(enc);
    	cleanMemory();
    	return 0;
    }

    Source : GitHub, BSI

    Et vous ?

    Qu’en pensez-vous ?

    Pour quelles applications pensez-vous que JAB Code puisse être utile ?

    Voir aussi :

    La rubrique Sécurité

  2. #2
    Membre expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 726
    Points : 1 631
    Points
    1 631
    Par défaut
    Qu’en pensez-vous ?
    le fait qu'il fasse une imprimante couleur augmente le cout de l'impression.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Qu'est ce qu'on se fait chier alors !

    Il y a eu l'ean/jan 11 puis 13 , le code barre us à 12 ou 13 chiffres avec 0 au début , les codes barres à 8 chiffres, les qr codes ...

    C'est une non invention ...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 21
    Points : 32
    Points
    32
    Par défaut
    Y a de quoi devenir épileptique là

  5. #5
    Membre régulier Avatar de sitexw
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 44
    Points : 117
    Points
    117
    Par défaut
    (update en bas)

    Ce qui m'étonne le plus, c'est qu'on obtient "seulement" un stockage 3 fois plus élevé. Je m'attendais à au moins un facteur 4 si ce n'est pas plus, car déjà, on a 8 couleurs (soi 4 fois plus que le qrcode) et il n'y a pas "d'œil" qui prend de la place pour rien (comme pour le qrcode).
    De plus, je ne sais pas s'il prend en charge un niveau de correction d'erreur, mais ce n'est pas mentionné, donc je pense que non.
    Enfin, je trouve qu'ils auraient pu pousser la chose plus loin en proposant plusieurs niveaux d'encodage avec plus ou moins de couleurs (genre un encodage sur 12, 16, ... couleurs, mais au risque de le rendre plus difficilement lisible pour les devices).

    Pour finir, déjà que l'on à du mal à faire accepter le qrcode (surtout au grand public), alors une nouvelle norme de plus à mettre en avant me paraît bien compliqué...

    Update :
    Merci à l'auteur de m'avoir fait passer pour un inculte, mais comme l'article mentionne quasiment rien sur les spécifications du JAB code... Bref, après quelques recherches, et surtout le lien de la page de test (https://jabcode.org/create), il se trouve qu'il prend en compte l'encodage avec plus ou moins de couleurs. Mais aussi des yeux pour la détection et plein d'autres paramètres que je comprends moins. Allez voir la page de test, c'est très instructif.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 263
    Points : 720
    Points
    720
    Par défaut
    Il y a exactement le même type d'oeuvre pictutal par le peintre Ellsworth Kelly

    https://www.la-croix.com/Culture/Exp...-12-28-1397569

  7. #7
    Membre émérite Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 603
    Points : 2 466
    Points
    2 466
    Par défaut
    Ils se rendent compte que l’intérêt du QR Code c'est sa fiabilité?
    La dès qu'on sera sous une lumière non blanche, je suis pas sur qu'il s'en sorte le truc... sans parler du manque de repères...

    Autant augmenter la finesse d'un QR Code d'un facteur de 2.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 97
    Points : 374
    Points
    374
    Par défaut
    Le rendu final me rappel fortement les fichiers utilisés par le langage de programmation exotique "Piet" (https://fr.wikipedia.org/wiki/Piet)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Salut

    Personnellement je suis sceptique.

    Mon métier consiste à gérer des mailings et donc dans nos courriers nous utilisons différents types de code barres (128, Data, Qr Code, etc...) et bien sûr tous en noir.

    Hors les couleurs peuvent ressortir différemment suivant le type d'impression que ce soit Laser ou du jet d'encre, en fonction du papier, en fonction du profil calorimétrique, si on est en RGB ou CMJN et j'en passe.

    Donc suivant la production on peut avoir des résultats complètements erronés.

    Philippe

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 275
    Points : 12 961
    Points
    12 961
    Par défaut
    Bonjour,
    Citation Envoyé par sitexw Voir le message
    (update en bas)

    Ce qui m'étonne le plus, c'est qu'on obtient "seulement" un stockage 3 fois plus élevé. Je m'attendais à au moins un facteur 4 si ce n'est pas plus, car déjà, on a 8 couleurs (soi 4 fois plus que le qrcode) et il n'y a pas "d'œil" qui prend de la place pour rien (comme pour le qrcode).
    C'est "simple", les pixels de ce nouveau code barre sont bien plus gros que ceux d'un QR-Code (à vu de nez 2x plus gros, je pars sur cette hypothèse).
    Donc là où on peut coder 16 valeurs avec un QR-Code (4 pixels de 2 couleurs => 4 bits => 16 valeurs), on peut mettre 1 pixel avec x couleurs possibles => x valeurs possibles.

    Tatayo.

  11. #11
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 300
    Points : 3 556
    Points
    3 556
    Par défaut
    bonjour,

    pour gérer le problème du rendu des couleurs qui peut évidemment être très variable, les specs prévoient une "color palette" destinée au calibrage indispensable avant la lecture.
    elle figure aux quatres coins du JAB code
    ajoutée aux metadatas de contrôle, ça explique pourquoi le progrès en capacité n'est pas spectaculaire

  12. #12
    Membre expert

    Profil pro
    activité : oui
    Inscrit en
    Janvier 2014
    Messages
    1 262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : activité : oui

    Informations forums :
    Inscription : Janvier 2014
    Messages : 1 262
    Points : 3 409
    Points
    3 409
    Par défaut
    @omen999
    D'autant plus que la palette est nécessaire dans son intégralité, car chaque couleur répondant différemment à la source lumineuse dès lors qu'elle n'est pas à filament.
    Pour exemple, rien qu'en se cantonnant aux lampes à décharges, voici les différentes composantes lumineuses (spectre d'émission) : lien wiki fr

    Qu’en pensez-vous ?
    Citation Envoyé par Patrick Ruiz Voir le message
    Fraunhoher SIT livre ses avancées en la matière. L’institut de recherche propose une version colorée des codes QR ; le projet est connu sous le nom JAB Code (Just Another Bar Code) et publié sur GitHub sous licence publique générale limitée – LGPL 2.1.
    (...)
    Dans cet univers, il fait suite à High Capacity Color Barcode (HCCB) de Microsoft. (...) en 2007. En 2015, Clive Hohberger a (...) pu obtenir l’introduction d’Ultracode comme spécification AIM. Aucune de ces alternatives aux codes à barres monochromes n’a décollé ; la faute à un manque d’intérêt des industriels alors qu’Ultracode offre une densité de stockage de 2x.
    "Le manque d'intérêt des industriels" ...la faut au coût des licences de brevets ?
    JAB Code est lui LGPL v2.1, et de ce que je comprend du code sur un survole de moins d'une minute (le groupe des printf()) : il permet, suivant les réglages, un taux d'erreur entre 0% et 10%, un usage entre monochrome et 256 couleurs, une taille en pixels qui est variable.
    Avec toutes ces variables, l'affirmation "Dans les chiffres, JAB Code permet un rapport de densité qui va jusqu’à 3x en comparaison au code QR monochrome." parait plus une approximation moyenné qu'autre chose. En revanche, d'après ma lecture très superficielle du code, un ecc de 0-10% pour le JAB en comparaison des 7-30% du QR code conventionnel, le disqualifie d'office pour certains type d'usage (tout support amené à être fortement dégradé et où l'information est jugé importante --> les prospectus à la sauvette)

    Bref, il devrait, je suppose, s'il est adopté, être intégré au projet "Zebra Crossing" (lien: ZXing) qui liste et propose un lecteur pour un peu près tout, sous licence Apache 2.0.

    Pour quelles applications pensez-vous que JAB Code puisse être utile ?
    Puisqu'il permet plus d'info sur un même espace --> tout secteurs nécessitant un gain de place ou d'info dans un espace limité (ex: les magazines)
    Plus généralement, tout support ou les gens se bousculent pour payer le moindre cm² d'information

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/07/2018, 13h48
  2. Réponses: 9
    Dernier message: 19/08/2016, 21h43
  3. Réponses: 6
    Dernier message: 05/07/2006, 17h13
  4. Comment créer une application Service qui lance un .exe.
    Par yosthegost dans le forum Delphi
    Réponses: 5
    Dernier message: 18/05/2006, 11h37
  5. Réponses: 17
    Dernier message: 08/01/2006, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo