DSB18: Barcode erzeugen und lesen: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 39: Zeile 39:
== Implementierung Barcode erstellen ==
== Implementierung Barcode erstellen ==


Um einen Barcode zu erstellen wird zunächst die erforderliche Höhe und Breite des Bilds was benötigt wird berechnet. Danach wird als Grundlage ein weißes Bild als JPG erstellt.
<source lang="matlab">
function barcode_erstellen (eingabe,s_element,b_element)
%%Funktionsbeschreibung
%--------------------------------------------------------------------------
%  Programmname:    barcode_erstellen(eingabe,s_element,b_breite)
%      Version:    1.0.0
%        Datum:    12.05.2018
%  Beschreibung:    Das Programm erstellt einen 1D Barcode in CODE39 Format
%        Autor:    Tobias Brandt
%
%        INPUT:    eingabe: Zeichen die in einen Code39 umgewandelt werden
%                            sollen. (Nur Großbuchstaben, Zahlen und
%                            Sonderzeichen '-';'.';' ';'$';'+';'%')
%                    s_element: Dicke eines schmalen Elments in Pixel
%                    b_element: Dicke eines breiten Elements in Pixel
%
%                  Die Relation von Höhe und Breite muss 1:2 sein.
%       
%        OUTPUT:    Das Programm erstellt einen Bracode mit den
%                  eingegebenen Daten als .jpg.
%                  Der Code beginnt und endet jeweils mit einem *
%
%      Beispiel:  barcode_erstellen('HSHL',10,20)
%
%   
%--------------------------------------------------------------------------
%% Leeres Bild erzeuegen
% Länge des Barcode in Pixel bestimmen
%(length(eingabe)+2)=Anzahl der Zeichen, wegen 2x Sterne
%*(6*schmal+3*breit) wegen 3 schmalen Strichen, 3schmalen Lücken, 2 breite Striche, 1 breiten Lücke
%((length(eingabe)+1))= Anzahl der Lücken
Laenge = ((length(eingabe)+2)*(6*s_element+3*b_element))+((length(eingabe)+1)*s_element);
% Höhe des Barcodes damit evtl. noch Platz ist für einen Text
Hoehe = 10*b_element;
Breite= b_element*6 + Hoehe;
% Schwarzes Bild erzeugen
Barcode = zeros(Breite,Laenge,3);
% schwarzes Bild zu weiß konvertieren
for k=1:3
for i=1:Breite
    for j=1:Laenge+(4*b_element+s_element)
        Barcode(i,j,k)=255;
    end
