In einem
früheren Artikel habe ich kurz meine Firmware für den CTK SHTRIH-FR-K beschrieben, mit der Sie den Thermokopf und die Motoren steuern und entsprechend alles drucken können. In diesem Teil werde ich zeigen, wie man Software schreibt, die mit dem Kassierer kommuniziert und das Bild zum Drucken formatiert.

Beginnen wir mit der Beschreibung der benötigten Pakete.
import cv2 import numpy as np import serial
cv2 - OpenCV-Computer-Vision-Bibliothek. Die Eingabe und Formatierung des Bildes ist vollständig erforderlich.
numpy ist eine Bibliothek zum Arbeiten mit Arrays. OpenCV funktioniert nicht ohne.
seriell - Bibliothek für die Arbeit mit PC-Com-Port.
ser = serial.Serial('COM5', 9600, write_timeout=1, timeout=0.1)
Initialisierung der Bibliothek mit 9600 bps.
frame1 = cv2.imread('ars2.jpg')
Eine Funktion, die ein Image von einer Festplatte herunterlädt.
height = frame1.shape[0]//(frame1.shape[1]//432) frame1 = cv2.resize(frame1, (432,height), interpolation = cv2.INTER_AREA)
Die Funktion zum Ändern des Bildes auf eine bestimmte Größe.
grayscaled1 = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY) ret,thresh1 = cv2.threshold(grayscaled1,127,255,cv2.THRESH_BINARY) img_bin = thresh1/255
Die erste Zeile macht das Bild schwarz und weiß. Der zweite macht die Binärisierung. Binarisierung - Unter dem Strich wird aus einem Bild ein Array, in dem jedes Pixel den Wert 1 oder 0 hat. Die Registrierkasse kann nicht in Schwarztönen ausgeführt werden, daher ist diese Verarbeitung erforderlich. In dieser Funktion sind alle Pixel mit einem Wert kleiner als 127 0, größer als 1.
for n in range(img_bin.shape[0]): for m in range(img_bin.shape[1]):
Dieser Code verwandelt jede Zeile in einen Satz von Bytes. Das heißt, Nimmt die ersten acht Pixel aus einer Zeichenfolge und wandelt sie in Bytes um. Dann nimmt es die nächsten 8 aus derselben Zeile und wandelt sie in Bytes um.
while i: while u!=1: u = ser.write( b'P') u=0 ff=ser.read(1) if ff==b'B': i=0
Beginn der Übertragung. Wenn keine Antwort empfangen wird, starten Sie nicht.
i=54 while i: while u!=1:
Senden einer Zeile mit einem Check, um festzustellen, ob das Bild beendet ist.
if h==2: low=low+54 h=0
Ein kleines Feature. Wenn das Bild so wie es ist zum Drucken gesendet wird, wird die Bildhöhe um die Hälfte reduziert. Dies ist auf die Steigung des Motors zurückzuführen. Natürlich können Sie zwei Schritte gleichzeitig ausführen, aber dann wird das Bild dunkel.
while i: ff = ser.read(1)
Wir warten darauf, dass der Buchstabe D synchronisiert wird. Dies bedeutet, dass das Gerät eine Zeile gedruckt hat und bereit ist, Daten zu empfangen.
Link zu den Quellen
github.com/beetlea/shtrih-m-fr-kNun, hier hast du das Vidosiki. Leider haben die Videos selbst mit dem Siegel von Keanu nicht überlebt.