Nós reprogramamos o caixa e imprimimos nele Keanu Reeves. Parte 2. Software para PC

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.

imagem

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]): #print(n,m) df=img_bin[n,m] if df==0: bb = bb+1*zz zz=zz*2 if zz==256: zz=1 print_img.append(bb) bb=0 

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: #u = ser.write(bytes([print_img[y]])) u = ser.write(bytes([print_img[y]])) #buf.append(print_img[y]) #print(bytes([print_img[y]])) y=y+1 if y == len(print_img): f=f-1 y=0 i=i-1 u=0 

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) #print(ff) if ff==b'D': i=0 

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-k

Bem, aqui você tem o vidosiki. Infelizmente, os próprios vidos com o selo de Keanu não sobreviveram.


Source: https://habr.com/ru/post/pt466397/


All Articles