end
end
</source>
Hier nach wird als Anfangszeichen ein Sternchen gezeichnet. Das bilden der Striche übernehmen hierfür extra angelegte Funktionen.
Darauf folgen abfragen welches Zeichen codiert werden muss. dementsprechen werden die Funktionen um Striche und Lücken zu bilden aufgerufen. Aus Gründen der Übersichtlichkeit wird nur die Abfrage für den Buchstaben A dargestellt.
<source lang="matlab">
% "*" als erstes Zeichen einfügen
%Startzeichen "*" einfügen
[xkoordinate,Barcode] = breit_luecke(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = breit_luecke(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = breit_luecke(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = breit_strich(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode,] = breit_strich(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
for i=1:length(eingabe)
    %Bei Eingabe von A wird der Code generiert
    if eingabe(i) == 'A'
      [xkoordinate,Barcode] = breit_strich(xkoordinate,Barcode,b_element,Hoehe);
      [xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
      [xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
      [xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
      [xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
      [xkoordinate,Barcode] = breit_luecke(xkoordinate,Barcode,b_element,Hoehe);
      [xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
      [xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
      [xkoordinate,Barcode] = breit_strich(xkoordinate,Barcode,b_element,Hoehe);
      [xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);   
    end
</source>
Anschließend wird der Barcode abgespeichert und angezeigt
<source lang="matlab">
%% Dateiname erstellen
a{1} = eingabe;
a{2} = '.JPG';
Dateiname = [a{1} a{2}];
%% Barcode speichern
imwrite(Barcode,Dateiname)
Ausgabetext=['Erstellen und Speichern von ',Dateiname,' fertig gestellt'];
disp('-----------------------------------------------------------')
disp(Ausgabetext)
disp('-----------------------------------------------------------')
%%Barcode anzeigen
imshow(Barcode);
end
</source>


== Implementierung Barcode lesen ==
== Implementierung Barcode lesen ==

Version vom 1. Juli 2018, 13:45 Uhr

Autor: Tobias Brandt
Betreuer: Prof. Schneider

Ein Beispiel für einen Barcode. Hier: 'HSHL'

Motivation

Barcodes begleiten unseren Alltag bereits seid Jahrzehnten. Sie codieren Preise im Einzelhandel, ermöglichen das Verfolgen von Briefen und Paketen oder sind als Teil der Stempelkarte Teil der Zeiterfassung in der Industrie. Doch wie werden Barcodes erzeugt und gelesen? Dieser Artikel soll einen kurzen Einblick in die Notation, die Erstellung und das letzlich das Lesen des speziellen CODE39 geben. Integration des Programms erfolgt in Matlab.

Aufgabenstellung

Erzeugen Sie ein Matlab Executable, welches ein Barcode erzeugt. Mit einer Webcam soll ein beliebiger Barcode auf einem Dokument unabhängig von Position und Lage eingescannt werden können.

Prinzip Code39

CODE39 Zeichentabelle

Der Code 39 ist ein diskreter Code mit variabler Codelänge (Wenn mehr Zeichen dargestllt werden sollen, verlängert sich auch der Code). Der Code wurde 1973 erfunden und war somit der erste alphanumerische Barcode. Im Grundsatz besteht der barcode aus weißen und schwarzen Strichen.

Der Name ("Code 3 of 9") geht auf die Struktur der Kodierung zurück. Dabei werden die Zeichen der zu kodierenden Nachricht durch 9 schwarze und weiße Balken repräsentiert. Drei dieser Balken sind breit und der rest schmal. Jeder Block, dieser ein Zeichen darstellt, besteht aus 5 Strichen und 4 Lücken. Getrennt sind die Blöcke durch eine schmale weiße Lücke. Eine nachricht im Code39 beginnt und endet jeweils mit einem Sternchen '*'. Dies wird auch als Start-oder Stoppzeichen bezeichnet.

Der Standartcode verfügt über keine Prüfziffern und kann folgende Zeichen darstellen:

0123456789[Space]ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%

Die Kodierung der einzelnen Zeichen ist in der rechts abgebildeten Zeichentabelle festgelegt.

In der Folgenden Auflistung werden die Vor-und Nachteile Stichpunktartig aufgeführt:

Vorteile:

  • große Lesesicherheit
  • sehr weit verbreitet
  • einfach in der Produktion


Nachteile:

  • geringe Code Dichte
  • keine Prüfsumme

Implementierung Barcode erstellen

Um einen Barcode zu erstellen wird zunächst die erforderliche Höhe und Breite des Bilds was benötigt wird berechnet. Danach wird als Grundlage ein weißes Bild als JPG erstellt.

function barcode_erstellen (eingabe,s_element,b_element)
%%Funktionsbeschreibung
%--------------------------------------------------------------------------
%  Programmname:    barcode_erstellen(eingabe,s_element,b_breite)
%       Version:    1.0.0
%         Datum:    12.05.2018
%  Beschreibung:    Das Programm erstellt einen 1D Barcode in CODE39 Format
%   
%        Autor:    Tobias Brandt
%
%         INPUT:    eingabe: Zeichen die in einen Code39 umgewandelt werden
%                            sollen. (Nur Großbuchstaben, Zahlen und
%                            Sonderzeichen '-';'.';' ';'$';'+';'%')
%                    s_element: Dicke eines schmalen Elments in Pixel
%                    b_element: Dicke eines breiten Elements in Pixel
%
%                   Die Relation von Höhe und Breite muss 1:2 sein.
%        
%        OUTPUT:    Das Programm erstellt einen Bracode mit den
%                   eingegebenen Daten als .jpg.
%                   Der Code beginnt und endet jeweils mit einem *
%
%       Beispiel:   barcode_erstellen('HSHL',10,20)
%
%    
%--------------------------------------------------------------------------

%% Leeres Bild erzeuegen
% Länge des Barcode in Pixel bestimmen
%(length(eingabe)+2)=Anzahl der Zeichen, wegen 2x Sterne
%*(6*schmal+3*breit) wegen 3 schmalen Strichen, 3schmalen Lücken, 2 breite Striche, 1 breiten Lücke
%((length(eingabe)+1))= Anzahl der Lücken
Laenge = ((length(eingabe)+2)*(6*s_element+3*b_element))+((length(eingabe)+1)*s_element);
% Höhe des Barcodes damit evtl. noch Platz ist für einen Text
Hoehe = 10*b_element; 
Breite= b_element*6 + Hoehe;
% Schwarzes Bild erzeugen
Barcode = zeros(Breite,Laenge,3);



% schwarzes Bild zu weiß konvertieren
for k=1:3
for i=1:Breite
    for j=1:Laenge+(4*b_element+s_element)
        Barcode(i,j,k)=255;
    end
end
end

Hier nach wird als Anfangszeichen ein Sternchen gezeichnet. Das bilden der Striche übernehmen hierfür extra angelegte Funktionen. Darauf folgen abfragen welches Zeichen codiert werden muss. dementsprechen werden die Funktionen um Striche und Lücken zu bilden aufgerufen. Aus Gründen der Übersichtlichkeit wird nur die Abfrage für den Buchstaben A dargestellt.


% "*" als erstes Zeichen einfügen 
%Startzeichen "*" einfügen
[xkoordinate,Barcode] = breit_luecke(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = breit_luecke(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = breit_luecke(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = breit_strich(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode,] = breit_strich(xkoordinate,Barcode,b_element,Hoehe);
[xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
[xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);

for i=1:length(eingabe)
    %Bei Eingabe von A wird der Code generiert
    if eingabe(i) == 'A'
       [xkoordinate,Barcode] = breit_strich(xkoordinate,Barcode,b_element,Hoehe);
       [xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
       [xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
       [xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
       [xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
       [xkoordinate,Barcode] = breit_luecke(xkoordinate,Barcode,b_element,Hoehe);
       [xkoordinate,Barcode] = schmal_strich(xkoordinate,Barcode,s_element,Hoehe);
       [xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);
       [xkoordinate,Barcode] = breit_strich(xkoordinate,Barcode,b_element,Hoehe);
       [xkoordinate,Barcode] = schmal_luecke(xkoordinate,Barcode,s_element,Hoehe);    
    end

Anschließend wird der Barcode abgespeichert und angezeigt

%% Dateiname erstellen
a{1} = eingabe;
a{2} = '.JPG';
Dateiname = [a{1} a{2}];
%% Barcode speichern
imwrite(Barcode,Dateiname)
Ausgabetext=['Erstellen und Speichern von ',Dateiname,' fertig gestellt'];
disp('-----------------------------------------------------------')
disp(Ausgabetext)
disp('-----------------------------------------------------------')
%%Barcode anzeigen
imshow(Barcode);

end

Implementierung Barcode lesen

Verwendete Geräte

Für das Einlesen des Barcodes wurde die Webcam Logitec HD Webcam C310 verwendet. Die Videoauflösung beträgt 1.280 x 720 Pixel.

Beispielbilder

Folgende Bilder wurden mit dem Programm Barcode_erstellen erstellt.

Für das Einlesen der Barcodes wurden diese ausgedruckt und teilweise mit Störungen versehen. Im folgenden sind einige davon dargestellt. Es wird immer der HSHL Barcode dargestellt. Die Störungen sind unter den Bildern beschrieben.

Anforderungen

  1. Arbeiten Sie sich in die Erstellung von Barcodes ein.
  2. Erzeugen Sie ein Matlab Executable, welches aus einen Barcode erzeugt.
  3. Lesen Sie mit Matlab über eine Webcam diesen Barcode ein, so dass die dahinterliegenden Daten angezeigt werden.
  4. Wissenschaftliche Dokumentation als HSHL-Wiki Artikel
  5. Softwareentwicklung nach SDE Standard in SVN
  6. Funktionsnachweis als YouTube-Video (vgl. Veranstaltungsregeln)


Youtube Video

Weblinks

Literatur

  • Bernhard Lenk: Handbuch der automatischen Identifikation. Band 1-3: 2D-Codes, Matrixcodes, Stapelcodes, Composite Codes, Dotcodes. Lenk Monika Fachbuchverlag, Kirchheim unter Teck 2002, ISBN 978-3-935551-01-4.
  • ten Hompel, M., u.A.: Identifikationssysteme und Automatisierung. Heidelberg: Springer, 2008. ISBN 978-3-540-75880-8

BSD-Lizenzbedingung BSD-Lizenz

Copyright (c) 2018, Hochschule Hamm-Lippstadt, Dep. Lip. 1, Prof. Schneider
Hochschule Hamm-Lippstadt. Alle Rechte vorbehalten.




→ zurück zum Hauptartikel: Digitale Signal- und Bildverarbeitung SoSe2018