Inhaltsverzeichnis:

Sprechender Barcode-Leser für Raspberry Pi - Gunook
Sprechender Barcode-Leser für Raspberry Pi - Gunook

Video: Sprechender Barcode-Leser für Raspberry Pi - Gunook

Video: Sprechender Barcode-Leser für Raspberry Pi - Gunook
Video: Home Assistant EINKAUFSLISTE füllen mit BARCODE SCANNER für ESPHome 2024, November
Anonim
Raspberry Pi sprechender Barcode-Leser
Raspberry Pi sprechender Barcode-Leser

Abb.1 Barcode-Scanner von DX.com

Überblick

Update: Eine kurze Videodemo ist verfügbar

Meine Mutter kann die Etiketten auf Lebensmittelartikeln nicht mehr lesen, also suchte ich nach Lösungen. Nachdem ich gesehen hatte, dass Barcode-Leser für Blinde viele Hundert Dollar kosten, wollte ich sehen, was mit einem Raspberry Pi und einem USB-Barcode-Leser gemacht werden könnte.

Eine weitere wichtige Nachahmung war, dass dies OHNE Internetverbindung funktionieren sollte (z. B. in einem Geschäft oder bei Freunden zu Hause). Daher mussten Datenbank und Text-to-Speech in sich geschlossen sein.

Ich habe eine kamerabasierte Version des Strichcodelesers ausprobiert, aber Beleuchtung und Kameraposition verursachten Zuverlässigkeitsprobleme für jemanden, der nicht klar sehen konnte. Diese erforderten auch Sicht, um die App einzurichten und zu verwenden. Also bin ich auf einen USB-Laser-Barcodeleser umgestiegen, zumal sie jetzt für unter 30 US-Dollar erhältlich sind und der Raspbian Jessie sie sofort unterstützt.

Ich habe auch den neuen Amazon Dash Wand ausprobiert, aber er spricht das gescannte Objekt nicht und erfordert eine Internetverbindung, um zu funktionieren.

Die Idee war, einen Artikel zu scannen und den Raspberry eine interne Datenbank mit UPC-Codes abfragen zu lassen und dann die Produktbeschreibung per Text-to-Speech zu sprechen.

Um das Gerät so klein wie möglich zu machen, wollte ich einen Raspberry Pi Zero verwenden. Ich wollte das Gerät auch mit Batteriestrom betreiben.

Um diese Anforderungen zu erfüllen, waren einige Kompromisse erforderlich. Da der Zero keine externe Audiobuchse hat, habe ich das Audiodesign aus meinem "Earthquake Pi" -Projekt wiederverwendet, da es günstig (ca. 6 US-Dollar) und sehr klein war. Alternativ ist es möglich, das "One Transistor Audio for Pi Zero" zu ersetzen.

Für den Laser-Barcode-Scanner habe ich einen von DX.com gefunden. Es wird über den Raspberry USB mit Strom versorgt und kostet etwa 25 US-Dollar. (siehe Teile unten)

Schritt 1: AKTUALISIEREN

Mit der Ankunft des Raspberry Pi Zero W werde ich darauf umsteigen. Hier ist alles gleich, außer dass Sie die WiFi-Verbindung zum Pi einrichten müssen. Das bedeutet, dass Sie für die Einrichtung und Verwendung keinen USB-Hub für die Zero benötigen.

Sie können das WLAN einrichten mit:

thepihut.com/blogs/raspberry-pi-tutorials/…

Wusstest du schon?

Wenn Sie Raspbian Jessie mit einem Windows-PC auf einer SD-Karte installieren, können Sie zwei Dateien auf der Karte erstellen, um den WLAN- und SSH-Zugriff zu konfigurieren, bevor Sie sie auf einem Raspberry booten?

Nehmen Sie dazu an, dass Ihre SD-Karte derzeit als K: auf Ihrem PC gemountet ist:

1) Installieren Sie das neueste Raspbian Jessie-Image auf der SD. Für dieses Projekt sollte Jessie Lite funktionieren.

www.raspberrypi.org/downloads/raspbian/

2) Erstellen Sie mit Notepad eine Datei mit dem Namen "ssh" und verwenden Sie "Speichern unter "Alle Dateien" in K:\ssh

Die Datei kann alles enthalten. Wichtig ist der Dateiname. Darf NICHT „ssh.txt“sein!!!

