monolito_djanco_poonto/src/views/TrainingView.vue
2025-02-04 16:22:26 -03:00

226 lines
7.8 KiB
Vue

<template>
<app-layout>
<v-container>
<v-card>
<v-tabs v-model="activeTab">
<v-tab>Cadastro</v-tab>
<v-tab>Pesquisar</v-tab>
<v-tab>Treino</v-tab>
<v-tab>Lista de Nomes</v-tab>
</v-tabs>
<v-card-text>
<!-- Cadastro Tab -->
<v-form v-if="activeTab === 0" @submit.prevent="registerCameraModel">
<v-row>
<v-col cols="12" md="4">
<v-text-field v-model="cameraModel.name" label="Nome do Modelo" required></v-text-field>
</v-col>
<v-col cols="12" md="4">
<v-text-field v-model="cameraModel.responsible" label="Responsável pelo Cadastro" required></v-text-field>
</v-col>
<v-col cols="12" md="6">
<v-text-field v-model="cameraModel.description" label="Descrição" required></v-text-field>
</v-col>
<v-col cols="12" md="3">
<v-text-field type="date" v-model="cameraModel.creationDate" label="Data de Criação" required></v-text-field>
</v-col>
<v-col cols="12" md="3">
<v-text-field type="time" v-model="cameraModel.creationTime" label="Hora de Criação" required></v-text-field>
</v-col>
<v-col cols="12">
<v-btn type="submit" color="primary">Cadastrar Modelo</v-btn>
</v-col>
</v-row>
</v-form>
<!-- Pesquisar Tab -->
<v-form v-if="activeTab === 1" @submit.prevent="searchCameraModels">
<v-row>
<v-col cols="12" md="6">
<v-text-field v-model="searchCriteria.name" label="Nome do Modelo"></v-text-field>
</v-col>
<v-col cols="12">
<v-btn type="submit" color="primary">Pesquisar</v-btn>
</v-col>
</v-row>
</v-form>
<!-- Treino Tab -->
<v-row v-if="activeTab === 2">
<v-col>
<v-card outlined>
<v-card-title>Treinamento de Modelo de Câmera</v-card-title>
<v-card-text>
<v-row>
<v-col cols="12" md="8">
<v-select
:items="untrainedCameras"
v-model="selectedCameraForTraining"
label="Selecionar Câmera"
item-text="name"
return-object
></v-select>
</v-col>
<v-col cols="12" md="4" class="d-flex">
<v-btn
color="primary"
class="mr-2"
@click="startTraining"
:disabled="!selectedCameraForTraining"
>
Iniciar Treinamento
</v-btn>
<v-btn
color="success"
@click="integrateModel"
:disabled="!trainingComplete"
>
Integrar
</v-btn>
</v-col>
</v-row>
</v-card-text>
</v-card>
</v-col>
</v-row>
<!-- Lista de Nomes Tab -->
<v-row v-if="activeTab === 3" class="mt-4">
<v-col md="6" sm="12">
<v-card outlined>
<v-card-title class="subtitle-1">Rostos Identificados</v-card-title>
<v-card-text>
<v-list>
<v-list-item v-for="(face, index) in identifiedFaces" :key="index">
<v-list-item-avatar>
<v-icon large>mdi-account-circle</v-icon>
</v-list-item-avatar>
<v-list-item-content>
{{ face.name }}
<v-chip small :color="face.isActive ? 'success' : 'error'">
{{ face.isActive ? 'Ativo' : 'Inativo' }}
</v-chip>
</v-list-item-content>
</v-list-item>
</v-list>
</v-card-text>
</v-card>
</v-col>
</v-row>
</v-card-text>
</v-card>
</v-container>
</app-layout>
</template>
<script>
export default {
data() {
return {
activeTab: 0,
cameraModel: {
name: '',
id: '',
description: '',
registrationDate: null
},
searchCriteria: {
id: '',
name: ''
},
selectedCameraForTraining: null,
isTraining: false,
trainingComplete: false,
trainingProgress: 0,
trainingMessage: '',
untrainedCameras: [
{ id: 'CAM003', name: 'Câmera Estacionamento', brand: 'Dahua' }
],
cameras: [
{ id: 'CAM001', name: 'Câmera Principal', description: 'Câmera frontal do prédio', isActive: true, registrationDate: '2025-02-03T08:30', isTrained: true },
{ id: 'CAM002', name: 'Câmera Corredor', description: 'Câmera do corredor principal', isActive: false, registrationDate: '2025-01-28T14:00', isTrained: false }
],
searchResults: [],
identifiedFaces: [
{
id: 'USER001',
name: 'João Silva',
isActive: true
},
{
id: 'USER002',
name: 'Maria Souza',
isActive: true
}
],
unidentifiedFaces: [
{ selectedUser: null },
{ selectedUser: null }
],
registeredUsers: ['João Silva', 'Maria Souza', 'Pedro Santos', 'Ana Oliveira']
};
},
methods: {
registerCameraModel() {
console.log('Registrando modelo de câmera:', this.cameraModel);
this.cameraModel = {
name: '',
id: '',
description: '',
registrationDate: null
};
},
searchCameraModels() {
console.log('Critérios de pesquisa:', this.searchCriteria);
this.searchResults = this.cameras.filter(camera =>
(camera.id.includes(this.searchCriteria.id) || camera.name.includes(this.searchCriteria.name)) &&
(!this.searchCriteria.status || (this.searchCriteria.status === 'Ativo' && camera.isActive) || (this.searchCriteria.status === 'Inativo' && !camera.isActive))
);
},
startTraining() {
if (this.selectedCameraForTraining) {
this.isTraining = true;
this.trainingProgress = 0;
this.trainingMessage = 'Iniciando treinamento...';
const simulateTraining = setInterval(() => {
this.trainingProgress += 20;
switch(this.trainingProgress) {
case 20:
this.trainingMessage = 'Carregando modelos de reconhecimento...';
break;
case 40:
this.trainingMessage = 'Processando imagens de treinamento...';
break;
case 60:
this.trainingMessage = 'Ajustando parâmetros do modelo...';
break;
case 80:
this.trainingMessage = 'Finalizando treinamento...';
break;
case 100:
this.trainingMessage = 'Treinamento concluído!';
this.trainingComplete = true;
clearInterval(simulateTraining);
break;
}
}, 1000);
}
},
integrateModel() {
console.log('Integrando modelo:', this.selectedCameraForTraining);
this.trainingComplete = false;
this.isTraining = false;
},
confirmAssignments() {
console.log('Atribuições confirmadas:', this.unidentifiedFaces);
},
editFaceName(face) {
console.log('Editando rosto:', face);
}
}
}
</script>