Il s'agit de la 5ème série d'automatisation de tests commençant par L Chika.
Technologie des éléments d'essai d'automatisation des tests d'acceptation avec M5Stack et Python Capture d'image de la caméra Web, découpe d'image, programme de test OCR réalisé avec un shell interactif Intégrez et automatisez.
S'il vous plaît voir ici pour les articles jusqu'à présent.
--Créez les commandes et fonctions suivantes.
|commander|argument|une fonction
|--------+--------+--------
|open_cam|Numéro de l'appareil photo|Exécutez OpenCV Video Capture
|close_cam|Aucun|Libérez OpenCV Video Capture
|capture_cam|nom de fichier|Capturez l'image de la caméra et enregistrez-la dans un fichier
|crop_img|Nom du fichier d'entrée
Position de découpe (verticale)
Position de découpe (horizontale)
Nom du fichier de sortie|Découpez la zone spécifiée du fichier image et enregistrez-la dans le fichier
|open_ocr|Aucun|Rendre PyOCR disponible
|exec_ocr|Nom du fichier image à appliquer à l'OCR|Chaînes OCR US ASCII à partir de fichiers image
test-runner.py
#!/usr/bin/python3
#
# This software includes the work that is distributed in the Apache License 2.0
#
from time import sleep
import serial
import codecs
import csv
import sys
import visa
import cv2
from PIL import Image
import pyocr
import pyocr.builders
UNINITIALIZED = 0xdeadbeef
def open_cam(camera_number):
return cv2.VideoCapture(camera_number)
def close_cam(cam):
if cam != UNINITIALIZED:
cam.release()
def capture_cam(cam, filename):
if cam != UNINITIALIZED:
_, img = cam.read()
cv2.imwrite(filename, img)
return True
else:
print("CAM Not Ready.")
return False
def crop_img(filename_in, v, h, filename_out):
img = cv2.imread(filename_in, cv2.IMREAD_COLOR)
v0 = int(v.split(':')[0])
v1 = int(v.split(':')[1])
h0 = int(h.split(':')[0])
h1 = int(h.split(':')[1])
img2 = img[v0:v1, h0:h1]
cv2.imwrite(filename_out, img2)
return True
def open_ocr():
ocr = pyocr.get_available_tools()
if len(ocr) != 0:
ocr = ocr[0]
else:
ocr = UNINITIALIZED
print("OCR Not Ready.")
return ocr
def exec_ocr(ocr, filename):
try:
txt = ocr.image_to_string(
Image.open(filename),
lang = "eng",
builder = pyocr.builders.TextBuilder()
)
except:
print("OCR Not Ready.")
else:
return txt
def serial_write(h, string):
if h != UNINITIALIZED:
string = string + '\n'
string = str.encode(string)
h.write(string)
return True
else:
print("UART Not Initialized.")
return False
def open_dso():
rm = visa.ResourceManager()
resources = rm.list_resources()
#print(resources)
for resource in resources:
#print(resource)
try:
dso = rm.open_resource(resource)
except:
print(resource, "Not Found.")
else:
print(resource, "Detected.")
return dso
#Throw an error to caller if none succeed.
return dso
def main():
is_passed = True
val = str(UNINITIALIZED)
cam = UNINITIALIZED
ocr = UNINITIALIZED
dso = UNINITIALIZED
uart = UNINITIALIZED
with codecs.open('script.csv', 'r', 'utf-8') as file:
script = csv.reader(file, delimiter=',', lineterminator='\r\n', quotechar='"')
with codecs.open('result.csv', 'w', 'utf-8') as file:
result = csv.writer(file, delimiter=',', lineterminator='\r\n', quotechar='"')
for cmd in script:
print(cmd)
if "#" in cmd[0]:
pass
elif cmd[0] == "sleep":
sleep(float(cmd[1]))
elif cmd[0] == "open_cam":
cam = open_cam(int(cmd[1]))
elif cmd[0] == "close_cam":
close_cam(cam)
cam = UNINITIALIZED
elif cmd[0] == "capture_cam":
ret = capture_cam(cam, cmd[1])
if ret == False:
is_passed = False
elif cmd[0] == "crop_img":
crop_img(cmd[1], cmd[2], cmd[3], cmd[4])
elif cmd[0] == "open_ocr":
ocr = open_ocr()
if ocr == UNINITIALIZED:
is_passed = False
elif cmd[0] == "exec_ocr":
try:
val = exec_ocr(ocr, cmd[1])
except:
is_passed = False
else:
cmd.append(str(val))
elif cmd[0] == "open_dso":
try:
dso = open_dso()
except:
is_passed = False
elif cmd[0] == "dso":
try:
if "?" in cmd[1]:
val = dso.query(cmd[1]).rstrip().replace(",", "-")
cmd.append(val)
else:
dso.write(cmd[1])
except:
is_passed = False
elif cmd[0] == "open_uart":
try:
uart = serial.Serial(cmd[1], 115200, timeout=1.0, dsrdtr=1)
except:
is_passed = False
elif cmd[0] == "send":
ret = serial_write(uart, cmd[1])
if ret == False:
is_passed = False
elif cmd[0] == "rcvd":
try:
val = uart.readline().strip().decode('utf-8')
cmd.append(val)
except:
is_passed = False
elif cmd[0] == "eval_str_eq":
if str(val) != str(cmd[1]):
is_passed = False
elif cmd[0] == "eval_int_eq":
if int(val) != int(cmd[1]):
is_passed = False
elif cmd[0] == "eval_int_gt":
if int(val) < int(cmd[1]):
is_passed = False
elif cmd[0] == "eval_int_lt":
if int(val) > int(cmd[1]):
is_passed = False
elif cmd[0] == "eval_dbl_eq":
if float(val) != float(cmd[1]):
is_passed = False
elif cmd[0] == "eval_dbl_gt":
if float(val) < float(cmd[1]):
is_passed = False
elif cmd[0] == "eval_dbl_lt":
if float(val) > float(cmd[1]):
is_passed = False
else:
cmd.append("#")
if is_passed == True:
cmd.append("OK")
print(cmd)
result.writerow(cmd)
else:
cmd.append("NG")
print(cmd)
result.writerow(cmd)
close_cam(cam)
print("FAIL")
sys.exit(1)
if is_passed == True:
close_cam(cam)
print("PASS")
sys.exit(0)
main()
Pour vérifier la commande crop_img, voir 3.2 Capture d'image webcam dans Tester les technologies élémentaires pour l'automatisation des tests d'acceptation avec M5Stack et Python. J'utilise le fichier 123abc.bmp généré par / pbjpkas / items / 97b6e596a4009a71f1ab # 32-webcam capture d'image).
script.csv
open_cam,1
capture_cam,abc1234.jpg
close_cam
crop_img,123abc.bmp,234:274,240:400,123abc_crop.bmp
open_ocr
exec_ocr,123abc_crop.bmp
eval_str_eq,123-abc
result.csv
open_cam,1,OK
capture_cam,abc1234.jpg,OK
close_cam,OK
crop_img,123abc.bmp,234:274,240:400,123abc_crop.bmp,OK
open_ocr,OK
exec_ocr,123abc_crop.bmp,123-abc,OK
eval_str_eq,123-abc,OK
Transmission / réception de commande UART, activation / désactivation de l'équipement intégré, mesure de la tension à l'aide du convertisseur A / N d'Arduino, oscilloscope intégré, caméra Web intégrée, recadrage d'images, extraction et comparaison de chaînes de caractères à l'aide de l'OCR C'est désormais possible. Je pense que les possibilités de CI / CD au niveau du système pour les appareils embarqués et les appareils IoT ont considérablement augmenté.
[^ 1]: Installation d'OpenCV, Tesseract-OCR, PyOCR, PIL et paramétrage des variables d'environnement de Tesseract-OCR Essayez la technologie élémentaire d'automatisation des tests d'acceptation avec M5Stack et Python Veuillez consulter / items / 97b6e596a4009a71f1ab).
Recommended Posts