├── Azure_ModeloPreditivo ├── complementos │ ├── experimento.png │ ├── modelo.java │ ├── teste.java │ └── prog.java └── ReadME.md ├── Azure_Fala_C++ ├── AcademIA_SC_Fala │ ├── AcademIA_SC_Fala.exe │ ├── config_voz.xml │ ├── Debug │ │ ├── AcademIA_SC_Fala.tlog │ │ │ ├── CL.command.1.tlog │ │ │ └── AcademIA_SC_Fala.lastbuildstate │ │ └── AcademIA_SC_Fala.log │ ├── AcademIA_SC_Fala.vcxproj.user │ ├── AcademIA_SC_Fala.vcxproj.filters │ ├── AcademIA_SC_Fala.cpp │ └── AcademIA_SC_Fala.vcxproj └── README.md ├── README.md ├── Azure_DeteccaoFaces_C# └── README.md ├── Azure_ReconhecimentoFaces_C# ├── README.md └── Program.cs ├── Azure_DeteccaoFaces_JavaScript ├── README.md ├── detectFaces.html └── detectFacesAttributes.html └── Azure_Classificacao_Java ├── README.md └── Main.java /Azure_ModeloPreditivo/complementos/experimento.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icei-pucminas/Sistemas-Inteligentes/HEAD/Azure_ModeloPreditivo/complementos/experimento.png -------------------------------------------------------------------------------- /Azure_Fala_C++/AcademIA_SC_Fala/AcademIA_SC_Fala.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icei-pucminas/Sistemas-Inteligentes/HEAD/Azure_Fala_C++/AcademIA_SC_Fala/AcademIA_SC_Fala.exe -------------------------------------------------------------------------------- /Azure_Fala_C++/AcademIA_SC_Fala/config_voz.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | default 4 | 5 | -------------------------------------------------------------------------------- /Azure_Fala_C++/AcademIA_SC_Fala/Debug/AcademIA_SC_Fala.tlog/CL.command.1.tlog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icei-pucminas/Sistemas-Inteligentes/HEAD/Azure_Fala_C++/AcademIA_SC_Fala/Debug/AcademIA_SC_Fala.tlog/CL.command.1.tlog -------------------------------------------------------------------------------- /Azure_Fala_C++/AcademIA_SC_Fala/AcademIA_SC_Fala.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Azure_Fala_C++/AcademIA_SC_Fala/Debug/AcademIA_SC_Fala.tlog/AcademIA_SC_Fala.lastbuildstate: -------------------------------------------------------------------------------- 1 | PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.27.29110:TargetPlatformVersion=10.0.18362.0: 2 | Debug|Win32|C:\Users\Arthur_2\Desktop\Arthur\AcademIA\AcademIA_SC_Fala\| 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sistemas Inteligentes 2 | 3 | Este repositório tem por objetivo reunir projetos acadêmicos relacionados ao aprendizado de sistemas inteligentes. Foca principalmente em projetos que envolvem programação e Inteligência Artificial. 4 | 5 | Cada uma das pastas possui um projeto simples implementados em uma linguagem de programação. 6 | -------------------------------------------------------------------------------- /Azure_DeteccaoFaces_C#/README.md: -------------------------------------------------------------------------------- 1 | # Descrição 2 | Este demo ilustra o uso de API de detecção Facial do serviço cognitivo da Microsoft (Azure). O demo utiliza a linguagem de programação C#. 3 | 4 | Veja como conseguir a chave e a URL da sua aplicação azure: https://youtu.be/nw0GMx687Ew 5 | 6 | Veja o vídeo explicativo em: https://www.youtube.com/watch?v=XWIo6KLWNSU 7 | 8 | Autor: Arthur Bernardo Moura, aluno da PUC Minas, Embaixador do programa AcademIA Microsoft e Monitor dos cursos de Computação 9 | Orientação: Prof. Sandro Jerônimo de Almeida 10 | -------------------------------------------------------------------------------- /Azure_ModeloPreditivo/ReadME.md: -------------------------------------------------------------------------------- 1 | 2 | # Descrição 3 | Esse projeto mostra o desenvolvimento e aplicação de um modelo classificador de senhas.Desenvolvido para ser utilizado em uma plataforma WEB para a matéria de TI-II, 4 | requisição feita em Java, construção do serviço web a partir da plataforma de machine learning da Azure: https://studio.azureml.net/ . 5 | 6 | Autor: João Victor Amorim Vieira, aluno da PUC Minas, Ciência da Computação. 7 | 8 | Orientação: Prof. Sandro Jerônimo de Almeida 9 | # Vídeo explicativo 10 | 11 | https://youtu.be/hPVQxh9J7eI 12 | -------------------------------------------------------------------------------- /Azure_Fala_C++/README.md: -------------------------------------------------------------------------------- 1 | # Descrição 2 | Este projeto ilustra o funcionamento da API de serviços inteligentes da Microsoft para transformação de fala em texto e vice-versa. Foi desenvolvido na linguagem de programação C++. 3 | 4 | Autor: Arthur Bernardo Moura, aluno da PUC Minas, Embaixador do programa AcademIA Microsoft e Monitor dos cursos de Computação. 5 | Orientação: Prof. Sandro Jerônimo de Almeida 6 | # Vídeo explicativo 7 | https://www.youtube.com/watch?v=v0sEQvWLRTs 8 | 9 | Veja também como conseguir a chave e a URL da sua aplicação azure: https://youtu.be/nw0GMx687Ew 10 | -------------------------------------------------------------------------------- /Azure_Fala_C++/AcademIA_SC_Fala/Debug/AcademIA_SC_Fala.log: -------------------------------------------------------------------------------- 1 | AcademIA_SC_Fala.cpp 2 | C:\Users\Arthur_2\Desktop\Arthur\AcademIA\AcademIA_SC_Fala\AcademIA_SC_Fala\AcademIA_SC_Fala.cpp(14,9): error C3861: 'synthesizeSpeech': identificador não encontrado 3 | C:\Users\Arthur_2\Desktop\Arthur\AcademIA\AcademIA_SC_Fala\AcademIA_SC_Fala\AcademIA_SC_Fala.cpp(28,6): error C2084: função 'void synthesizeSpeech(void)' já possui um corpo 4 | C:\Users\Arthur_2\Desktop\Arthur\AcademIA\AcademIA_SC_Fala\AcademIA_SC_Fala\AcademIA_SC_Fala.cpp(23): message : consulte a definição anterior de 'synthesizeSpeech' 5 | -------------------------------------------------------------------------------- /Azure_ReconhecimentoFaces_C#/README.md: -------------------------------------------------------------------------------- 1 | # Descrição 2 | Este projeto ilustra o funcionamento da API de serviços inteligentes da Microsoft para reconhecimento de rostos semelhantes. Foi desenvolvido em C#. 3 | 4 | Veja como conseguir a chave e a URL da sua aplicação azure: https://youtu.be/nw0GMx687Ew 5 | 6 | Um video com detalhes do projeto está disponível em: https://www.youtube.com/watch?v=z4jq610aOoM 7 | 8 | Autor: Frederico Prado Marques, aluno da PUC Minas, Embaixador do programa AcademIA Microsoft e Monitor dos cursos de Computação. 9 | Orientação: Prof. Sandro Jerônimo de Almeida 10 | -------------------------------------------------------------------------------- /Azure_DeteccaoFaces_JavaScript/README.md: -------------------------------------------------------------------------------- 1 | # Descrição 2 | Este projeto ilustra o funcionamento da API de serviços inteligentes da Microsoft para detecção de rostos. Foi desenvolvido em JavaScript. 3 | 4 | 5 | Veja como conseguir a chave e a URL da sua aplicação azure: https://youtu.be/nw0GMx687Ew 6 | 7 | Um video com detalhes do projeto está disponível em: https://www.youtube.com/watch?v=H-tAR-TmcO4&feature=youtu.be 8 | 9 | Autor: Frederico Prado Marques, aluno da PUC Minas, Embaixador do programa AcademIA Microsoft e Monitor dos cursos de Computação. 10 | Orientação: Prof. Sandro Jerônimo de Almeida 11 | 12 | -------------------------------------------------------------------------------- /Azure_ModeloPreditivo/complementos/modelo.java: -------------------------------------------------------------------------------- 1 | import java.net.http.*; 2 | import java.util.*; 3 | import java.net.*; 4 | 5 | public class modelo{ 6 | 7 | 8 | public static void main(String[] Args)throws Exception{ 9 | 10 | /** 11 | Importante lembrar de entregar dados em modelo JSON, em java necessario usar caracteres de escape, como ' \" ' para imprimir uma aspas 12 | 13 | **/ 14 | String body = "elementos a serem enviados para a API"; 15 | 16 | 17 | 18 | String url = "Sua URL";//encontrada na pagina de detalhes da API criada 19 | 20 | HttpClient client = HttpClient.newHttpClient(); 21 | HttpRequest req = HttpRequest.newBuilder() 22 | .uri(URI.create(url)).header("Content-Type","application/json").header("Authorization","Bearer *CODIGO DE AUTORIZACAO*")//Nao esquecer do espaço apos o bearer 23 | .header("Accept","application/json") 24 | .POST(HttpRequest.BodyPublishers.ofString(body)) 25 | .build(); 26 | 27 | HttpResponse resp = client.send(req,HttpResponse.BodyHandlers.ofString()); 28 | 29 | MyIO.println(resp.body());//usando MyIO do Max, caso nao possua pode ser alterado para System.out.println() 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Azure_ModeloPreditivo/complementos/teste.java: -------------------------------------------------------------------------------- 1 | import java.net.http.*; 2 | import java.util.*; 3 | import java.net.*; 4 | 5 | public class teste{ 6 | 7 | 8 | public static void main(String[] Args)throws Exception{ 9 | 10 | String body = "{\"Inputs\": {\"input1\": [{\"senha\": \"kzde5577\",\"special character\": 0,\"uppercase\": 0,\">=8\": 1,\"number\": 1,\"strength\": 1}]},\"GlobalParameters\": {}}"; 11 | 12 | String url = "https://ussouthcentral.services.azureml.net/workspaces/34c27db996a549be84d8289e923d4da0/services/6cf1f6cbd1a64b2ca1125c5cffc91f4a/execute?api-version=2.0&format=swagger"; 13 | 14 | HttpClient client = HttpClient.newHttpClient(); 15 | HttpRequest req = HttpRequest.newBuilder() 16 | .uri(URI.create(url)).header("Content-Type","application/json").header("Authorization","Bearer KFMY5hDLlxtxNlL9mzGh/1TLkoe/xx2KkmFb5taAyrOtSOaCuRutrHc7G0+aaePmLshfT5XlEt6jBaWCx+8cEA==").header("Accept","application/json") 17 | .POST(HttpRequest.BodyPublishers.ofString(body)) 18 | .build(); 19 | HttpResponse resp = client.send(req,HttpResponse.BodyHandlers.ofString()); 20 | System.out.println(resp.body()); 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | } 30 | 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Azure_Fala_C++/AcademIA_SC_Fala/AcademIA_SC_Fala.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Arquivos de Origem 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Azure_ModeloPreditivo/complementos/prog.java: -------------------------------------------------------------------------------- 1 | public class prog{ 2 | 3 | public static boolean temMaiuscula(String senha){ 4 | 5 | boolean resp = false; 6 | for(int i = 0;i < senha.length() && !resp;i++){ 7 | 8 | if(senha.charAt(i)>='A' && senha.charAt(i)<='Z') 9 | resp = true; 10 | 11 | } 12 | return resp; 13 | 14 | } 15 | public static boolean temNumero(String senha){ 16 | 17 | boolean resp =false; 18 | for(int i = 0;i < senha.length() && !resp;i++){ 19 | 20 | if(senha.charAt(i)>='0' && senha.charAt(i)<='9') 21 | resp = true; 22 | } 23 | 24 | return resp; 25 | } 26 | 27 | public static boolean temEspecial(String senha){ 28 | 29 | boolean resp =false; 30 | for(int i = 0;i < senha.length() && !resp;i++){ 31 | 32 | if((senha.charAt(i)>='!' && senha.charAt(i)<='/')||(senha.charAt(i)>=':' && senha.charAt(i)<='@') ) 33 | resp = true; 34 | } 35 | 36 | return resp; 37 | 38 | } 39 | 40 | 41 | public static void main(String[] Args){ 42 | 43 | String senha = MyIO.readString(); 44 | 45 | 46 | 47 | for(int i = 0 ;i < 6680 ; i++){ 48 | 49 | boolean tamanho = false; 50 | if(senha.length() >= 8) 51 | tamanho = true; 52 | 53 | 54 | int a,b,c,d; 55 | a = (temEspecial(senha)) ? 1 : 0; 56 | b = (temMaiuscula(senha)) ? 1 : 0; 57 | c = (tamanho) ? 1 : 0; 58 | d = (temNumero(senha)) ? 1 : 0; 59 | 60 | MyIO.println( senha +","+a + "," + b + "," + c + "," +d); 61 | senha = MyIO.readString(); 62 | 63 | } 64 | 65 | } 66 | 67 | 68 | 69 | 70 | } 71 | -------------------------------------------------------------------------------- /Azure_Fala_C++/AcademIA_SC_Fala/AcademIA_SC_Fala.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | 7 | using namespace std; 8 | using namespace Microsoft::CognitiveServices::Speech; 9 | using namespace Microsoft::CognitiveServices::Speech::Audio; 10 | 11 | // PROCEDIMENTO QUE REQUISITA DA API A TRANSFORMAÇÃO DE UM TEXTO EM FALA 12 | void texto_em_fala(std::shared_ptr requisicao_textofala, string Texto) 13 | { 14 | cout << Texto + "\n"; 15 | requisicao_textofala->SpeakTextAsync(Texto).get(); // REQUISIÇÃO DA SINTETIZAÇÃO DE TEXTO EM FALA 16 | } 17 | // FUNÇÃO QUE REQUISITA DA API O RECONHECIMENTO DE UMA FALA E A TRANSFORMAÇÃO DESSA FALA EM UM TEXTO 18 | string fala_em_texto(std::shared_ptr requisicao_falatexto) { 19 | auto resultado = requisicao_falatexto->RecognizeOnceAsync().get();// REQUISIÇÃO DO RECONHEIMENTO DE FALA EM TEXTO 20 | cout << resultado->Text + "\n"; 21 | return resultado->Text; //CONVERSÃO DO RESULTADO DO RECONHECIMENTO EM TEXTO 22 | } 23 | 24 | int main() 25 | { 26 | auto autenticacao = SpeechConfig::FromSubscription("", ""); // DECLARAÇÃO DA AUTENTICAÇÃO DO RECURSO 27 | autenticacao->SetSpeechRecognitionLanguage("pt-BR"); // CONFIGURAÇÃO DA AUTENTICAÇÃO PARA O RECONHECIMENTO DE FALA EM PORTUGUÊS 28 | autenticacao->SetSpeechSynthesisLanguage("pt-BR"); // CONFIGURAÇÃO DA AUTENTICAÇÃO PARA A SINTETIZAÇÃO DE FALA EM PORTUGUÊS 29 | autenticacao->SetSpeechSynthesisVoiceName("pt-BR-FranciscaNeural"); // CONFIGURAÇÃO DE UMA VOZ ESPECÍFICA: pt-BR-AntonioNeural, pt-BR-FranciscaNeural 30 | // OBS: A PERSONALIZAÇÃO DA VOZ NÃO É OBRIGATÓRIA. SE A LINHA ACIMA FOR COMENTADA, O SERVIÇO ASSUMIRÁ UMA VOZ POR DEFAULT. 31 | // O NOME DAS VOZES PODEM SER ALTERADOS COM O TEMPO. CASO SEU PROGRAMA NÃO ESTEJA SINTETIZANDO A VOZ ESCOLHIDA, TENTE COMENTAR A CONFIGURAÇÃO 32 | // OU PESQUISE NA DOCUMENTAÇÃO DA MICROSOFT POR VOZES DISPONÍVEIS: https://docs.microsoft.com/pt-br/azure/cognitive-services/speech-service/language-support 33 | auto audio_config = AudioConfig::FromDefaultMicrophoneInput(); // DECLARAÇÃO DA ENTRADA DO MICROFONE 34 | auto requisicao_textofala = SpeechSynthesizer::FromConfig(autenticacao); // DEFINIÇÃO DO OBJETO REQUISICAO_TEXTOFALA 35 | auto requisicao_falatexto = SpeechRecognizer::FromConfig(autenticacao, audio_config); // REDEFINIÇÃO DO OBJETO REQUISICAO_FALATEXTO COM AS NOVAS CONFIGURAÇÕES 36 | 37 | try 38 | { 39 | texto_em_fala(requisicao_textofala,"SISTEMA LIGADO"); 40 | texto_em_fala(requisicao_textofala,"Qual e o seu nome?"); 41 | string nome = fala_em_texto(requisicao_falatexto); 42 | texto_em_fala(requisicao_textofala,"Ola " + nome + "! Informe a sua senha: "); 43 | string senha = fala_em_texto(requisicao_falatexto); 44 | texto_em_fala(requisicao_textofala, "Verificando. . ."); 45 | 46 | if (senha == ("123456.")) { 47 | texto_em_fala(requisicao_textofala, "ACESSO CONCEDIDO"); 48 | } 49 | else { 50 | texto_em_fala(requisicao_textofala, "ACESSO NEGADO"); 51 | } 52 | } 53 | catch (exception e) 54 | { 55 | cout << e.what(); 56 | } 57 | return 0; 58 | } 59 | -------------------------------------------------------------------------------- /Azure_ReconhecimentoFaces_C#/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Threading; 6 | using System.Threading.Tasks; 7 | 8 | using Microsoft.Azure.CognitiveServices.Vision.Face; 9 | using Microsoft.Azure.CognitiveServices.Vision.Face.Models; 10 | namespace ConsoleApp1 11 | { 12 | class Program 13 | { 14 | // Recognition model 3 was released in 2020 May 15 | const string RECOGNITION_MODEL3 = RecognitionModel.Recognition03; 16 | public static IFaceClient Authenticate(string endpoint, string key) 17 | { 18 | return new FaceClient(new ApiKeyServiceClientCredentials(key)) { Endpoint = endpoint }; 19 | } 20 | private static async Task> DetectFaceRecognize(IFaceClient faceClient, string url, string recognition_model) 21 | { 22 | // Detect faces from image URL. Since only recognizing, use the recognition model 1. 23 | // We use detection model 2 because we are not retrieving attributes. 24 | IList detectedFaces = await faceClient.Face.DetectWithUrlAsync(url, recognitionModel: recognition_model, detectionModel: DetectionModel.Detection02); 25 | Console.WriteLine($"{detectedFaces.Count} face(s) detectada(s) na imagem `{Path.GetFileName(url)}`"); 26 | return detectedFaces.ToList(); 27 | } 28 | public static async Task FindSimilar(IFaceClient client, string recognition_model) 29 | { 30 | Console.WriteLine("========Achar Similares========"); 31 | Console.WriteLine(); 32 | Console.WriteLine("Insira o link da face base(links muito grandes podem causar erros):\n"); 33 | string sourceImageFileName = Console.ReadLine(); 34 | Console.WriteLine("Insira o link das possiveis faces similares e digite FIM quando acabar (links muito grandes podem causar erros):\n"); 35 | List targetImageFileNames = new List(); 36 | string aux = ""; 37 | int i = 1; 38 | do 39 | { 40 | Console.WriteLine($"Imagem {i}:\n"); 41 | aux = Console.ReadLine(); 42 | if (aux != "FIM") 43 | { 44 | targetImageFileNames.Add(aux); 45 | } 46 | i++; 47 | } while (aux != "FIM"); 48 | 49 | 50 | IList targetFaceIds = new List(); 51 | foreach (var targetImageFileName in targetImageFileNames) 52 | { 53 | // Detect faces from target image url. 54 | var faces = await DetectFaceRecognize(client, $"{targetImageFileName}", recognition_model); 55 | // Add detected faceId to list of GUIDs. 56 | targetFaceIds.Add(faces[0].FaceId.Value); 57 | } 58 | 59 | // Detect faces from source image url. 60 | IList detectedFaces = await DetectFaceRecognize(client, $"{sourceImageFileName}", recognition_model); 61 | Console.WriteLine(); 62 | 63 | // Find a similar face(s) in the list of IDs. Comapring only the first in list for testing purposes. 64 | IList similarResults = await client.Face.FindSimilarAsync(detectedFaces[0].FaceId.Value, null, null, targetFaceIds); 65 | i = 1; 66 | foreach (var similarResult in similarResults) 67 | { 68 | Console.WriteLine($"A imagem {i} com o FaceID:{similarResult.FaceId} é similar a imagem base com a confiança: {similarResult.Confidence}."); 69 | i++; 70 | } 71 | Console.WriteLine(); 72 | } 73 | static void Main(string[] args) 74 | { 75 | // From your Face subscription in the Azure portal, get your subscription key and endpoint. 76 | Console.WriteLine("Insira a URL da sua aplicação no Azure:\n"); 77 | string urlServico = Console.ReadLine(); 78 | Console.WriteLine("Insira a chave da sua aplicação no Azure:\n"); 79 | string chaveServico = Console.ReadLine(); 80 | 81 | // Authenticate. 82 | IFaceClient client = Authenticate(urlServico, chaveServico); 83 | FindSimilar(client, RECOGNITION_MODEL3).Wait(); 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /Azure_Classificacao_Java/README.md: -------------------------------------------------------------------------------- 1 | # Azure | Classificação Multiclasse em Java 2 | 3 | Aqui aprenderemos como treinar um modelo de classificação multiclasse (Rede Neural Multiclasse) na Azure, como implantar e depois consumir o modelo utilizando novos dados. 4 | 5 | ## Contexto 6 | 7 | Na Azure, os algoritmos de classificação suportados podem ser encontrados nesse [link](https://docs.microsoft.com/pt-br/azure/machine-learning/how-to-select-algorithms#comparison-of-machine-learning-algorithms). Aqui iremos focar somente nos de multiclasse, e, em específico, a Rede Neural Multiclasse. 8 | 9 | Uma Rede Neural Multiclasse pode ser utilizada em tarefas de pesquisa visual computacional complexas, como reconhecimento de letra ou dígitos, classificação de documentos e reconhecimento de padrões ([Módulo Rede Neural Multiclasse, Azure](https://docs.microsoft.com/pt-br/azure/machine-learning/algorithm-module-reference/multiclass-neural-network?WT.mc_id=docs-article-lazzeri#about-neural-networks)) 10 | 11 | ## Problema 12 | 13 | Tendo algumas classes existentes, como dormir, correr e focar, classificar músicas do Spotify em sua classe mais apropriada dada as suas características de áudio. 14 | 15 | Iremos treinar o algoritmo com diversas músicas e sua respectiva classe. Playlists com temas pré-estabelecidos foram pesquisadas e as suas músicas obtidas, então, por exemplo, as músicas de uma playlist triste foram utilizadas para treinar o algoritmo sobre o que seria uma música triste. 16 | 17 | A entidade música é na verdade um set de características de áudio e um identificador. Essas características são explicadas mais na seção de Dados abaixo. 18 | 19 | ## Dados 20 | 21 | Todas as músicas do Spotify contêm características de áudio. As que iremos utilizar nesse exemplo são as seguintes: 22 | 23 | - acousticness 24 | - danceability 25 | - energy 26 | - instrumentalness 27 | - liveness 28 | - loudness 29 | - speechiness 30 | - tempo 31 | - valence 32 | 33 | O significado de cada característica pode ser encontrado na [documentação do Spotify](https://developer.spotify.com/documentation/web-api/reference/#object-audiofeaturesobject). 34 | 35 | O dataset utilizado está presente no seguinte [link](https://gist.github.com/danielSbastos/9a57551c883ded195e9e1be6c967ccda) e foi gerado por um [script em Python](https://github.com/danielSbastos/vibe-fi/blob/master/scripts/requests-spotify.py) 36 | 37 | Com as características de áudio e qual classe cada uma pertence, podemos agora treinar o modelo. 38 | 39 | ## Passos 40 | 41 | 1. Criar um Workspace na Microsoft Azure Machine Learning 42 | 2. Importar um dataset 43 | 3. Criar um pipeline e treinar um modelo 44 | 4. Publicar o modelo em um serviço web 45 | 5. Baixar os arquivos para o serviço web 46 | 6. Testar o modelo 47 | 7. Programando em Java para realizar as chamadas 48 | 49 | ### 1. Criar um Workspace na Microsoft Azure Machine Learning 50 | 51 | Seguir o [tutorial da própria Microsoft](https://docs.microsoft.com/pt-br/azure/machine-learning/how-to-manage-workspace?tabs=azure-portal). 52 | 53 | ### 2. Importar um dataset 54 | 55 | [Vídeo](https://youtu.be/8RP4Gp5VZAM) 56 | 57 | ### 3. Criar um pipeline e treinar um modelo 58 | 59 | [Vídeo](https://youtu.be/iZs0rBS2gFk) 60 | 61 | ### 4. Publicar o modelo em um serviço web 62 | 63 | [Vídeo](https://youtu.be/gluOhQOVV3E) 64 | 65 | ### 5. Baixar os arquivos para o serviço web 66 | 67 | O arquivos no vídeo podem ser acessados em [`score.py`](https://github.com/danielSbastos/vibe-fi/blob/master/scripts/score2.py) 68 | e [`conda_env.yaml`](https://github.com/danielSbastos/vibe-fi/blob/master/scripts/conda_env2.yaml) 69 | 70 | [Vídeo](https://youtu.be/8JgRNa9Golw) 71 | 72 | ### 6. Testar o modelo 73 | 74 | [Vídeo](https://youtu.be/jTUvOlWBuVw) 75 | 76 | ### 7. Programando em Java para realizar as chamadas 77 | 78 | Obs: se você utilizar algum IDE que já baixe o `.jar`, configure o CLASSPATH, compile e rode programas em Java, como o Eclipse, 79 | pode ignorar todos os passos abaixo, menos o de configurar as constantes. 80 | 81 | - Você deve baixar antes o `.jar` do pacote `org.json.simple` e o deixar nessa pasta. Link para download: [http://www.java2s.com/Code/Jar/j/Downloadjsonsimple11jar.htm](http://www.java2s.com/Code/Jar/j/Downloadjsonsimple11jar.htm) 82 | - Altere as constantes `MODEL_URL` e `API_KEY` em `Main.java` com os valores do seu serviço 83 | - Executar o código [`Main.java`](https://github.com/icei-pucminas/Sistemas-Inteligentes/blob/main/Azure_Classificacao_Java/Main.java) com o seguinte comando: 84 | 85 | `javac -cp json-simple-1.1.jar Main.java && java -cp .:json-simple-1.1.jar Main` 86 | 87 | O resultado deve ser algo similar com o exemplo abaixo: 88 | 89 | ```bash 90 | [{Scored Probabilities_feliz=2.0532116841698607E-6, Scored Probabilities_dormir=9.48652830187802E-28, Scored Probabilities_foco=2.0256458418315827E-14, Scored Probabilities_correr=0.9982468202418197, liveness=1.0, Scored Probabilities_gaming=0.001751024180401978, tempo=150.0, Scored Probabilities_energetico=1.9553258735535537E-11, valence=3.9394, instrumentalness=1.0, danceability=8.393, Scored Probabilities_triste=6.480293395209065E-16, speechiness=1.0, Scored Probabilities_calmo=1.0234652002373781E-7, Scored Labels=correr, acousticness=0.992, class=, energy=1.0}] 91 | ``` 92 | -------------------------------------------------------------------------------- /Azure_DeteccaoFaces_JavaScript/detectFaces.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Detecção Facial 5 | 6 | 7 | 59 | 60 | 132 | 133 | 134 | 135 |

