Em um
artigo anterior, descrevi brevemente meu firmware para o CTK SHTRIH-FR-K, que permite controlar o cabeçote térmico, os motores e, consequentemente, imprimir qualquer coisa. Nesta parte, mostrarei como escrever um software que se comunique com o caixa e formate a imagem para impressão.

Vamos começar descrevendo os pacotes que precisamos.
import cv2 import numpy as np import serial
cv2 - Biblioteca de visão computacional OpenCV. É preciso todo o ônus de inserir e formatar a imagem.
numpy é uma biblioteca para trabalhar com matrizes. O OpenCV não funcionará sem ele.
serial - biblioteca para trabalhar com porta PC.
ser = serial.Serial('COM5', 9600, write_timeout=1, timeout=0.1)
Inicialização da biblioteca em 9600 bps.
frame1 = cv2.imread('ars2.jpg')
Uma função que baixa uma imagem de um disco rígido.
height = frame1.shape[0]//(frame1.shape[1]//432) frame1 = cv2.resize(frame1, (432,height), interpolation = cv2.INTER_AREA)
A função de alterar a imagem para um determinado tamanho.
grayscaled1 = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY) ret,thresh1 = cv2.threshold(grayscaled1,127,255,cv2.THRESH_BINARY) img_bin = thresh1/255
A primeira linha torna a imagem em preto e branco. O segundo faz a binarização. Binarização - a linha inferior é transformar uma imagem em uma matriz em que cada pixel terá um valor de 1 ou 0. A caixa registradora não pode ser feita em tons de preto; portanto, esse processamento é necessário. Nesta função, todos os pixels com um valor menor que 127 serão 0, maiores que 1.
for n in range(img_bin.shape[0]): for m in range(img_bin.shape[1]):
Esse código transforma cada linha em um conjunto de bytes. I.e. pega os oito primeiros pixels de uma string e os transforma em bytes. Depois, pega os próximos 8 da mesma linha e os transforma em bytes.
while i: while u!=1: u = ser.write( b'P') u=0 ff=ser.read(1) if ff==b'B': i=0
Início da transferência. Se nenhuma resposta for recebida, não inicie.
i=54 while i: while u!=1:
Enviar uma linha com uma verificação para ver se a imagem acabou.
if h==2: low=low+54 h=0
Um pequeno recurso. Se a imagem for enviada para impressão como está, a altura da imagem será reduzida pela metade. Isto é devido à afinação do motor. Obviamente, você pode executar duas etapas por vez, mas a imagem ficará fraca.
while i: ff = ser.read(1)
Estamos aguardando a letra D para sincronizar. Isso significa que a máquina imprimiu uma linha e está pronta para receber dados.
Link para as fontes
github.com/beetlea/shtrih-m-fr-kBem, aqui você tem o vidosiki. Infelizmente, os próprios vidos com o selo de Keanu não sobreviveram.