Ausführung | |
---|---|
NAOqi | 2.5.5.5 |
Choregraphe | 2.5.5.5 |
In diesem Artikel werde ich eine Beispielanwendung vorstellen, mit der Pepper den QR-Code lesen und das Leseergebnis auf dem Display anzeigen kann.
Bitte laden Sie das Beispielprogramm von GitHub herunter. https://github.com/Atelier-Akihabara/pepper-qrio-example
Wenn das Beispielprogramm qr_io_app ausgeführt wird und der QR-Code erkannt wird, wird Folgendes angezeigt. (Öffnen Sie qr_io_app.pml und übertragen Sie das Programm auf Pepper.)
Der Verarbeitungsablauf ist wie folgt: 1. Initialisierung → 2. Bildgebung → 3. Anzeige.
Übergeben Sie den Pfad zum lib-Ordner, damit Ihre App die Bibliotheken des lib-Ordners verwenden kann. Weitere Informationen finden Sie unter Einbetten einer Erweiterungsbibliothek. items / d150185ed28fdba6ef20)). Die QR-Code-Bibliothek qrcode wird im lib-Ordner installiert.
Aktiviert die Anzeige, stoppt Peppers Grundbewusstsein und führt die Grundinitialisierung mit dem Gesicht nach vorne durch.
Wenn Pepper den QR-Code erkennt, springt ALMemory das Erkennungsergebnis in die Box. Beim Empfang der QR-Code-Zeichenfolge von ALMemory konvertiert die ReadWrite QR-Box die Zeichenfolge in ein Bild und sendet die Bilddaten DataUri über ALMemory an die Anzeige.
Diese Box spielt eine zentrale Rolle in diesem Programm. Schauen wir uns den Inhalt des Prozesses an.
python
def onInput_QRinput(self, p):
#Bestätigung während der QR-Erkennung
if not self.isDetecting :
return
#Nur zum ersten Mal nach Beginn der Erkennung ausführen
self.isDetecting = False
#Holen Sie sich die gelesene QR-Code-Zeichenfolge
inputCode = p[0][0]
#QR-Erzeugung
img = self.makeQR(inputCode) # 1.
#Dateiobjektisierung
s = StringIO.StringIO()
img.save(s, "png")
#Bild in dataURI-Schema konvertieren
dataUri = self.convertToDataUri(s.getvalue()) # 2.
s.close()
#Auf Tablet senden
self.memory.raiseEvent(self.getParameter("key"), [inputCode, dataUri]) # 3.
#Warten Sie eine bestimmte Zeit
time.sleep(2)
#Die QR-Erkennung wurde fortgesetzt
self.isDetecting = True
Als nächstes werde ich die Unterprogramme erklären, die in makeQR aufgerufen werden.
python
def makeQR(self, str):
#QR-Erzeugung
import qrcode
#Fehlerkorrekturstufe
ec_level = [qrcode.constants.ERROR_CORRECT_L, # 7%Folgende Fehler wurden behoben
qrcode.constants.ERROR_CORRECT_M, #15%Folgende Fehler wurden behoben
qrcode.constants.ERROR_CORRECT_Q, #25%Folgende Fehler wurden behoben
qrcode.constants.ERROR_CORRECT_H] #30%Folgende Fehler wurden behoben
qr = qrcode.QRCode(
#QR-Code-Version
version=self.getParameter("version"),
#Fehlerkorrekturstufe
error_correction=ec_level[self.getParameter("error_correction")],
#Einstellung der Zellengröße
box_size=self.getParameter("box_size"),
#Randgröße
border=self.getParameter("border")
) # 1., 2.
qr.add_data(str)
qr.make(fit=True)
img = qr.make_image()
#Größe ändern
imgSize = self.getParameter("imgSize")
img = img.resize((imgSize, imgSize)) # 3.
return img
Eine Mitgliedsmethode, die Bilddaten in DataUri konvertiert. Es wird in onInput_QRinput verwendet.
python
def convertToDataUri(self, img):
#Bild in dataURI-Schema konvertieren
img_b64 = img.encode("base64").replace("\n", "")
dataUri = 'data:image/png;base64,{0}'.format(img_b64)
return dataUri
Als Referenz werde ich den Einstellungsinhalt der Parameter erklären. Die folgenden Parameter werden von self.getParameter im obigen Code abgerufen.
Ballometer | Inhalt |
---|---|
key | Das Ziel für die Erkennungsdaten. Die erkannten Daten werden im DataUri-Format an ALMemory gesendet. |
version | Geben Sie die Modellnummer des QR-Codes an. Die Modellnummern reichen von 1 bis 40 und sollten mit zunehmender Datengröße erhöht werden. Weitere Informationen finden Sie unter QR-Code-Standards. |
error_correction | Stellen Sie das QR-Code-Datenkorrekturcode-Verhältnis in 4 Schritten ein. Je höher die Fehlerkorrekturrate ist, desto höher ist die Zuverlässigkeit, aber desto geringer ist die Datenmenge, die gespeichert werden kann. - 0 ERROR_CORRECT_L7%Bis - 1 ERROR_CORRECT_M15%Bis - 2 ERROR_CORRECT_Q25%Bis - 3 ERROR_CORRECT_H30%Bis |
box_size | Legt die Anzahl der Pixel fest. |
border | Legt die Größe des Rahmens fest. |
imgSize | Die Zielgröße der generierten Daten wird auf diese Größe angepasst |
Empfängt die Daten, die zu ALMemory geflogen sind, und zeigt die Bilddaten auf dem Display an.
Wir haben ein Leerzeichen id =" qr_display "
zum Anzeigen von Bildern. Das
-Element zum Anzeigen von Text und das -Element zum Anzeigen von Bildern werden im Inneren beschrieben.
python
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<title>no title</title>
<link rel="stylesheet" href="css/normalize.css" type="text/css" />
<link rel="stylesheet" href="css/main.css" type="text/css" />
<script src="/libs/qimessaging/2/qimessaging.js"></script>
<script src="js/jquery-3.0.0.min.js"></script>
<script src="js/adjust23.js"></script>
<script src="js/main.js"></script>
</head>
<body>
<div id="qr_display">
<p></p>
<img src="">
</div>
</body>
</html>
id =" qr_display "
geschrieben, um das auf der HTML-Seite vorbereitete Bild anzuzeigen.python
$(function(){
QiSession(function( s ) {
session = s;
session.service("ALMemory").then(function (ALMemory) {
//Bereithalten
ALMemory.subscriber("qr_io_app/toTablet_sendQR").then(function(subscriber) {
subscriber.signal.connect(displayQR);
});
//QR-Bildschirm
function displayQR(value) {
$("#qr_display p").text("「"+value[0]+"」");
if (value[0] == null) {
$("#qr_display p").text("「None」");
}
$("#qr_display img").attr("src", value[1]);
}
});
});
});
Obwohl in diesem Beispiel nicht gezeigt, ist die App mit Kamera-Vorschau ausgestattet und das Leseergebnis wird als QR-Code-Bild auf dem Display angezeigt. kann auch tun. Es ist auch möglich, dass der Benutzer den QR-Code über Pepper hält und Pepper den QR-Code anzeigt, der basierend auf dem Leseergebnis der nächste Auslöser ist.
In der Ausstellungshalle können beispielsweise die folgenden Operationen möglich sein.
QR-Code hat eine breite Palette von Anwendungen. Versuchen Sie daher, eine Anwendung zu entwickeln, die die Vorschau- und Anzeigetechniken vollständig nutzt.
** Artikel kooperierende Firma Systema Co., Ltd. **
Recommended Posts