relpipe-data/examples-barcode.xml
branchv_0
changeset 329 5bc2bb8b7946
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/relpipe-data/examples-barcode.xml	Mon Feb 21 00:43:11 2022 +0100
@@ -0,0 +1,86 @@
+<stránka
+	xmlns="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/strana"
+	xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro">
+
+	<nadpis>Reading barcodes and QR</nadpis>
+	<perex>recognize barcodes (including QR) in image files or streams</perex>
+	<m:pořadí-příkladu>05400</m:pořadí-příkladu>
+
+	<text xmlns="http://www.w3.org/1999/xhtml">
+
+		<p>
+			Either ubiquitous 1D barcodes (procudct labels, ISBN in form of EAN-13 etc.) or 2D barcodes (QR containing hyperlinks, vCards etc.)
+			encode numbers, texts or other data into images that can be printed and scanned or photographed later.
+			Since <m:a href="release-v0.18">v0.18</m:a>, <m:name/> can interact with this technology.
+		</p>
+		
+		<p>
+			The <code>relpipe-in-barcode</code> tool reads image data from the standard input, so we can feed a file containing a barcode into it or we can generate one on-the-fly.
+			We can also use <code>tee</code> command to store generated image data in a file.
+		</p>
+		<m:pre jazyk="shell"><![CDATA[echo -n "Big Fun" | qrencode -o - | tee qr.png | relpipe-in-barcode | relpipe-out-tabular]]></m:pre>
+		
+		<p>This pipeline generates this relation:</p>
+		<m:pre jazyk="text"><![CDATA[symbol:
+ ╭──────────────┬───────────────┬────────────────┬─────────────┬─────────────┬─────────────────┬──────────────────╮
+ │ id (integer) │ type (string) │ value (string) │ x (integer) │ y (integer) │ width (integer) │ height (integer) │
+ ├──────────────┼───────────────┼────────────────┼─────────────┼─────────────┼─────────────────┼──────────────────┤
+ │            0 │ QR-Code       │ Big Fun        │          12 │          12 │              63 │               63 │
+ ╰──────────────┴───────────────┴────────────────┴─────────────┴─────────────┴─────────────────┴──────────────────╯
+Record count: 1]]></m:pre>
+		
+		<p>
+			There might be multiple barcodes (symbols) in the image file and we obtain also their sizes and positions.
+			We may read a <a href="img/barcode-qr-IMG_5758.jpeg">photo</a>:
+		</p>
+		
+		<m:pre jazyk="shell"><![CDATA[cat barcode-qr-IMG_5758.jpeg | relpipe-in-barcode | relpipe-out-tabular]]></m:pre>
+		
+		<p>and get plenty of symbols:</p>
+		<m:pre jazyk="text" src="examples/barcode-qr-IMG_5758.txt"/>
+		
+		<p>
+			There is also (a bit experimental) example of barcode <m:a href="release-v0.15">streamlet</m:a> that is called from <code>relpipe-in-filesystem</code>
+			and works with several files at once (can even run in parallel, like any other streamlet):
+		</p>
+		<m:pre jazyk="shell"><![CDATA[find -print0 | relpipe-in-filesystem --parallel 8 --file name --streamlet barcode-reader | …]]></m:pre>
+		
+		
+		<p>
+			When we are generating QR codes and use Unicode characters (e.g. the <code>→</code> arrow):
+		</p>
+		<m:pre jazyk="shell"><![CDATA[echo -n "extreme→impression" | qrencode -o - | relpipe-in-barcode | relpipe-out-csv]]></m:pre>
+		
+		<p>we may get unexpected result:</p>
+		<m:pre jazyk="text"><![CDATA["id","type","value","x","y","width","height"
+"0","QR-Code","extreme竊段mpression","12","12","74","74"]]></m:pre>
+		
+		
+		<p>
+			QR codes use the ISO 8859-1 encoding as default and readers usually do some heuristics to guess actual encoding.
+			Sometimes it works, sometimes not.
+			In this particular case, the reader accidentally thought that the encoding was SJIS.
+			So we can <i>fix</i> it by adding <code>| iconv -t SJIS</code> at the end of the pipeline.
+		</p>
+		
+		<p>
+			But this is just a workaround.
+			We rather want to add UTF-8 BOM or ECI (Extended Channel Interpretations) to make the reader use the same encoding as we did (UTF-8):
+		</p>
+		
+		<m:pre jazyk="shell"><![CDATA[echo -ne "\xEF\xBB\xBFextreme→impression" | qrencode -o - | relpipe-in-barcode | relpipe-out-csv]]></m:pre>
+		
+		<p>and get desired result:</p>
+		<m:pre jazyk="text"><![CDATA["id","type","value","x","y","width","height"
+"0","QR-Code","extreme→impression","12","12","74","74"]]></m:pre>
+		
+		<p>
+			Because the <code>relpipe-in-barcode</code> tool and the <code>barcode-reader</code> streamlet produce data in machine readable form,
+			we can use them not only for manual ah-hoc reading but also in scripts or batch processing –
+			e.g. extract payment information from invoices or contact information from scanned business cards, catalogize books or read package labels.
+		</p>
+
+
+	</text>
+
+</stránka>