· 6 years ago · Nov 20, 2019, 07:14 PM
1import {HttpClient} from '@angular/common/http';
2import {Injectable} from '@angular/core';
3import {Turma} from "../../models/Turma";
4import {Observable} from "rxjs/Observable";
5import {PersonGroup} from "../../models/azure/PersonGroup";
6import {Participante} from "../../models/Participante";
7import {CreatedPerson} from "../../models/azure/CreatedPerson";
8import {IdentifiedFace} from "../../models/azure/IdentifiedFace";
9import {DetectedFace} from "../../models/azure/DetectedFace";
10
11@Injectable()
12export class AzureProvider {
13
14 private apiKey: string = "API KEY";
15 private apiUrl: string = "SUA URL AZURE";
16 private defaultHeaders = {
17 'Ocp-Apim-Subscription-Key': this.apiKey
18 };
19
20 constructor(private http: HttpClient) {
21 }
22
23 public createPersonGroup(turma: Turma): Observable<PersonGroup> {
24 return this.http.put<null>(this.apiUrl + `/persongroups/${turma.id.toLowerCase()}`, {
25 'name': turma.descricao,
26 }, {
27 headers: this.defaultHeaders
28 });
29 }
30
31 public deletePersonGroup(turma: Turma): Observable<{}> {
32 return this.http.delete(this.apiUrl + `/persongroups/${turma.personGroupId.toLowerCase()}`,
33 {
34 headers: this.defaultHeaders
35 });
36 }
37
38 public async createPerson(turma: Turma, participante: Participante): Promise<CreatedPerson> {
39 return this.http.post<CreatedPerson>(this.apiUrl + `/persongroups/${turma.personGroupId.toLowerCase()}/persons`, {
40 name: participante.nome
41 }, {
42 headers: this.defaultHeaders
43 }).toPromise();
44 }
45
46 public deletePerson(turma: Turma, participante: Participante) {
47 return this.http.delete(this.apiUrl + `/persongroups/${turma.personGroupId}/persons/${participante.personId}`, {headers: this.defaultHeaders})
48 }
49
50 public async addFacePerson(personGroupId: string, personId: string, urlImagem: string): Promise<void> {
51 return this.http.post<void>(this.apiUrl + `/persongroups/${personGroupId.toLowerCase()}/persons/${personId.toLowerCase()}/persistedFaces`, {
52 url: urlImagem
53 }, {
54 headers: this.defaultHeaders
55 }).toPromise();
56 }
57
58 public async train(turma: Turma): Promise<any> {
59 return this.http.post(this.apiUrl + `/persongroups/${turma.personGroupId.toLowerCase()}/train`, {}, {
60 headers: this.defaultHeaders
61 }).toPromise();
62 }
63
64 public async detectFace(urlImg: string): Promise<DetectedFace[]> {
65 return await this.http.post<DetectedFace[]>(this.apiUrl + `/detect?returnFaceId=true&returnFaceLandmarks=false`, {
66 url: urlImg
67 }, {
68 headers: {
69 'Ocp-Apim-Subscription-Key': this.apiKey,
70 "Content-Type": "application/json"
71 }
72 }).toPromise();
73 }
74
75 // todo editar metodo
76 public async identifyFace(detectFaces: DetectedFace[], turma: Turma): Promise<IdentifiedFace[]> {
77
78 let resquestBody = {
79 personGroupId: turma.personGroupId.toLowerCase(),
80 faceIds: [],
81 maxNumOfCandidatesReturned: 1,
82 confidenceThreshold: 0.5
83 };
84
85 detectFaces.forEach(detectedFace => { // preenche os faceids do request body
86 resquestBody.faceIds.push(detectedFace.faceId);
87 });
88
89 return await this.http.post<IdentifiedFace[]>(this.apiUrl + '/identify', resquestBody, {
90 headers: this.defaultHeaders
91 }).toPromise();
92 }
93}