3) Erstellen Sie mit Notepad eine Datei namens „wpa_supplicant.conf“mit folgendem:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1

Netzwerk={

ssid="mySSID" psk="mypassword" key_mgmt=WPA-PSK }

Verwenden Sie Save As „All files“to K:\wpa_supplicant.conf Auch hier, lassen Sie Notepad es nicht in „wpa_supplicant.conf.txt“ändern!!

Wenn Sie den Raspberry zum ersten Mal booten, sucht Jessie nach diesen und verbindet sich mit Ihrem Wifi. Sie müssen jedoch auf Ihrem Router nach der IP-Adresse suchen, da sie automatisch zugewiesen wird.

Schritt 2: Teileliste

  • Raspberry Pi Zero (oder jeder Raspberry Pi, wenn die Größe kein Problem darstellt)
  • USB-Laser-Barcode-Scanner

    www.dx.com/p/ls-4209-laser-bar-code-scanner…

  • Fügen Sie für Raspi Zero den Adafruit I2S 3W Class D Verstärker hinzuhttps://www.adafruit.com/products/3006
  • Kleiner Lautsprecher. (Für Pi 2, 3 verwenden Sie einen externen Verstärker und Lautsprecher.)https://www.adafruit.com/product/1890
  • USB Micro auf USB OTG Adapterhttps://www.adafruit.com/products/2910
  • 5V 1Amp USB-Akku wie
  • USB-zu-Micro-USB-Kabel für Akku.
  • USB- & Ethernet-Hub (zumindest für die Ersteinrichtung, nicht erforderlich für Zero W oder Raspi 2, 3)https://www.adafruit.com/products/2992
  • Software von GITHUB:

Schritt 3: USB-Laser-Barcodeleser

USB-Laser-Barcodeleser
USB-Laser-Barcodeleser

Laser-Barcodeleser können ein UPC-Etikett besser scannen als Kameras. Sie funktionieren auch bei schlecht beleuchteten oder schlecht platzierten Etiketten gut.

Sie benötigen den USB-zu-USB-Mikroadapter, um ihn an die Zero anzuschließen.

Der Handgriff und der Auslöser des Scanners machen es einfach zu bedienen.

Es gibt auch Feedback, wenn es ein Etikett erfolgreich scannt.

Zukünftige ToDo:

Im endgültigen Design würde ich das Kabel abschneiden, um es zu kürzen und direkt an die USB-Pins des Zero zu löten, um die Größe und die Wahrscheinlichkeit eines Steckerausfalls zu reduzieren. Die Zero und der Akku würden in einem 3D-gedruckten Gehäuse direkt an der Unterseite des Scannergriffs angebracht.

Schritt 4: UPC-Datenbank

Dies ist der am wenigsten abgedeckte Teil des Projekts, da es buchstäblich Millionen von UPC-Codes und sehr wenige Open-Source-Datenbanken zum Download gibt. Leider sind die meisten UPC-Datenbanken ziemlich teuer und erfordern eine Internetverbindung.

Ich konnte ein paar Open-Source-Datenbanken zusammenstellen (Quellen im Anhang unten), aber selbst mit fast 700.000 Einträgen fehlt eine große Anzahl.

Zu diesem Zweck habe ich zwei Dinge getan; Eine besteht darin, sich speziell auf Lebensmittel zu konzentrieren, und die andere besteht darin, dem Raspberry einen Webserver hinzuzufügen, um das manuelle Hinzufügen neuer UPC-Codes zu ermöglichen. Dies erfordert jedoch zumindest eine lokale Netzwerkverbindung.

Zukünftige ToDo:

Ich würde das Zero W zu einem "Hotspot" machen, damit Sie sich überall damit verbinden können, um neue UPC-Codes hinzuzufügen.

Schritt 5: Text-to-Speech

Ich habe das Text-to-Speech-Programm namens „Flite“verwendet, da es den besten Kompromiss zwischen Sprachqualität und Konvertierungsgeschwindigkeit auf der Zero hatte. Andere klangen etwas besser, waren aber zu langsam zum Konvertieren.

Sie können sich auch das Tutorial von Adafruit ansehen:

Beachten Sie, dass es ein wenig „Gehörtraining“erfordert, um sich an die Sprachflexion zu gewöhnen, aber es ist nicht so schlimm.

