我们对收银员进行重新编程,并在其上打印基努·里夫斯。 第2部分。PC软件

上一篇文章中,我简要介绍了CTK SHTRIH-FR-K的固件,该固件使您可以控制热敏头,引擎并相应地进行打印。 在这一部分中,我将展示如何编写与收银员进行通信并格式化图像以进行打印的软件。

图片

让我们开始描述我们需要的软件包。

import cv2 import numpy as np import serial 

cv2-OpenCV计算机视觉库。 它承担了输入和格式化图像的所有负担。
numpy是用于处理数组的库。 没有它,OpenCV将无法工作。
串行-用于PC com-port的库。

 ser = serial.Serial('COM5', 9600, write_timeout=1, timeout=0.1) 

库的初始化速度为9600 bps。

 frame1 = cv2.imread('ars2.jpg') 

从硬盘驱动器下载图像的功能。

 height = frame1.shape[0]//(frame1.shape[1]//432) frame1 = cv2.resize(frame1, (432,height), interpolation = cv2.INTER_AREA) 

将图像更改为给定尺寸的功能。

 grayscaled1 = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY) ret,thresh1 = cv2.threshold(grayscaled1,127,255,cv2.THRESH_BINARY) img_bin = thresh1/255 

第一行使图像黑白。 第二种是二值化。 二值化-底线是将图片转换成数组,其中每个像素的值将为1或0。收银机无法以黑色阴影进行,因此需要进行此处理。 在此功能中,所有值小于127的像素都将为0,大于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 

此代码将每一行变成一组字节。 即 从字符串中获取前八个像素并将其转换为字节。 然后,它从同一行中提取下一个8,并将其转换为字节。

  while i: while u!=1: u = ser.write( b'P') u=0 ff=ser.read(1) if ff==b'B': i=0 

开始转移。 如果未收到响应,则不要开始。

  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 

发送带有检查的行以查看图片是否结束。

  if h==2: low=low+54 h=0 

一个小功能。 如果将图像按原样发送进行打印,则图像高度将减少一半。 这是由于发动机的螺距。 当然,您可以一次执行两个步骤,但是随后图像将变暗。

  while i: ff = ser.read(1) #print(ff) if ff==b'D': i=0 

我们正在等待字母D同步。 这意味着机器已经打印了一行并准备接收数据。

链接到源代码github.com/beetlea/shtrih-m-fr-k

好吧,这里有vidosiki。 不幸的是,带有Keanu印章的vidos本身无法幸存。


Source: https://habr.com/ru/post/zh-CN466397/


All Articles