QR Code Lesen mit Hilfe von ZXing
Hallo,
Ich habe mit Hilfe der ZXing Bibliothek versucht, Barcodes aus aufgenommenen Bildern zu lesen. Leider hat das nicht funktioniert. Ich bekomme als result jedes mal 'null' urück, sodass er mir keinen ausgewerteten Text ausgibt. In der zxing webapplikation bekomme ich jedoch ein brauchbares ergebnis. Hat jmd eine Idee, wie ich das Problem angehen oder lösen könnte?
Hier der Codeschnipsel:
Code:
img_Image.Source = img;
//Decodiere Barcode
var ms = new InMemoryRandomAccessStream();
var wb = new WriteableBitmap(img.PixelWidth, img.PixelHeight);
await wb.SetSourceAsync(ms);
IBarcodeReader reader = new ZXing.BarcodeReader();
reader.Options.TryHarder = true;
txt_QRContent.Text = "Hier könnten Ihre Daten stehen!";
Result result = reader.Decode(wb);
if (result != null)
{
txt_QRContent.Text = result.Text;
}
Die TryHarder-Eigenschaft habe ich einfach mal true gesetzt, da ich diese Option gefunden und mir davon Erfolg versprochen hatte. Leider mit dem selben Ergebnis.
AW: QR Code Lesen mit Hilfe von ZXing
Du legst hier einen InMemoryAccessStream an in ms. Dann setzt du die Source des WriteableBitmap auf diesen Stream. Was mir aber in dem Code-Stück fehlt ist wie das Image das du oben hast in den Stream kommt. Schaut so aus als würdest du ein WriteableBitmap aus einem leeren Stream befüllen und da findet ZXing dann natürlich nix.
Was für eine App ist das - Silverlight 8.1 oder WinRT (Universal). Mit dem InMemoryRandomAccessStream vermute ich mal WinRT. Generell würde ich ja empfehlen QR Codes statt aus einem ausgenommenen Bild direkt aus dem Preview-Stream der Kamera zu lesen. Das ist halt unter WinRT etwas doof im Moment - bin schon ne Weile am Überlegen da eine ordentliche Lösung zu bauen (beim alten Kamera-API gabs ja ein "PreviewFrameAvailable-Event").
AW: QR Code Lesen mit Hilfe von ZXing
Zitat:
Zitat von
StevieBallz
Was für eine App ist das - Silverlight 8.1 oder WinRT (Universal). Mit dem InMemoryRandomAccessStream vermute ich mal WinRT. Generell würde ich ja empfehlen QR Codes statt aus einem ausgenommenen Bild direkt aus dem Preview-Stream der Kamera zu lesen.
Jo, WinRT. Wär mir natürlich auch lieber, aber das hier war die einzige Lösung, die ich bis dato dazu gefunden habe.
Deinen Lösungsansatz püfe ich mal. Danke ;)
---------- Hinzugefügt um 15:41 ---------- Vorheriger Beitrag war um 15:21 ----------
Zitat:
Zitat von
StevieBallz
Du legst hier einen InMemoryAccessStream an in ms. Dann setzt du die Source des WriteableBitmap auf diesen Stream. Was mir aber in dem Code-Stück fehlt ist wie das Image das du oben hast in den Stream kommt. Schaut so aus als würdest du ein WriteableBitmap aus einem leeren Stream befüllen und da findet ZXing dann natürlich nix.
OK, gibt sinn. Bin schon irgendwie zu lange an dem Problem dran, sorry ^^
Habs jetzt gelöst bekommen. Hier die Lösung, weil ich offengebliebene Threads hasse:
Code:
var data = await FileIO.ReadBufferAsync(sampleFile);
var ms = new InMemoryRandomAccessStream();
var dw = new Windows.Storage.Streams.DataWriter(ms);
dw.WriteBuffer(data);
ms.Seek(0);
await dw.StoreAsync();
var wb = new WriteableBitmap(img.PixelWidth, img.PixelHeight);
ms.Seek(0);
await wb.SetSourceAsync(ms);
//Decodiere Barcode
IBarcodeReader reader = new ZXing.BarcodeReader();
reader.Options.TryHarder = true;
Result result = reader.Decode(wb);
if (result != null)
{
txt_QRContent.Text = result.Text;
}
Hast du noch einen Ansatz, mit dem ich QR Codes aus dem Kamerastream lese?
AW: QR Code Lesen mit Hilfe von ZXing
Danke für den fertigen Code - ist sicher hilfreich für andere. Erinnert mich etwas an das Windows 8 Sample von ZXing. Einen Ansatz habe ich aber ich weiß nicht ob er dir gefällt:
Es gibt eine StartPreviewToCustomSinkAsync auf dem MediaCapture-Objekt. Man müsste eine CustomSink implementieren (wird vermutlich C++ Code benötigen) und dort dann entsprechend die Erkennung einbauen. Soweit so gut - das Problem ist dass man dann auch noch die normale Sink ansteuern müsste um dort die Preview weiterhin anzeigen zu können. Ist keine triviale Geschichte. Bin wie gesagt schon länger am überlegen mich mal daran zu setzen da was wiederverwendbares zu bauen und zur Verfügung zu stellen - die Anforderung hat ja öfters mal wer.
AW: QR Code Lesen mit Hilfe von ZXing
Den obigen Ansatz nutze ich auch, halt mit MediaCapture.
Ich hab zwar einen funktionierenden Scanner mit LiveBild, aber das Ding ruckelt so unglaublich dass man das keinem User zumuten will.
Habe auf Grund vom obligatorischen Zeitmangel dann aber weitere Versuche eingestellt.
AW: QR Code Lesen mit Hilfe von ZXing
Leute, dieser Thread gefällt mir. Gut verbalisiert und zielgerichtet.
Bin selbst Grafikdesigner mit Hang zu Interfaces und Wissen im Bereich Webentwicklung. Würde zu gerne mal 'ne App konzipieren und gestalten, also werd ich mal nach solchen Posts Ausschau halten. Hab schon mal über Channel 9 und VS erste Versuche gestartet, bin aber eher Entwerfer als Entwickler...
Euch viel Erfolg!