> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Erkennung von Barcodes

> Optimieren Sie die Barcode-Erkennung in ABBYY FineReader Engine mit BarcodeParams in PageAnalysisParams — Prüfsummen für Code 39 / Interleaved 2 of 5 / Codabar / Matrix 2 of 5 sowie 2D-Codes.

In diesem Abschnitt geht es um bestimmte Funktionen, die speziell für die Erkennung von Barcodes mit ABBYY FineReader Engine 12 gelten. Die wichtigsten Aspekte der Barcode-Erkennung werden im Szenario [Barcode-Erkennung](/de/fine-reader/engine/guided-tour/basic-usage-scenarios-implementation/barcode-recognition) beschrieben.

In den meisten Fällen kann ein Barcode mit den Standardeinstellungen erkannt werden, wenn er der Spezifikation entspricht. In anderen Fällen müssen bestimmte Parameter angegeben werden. Diese Parameter werden über das Unterobjekt [BarcodeParams](/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/barcodeparams) des Objekts [PageAnalysisParams](/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/pageanalysisparams) festgelegt.

<div id="barcodes-with-checksum">
  ## Barcodes mit Prüfsumme
</div>

Barcodes der Typen [Code 39](/de/fine-reader/engine/specifications/barcode-types#code_39), [Interleaved 2 of 5](/de/fine-reader/engine/specifications/barcode-types#interleaved2_5), [Codabar](/de/fine-reader/engine/specifications/barcode-types#codabar) und [Matrix 2 of 5](/de/fine-reader/engine/specifications/barcode-types#matrix2_5) können eine Prüfsumme enthalten. Prüfsummen dienen der Fehlererkennung. Der Algorithmus zur Berechnung der Prüfsumme ist durch den Standard festgelegt. Damit Barcodes mit Prüfsummen korrekt erkannt werden, müssen Sie die Eigenschaft [HasChecksum](/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/barcodeparams#haschecksum) des BarcodeParams-Objekts auf TRUE setzen.

<Warning>
  Das Erkennungsergebnis enthält die Barcode-Prüfsumme nicht, wenn diese durch den Standard vorgegeben ist.
</Warning>

<div id="pdf417-aztec-data-matrix-qr-code-maxicode-barcodes">
  ## PDF417-, Aztec-, Data Matrix-, QR-Code- und MaxiCode-Barcodes
</div>

Standardmäßig erkennt ABBYY FineReader Engine [PDF417](/de/fine-reader/engine/specifications/barcode-types#pdf_417)-, [Aztec](/de/fine-reader/engine/specifications/barcode-types#aztec)-, [DataMatrix](/de/fine-reader/engine/specifications/barcode-types#datamatrix)-, [QR Code](/de/fine-reader/engine/specifications/barcode-types#qrcode)- und [MaxiCode](/de/fine-reader/engine/specifications/barcode-types#maxicode)-Barcodes mit der Codepage, die der Spezifikation entspricht. Dabei werden die folgenden Codepages verwendet:

* für PDF417 — DOS United States (437) ([CP\_US\_MSDOS](/de/fine-reader/engine/api-reference/enumerations/codepageenum#cp_us_msdos))
* für Aztec, DataMatrix, QR Code, MaxiCode — ISO Latin 1 (8859-1) ([CP\_Latin\_ISO](/de/fine-reader/engine/api-reference/enumerations/codepageenum#cp_latin_iso))

Manchmal entsprechen diese Barcodes jedoch nicht der Spezifikation, das heißt, sie wurden mit einer anderen Codepage erstellt als der in der Spezifikation festgelegten. In diesem Fall muss die Codepage manuell über die Eigenschaft [CodePage](/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/barcodeparams#codepage) des Objekts BarcodeParams angegeben werden.

<div id="qr-codes-in-structured-append-mode">
  ## QR-Codes im Structured-Append-Modus
</div>

[QR-Codes](/de/fine-reader/engine/specifications/barcode-types#qrcode) können verwendet werden, um große Datenmengen zu kodieren, indem bis zu 16 Codes in einer Sequenz im Structured-Append-Format zusammengefasst werden. Das [BarcodeBlock](/de/fine-reader/engine/api-reference/layout-related-objects/barcodeblock)-Objekt bietet über die Eigenschaften QrCodeSequenceId, QrCodeSequenceCount und QrCodeSequenceIndex Zugriff auf spezielle Informationen zur Structured-Append-Sequenz, und Sie können es in Ihrem Programm verwenden, um die erkannten Codes zusammenzusetzen.

<div id="binary-data-encoded-in-barcodes">
  ## In Barcodes codierte Binärdaten
</div>

[PDF417](/de/fine-reader/engine/specifications/barcode-types#pdf_417), [Aztec](/de/fine-reader/engine/specifications/barcode-types#aztec), [DataMatrix](/de/fine-reader/engine/specifications/barcode-types#datamatrix) und [QR Code](/de/fine-reader/engine/specifications/barcode-types#qrcode)-Barcodes können sowohl Text als auch Binärdaten codieren. ABBYY FineReader Engine stellt alle erkannten Barcode-Daten, einschließlich Binärdaten, als Text dar. Wie Binärdaten in Textform dargestellt werden, hängt vom Wert der Eigenschaft [ContainsBinaryData](/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/barcodeparams#containsbinarydata) des BarcodeParams-Objekts ab:

<table><thead><tr><th><p><strong>Wert von ContainsBinaryData</strong></p></th><th><p><strong>Darstellung von Binärdaten</strong></p></th></tr></thead><tbody><tr><td><p>FALSE (Standardwert)</p></td><td><ul><li>Für jedes Zeichen, das Binärdaten enthält, ist die Eigenschaft <strong><a href="/de/fine-reader/engine/api-reference/text-related-objects/barcodesymbol#isbinarydata">IBarcodeSymbol::IsBinaryData</a></strong> auf TRUE gesetzt.</li><li>Binärdaten werden ebenso wie Textdaten als Unicode-Zeichenfolge dargestellt (<strong><a href="/de/fine-reader/engine/api-reference/layout-related-objects/barcodeblock#text">IBarcodeBlock::Text</a></strong>).</li><li>Die Daten werden mithilfe der in der Eigenschaft <strong><a href="/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/barcodeparams#codepage">IBarcodeParams::CodePage</a></strong> angegebenen Codepage in die Unicode-Zeichenfolge umgewandelt. Um die Binärdaten aus der Unicode-Zeichenfolge zu erhalten, sollten Sie die Zeichenfolge mit der entsprechenden Codepage decodieren.</li></ul><Note>Die binäre Null kann nicht korrekt in eine Unicode-Zeichenfolge umgewandelt werden. Das entsprechende Zeichen in der Zeichenfolge ist das Symbol für „nicht erkanntes Zeichen“ („^“) und hat die Eigenschaft <a href="/de/fine-reader/engine/api-reference/text-related-objects/barcodesymbol#isbinaryzero">IBarcodeSymbol::IsBinaryZero</a> auf TRUE gesetzt.</Note></td></tr><tr><td><p>TRUE</p></td><td><ul><li>Für jedes Zeichen, das Binärdaten enthält, ist die Eigenschaft <strong><a href="/de/fine-reader/engine/api-reference/text-related-objects/barcodesymbol#isbinarydata">IBarcodeSymbol::IsBinaryData</a></strong> auf TRUE gesetzt.</li><li>Binärdaten werden ebenso wie Textdaten als Unicode-Zeichenfolge dargestellt (<strong><a href="/de/fine-reader/engine/api-reference/layout-related-objects/barcodeblock#text">IBarcodeBlock::Text</a></strong>).</li><li>Die Binärdaten werden in der Unicode-Zeichenfolge als Folge hexadezimaler Werte der entsprechenden Bytes gespeichert. Zum Beispiel wird die Zeichenfolge "00FF02" für die folgenden 3 Bytes verwendet: 0x00, 0xFF, 0x02.</li></ul></td></tr></tbody></table>

<div id="the-recognition-procedure">
  ## Das Erkennungsverfahren
</div>

Gehen Sie wie folgt vor, um Barcodes zu erkennen, die nicht der Spezifikation entsprechen, oder Barcodes mit Prüfsummen zu verarbeiten (wir setzen voraus, dass das vordefinierte Profil BarcodeRecognition\_Accuracy oder BarcodeRecognition\_Speed bereits geladen wurde):

1. Erstellen Sie mit der Methode [CreateDocumentProcessingParams](/de/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods) des Objekts [Engine](/de/fine-reader/engine/api-reference/engine-object-iengine-interface) ein Objekt vom Typ [DocumentProcessingParams](/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/documentprocessingparams).
2. Ändern Sie die Standardwerte der erforderlichen Eigenschaften des Unterobjekts BarcodeParams (DocumentProcessingParams enthält die Eigenschaft PageProcessingParams, die wiederum PageAnalysisParams enthält, und dieses schließt BarcodeParams ein).
3. Übergeben Sie das Objekt DocumentProcessingParams als Eingabeparameter an die Methode [Process](/de/fine-reader/engine/api-reference/document-related-objects/frdocument/process-method) des Objekts [FRDocument](/de/fine-reader/engine/api-reference/document-related-objects/frdocument).
4. Wenn Sie andere Verarbeitungsmethoden verwenden, benötigen diese möglicherweise ein Objekt vom Typ [PageAnalysisParams](/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/pageanalysisparams) oder [PageProcessingParams](/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/pageprocessingparams) als Eingabeparameter. Gehen Sie dabei genauso vor und ändern Sie die Werte des Unterobjekts BarcodeParams in einem dieser Objekte.

<div id="code-samples">
  ### Codebeispiele
</div>

<Accordion title="C++-Code">
  ```cpp theme={null}
  // Wir gehen davon aus, dass die Engine bereits geladen wurde
  // und das Dokument geöffnet ist
  IEngine* Engine;
  IFRDocument* frDocument;
  HRESULT res; // diese Variable verwenden, um zu prüfen, ob der Methodenaufruf erfolgreich war
  ...
  // Ein DocumentProcessingParams-Objekt erstellen
  IDocumentProcessingParams* params = 0;
  res = Engine->CreateDocumentProcessingParams( ¶ms );
   
  IPageProcessingParams* pageParams = 0;
  IPageAnalysisParams* analysisParams = 0;
  IBarcodeParams* barcodeParams = 0;
  res = params->get_PageProcessingParams( &pageParams );
  res = pageParams->get_PageAnalysisParams( &analysisParams );
  res = analysisParams->get_BarcodeParams( &barcodeParams );
   
  // Die erforderlichen Parameter festlegen
  res = barcodeParams->set_Type( BT_Code39 );
   
  // Barcodes erkennen
  // Wir gehen davon aus, dass das vordefinierte Profil BarcodeRecognition bereits geladen ist
  res = frDocument->Process( params );
  ...
  ```
</Accordion>

<Accordion title="C++ (COM)-Code">
  ```cpp theme={null}
  FREngine::IEnginePtr Engine;
  FREngine::IFRDocumentPtr frDocument;
  ...
  // Ein DocumentProcessingParams-Objekt erstellen
  FREngine::IDocumentProcessingParamsPtr params = Engine->CreateDocumentProcessingParams();
  // Die erforderlichen Parameter festlegen
  params->PageProcessingParams->PageAnalysisParams->BarcodeParams->Type = FREngine::BT_Code39;
  // Barcodes erkennen. Wir gehen davon aus, dass das FRDocument-Objekt bereits erstellt wurde und
  // das vordefinierte Profil BarcodeRecognition bereits geladen ist
  frDocument->Process( params );
  ...
  ```
</Accordion>

<Accordion title="C#-Code">
  ```csharp theme={null}
  FREngine.IEngine engine;
  FREngine.IFRDocument frDocument;
  ...
  // Ein DocumentProcessingParams-Objekt erstellen
  FREngine.IDocumentProcessingParams dpp = engine.CreateDocumentProcessingParams();
  // Die erforderlichen Parameter festlegen
  dpp.PageProcessingParams.PageAnalysisParams.BarcodeParams.Type = (int)FREngine.BarcodeTypeEnum.BT_Code39;
  // Barcodes erkennen. Wir gehen davon aus, dass das FRDocument-Objekt bereits erstellt wurde und
  // das vordefinierte Profil BarcodeRecognition bereits geladen ist
  frDocument.Process( dpp );
  ```
</Accordion>

<div id="tips-for-working-with-barcodes">
  ## Tipps zum Arbeiten mit Barcodes
</div>

Die Qualität der Barcode-Erkennung hängt von der Druckqualität der Barcodes und den beim Scannen des Dokuments verwendeten Einstellungen ab. Damit Barcodes zuverlässig erkannt werden, befolgen Sie diese Empfehlungen:

* Ein Barcode muss durch einen ausreichend breiten weißen Freiraum von anderem Text getrennt sein.
* Die Größe des Barcodes und die Breite seiner einzelnen Balken oder Punkte müssen die folgenden Anforderungen erfüllen:
  * Die optimale Höhe eines Barcodes beträgt mehr als 10 Millimeter. Ein Barcode sollte kleiner als das Format A4 sein.
  * Die Höhe des Barcodes muss mehr als doppelt so groß sein wie die Höhe einer Textzeile.
  * Bei nicht quadratischen Barcodes muss die Länge größer als die Höhe sein.
  * Bei 1D-Barcodes muss die Breite des dünnsten Balkens im Barcode mindestens 3–5 Pixel betragen.
  * Bei 2D-Barcodes müssen die Zellen mindestens 2x2 Pixel groß sein; empfohlen wird eine Größe von 4x4 Pixeln oder mehr. Außerdem sollten bei allen 2D-Barcodes außer PDF417 die Zellen quadratisch sein, da ein gestreckter 2D-Barcode höchstwahrscheinlich nicht korrekt erkannt wird.
* Wir raten davon ab, Barcode-Bilder mit JPEG zu komprimieren, da dadurch die Barcode-Ränder unscharf werden.
* Wir raten davon ab, Barcodes schräg auszurichten, d. h., der Winkel des Barcodes sollte zur horizontalen Achse ein Vielfaches von 90 Grad sein.
* Der Graustufen-Scanmodus ist für OCR-Zwecke am besten geeignet. Wenn Sie in Schwarzweiß scannen, passen Sie die Helligkeitseinstellung an. Wenn der Barcode „zerrissen“ wirkt oder sehr hell ist, verringern Sie die Helligkeit, um das Bild dunkler zu machen. Wenn der Barcode verzerrt ist oder seine Teile zusammenkleben, erhöhen Sie die Helligkeit, um das Bild heller zu machen.
* Vermeiden Sie es, Barcodes in Rahmen zu drucken.
* Vermeiden Sie es, Barcodes über Text oder Bilder zu drucken.

In der Praxis können auch Barcodes erkannt werden, die diese Empfehlungen nicht erfüllen; die Erkennungsqualität kann jedoch gering sein.

<div id="see-also">
  ## Siehe auch
</div>

[Barcode-Erkennung](/de/fine-reader/engine/guided-tour/basic-usage-scenarios-implementation/barcode-recognition)

[Barcode-Typen](/de/fine-reader/engine/specifications/barcode-types)
