localdev
This commit is contained in:
parent
9b6645fdf9
commit
2371f3ab7c
|
|
@ -43,7 +43,7 @@ port: COM1
|
|||
baudrate: 9600
|
||||
|
||||
[vision]
|
||||
detection_threshold: 0.3
|
||||
neural_network: hs2-50000
|
||||
detection_threshold: 0.5
|
||||
neural_network: hs1-50000
|
||||
|
||||
; recipes_path: ./config/vision_test_recipes
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
item {
|
||||
id: 1
|
||||
name: 'hs-ok'
|
||||
color: '0x555555'
|
||||
color: '0x444444'
|
||||
}
|
||||
item {
|
||||
id: 2
|
||||
|
|
|
|||
2
designer.sh
Executable file
2
designer.sh
Executable file
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
venv/lib/python3.9/site-packages/qt5_applications/Qt/bin/designer
|
||||
2
designer_win.sh
Normal file
2
designer_win.sh
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
venv/Lib/site-packages/qt5_applications/Qt/bin/designer
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
import pathlib
|
||||
import sys
|
||||
import time
|
||||
from itertools import cycle
|
||||
|
||||
import cv2
|
||||
|
|
@ -122,6 +123,7 @@ class GalaxyCamera(Component):
|
|||
img_path = next(self.sim_imgs)
|
||||
self.log.debug(f"loading image {img_path}")
|
||||
frame = cv2.cvtColor(cv2.imread(str(img_path)), cv2.COLOR_BGR2RGB)
|
||||
time.sleep(1)
|
||||
else:
|
||||
self.camera.TriggerSoftware.send_command()
|
||||
frame = self.camera.data_stream[0].get_image()
|
||||
|
|
|
|||
|
|
@ -342,7 +342,7 @@ class Vision(Component):
|
|||
# Run inference
|
||||
if lock:
|
||||
self.lock.lock()
|
||||
if self.simulate or tf_mode == "simulation":
|
||||
if self.simulate or self.tf_mode == "simulation":
|
||||
detections = {
|
||||
"detection_scores": [[1.0]],
|
||||
"detection_boxes": [[[0.2, 0.2, 0.8, 0.8]]],
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ try:
|
|||
from lib.helpers import ConfigReader
|
||||
from PyQt5.QtCore import QObject, QThread, pyqtSignal
|
||||
from PyQt5.QtWidgets import QApplication, QMessageBox
|
||||
from ui import (About, Archive, Autotests_Archive, Login, Main_Window,
|
||||
from ui import (About, Archive, Login, Main_Window,
|
||||
Test, Users_Management)
|
||||
|
||||
class Main(QObject):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
from .about import About
|
||||
from .archive import Archive
|
||||
from .autotests_archive import Autotests_Archive
|
||||
from .dialog import Dialog
|
||||
from .login import Login
|
||||
from .main_window import Main_Window
|
||||
|
|
@ -12,7 +11,6 @@ from .recipe_editor import Recipe_Editor
|
|||
from .recipe_selection import Recipe_Selection
|
||||
from .test import Test
|
||||
from .test_admin_permission import Test_Admin_Permission
|
||||
from .test_autotest import Test_Autotest
|
||||
from .test_home import Test_Home
|
||||
from .test_leak import Test_Leak
|
||||
from .test_test import Test_Test
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
from .autotests_archive import Autotests_Archive
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
from lib.db import Users
|
||||
from PyQt5.QtWidgets import QAbstractItemView
|
||||
from ui.crud import Crud, Json_External_Dialog_Cell_Widget
|
||||
from ui.helpers import replace_widget
|
||||
from ui.widget import Widget
|
||||
|
||||
|
||||
class Autotests_Archive(Widget):
|
||||
def __init__(self, printer=None):
|
||||
super().__init__()
|
||||
self.printer = printer
|
||||
session = Users.get_session()
|
||||
if session is not None and session.is_admin:
|
||||
crud_aliases = {
|
||||
"id": "Id",
|
||||
"time": "Data e ora",
|
||||
"user": "Operatore",
|
||||
"recipe": "Ricetta",
|
||||
"result": "Esito",
|
||||
"reason": "Motivo",
|
||||
"overridden": "Esito forzato",
|
||||
"test_data": "Dati del test",
|
||||
}
|
||||
readonly = ["id"]
|
||||
else:
|
||||
crud_aliases = {
|
||||
"time": "Data e ora",
|
||||
"user": "Operatore",
|
||||
"recipe": "Ricetta",
|
||||
"result": "Esito",
|
||||
"reason": "Motivo",
|
||||
"overridden": "Esito forzato",
|
||||
"test_data": "Dati del test",
|
||||
}
|
||||
readonly = True
|
||||
self.crud = Crud(
|
||||
"autotests",
|
||||
display_name="Archivio autotest",
|
||||
readonly=readonly,
|
||||
select=list(crud_aliases.keys()),
|
||||
fields_aliases=crud_aliases,
|
||||
widget_classes={
|
||||
"test_data": Json_External_Dialog_Cell_Widget,
|
||||
},
|
||||
)
|
||||
replace_widget(self, "crud_w", self.crud)
|
||||
self.selected = None
|
||||
self.print_b.setEnabled(False)
|
||||
self.crud.db_tw.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||
self.crud.db_tw.setSelectionMode(QAbstractItemView.SingleSelection)
|
||||
self.crud.db_tw.itemSelectionChanged.connect(self.check)
|
||||
self.print_b.clicked.connect(self.print_label)
|
||||
|
||||
def check(self):
|
||||
if not self.crud.modified:
|
||||
selected = self.crud.get_selected_rows()
|
||||
if len(selected) == 1:
|
||||
selected = selected[0] - 1 # - 1 because rn starts from 1 (filters line)
|
||||
if selected >= 0 and selected < len(self.crud.data_index):
|
||||
selected = self.crud.data_index[selected]
|
||||
self.selected = self.crud.db.table_model.get_by_id(selected)
|
||||
self.print_b.setEnabled(True)
|
||||
return
|
||||
self.selected = None
|
||||
self.print_b.setEnabled(False)
|
||||
|
||||
def print_label(self):
|
||||
self.check()
|
||||
if self.selected is not None and self.printer is not None:
|
||||
self.printer.print_autotest_label(self.selected)
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Autotests archive</class>
|
||||
<widget class="QWidget" name="Autotests archive">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>98</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="1" column="0">
|
||||
<widget class="QPushButton" name="print_b">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Stampa</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QWidget" name="crud_w" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>print_b</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
@ -8,7 +8,6 @@ from PyQt5.QtCore import QTimer
|
|||
from ui.helpers import replace_widget
|
||||
from ui.recipe_selection import Recipe_Selection
|
||||
from ui.test_assembly import Test_Assembly
|
||||
from ui.test_autotest import Test_Autotest
|
||||
from ui.test_leak import Test_Leak
|
||||
from ui.test_vision import Test_Vision
|
||||
from ui.widget import Widget
|
||||
|
|
@ -36,13 +35,11 @@ class Test(Widget):
|
|||
self.cycle_state = None
|
||||
self.cycle_states = {
|
||||
# "assembly_1": Test_Assembly(self.select_step_img("assembly_1"), u"INSERIRE SENSORE"),
|
||||
"autotest": Test_Assembly(None, u"ESEGUIRE PROCEDURA DI AUTOTEST", Test_Autotest()),
|
||||
"done": Test_Assembly(self.select_step_img("success"), u"COLLAUDO COMPLETATO - RIMUOVERE IL SENSORE"),
|
||||
"emergency": Test_Assembly(self.select_step_img("reset_emergency"), u"EMERGENZA INTERVENUTA - RIPRISTINARE PULSANTE E SELEZIONARE \"RESET EMERGENZA\" DAL MEN\u00d9 \"STRUMENTI\""),
|
||||
"fail": Test_Assembly(self.select_step_img("fail"), u"CICLO INTERROTTO - RIMUOVERE IL SENSORE"),
|
||||
"done": Test_Assembly(self.select_step_img("success"), u"COLLAUDO COMPLETATO - RIMUOVERE IL PEZZO SOTTO TEST"),
|
||||
"fail": Test_Assembly(self.select_step_img("fail"), u"CICLO INTERROTTO - RIMUOVERE IL PEZZO SOTTO TEST"),
|
||||
"run_test": Test_Assembly(self.select_step_img("wait"), u"ESECUZIONE TEST IN CORSO - ATTENDERE", Test_Leak(components=self.components, recipe=self.recipe)),
|
||||
"select_recipe": Test_Assembly(None, u"SELEZIONARE IL CODICE DA COLLAUDARE", Recipe_Selection()),
|
||||
"vision": Test_Assembly(None, u"ESEGUIRE PROCEDURA DI AUTOTEST", Test_Vision(components=self.components, recipe=self.recipe)),
|
||||
"vision": Test_Assembly(None, u"VERIFICARE TEST TELECAMERA", Test_Vision(components=self.components, recipe=self.recipe)),
|
||||
"wait": Test_Assembly(self.select_step_img("wait"), u"ATTENDERE - PAUSA INTER CICLO"),
|
||||
}
|
||||
self.cycle_loop = ["run_test", "vision", "done", "wait"]
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ class Test_Admin_Permission(Widget):
|
|||
self.info_l.setText(self.txt)
|
||||
self.continue_b.clicked.connect(self.verify)
|
||||
self.cancel_b.clicked.connect(self.cancel)
|
||||
|
||||
# TESTING
|
||||
if "--test" in sys.argv:
|
||||
self.password_le.setText("123123")
|
||||
|
|
|
|||
|
|
@ -1,57 +1,60 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Admin permission</class>
|
||||
<widget class="QWidget" name="Admin permission">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>422</width>
|
||||
<height>139</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Admin permission</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="6" column="1">
|
||||
<widget class="QPushButton" name="cancel_b">
|
||||
<property name="text">
|
||||
<string>Annulla</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QPushButton" name="continue_b">
|
||||
<property name="text">
|
||||
<string>Continua</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="QLineEdit" name="password_le">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QLabel" name="info_l">
|
||||
<property name="text">
|
||||
<string>-</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<class>Admin permission</class>
|
||||
<widget class="QWidget" name="Admin permission">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>422</width>
|
||||
<height>139</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Admin permission</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="6" column="1">
|
||||
<widget class="QPushButton" name="cancel_b">
|
||||
<property name="text">
|
||||
<string>Annulla</string>
|
||||
</property>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>password_le</tabstop>
|
||||
<tabstop>continue_b</tabstop>
|
||||
<tabstop>cancel_b</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QPushButton" name="continue_b">
|
||||
<property name="text">
|
||||
<string>Continua</string>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="QLineEdit" name="password_le">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QLabel" name="info_l">
|
||||
<property name="text">
|
||||
<string>-</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>password_le</tabstop>
|
||||
<tabstop>continue_b</tabstop>
|
||||
<tabstop>cancel_b</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
from .test_autotest import Test_Autotest
|
||||
|
|
@ -1,117 +0,0 @@
|
|||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
# from lib.db import Autotests
|
||||
from PyQt5.QtCore import Qt, QTimer, pyqtSignal, pyqtSlot
|
||||
# from PyQt5.QtGui import QPixmap
|
||||
from ui.widget import Widget
|
||||
|
||||
|
||||
class Test_Autotest(Widget):
|
||||
ok = pyqtSignal()
|
||||
|
||||
def set_reason(self, reason):
|
||||
print(reason)
|
||||
# def __init__(self, bench, drawing, reason):
|
||||
# self.reason = reason
|
||||
# self.autotest_cycle = [
|
||||
# ["autotest_nok", "Inserire campione autotest \"NOK\"", "autotest_nok"],
|
||||
# ["autotest_ok", "Inserire campione autotest \"OK\"", "autotest_ok"],
|
||||
# ]
|
||||
# self.autotest_cycle_state = 0
|
||||
# test = self.autotest_cycle[self.autotest_cycle_state]
|
||||
# recipe = bench.recipes[test[0]]
|
||||
# for h in ["wires", "terminals"]:
|
||||
# bench.parsers[h].set_recipe(recipe)
|
||||
# self.instructions_img = QPixmap("src/ui/imgs/{}.png".format(test[2]))
|
||||
# log_msg("autotest {}".format(test[0]))
|
||||
# super().__init__(bench, drawing)
|
||||
# if "--sim-autotest" not in sys.argv:
|
||||
# self.vision_ok_counter_limit = 3
|
||||
# else:
|
||||
# self.vision_ok_counter_limit = 1
|
||||
# self.autotest_frames = {}
|
||||
# self.cycle_state_timer = QTimer()
|
||||
# self.cycle_state_timer.setSingleShot(True)
|
||||
# self.cycle_state_timer.setInterval(2000)
|
||||
# self.cycle_state_timer.timeout.connect(self.cycle_state)
|
||||
# self.sources = ["frame", "wires", "terminals"]
|
||||
# self.bench.inputs["renderer"].checklist = ["wires", "terminals"]
|
||||
# self.bench.inputs["datamatrix"].update.disconnect()
|
||||
# self.bench.inputs["datamatrix"].out.disconnect()
|
||||
# self.instruction_l.setText(test[1])
|
||||
# self.autotest_cycle_state_leds = [
|
||||
# self.nok_state_l,
|
||||
# self.ok_state_l,
|
||||
# ]
|
||||
# self.update_leds()
|
||||
#
|
||||
# @pyqtSlot()
|
||||
# def resizeEvent(self, event=None):
|
||||
# super().resizeEvent(event=event)
|
||||
# self.instructions_img_l.setPixmap(self.instructions_img.scaled(self.instructions_img_l.width(), self.instructions_img_l.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation))
|
||||
#
|
||||
# @pyqtSlot()
|
||||
# @pyqtSlot(str)
|
||||
# def check_barcodes(self, barcode=None):
|
||||
# pass
|
||||
#
|
||||
# def check_ok(self):
|
||||
# # CHECK IF COMPLETED AUTOTEST
|
||||
# if (
|
||||
# all([t in self.vision and self.vision[t]["ok"] for t in ["wires", "terminals"]])
|
||||
# and self.vision_ok_counter >= self.vision_ok_counter_limit
|
||||
# ):
|
||||
# self.autotest_frames[self.autotest_cycle[self.autotest_cycle_state][0]] = self.frame
|
||||
# self.instructions_img = QPixmap("src/ui/imgs/success.png")
|
||||
# self.resizeEvent()
|
||||
# self.autotest_cycle_state += 1
|
||||
# self.cycle_state_timer.start()
|
||||
#
|
||||
# @pyqtSlot()
|
||||
# def cycle_state(self, override=False):
|
||||
# if self.autotest_cycle_state < len(self.autotest_cycle) and not override:
|
||||
# test = self.autotest_cycle[self.autotest_cycle_state]
|
||||
# recipe = self.bench.recipes[test[0]]
|
||||
# for h in ["wires", "terminals"]:
|
||||
# self.bench.parsers[h].set_recipe(recipe)
|
||||
# self.instruction_l.setText(test[1])
|
||||
# self.instructions_img = QPixmap("src/ui/imgs/{}.png".format(test[2]))
|
||||
# self.resizeEvent()
|
||||
# log_msg("autotest {}".format(test[0]))
|
||||
# self.request_vision.emit()
|
||||
# else:
|
||||
# if override:
|
||||
# self.bench.outputs["autotest_recorder"].save(self.frame[0], self.frame[1])
|
||||
# self.save(overridden=True)
|
||||
# else:
|
||||
# self.save()
|
||||
# # RESET RECIPES TO ACTUAL ONES
|
||||
# if self.drawing is not None:
|
||||
# recipe = self.bench.recipes[self.drawing.vision_recipe]
|
||||
# for h in ["wires", "terminals"]:
|
||||
# self.bench.parsers[h].set_recipe(recipe)
|
||||
# self.ok.emit()
|
||||
# self.update_leds()
|
||||
#
|
||||
# @pyqtSlot()
|
||||
# def update_leds(self):
|
||||
# for n, led in enumerate(self.autotest_cycle_state_leds):
|
||||
# if n < self.autotest_cycle_state:
|
||||
# led.setPixmap(self.sled.cmp(True))
|
||||
# elif n == self.autotest_cycle_state:
|
||||
# led.setPixmap(self.sled.cmp("right"))
|
||||
# elif n > self.autotest_cycle_state:
|
||||
# led.setPixmap(self.sled.cmp(False))
|
||||
#
|
||||
# @pyqtSlot()
|
||||
# def override_vision(self):
|
||||
# if self.challenge_admin("Si sta tentando di bypassare il l'autotest"):
|
||||
# self.cycle_state(override=True)
|
||||
#
|
||||
# def save(self, overridden=False):
|
||||
# frames = []
|
||||
# for k, f in self.autotest_frames.items():
|
||||
# frames.append(self.bench.outputs["autotest_recorder"].save(f[0], f[1]))
|
||||
# Autotests.archive(result=True, vision_tests=[t[0] for t in self.autotest_cycle], reason=self.reason, overridden=overridden, frames=frames)
|
||||
# self.bench.last_autotest = datetime.now()
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Autotest</class>
|
||||
<widget class="QWidget" name="Autotest">
|
||||
<layout class="QGridLayout" name="gridLayout"/>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
@ -150,6 +150,7 @@ class Test_Test(Widget):
|
|||
d.setCentralWidget(Test_Admin_Permission(info))
|
||||
d.setModal(True)
|
||||
d.show()
|
||||
d.centralWidget.password_le.setFocus()
|
||||
r = d.exec()
|
||||
if r == d.Accepted:
|
||||
self.admin_challenged = True
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user