Wenn Sie dasselbe Objekt erneut scannen, wird der Ton wiederholt.

Zukünftige ToDo

Fügen Sie vielleicht einen Kopfhöreranschluss hinzu, damit Senioren die Stimme an lauten Orten leichter hören können.

Schritt 6: Batteriestrom

Das System kann mit einer 5-V-USB-Batterie betrieben werden, die beispielsweise zum Aufladen von Mobiltelefonen verwendet wird.

Der Haken ist, dass der Pi abstürzt, wenn Sie den Akku trennen oder der Akku leer ist, mit der Möglichkeit, dass das SD-Laufwerk beschädigt wird.

Um dieses Problem zu lösen, wird eine Schaltfläche benötigt, die einen Befehl zum Herunterfahren ausführt. Ich werde wahrscheinlich so einen verwenden:

www.element14.com/community/docs/DOC-78055…

(Ja… noch ein "Future ToDo!")

Schritt 7: Teil I - Hinzufügen von Audio zu Pi Zero

Teil I - Hinzufügen von Audio zu Pi Zero
Teil I - Hinzufügen von Audio zu Pi Zero
Teil I - Hinzufügen von Audio zu Pi Zero
Teil I - Hinzufügen von Audio zu Pi Zero
Teil I - Hinzufügen von Audio zu Pi Zero
Teil I - Hinzufügen von Audio zu Pi Zero

(Überspringen Sie diesen Teil, wenn Sie keine Null verwenden!)

Auf einem Pi Zero müssen Sie externes Audio hinzufügen, da es nicht integriert ist. Ich habe den kostengünstigen „Adafruit I2S 3W Amplifier Breakout MAX98357A“verwendet.

Dies erfordert die Einrichtung mit dem hervorragenden Tutorial von Adafruit unter:

Verbinden Sie wie im Verdrahtungsteil des Tutorials gezeigt:

• Amp Vin auf Raspi Zero Pi 5V• Amp GND auf Raspi Zero Pi GND • Amp DIN auf Raspi Zero Pi #21 • Amp BCLK auf Raspi Zero Pi #18 • Amp LRCLK auf Raspi Zero Pi #19

Schließen Sie einen kleinen Lautsprecher an die Audiokabel auf der Platine an.

Pi Zero Adafruit Audio Software SetupAuch im Tutorial zur Adafruit Software-Setup gezeigt, führen Sie den folgenden CURL-Befehl aus:

$ curl -sS https://raw.githubusercontent.com/adafruit/Raspbe…> | bash

Testen Sie nach dem Neustart das Audio mit dem Lautsprechertest:

$ speaker-test -c2 --test=wav -w /usr/share/sounds/alsa/Front_Center.wav

Wenn Sie Probleme haben, gehen Sie zurück durch das Adafruit-Tutorial, beginnend mit der Übersicht. Möglicherweise müssen Sie die Schritte zur "Detaillierten Installation" im Tutorial ausführen, um alle aktualisierten Dateien zu überprüfen.

Wichtige erforderliche Schritte für Zero & Max98357 Audio: Standardmäßig funktioniert ALSA-Audio nur in Stereo, während Flite Text-to-Speech mono ist. Außerdem hat das Audio bei jedem Start der Wiedergabe „Pop“.

(Siehe:

Sie müssen Folgendes tun:

1) Eine Zeile an /boot/config.txt anhängen

$ sudo nano /boot/config.txt

dtoverlay=i2s-mmap

2) Ersetzen Sie /etc/asound.conf

$ sudo nano /etc/asound.conf

pcm.hifiberry { type hw card 0 } pcm.!default { type plug slave.pcm "dmixer" } pcm.dmixer { type dmix ipc_key 1024 slave { pcm "hifiberry" channel 2 } } ctl.dmixer { type hw card 0 }

3) Starten Sie Ihren Pi neu.

Versuchen Sie den Lautsprechertest erneut. Es sollte jetzt besser klingen. Sobald Sie das Setup-Tutorial einschließlich der Audiotests abgeschlossen haben, sollte der Ton bereit sein.

Beachten Sie, dass Sie möglicherweise einen Kopfhöreranschluss für Audio hinzufügen möchten, wenn Sie ihn in ein Lebensmittelgeschäft oder in eine laute Umgebung bringen.

Schritt 8: Teil II – Softwareinstallation

