C/C++ CUDA IA
CUDA – Trabalhando com Memória da placa de vídeo

Neste artigo irei apresentar como trabalhar com a memória da placa de vídeo, na lib CUDA da NVIDIA.

GIT

O exemplo deste projeto pode ser visto no git.

https://github.com/marcelomaurin/CUDA2

Código do projeto

Veremos a seguir o projeto do código, onde em seguida irei comentar o mesmo:


#include <stdio.h>
#include "cuda_runtime.h"

#define TAM_MAP 30

//Kernel
__global__
void projecao_x(int *p_param){
	printf("video: %d\n",*p_param);
	*p_param += 5; /*muda valor*/
}


int main(){
	int valor;
        valor = 10; /* declaração da variavel alocada no pc*/
	cudaDeviceReset();

	int *d_param; /*Declaracao da variavel alocado na placa de video*/


	/*alocação de variaveis da placa de vídeos*/
	cudaMalloc((void**)&d_param,sizeof(int));         /*aloca na cuda o tamanho de 1 inteiro*/


	cudaMemcpy( d_param, &valor,
                              sizeof(int),
	                      cudaMemcpyHostToDevice);

	printf("Chamando hello!\n");
	projecao_x << <1, 1>> >(d_param); /*Criação funcao do processador*/
	cudaDeviceSynchronize();
	cudaMemcpy( &valor, d_param,
                             sizeof(int),
                             cudaMemcpyDeviceToHost);
	printf("pc:%d\n",valor);
	cudaFree(d_param);
	return 0;
}

O que faz o programa

O Programa acima cria uma variavel na placa de vídeo chamada d_param, que é atribuído valor 10 no Desktop.

Depois ao ser chamado a thread, e já na placa de vídeo, seu valor é modificado.

Por fim é transferida para a memória do desktop, e em seguida apresentada no desktop.

Funções importantes

cudaMalloc – É responsável pela criação da variavel na placa de vídeo.

cudaMemcpy – É responsável por copiar os dados de um espaço para outro. Nos dois sentidos DESKTOP -> VIDEO, e VIDEO -> Desktop.

Bom pessoal, espero que tenham gostado deste artigo.

Os próximos espero serem mais emocionantes.

Vida longa e prospera a todos.

Delphi Lazarus MNote2 Mysql pacotes Programação Yocto Project
Exemplo de Pacote debian – Parte 1

O objetivo deste artigo é demonstrar o uso prático de pacotes do linux.

