نحن إعادة برمجة أمين الصندوق وطباعته على كيانو ريفز. الجزء 2. برامج الكمبيوتر

في مقال سابق ، وصفت بإيجاز البرامج الثابتة الخاصة بي لـ CTK SHTRIH-FR-K ، والتي تسمح لك بالتحكم في الرأس الحراري والمحركات وطباعًا لذلك طباعة أي شيء. سأوضح في هذا الجزء كيفية كتابة البرامج التي ستتواصل مع أمين الصندوق وتنسيق الصورة للطباعة.

صورة

لنبدأ بوصف الحزم التي نحتاجها.

import cv2 import numpy as np import serial 

cv2 - مكتبة رؤية OpenCV للكمبيوتر. يستغرق كل عبء إدخال وتنسيق الصورة.
numpy هي مكتبة للعمل مع المصفوفات. لن يعمل OpenCV بدونه.
المسلسل - مكتبة للعمل مع الكمبيوتر كوم الميناء.

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

تهيئة المكتبة بسرعة 9600 بت في الثانية.

 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 

السطر الأول يجعل الصورة بالأبيض والأسود. والثاني يفعل الترميز. Binarization - خلاصة القول هي تحويل صورة إلى صفيف حيث سيكون لكل بكسل قيمة 1 أو 0. لا يمكن أن يتم تسجيل النقد في ظلال سوداء ، لذلك هناك حاجة إلى هذه المعالجة. في هذه الوظيفة ، ستكون جميع وحدات البكسل التي تقل قيمتها عن 127 صفرًا ، أكبر من 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. لسوء الحظ ، فإن vidos نفسه مع ختم كيانو لم ينجو.


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


All Articles