Dies setzt voraus, dass Sie Raspbian Jessie bereits installiert haben und auf die Linux-Befehlszeile zugreifen können. Sie benötigen nicht die GUI-Version von Raspbian, ist aber in Ordnung.

Sie brauchen den USB-Scanner momentan NICHT eingesteckt, falls Sie den USB-Port für Ethernet oder Tastatur/Maus benötigen.

Stellen Sie sicher, dass Ihr Betriebssystem auf dem neuesten Stand ist:

$ sudo apt-get update$ sudo apt-get upgrade

Gehen Sie von der Befehlszeile aus in das pi-Home-Verzeichnis und laden Sie das GITHUB-Repository herunter:

$ cd /home/pi$ sudo apt install git $ git clone https://github.com/rgrokett/TalkingBarcodeReader….> https://github.com/rgrokett/TalkingBarcodeReader….> $ cd TalkingBarcodeReader $./install. NS

Dies kann einige Zeit in Anspruch nehmen, insbesondere wenn dies das erste Mal ist und der Webserver und PHP installiert oder aktualisiert werden müssen. Bei Bedarf können Sie dies mehrmals ausführen. Dies installiert unter anderem die Barcode-Dateien und die UPC-Datenbank nach: /var/www/html/upc

Bearbeiten Sie als Nächstes /etc/rc.local und fügen Sie die folgende Zeile vor dem "exit 0" an

$ sudo nano /etc/rc.local

fi sudo /var/www/html/upc/bin/run.sh exit 0

Sobald die Installation abgeschlossen ist, fahren Sie Ihren Pi herunter, schließen Sie den USB-Barcode-Leser an und starten Sie ihn neu.

$ sudo jetzt herunterfahren

Schalten Sie es wieder ein und Sie sollten eine kurze Startansprache hören.

Versuchen Sie in diesem Fall, einen Strichcode von einem Lebensmittelartikel zu scannen. Wenn alles gut gelaufen ist, sollten Sie hören, wie der Gegenstand vorgelesen wird (oder „Nicht gefunden“sprechen). Sehen Sie andernfalls in der Anleitung zur Fehlerbehebung nach.

Schritt 9: Fehlerbehebung

Fehlerbehebung
Fehlerbehebung

Wenn Sie keine Geräusche hören, müssen Sie die folgenden Befehle ausprobieren:

1) Überprüfen Sie, ob das Text-to-Speech-Audio funktioniert:

$ sudo flite -voice awb -t "testing"

Wenn Sie eine Fehlermeldung erhalten, vergewissern Sie sich, dass flite installiert wurde:

$ sudo apt install flite

Wenn Sie die folgende Fehlermeldung erhalten, stellen Sie sicher, dass Sie /boot/config.txt und /etc/asound.conf aktualisiert haben, die im Abschnitt Audio-Setup oben auf Raspi Zero angezeigt werden: audio_open_alsa: Die Anzahl der Kanäle konnte nicht auf 1 gesetzt werden. Ungültiges Argument.

Wenn Sie keinen Fehler und keinen Ton erhalten, stellen Sie sicher, dass Ihr Raspberry Audio funktioniert.

sudo aplay /usr/share/sounds/alsa/Front_Center.wav

1) Möglicherweise müssen Sie die Audioausgabe aus der Audiobuchse erzwingen: (siehe Abb. 1 oben)

$ sudo raspi-config -> 7 Erweiterte Optionen -> A4 Audio

2) Sobald Sie Audio und Text-to-Speech als gut verifiziert haben, überprüfen Sie den Barcode-Leser:

cd /var/www/html/upc/binsudo python./test.py

Beim Scannen eines Barcodes sollte eine numerische Barcode-Nummer angezeigt werden. (Das Testprogramm beinhaltet KEINE Audioausgabe oder Datenbankverbindungen.)

3) Wenn dies alles in Ordnung ist, überprüfen Sie die Datei „nohup.out“auf Fehlermeldungen:

cd /var/www/html/upc/binsudo cat nohup.out

Wahrscheinliche Probleme sind fehlende Pakete oder schlechte Berechtigungen (oder BUGs im Code!). Stellen Sie sicher, dass Ihr Betriebssystem auf dem neuesten Stand ist, und führen Sie die install.sh erneut aus.

Hoffentlich arbeiten Sie jetzt!

Schritt 10: Teil III – Webserver