Escrevi alguns artigos, sobre o desenvolvimento de pacotes.

    Inclusive já desenvolvi o MNOTE2, que é um bloco de notas simplificado. Sendo que este projeto, o MNote2, já possui um pacote em seu código.

    O MNote 2 pode ser visto no meu git:

    https://github.com/marcelomaurin/MNote2

    Neste artigo, e nos demais, irei continuar o trabalho apresentado no MNote2, gerando um pacote para um projeto em Lazarus, este projeto consiste em um sistema Cliente/Server, que consome um banco de dados Mysql.

    Este artigo tem relação tambem sobre outro conjunto de artigos:

      A instalação deste tipo de aplicação demanda certo trabalho, que irei abordar durante o ciclo de posts, aqui apresentados.

      Ao fim dos artigoa, pretendo se houver tempo, desenvolver uma imagem iso, usando yocto project, consumindo este pacote. E por fim criando um instalador completo com uma imagem de CD para distribuição. ankara escort çankaya escort ankara escort çankaya escort escort ankara çankaya escort escort bayan çankaya istanbul rus escort eryaman escort escort bayan ankara ankara escort kızılay escort istanbul escort ankara escort ankara rus escort escort çankaya ankara escort bayan istanbul rus Escort atasehir Escort beylikduzu Escort Ankara Escort malatya Escort kuşadası Escort gaziantep Escort izmir Escort

      Para apresentar o trabalho completo, estarei incluindo tudo no git:

      GIT do Exemplo

      https://github.com/marcelomaurin/cliPessoa

      Este é um conjunto de posts, que irei apresentar.

      Serão vários, e por um período longo. Espero que gostem.

      Mysql PHP Programação Python
      Mysql com C/Lazarus/Python/PHP/R – Parte 4

      Neste penultimo artigo, mostrarei como ler JSON com mysql.

      Para não me repetir, pois já apresentei isso anteriormente, no artigo abaixo:

      http://maurinsoft.com.br/index.php/2019/03/09/usar-o-mysql-com-python/
      Usando mysql diretamente com python.

      Resolvi fazer diferente.

      No artigo de PHP, mostrei um web service, que consumi com AngularJS/BootStrap:

      http://maurinsoft.com.br/index.php/2022/02/04/mysql-com-c-lazarus-python-php-r-parte-3/

      Agora neste artigo, vou consumir tambem o web service.

      GIT do Projeto

      https://github.com/marcelomaurin/PythonJS

      Exemplo do Código

      Client WebService

      Neste exemplo, consumimos o web service, onde recebemos o JSON.

      import requests
      import codecs
      import json
      
      api_url = "http://maurinsoft.com.br/exemplos/phpmysql/ws/Pessoa.php"
      response = requests.get(api_url)
      response.headers['content-type']
      #response.encoding
      #response.text
      #print(response.text)
      #response.text.encode('utf-8-sig','ignore')
      #print(response);
      info = ""
      if(response.text!={}):
          dados = codecs.decode(response.text.encode(),'utf-8-sig')
          js = json.loads(dados)
          print(js)
          #print(js.count())
      

      Usando PANDAS

      Neste segundo exemplo, podemos verificar uma ligeira diferença, pois estamos convertendo os dados para Pandas. ankara escort çankaya escort ankara escort çankaya escort escort ankara çankaya escort escort bayan çankaya istanbul rus escort eryaman escort escort bayan ankara ankara escort kızılay escort istanbul escort ankara escort ankara rus escort escort çankaya ankara escort bayan istanbul rus Escort atasehir Escort beylikduzu Escort Ankara Escort malatya Escort kuşadası Escort gaziantep Escort izmir Escort

      from urllib.request import urlopen
      import json
      import pandas as pd
      
      response = urlopen("http://maurinsoft.com.br/exemplos/phpmysql/ws/Pessoa.php")
      json_data = response.read().decode('utf-8-sig', 'replace')
      
      d = json.loads(json_data)
      df = pd.json_normalize(d[0])
      
      print(df)

      Espero ter auxiliado os amigos, neste interessante artigo.

      Artigos relacionados

        Blog C/C++ Dicas PHP Python Sem categoria
        Validação de JSON ONLINE

        Uma boa dica para quem esta montando seus JSONS, é que existem alguns sites que validam seu JSON.

        Um bom exemplo disso é o site:

        https://jsonformatter.curiousconcept.com/#

        Ele permite validar erros de JSON. ankara escort çankaya escort ankara escort çankaya escort escort ankara çankaya escort escort bayan çankaya istanbul rus escort eryaman escort escort bayan ankara ankara escort kızılay escort istanbul escort ankara escort ankara rus escort escort çankaya ankara escort bayan istanbul rus Escort atasehir Escort beylikduzu Escort Ankara Escort malatya Escort kuşadası Escort gaziantep Escort izmir Escort

        Blog Dicas IA Programação Python
        Incluir python no wordpress

        Muitas vezes ao começarmos a apresentar um conceito em uma linguagens, temos a necessidade de apresentar uma interface, que permita a interação do usuário come esta linguagem.

        Para faze-lo com python, sugiro o

        onlinegdb.com

        Este site permite interagir de forma fácil e interativa, não somente com python mas com C, C# entre outras linguagens.

        <iframe height="400px" width="100%" src="https://replit.com/@USERNAME/REPLNAME?<script src="//onlinegdb.com/embed/js/nVoXG1sFy?theme=dark"></script>

        Apresentação do Exemplo:

        Python
        Python – List Comprehensions

        Otimiza código para listas.

        Exemplo de Caso:

        Exemplo1

        Código tradicional

        Código simplificado

        Exemplo2

        Código tradicional

        lista = []
        for numero in range(1,30):
           if numero % 4 = 0:
              lista.append(numero)
        print(lista)

        Código simplificado

        multiplo4 = [numero for numero in range(1,30) if numero % 4 == 0]
        print(multiplo4

        CUDA IA Sem categoria
        Criando CUDA Hello World

        O objetivo deste artigo, é iniciar o programador, no desenvolvimento de aplicações usando GPU da NVIDIA.

        No artigo anterior, eu ensinei a instalar o pacote cuda.

        http://maurinsoft.com.br/index.php/2021/08/27/install-cuda-toolkit-em-xubuntu-18-04/

        Agora iremos desenvolver o nosso famoso hello world.

        Primeiramente, precisamos instalar um outro pacote adicional:

        apt install nvidia-cuda-toolkit

        Este pacote instala o compilador do cuda “nvcc”, que gera o binário para o GPU.

        Criando o Hello World

        Neste exemplo não faremos muita coisa, a não ser chamar nossa primeira rotina que irá processar no GPU.

        GIT

        O projeto esta no GIT e pode ser baixado aqui:

        https://github.com/marcelomaurin/CUDA_HELLO

        Baixando o Projeto

        Para baixar o projeto digite:

        git clone https://github.com/marcelomaurin/CUDA_HELLO.git

        Compilando o projeto

        Para compilar o projeto digite o seguinte comando:

        make

        Segue o print screen da tela

        Compilação do projeto

        Agora iremos rodar o projeto.

        Rodando o projeto

        Analisando o código

        Agora vamos dar uma olhada no fonte:

        #include <stdio.h>
        #include "cuda_runtime.h"
        
        //Kernel
        __global__
        void hello_world(void){
        	printf("hello\n");
        }
        
        
        int main(){
        	printf("Chamando hello!\n");
        	hello_world << <3, 10>> >();
        	cudaDeviceSynchronize();
        	return 0;
        }

        Este pequeno código, chama o hello_world, iniciando 30 threads, onde chama 3 blocos (SMs), com 10 threads cada.

        O comando cudaDeviceSynchronize, realiza a sincronização entre o kernel do linux e as threads do cuda.

        Lembrando que o valor máximo dado por thread é 1024 por bloco SM.

        Referências

        https://cuda-tutorial.readthedocs.io/en/latest/tutorials/tutorial01/

        Documentação NVIDIA da API runtime

        https://docs.nvidia.com/cuda/cuda-runtime-api/modules.html#modules

        POSTGRES
        Instalar PostgreSQL no Linux

        O Procedimento de instalação do postgresql é muito simples:

        apt install postgresql

        apt install postgresql-contrib

        Vídeo apresentando a instalação do PostgreSQL no linux

        Acessando o banco de dados

        Voce instalou o banco, agora iremos acessa-lo.

        O processo de instalação criou o usuário padrão postgres, iremos utiliza-lo.

        su -i -u postgres

        Agora iremos chamar o psql.

        psql

        Para sair \q do postgres.

        Criando contas de usuário e Banco de dados

        Para criar um usuário no banco, deve-se primeiramente entrar com o usuário postgres.

        su -i -u postgres

        Em seguida devemos criar um novo usuário.

        createuser –interactive

        Voce será questionado, ao nome do usuário.

        Criando um banco de dados

        Ainda com usuário postgres, faça:

        createdb <nome do banco>

        Conectando com outro usuário

        psql -d postgres

        Instalando pacote de desenvolvimento

        Entre com o super usuário, e instale o seguinte pacote:

        apt install libpq-dev

        O include ficará em /usr/include/postgresql/libpq

        Referências:

        https://www.digitalocean.com/community/tutorials/how-to-install-postgresql-on-ubuntu-20-04-quickstart-pt

        https://qastack.com.br/programming/3116015/how-to-install-postgresqls-pg-gem-on-ubuntu

        Veja tambem

          cmusphinx IA Programação srvOuve
          Sphinx reconhecimento de audio gravado

          Para este experimento iremos utilizar o seguinte texto:

          https://www.nasa.gov/mp3/586447main_JFKwechoosemoonspeech.mp3

          Trata-se do famoso discurso de J.F. Kenedy, sobre a necessidade de ir a lua.

          A transcrição do audio, pode ser vista neste link.

          JFK RICE MOON SPEECH (nasa.gov)

          Preparação do Arquivo

          Primeiramente precisamos converter o texto em wav.

          ffmpeg -i 586447main_JFKwechoosemoonspeech.mp3 -ar 16000 -ac -1 jfk.wav

          o ffmpeg, faz a conversão do texto no formato desejado para analise. O arquivo é preparado para uma taxa de amostragem de 16k.

          Lendo o arquivo

          pocketsphinx_continuous -infile jfk.wav > jfk.txt

          Segue o que ele ouviu

          i got an r n n n
          not because they are easy one because they are hot
          the car and gold
          wilson to organize then it then asked
          our energy density else
          we got it at our ideas and won that we’re willing to exactly
          while we are unwilling to postpone
          and one nintendo wii in and then look

          Podemos perceber que neste primeiro processo ele ouviu muita coisa errada, porem algumas palavras de cara deram certo. “not because they are easy”. Porem a qualidade do audio comprometeu em muito a leitura.

          O parametro -infile, permite ler o arquivo origem, porem o mesmo precisa ser previamente preparado para leitura deste.

          Pudemos verificar que a qualidade do audio foi importante para refletir a acuracia do audio, iremos pegar algo mais simples agora.

          Segundo exemplo

          Neste segundo exemplo extraímos o audio do seguinte link:

          https://freesound.org/people/tim.kahn/sounds/82986/

          Neste link temos uma contagem regressiva, bem pronunciada de uma voz feminina.

          Iremos baixar o wav e passar um filtro conforme a sintaxe abaixo:

          ffmpeg -i 82986__tim-kahn__countdown.wav -ar 16000 -ac 1 countdown.wav

          Agora iremos processar o arquivo, jogando o resultado no arquivo countdown.txt

          pocketsphinx_continuous -infile 82986__tim-kahn__countdown.wav > countdown.txt

          Temos como conteudo, o seguinte texto:

          ten
          nine
          eight seven
          six five four three two
          wind
          zero

          Podemos perceber que de 10 itens falados, apenas o one, não foi ouvido corretamente.

          Referencias:

          https://freesound.org/browse/tags/english/

          Blog cmusphinx IA Reconhecimento de Voz srvOuve
          CMU Sphinx

          Temos visto uma crescente de IoT desenvolvidos especificamente para reconhecer comandos de seu dono, tais dispositivos, como Alexa ou o Google Home, tem se tornado, bem popular.

          Iremos neste artigo, aprender a criar nosso próprio google home.

          O que é o CMU Sphinx

          CMU Sphinx é uma api de reconhecimento de voz. Ela é bastante consagrada, possuindo muitos projetos atrelados a ela.

          Trato a biblioteca com bastante foco para desenvolvimento IoT, no meu livro que pode ser baixado livremente.

          A grande vantagem desta api, é que ela não necessita de conexão externa ou acesso a internet.

          Uso do CMU Sphinx

          Utilizaremos o CMU Sphinx como base do nosso projeto.

          GIT do Projeto

          cmusphinx · GitHub

          Site do Projeto

          CMUSphinx Documentation – CMUSphinx Open Source Speech Recognition

          Divisão por Projetos

          O CMU Sphinx, possui diversos softwares ou pacotes separados.

          Irei abordar alguns deles, que serão algo deste artigo.

          • sphixbase – Biblioteca base
          • pocketsphinx – Conjunto de fontes e dicionário para reconhecimento de vóz usado no sphinxbase.
          • sphinxtrain – Ferramenta de Traino de modelos acústicos
          • Modelo em portguês

          Instalação do Sphinx

          Pré requisitos de instalação

          Para atender a instalação será necessário as seguintes bibliotecas:

          apt install bison

          apt install libasound2-dev

          apt install swig

          apt install python

          Pré requisitos de instalação

          Instalação do Sphinx pelo gerenciador de pacotes

          A instalação do sphinx pelo gerenciador de pacote, fica bem mais fácil, porem pode ser necessário, atualizar manualmente a versão, pois ninguem garante que o repositório estará atualizado com a ultima versão.

          apt install shinxbase*

          apt install pocketsphinx*

          instalação através do gerenciador de pacotes

          Baixa manual

          Nesta modalidade iremos baixar e instalar o sphinx manualmente em nosso linux.

          Primeiramente iremos baixar o projeto no git

          git clone https://github.com/cmusphinx/sphinxbase.git

          Baixando o projeto do repositório

          digite agora o autogen para gerar os arquivos de configuração.

          ./autogen.sh

          execução do autogen.sh

          Agora, rode o /configure, conforme a linha a seguir:

          ./configure –enable-fixed

          Em seguida compile o projeto:

          make clean all

          make

          make install

          Ao fim do processo, voce terá instalado a base.

          Instalando o Pocket Sphinx

          Bom fizemos a instalação do Sphinxbase, mas iremos agora, adicionar o pacote, necessário para desenvolvimento desktop.

          A instalação tradicional já foi passada na instalação do sphinxbase, por isso iremos omitir.

          Iremos agora orientar na compilação dos fontes.

          Baixe os fontes do repositório:

          git clone https://github.com/cmusphinx/pocketsphinx.git

          Em seguida entre na pasta e realize os seguintes comandos:

          ./autogen.sh

          ./configure

          make check

          make install

          make installcheck

          ldconfig

          Ao fim do projeto, se der certo, irá aparecer o seguinte binário.

          > pocketsphinx_continuous

          Ao tentar rodar, ele irá pedir parametros, vamos testar agora com parametros adicionais.

          pocketsphinx_continuous -adcdev plughw:1,0 -kws_threshold 1e-20 -inmic yes

          Neste modo ele irá ouvir comandos em inglês, fale um simples hello, que voce irá verificar que o mesmo funciona.

          Teste de hello

          Bom, finalizamos este primeiro artigo, no próximo, iremos criar uma aplicação que ouve as pessoas. Sendo nosso hello world em C.

          Espero que tenham gostado.

          Reconhecimento de voz com sphinx