Detecção facial

136 |
137 | Entre com a URL de uma imagem que contenha uma(s) face(s), então clique no botão Analisar face.

138 |
139 |
140 |

URL da aplicação no Azure:

141 | 142 |
143 |
144 |

Chave da aplicação:

145 | 146 |
147 |
148 |

URL da Imagem para ser analisada:

149 | 150 |
151 |

152 |
153 |
154 |
155 | Resposta:

156 | 158 |
159 |
160 | Imagem fonte:

161 | 162 |
163 |
164 |
165 | 166 | 167 | -------------------------------------------------------------------------------- /Azure_DeteccaoFaces_JavaScript/detectFacesAttributes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Detecção Facial 5 | 6 | 7 | 59 | 60 | 132 | 133 | 134 | 135 |

Detecção facial

136 |
137 | Entre com a URL de uma imagem que contenha uma(s) face(s), então clique no botão Analisar face.

138 |
139 |
140 |

URL da aplicação no Azure:

141 | 142 |
143 |
144 |

Chave da aplicação:

145 | 146 |
147 |
148 |

URL da Imagem para ser analisada:

149 | 150 |
151 |

152 |
153 |
154 |
155 | Resposta:

156 | 158 |
159 |
160 | Imagem fonte:

161 | 162 |
163 |
164 |
165 | 166 | 167 | -------------------------------------------------------------------------------- /Azure_Classificacao_Java/Main.java: -------------------------------------------------------------------------------- 1 | import org.json.simple.JSONArray; 2 | import org.json.simple.JSONObject; 3 | import org.json.simple.JSONValue; 4 | 5 | import java.io.IOException; 6 | import java.net.URI; 7 | import java.net.http.HttpClient; 8 | import java.net.http.HttpRequest; 9 | import java.net.http.HttpResponse; 10 | import java.util.List; 11 | import java.util.ArrayList; 12 | import java.util.Map; 13 | import java.util.HashMap; 14 | 15 | /* 16 | Esse código é responsável por enviar as características de áudio de uma música (valence, energy, etc) 17 | e obter de volta a classe prevista (triste, alegre, etc). O serviço que receberá esses dados é o que foi 18 | feito deploy nos vídeos - o serviço web do nosso modelo na Azure. 19 | 20 | Funciona em 4 passos principais: 21 | 22 | 1) Constrói o objeto da chamada HTTP a ser enviado ao serviço web do modelo 23 | 2) Coloca como o `body` da chamada HTTP as características de áudio que são classificados 24 | 3) Envia a requisição ao serviço 25 | 4) Recebe a resposta em JSON e a converte para uma List de HashMaps. O retorno do modelo 26 | contém as características de cada áudio enviadas, a probabilidade de cada set de características 27 | pertencer a uma classe e a classe prevista. 28 | */ 29 | 30 | public class Main { 31 | // Endpoint do modelo. Para mais informações, ver o seguinte 32 | // vídeo no tempo já marcado: https://youtu.be/jTUvOlWBuVw?t=188. 33 | // O endpoint está presente no campo "REST Endpoint" no serviço web do modelo. 34 | private static final String MODEL_URL = ""; 35 | 36 | // Chave de API do seu serviço na Azure. Para mais informações assistir o seguinte 37 | // vídeo no tempo já marcado: https://youtu.be/jTUvOlWBuVw?t=188 38 | // A chave está presente no campo "Primary Key" no serviço web do modelo. 39 | private static final String API_KEY = ""; 40 | 41 | public static void main(String[] Args) throws Exception { 42 | // Construímos a nosso objeto HTTP que será enviado ao servidor do modelo. 43 | // O `API_KEY` é utilizado nos headers e os dados enviados são atribuídos ao objeto 44 | // na linha 43 por meio da função `.sampleData` 45 | HttpClient client = HttpClient.newHttpClient(); 46 | HttpRequest request = HttpRequest.newBuilder().uri(URI.create(MODEL_URL)) 47 | .headers("Content-Type", "application/json", "Authorization", "Bearer " + API_KEY) 48 | .POST(HttpRequest.BodyPublishers.ofString(sampleData())) 49 | .build(); 50 | 51 | try { 52 | // Realiza-se a chamada HTTP para o servidor do modelo. O objeto `client` definido na linha 40 53 | // chama o método `#send` passando o request da linha 41, que é quem contém as informações da URL, 54 | // autenticação com a API_KEY e os dados a serem classificados. 55 | HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); 56 | 57 | // Convertemos a reposta para uma List de objetos de HashMap. Nas linhas 86-111 há um exemplo de retorno 58 | // da função `.responseMapBody`. 59 | List> classification = responseMapBody(response.body()); 60 | System.out.println(classification); 61 | } catch (IOException | InterruptedException e) { 62 | e.printStackTrace(); 63 | } 64 | } 65 | 66 | // Cria caracteristicas fakes de áudio a serem classificadas, neste caso há somente um objeto 67 | // na lista, porém podem ser quantos forem necessários. Mais explicadas no vídeo https://youtu.be/jTUvOlWBuVw 68 | private static String sampleData() { 69 | JSONArray array = new JSONArray(); 70 | JSONObject item = new JSONObject(); 71 | item.put("class", ""); 72 | item.put("valence", 3.9394); 73 | item.put("energy", 1); 74 | item.put("liveness", 1); 75 | item.put("speechiness", 1); 76 | item.put("instrumentalness", 1); 77 | item.put("tempo", 150); 78 | item.put("danceability", 8.393); 79 | item.put("acousticness", 0.992); 80 | 81 | array.add(item); 82 | 83 | return array.toString(); 84 | } 85 | 86 | /* 87 | Recebe como argumento o retorno da chamada ao modelo, que é uma string, a 88 | converte para JSON e depois para uma lista de HashMap. 89 | 90 | Exemplo de retorno: 91 | [ 92 | { 93 | "Scored Probabilities_feliz": 2.0532116841698607E-6, 94 | "Scored Probabilities_dormir": 9.48652830187802E-28, 95 | "Scored Probabilities_foco": 2.0256458418315827E-14, 96 | "Scored Probabilities_correr": 0.9982468202418197, 97 | "Scored Probabilities_gaming": 0.001751024180401978, 98 | "Scored Probabilities_energetico": 1.9553258735535537E-11, 99 | "Scored Probabilities_triste": 6.480293395209065E-16, 100 | "Scored Probabilities_calmo": 1.0234652002373781E-7, 101 | "liveness": 1.0, 102 | "tempo": 150.0, 103 | "valence": 3.9394, 104 | "instrumentalness": 1.0, 105 | "danceability: 8.393, 106 | "speechiness": 1.0, 107 | "acousticness": 0.992, 108 | "class": "", 109 | "energy" 1.0 110 | "Scored Labels": "correr", 111 | }, 112 | { 113 | ... 114 | }, 115 | ... 116 | ] 117 | 118 | Cada HashMap contém as características de áudio que foram enviadas para a classificação (liveness, 119 | tempo, valence, instrumentalness, danceability, speechiness, acousticness, energy), a probabilidade 120 | delas pertencerem a cada uma das classes (Scored Probabilities_feliz, Scored Probabilities_dormir, 121 | Scored Probabilities_correr, Scored Probabilities_gaming, Scored Probabilities_energetico, 122 | Scored Probabilities_triste, Scored Probabilities_calmo) e, por fim, a classe prevista (Scored Labels), 123 | que nada mais é a classe com a maior probabilidade das características pertencerem 124 | */ 125 | private static List> responseMapBody(String body) { 126 | Map hm; 127 | List> res = new ArrayList<>(); 128 | 129 | // Parseia a resposta em string para JSON 130 | Object obj = JSONValue.parse(body); 131 | JSONObject jsonObject = (JSONObject) obj; 132 | 133 | // O retorno do modelo vem dentro da chave `result` 134 | JSONArray objs = (JSONArray) jsonObject.get("result"); 135 | 136 | // Iterar sobre os objetos do `result`, onde cada um representa o resultado da classificação de um set 137 | // de características de áudio do Spotify 138 | for (Object _obj : objs) { 139 | hm = new HashMap<>(); 140 | // Obtém o set de chaves do objeto e itera sobre eles, acessando o valor de cada um 141 | // e o adicionando no dicionário em Java a ser retornado 142 | for (Object o : ((JSONObject) _obj).keySet()) { 143 | String key = (String) o; 144 | hm.put(key, ((JSONObject) _obj).get(key)); 145 | } 146 | res.add(hm); 147 | } 148 | 149 | return res; 150 | } 151 | } 152 | -------------------------------------------------------------------------------- /Azure_Fala_C++/AcademIA_SC_Fala/AcademIA_SC_Fala.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | 16.0 23 | Win32Proj 24 | {0eb2e94e-ce94-4d89-80c2-c60a60796711} 25 | AcademIASCFala 26 | 10.0 27 | 28 | 29 | 30 | Application 31 | true 32 | v142 33 | Unicode 34 | 35 | 36 | Application 37 | false 38 | v142 39 | true 40 | Unicode 41 | 42 | 43 | Application 44 | true 45 | v142 46 | Unicode 47 | 48 | 49 | Application 50 | false 51 | v142 52 | true 53 | Unicode 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | true 75 | 76 | 77 | false 78 | 79 | 80 | true 81 | 82 | 83 | false 84 | 85 | 86 | 87 | Level3 88 | true 89 | WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) 90 | true 91 | 92 | 93 | Console 94 | true 95 | 96 | 97 | 98 | 99 | Level3 100 | true 101 | true 102 | true 103 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 104 | true 105 | 106 | 107 | Console 108 | true 109 | true 110 | true 111 | 112 | 113 | 114 | 115 | Level3 116 | true 117 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions) 118 | true 119 | 120 | 121 | Console 122 | true 123 | 124 | 125 | 126 | 127 | Level3 128 | true 129 | true 130 | true 131 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 132 | true 133 | 134 | 135 | Console 136 | true 137 | true 138 | true 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | Este projeto faz referência a pacotes do NuGet que não estão presentes neste computador. Use a Restauração de Pacotes do NuGet para baixá-los. Para obter mais informações, consulte http://go.microsoft.com/fwlink/?LinkID=322105. O arquivo ausente é {0}. 157 | 158 | 159 | 160 | --------------------------------------------------------------------------------