Teil III – Webserver
Teil III – Webserver

Da es MILLIONEN von UPC-Codes gibt und die meisten öffentlich (d. h. kostenlos) verfügbaren Datenbanken nur eine kleine Teilmenge von Codes sind, konzentrierte sich dieses Projekt auf UPC-Codes für Lebensmittel. Es enthält mehrere Hunderttausend Elemente, aber viele, viele werden nicht gefunden.

Wenn Sie die UPC-Datenbank hinzufügen oder aktualisieren müssen, stehen zwei Programme zur Verfügung; eine Befehlszeilen- und eine Webbrowser-Version. (ersetzen Sie die Ziffern durch Ihre UPC Artikelnummer)

$ cd /var/www/html/upc/bin

$ sudo./addDB.sh 01234567890 „Mein neuer Artikel“

Dadurch wird der Datenbank ein Datensatz hinzugefügt. Andernfalls wird empfohlen, die DB-Funktion des Webbrowsers zu verwenden.

Für die Webserver-GUI benötigen Sie die IP-Adresse Ihrer Himbeere.

Um die IP-Adresse zu finden, können Sie Folgendes verwenden:

$ Hostname -I 192.168.1.108

Gehen Sie in einem PC-Browser zu: https://192.168.1.108/upc/Sie sollten einen Bildschirm ähnlich dem in Abb.2 oben sehen.

In diesem Fall können Sie Datensätze hinzufügen/aktualisieren und löschen. Navigieren Sie zur letzten Seite mit der Schaltfläche (‘>|’) „letzter Datensatz“, um Ihre neuesten Datensätze anzuzeigen, die an das Ende der Datenbank angehängt werden.

SICHERHEITSHINWEIS, dass dieser Webdienst nicht gesichert ist (keine Authentifizierung, kein SSL), also am besten nicht dem öffentlichen Internet zugänglich machen. (Aber da es nicht als WLAN-Zugangspunkt eingerichtet ist, kann es sicher in den Laden getragen werden.)

Da es jedoch keine privaten Daten gibt, kann es noch schlimmer kommen, wenn jemand die UPC-Daten verstümmelt.

Sie können auch den Zugriff auf bestimmte IP-Adressen beschränken, damit andere nicht hineinkommen. Ersetzen Sie hier einfach die IP(s) durch die, die Sie zulassen möchten. Alle anderen werden für den Zugriff gesperrt:

$ sudo vi /etc/lighttpd/lighttpd.conf

$HTTP["remoteip"] =~ "127.0.0.1|192.168.1.108" { url.access-deny = ("") } $ sudo /etc/init.d/lighttpd restart

ÄNDERN Sie auch das Standard-PI-Passwort! Jeder weiß, dass die Standardeinstellung pi/raspberry ist

$ passwd

Schritt 11: Fehlerbehebung beim Webserver

Fehlerbehebung beim Webserver
Fehlerbehebung beim Webserver
Fehlerbehebung beim Webserver
Fehlerbehebung beim Webserver

Rufen Sie mit Ihrem Browser die IP-Adresse Ihres Raspberry wie folgt auf:

192.168.1.108/

Sie sollten den Standardbildschirm von /var/www/html/index.html sehen (Abb. 1 oben).

Stellen Sie außerdem sicher, dass der Webserver läuft:

$ ps -ef|grep lighttpd

Um zu überprüfen, ob PHP gut ist, erstellen Sie eine PHP-Testdatei:

$ sudo nano /var/www/html/phpinfo.php

Dann gehen Sie zu

Sie sollten einen Bildschirm wie oben in Abb. 2 sehen

Wenn Sie Fehler oder leere Bildschirme erhalten, suchen Sie nach Fehlern in

$ sudo cat /var/log/lighttpd/error.log

Auch hier kann die erneute Ausführung von install.sh fehlende Abhängigkeiten beheben.

Schritt 12: Anhang

Ein GROSSES DANKESCHÖN geht an folgendes für die Bereitstellung einer großen UPC-Datenbank.

Öffne Lebensmittel UPC DB

www.grocery.com/open-grocery-database-proje…

Offene Datendatenbank

www.grocery.com/open-grocery-database-proje…

www.upc-search.org/perl/upc-search.pl?q=84…

Dank EasyUI für die einfache Web-CRUD-GUI

www.jeasyui.com/index.php

Empfohlen: