IA PHP Python
Criando um chatbot – Parte 1

Neste artigo iremos dar inicio a criação de um chatbot. Ele estará sendo hospedado em um raspberry pi.

Utilizando PHP, AngularJS e Python.

Este artigo é uma continuação do artigo anterior, que pode servir de referência:

http://maurinsoft.com.br/index.php/2022/05/27/integrando-python-com-php/

Eu apresentarei uma introdução hoje ao Angularjs e o PHP, onde apenas depois mostrarei a parte do Python e do IA propriamente dito.

Este estudo faz parte do estudo da minha Pós graduação na UNINOVE.

Primeiramente iremos escrever o javascript ctlr_test.js



		angular.module("App",[]);
		angular.module("App").controller("TesteCtrl", function ($scope,$http) {
			$scope.app = "Teste Chatbot";
			$scope.texto = "";
			$scope.pergunta = "";
			$scope.msg = "Dúvidas entre em contato com marcelomaurinmartins@gmail.com";
			$scope.resposta = "Sem resposta";
			$scope.url = "http://maurinsoft.com.br/python/runpy.php?pergunta?"+$scope.pergunta;

			$scope.IncluiResposta = function() {
			   $scope.texto = $scope.texto . $scope.resposta;
			}
			$scope.displayResposta = function() {
				$http.get("http://maurinsoft.com.br/python/runpy.php?pergunta="+$scope.pergunta)
				.success(function(data)
				{
					//console.log(data);
					$scope.data = data.rs[0];
					$scope.resposta = data.rs[0].resposta;
					$scope.texto = $scope.texto + "Pergunta:"+$scope.pergunta+'\n';
					$scope.texto = $scope.texto + "Resposta:"+$scope.resposta+'\n';
					$scope.msg = "Resposta obtida!";
				})
				.error(function(erro)
				{
					//console.log(erro);
					$scope.msg = "Pesquisa retornou vazia";
					$scope.data = null;
				})
			}
		});

Nele chamamos a função IncluiResposta , que envia a resposta para o web service(ws), que recebe a resposta e devolve para o browser.

Ao enviar a solicitação, a mesma é processada pelo ws, que devolve um json, na figura abaixo, vemos a execução direta do json, simulando a pergunta do browser.

Depois iremos criar o index.php , que monta uma interface para ser mostrada na tela.

<!DOCTYPE HTML>
	<HTML  ng-app="App" LANG="PT-BR">
	<head>
		<meta charset="UTF-8"/>
		<meta name="description" content="Maurinsoft"/>
		<meta name="viewport" content="width=device-width, initial-scale=1"/>
		<title>Teste de Chatbot</title>

		<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>

		<!-- jQuery library -->
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>



		<link rel="stylesheet" href="../../libs/bootstrap/css/bootstrap.css"/>
		<link rel="stylesheet" href="../../libs/bootstrap/css/bootstrap-theme.min.css"/>
		<link rel="stylesheet" href="style.css"/>
		<script src="https://code.angularjs.org/1.6.4/angular.js"></script>
		<script src="js/ctlr_test.js"></script>

	</head>
	<body ng-controller="TesteCtrl">
		<video autoplay loop poster="img/logo.jpg" class="bg_video">
			<source src="video/fundo.webm" type="video/webm">
			<source src="video/fundo.mp4" type="video/mp4">
		</video>
		<div class="container">
			<!--Caixa titulo -->
			<div class="row  borda_container">
				<div class="col-xs-2 ">
					<img src="img/logo.png" alt="Tutorial de CSS" title="Logo do CSS"  width="100" height="100"/>
				</div>
				<div class="col-xs-10 Logo ">
					<h1 class="titulo">{{app}}</h1>
				</div>
			</div>
			<div class="row separacao">
			</div>

			<!--Login -->
			<div class="row">

			</div>

			<!--Menu Item-->
			<div class="row">
					<div class="col-xs-12 menu">
						<div class="row">
						  <h4 class="menu_titulo">Conversa</h4>
						</div>

						<div class="row container col-xs-12">
						   <textarea type="text"  style=" top:500px;height:200px;width:600px; left:470px; overflow:hidden;" class="col-md-10" >{{texto}}</textarea>
						</div>
						<div class="info_help">
					   	 <div class="row col-md-12">
						    <h4>Perguta</h4>
						 </div>
						 <div class="row container">
						    <div class="col-md-8">
						      <input type="text" value="{{pergunta}}" ng-model="pergunta" name="Pergunta">
						    </div>
						    <div class="col-md-2">
						     <input type="submit" value="Enviar" ng-click="displayResposta()">
						    </div>
						 </div>
						</div>
					</div>
			</div>
		</div>
		<div class="row rodape_container">
			  <div class="row">
			  <center>{{msg}}</center>
			  </div>

		</div>
		<script type="text/javascript" src="../../libs/bootstrap/js/bootstrap.js"></script>
	</body>
	</html>

Chamada do lado do WS

No webservice, o python é chamado, que realiza toda a analise da pergunta.

Fonte do runpy.php, que é o web service.

<?php
    /*phpinfo();*/
	/*Registra webservice para processamento de jobs*/
	ini_set('display_errors', 'ON');
	error_reporting(E_ALL);

	header('Content-Type: application/json');  // <-- header declaration

	include "/var/www/html/ws/connectdb.php";

	//header('Cache-Control: no-cache, must-revalidate');




$data = json_decode(file_get_contents("php://input"));

if($data){
		$pergunta = $dbhandle->real_escape_string($data->pergunta);
} else {
		$pergunta = $dbhandle->real_escape_string($_GET['pergunta']);
}


$json =  '{"rs":[';
if($pergunta){
  $command = escapeshellcmd('/var/www/html/python/nlp.py "'.$pergunta.'" > /var/log/proclog.log');
  $resposta = shell_exec($command);
  $resposta = str_replace (array("\r\n", "\n", "\r"), ' ', $resposta);

  if($resposta){
     $json = $json  . '{';
     $json = $json  .  '"pergunta":"'.$pergunta.'",';
     $json = $json  .  '"resposta":'.$resposta;
     $json = $json  .  '}';
  } else {
	 $json = $json  . '{';
	 $json = $json  .  '"pergunta":"'.$pergunta.'",';
     $json = $json  .  '"resposta":"'.'sem resposta'.'"';
	 $json = $json  .  '}';
  }
} else {
	$json = $json  . '{';
	$json = $json  .  '"pergunta":"'.$pergunta.'",';
    $json = $json  .  '"resposta":"'.'sem resposta'.'"';
	$json = $json  .  '}';
}
$json = $json  .  ']}';

echo $json


?>

O armazenamento das solicitações, podem ser gravadas pelo webservice, que permite gravar as respostas, para aprimoramento posterior.

Fonte do nlp.py, que gera a analise em python.

#!/usr/bin/env python3

#import pandas as pd
import sys
import numpy as np
import math
import time
import re
import random


pergunta = f'"{sys.argv[1]}"'

resposta = "Desculpe, não achei uma resposta válida"

#Iniciando o processo de analise de dados



#Devolvendo o modelo para o ws
resposta= "\"%s\""%(resposta)
print(resposta)

Neste exemplo simples porem integral, podemos notar o processo completo de desenvolvimento de chatbot, sem a implementação da parte do python, que abordaremos nos próximos tópicos.

URL do projeto

http://maurinsoft.com.br/index.php/2022/06/30/chatbot-no-wordpress/

IA PHP Python
Integrando Python com PHP

Neste artigo abordarei como rodar rotinas em python integrado com PHP.

Para exemplificar este projeto, estarei criando uma pagina PHP, conforme se segue:

<?php
    /*phpinfo();*/
	/*Registra webservice para processamento de jobs*/
	ini_set('display_errors', 'ON');
	error_reporting(E_ALL);

	include "/var/www/html/ws/connectdb.php";

	//header('Cache-Control: no-cache, must-revalidate');


$data = json_decode(file_get_contents("php://input"));


$data = json_decode(file_get_contents("php://input"));
if($data){
		$pergunta = $dbhandle->real_escape_string($data->pergunta);
} else {
		$pergunta = $dbhandle->real_escape_string($_GET['pergunta']);
}



if($pergunta){
  $command = escapeshellcmd('/var/www/html/python/nlp.py "'.$pergunta.'" > /var/log/proclog.log');
  $resposta = shell_exec($command);

  if($resposta){
  echo '{"rs":[';
  echo '{';
  echo '"pergunta":'.$pergunta.',';
  echo '"resposta":'.$resposta;
  echo '}]}';
  } else {
    echo "sem resposta";
  }
} else {
	echo "sem pergunta";
}


?>

Neste programa chamamos o comando shell_exec para executar o comando python.

Ao chamar o programa python, devemos chamar, conforme apresentado.

#!/usr/bin/env python3

#import pandas as pd
import sys


pergunta = f'"{sys.argv[1]}"'

resposta= '"ok"'
print(resposta)

O detalhe que é importante é o comando /usr/bin/env chamando o python, que é destinado a transformar em um script python.

Para finalizar segue o link do url de teste:

http://maurinsoft.com.br/python/runpy.php?pergunta=teste2

O resultado é um JSON, conforme apresentado:

{"rs":[{"pergunta":teste2,"resposta":"ok" }]}

Instalando pacotes

Para adicionar pacotes basta rodar como administrador o comando:

pip3 install numpy

Exemplo de instalação do numpy

Blog Dicas Varejo
Competir ou Cooperar?

Outro dia, fui questionado por um entrevistador:

Voce tem uma empresa, voce desenvolve programas Open Source no meu segmento.

Porque deveria contratar um concorrente?

Naquele momento, percebi que minhas intensões não estavam sendo claras. E resolvi publicar este artigo.

Projeto Open Source nunca concorre com aplicações comerciais. Eu nunca ví, em meus 24 anos de carreira, uma empresa que faliu por conta de um software open source.

A única coisa que ví, foi a Microsoft, que depois de muito sofrimento, aderiu ao mundo open source. Hoje está ganhando dinheiro com Linux.

Então, se voce souber de alguma empresa que faliu por conta de um projeto open source, é bom falar agora, ou cale-se para sempre.

Software Open Source, são em sua essencia ferramentas de fomento e desenvolvimento.

Quando desenvolvemos um projeto Open source estável e seguro, este, cria um leque de possibilidades e serviços que qualquer empresa pode agregar.

De fato, projetos open source criam oportunidades, não as tira.

O Linux é o maior CASE do mundo open source, mas não é o unico.

Existem vários, como:

  • APACHE
  • Blender
  • Docker
  • GIT
  • KUBERNETES
  • R
  • SUGARCRM

Entre tantos outros.

O Apache mesmo, fomentou e desenvolveu diversos serviços e produtos. Sendo a base para produtos incriveis pagos.

VAREJO OPEN SOURCE

Poucas ações tem contríbuido mais com o varejo que o ACBR, projeto Open Source destinado a alavancar empresas no desenvolvimento de soluções para PDV e Self Checkout.

Conheço grandes player que trabalhei que a base de funcionamento do seu PDV é baseado no ACBR.

Apesar de termos um grande player, como o ACBR, existem poucas soluções Open Source destinadas ao Varejo.

Vamos falar de minhas soluções

Os projetos que desenvolvo, são sempre atrelados a Hardware, minha paixão.

Sempre que criei uma lib, ou desenvolvo conexão com um hardware, este pode e deve ser integrado, dentro de uma cadeia ou software house.

Vamos falar sobre alguns projetos:

O srvCP é um software (servidor) destinado a integrar com equipamentos de consulta de preço. Este por si só precisa de uma base de produtos, que deve ser integrada de um PDV ou CRM. Dificilmente um cliente entrega meu software sem ter um PDV ou CRM em sua loja.

Pois este precisa de uma base de produtos saneados.

Então, o srvCP não prejudica desenvolvedores de software, muito pelo contrário, agrega uma oportunidade, permitindo agregar o benefício de uso de leitores de preço sem a necessidade de desenvolvimento e manutenção deste equipamento.

Agora iremos falar sobre outro projeto o RFID, este projeto destinado a criar um leitor de RFID de mesa, não tem o objetivo de fornecer equipamentos para o varejo, ou atacadistas. Pois o seu desenvolvimento implica em assemblagem de equipamentos eletrônicos, bem como impressão. O que por fim acaba saindo mais caro que seus equipamentos industriais. Porem, este pode ser usado em ambientes de desenvolvimento, e equipes de TI, permitindo a simulação em seu PDV de cartões. Sem a real necessidade de compra de seus pares industrializados. O uso deste, permite aprimorar e desenvolver conceitos na indústria de software.

Outro exemplo, é o software de emissão de etiqueta, este projeto permite criar um serviço de impressão de etiquetas, permitindo a integração com o CRM, através de uma web api. Permitindo imprimir etiquetas de gondolas de forma fácil e transparente.

Por fim, iremos falar sobre o projeto Leitor Balança, este projeto visa criar um serviço de leitura de balança, que permite através de uma Web API ler o peso.

Vejam que os projetos Open Source são integrados e permitem integração, retirando das software houses a necessidade de desenvolvimento destes equipamentos, deixando elas se preocupar com seu real core business.

Vemos aqui, que projetos open source, são parceiros dos empreendedores, pois criam oportunidades de negócio, permitindo que estes foquem no que realmente é importante.

Com este texto, espero muito que as software house, percam o medo do desenvolvimento open source, e abracem a causa, pois este agrega oportunidades de negocio. Alavancando o negócio delas.

Grande abraço.

Marcelo Maurin Martins

Pai de 2 meninas, desenvolvedor

e apaixonado pelo Open Source.

srvCP Varejo
srvCP Versão 0.6

Esta versão veio com diversas correções e ajustes.

Itens adicionados:

  • Melhoria no controle de logs
  • Retirada dos CALLBACKs
  • Diminuição dos tempos dos timers
  • Correção na chamada de função de busca de dados.
  • Diversos ajustes em funções internas..

Todas as modificações visam garantir maior estabilidade da aplicação.

Porem ainda foram encontrados travamentos, porem com frequencia diminuída.

Estamos analisando os problemas a fim de corrigir o mesmo.

IA pós graduação Python TRANSFORMERS
Instalando Tensorflow no Anaconda

Pré requisitos de Instalação do Tensorflow

Usei o Anaconda Navigator 2.3.1

Entre no anaconda, e abra um terminal na base (root)

Vamos criar agora um ambiente chamado tensorflow_env:

conda create --name tensorflow_env python=3.8

Em seguida, selecione o ambiente que vc acabou de criar :

conda activate tensorflow_env

Instalando pacotes

Agora começamos a instalar os pacotes.

Temos duas versões com uso de NVIDIA e Normal

Tensor Flow normal

conda install tensorflow

Demora vários minutos para terminar a instalação.

Tensor Flow com NVIDIA Drivers

Caso queira usar a NVIDIA, faça a seguinte instalação.

conda install tensorflow-gpu

Instalando Keras

Agora iremos instalar o Keras

conda install keras

Pronto voce fez a instalação básica dos itens.

Testando

Para testarmos o ambiente precisamos instalar o jupyter Notebook, conforme apresentado na foto.

Agora iremos rodar o ambiente pressionando o botão Launch.

Crie uma nova pasta tensorflow, e em seguida crie um arquivo com o mesmo nome.

Copie o seguinte código:

import tensorflow as tf
print(tf.__version__)

import keras
print(keras.__version__)

Rode e veja o resultado.

Vai dar um erro:

Não desespere, pois será preciso atualizar o numpy, não é necessário instalar o numpy aqui, o melhor caminho é o que irei indicar a seguir.

Entre novamente no terminal. E digite:

conda install numpy=1.19

Feche todas as telas do Jupyter Notebook, será necessário reiniciar, para reconhecer a atualização do numpy.

Chame novamente o programa salvo, rodando o mesmo.

srvCP
Versão 0.5 do srvCP

Melhorias na versão 0.5

Melhoria no retorno de logs

Retorno de logs

Correções

Cadatro de terminais

Esta versão traz a correção do cadastro automático do terminal.

Identificamos um erro no cadastro automático de terminais.

Cadastro de terminais

Nesta versão, o cadastro automático de terminais foi corrigido, e ao identificar um novo terminal, o servidor automáticamente cadastra o terminal.

Em breve lançaremos a versão 0.6, rumo a um produto 1.0.

Entrem em contato conosco caso precisem de suporte.

marcelomaurinmartins@gmail.com

srvCP
srvCP – versão 0.4

Estamos preparando a versão 0.4, com ela lançaremos as seguintes features:

  • Operação de limpeza de banco de dados.
  • Melhoria do SETUP, campo dll tanca
  • Melhoria do SETUP, campo dll sqlite
  • Melhoria do SETUP, campo database
  • Correção caminhos relativos
  • Correção do Label tanca.
  • Correção de Instalador

Lembrando que a versão 0.4 é uma versão pré release.

Agradecemos ao André Vieira nos testes e dicas dadas.

É com a ajuda da comunidade, que evoluiremos o software open source.

Próximos passos:

Estamos preparando para lançar uma versão sem DLL do TANCA, compatível com Linux, Arm, Windows e MAC.

srvCP
Correção de instalação srvCP 0.3

Foi encontrado um bug, relacionado a instalação do srvCP versão 0.3, o procedimento de correção é o que se segue:

A versão 0.3 do instalador possui um problema no mesmo, para corrigir siga o procedimento abaixo:

  1. Entre na pasta C:\Program Files (x86)\srvCP
  2. Crie a pasta src, conforme figura abaixo:

3. Mova o executavel srvCP.exe para esta pasta.

Execute novamente o executavel, o banco de dados será encontrado.

O problema será resolvido na versão 0.4.

Sem categoria
Instalar o Kaldi

Oque é o Kaldi é um conjunto de ferramentas de reconhecimento de voz para texto.

Kaldi suporta várias técnicas diferentes com recursos de transformação lineares e redes profundas.

Kaldi é uma poderosa ferramenta de manipulação de voz, e esta em pleno desenvolvimento.

Instalação do Kaldi

O processo de instalação de um aplicativo pode variar em função da distribuição e dos pacotes instalados em sua máquina.

Estou utilizando um Ubuntu, e realizei diversos testes, podendo alguns passos variarem ligeiramente conforme seu ambiente.

Pré requisitos

Existem uma série de pacotes que precisam ser instalados.

O primeiro passo é fazer a instalação dos seguintes pacotes:

apt install libfst-dev libfst-tools libfst8 libfst8-plugins-base

Baixar o Kaldi

Agora instalados os pré requisitos iniciais, iremos fazer a baixa dos pacotes.

git clone https://github.com/kaldi-asr/kaldi.git kaldi –origin upstream
cd kaldi

baixando o Kaldi

Agora iremos atualizar com o comando:

git pull

Compilação de ferramentas

Vá na pasta do kaldi, na pasta /kaldi/tools

Execute o make, conforme o exemplo abaixo:

make all

O software irá compilar uma série de pacotes, conforme apresentado a seguir.

compilando as ferramentas.

Configurando os scripts

Agora que fizemos a configuração, é hora de montar o ambiente, digite na pasta ./kaldi/src ,o seguinte comando:

./configure –shared

Este procedimento irá gerar o kaldi.mk, que conterá o makefile de compilação.

Pode ser necessário alterar o nivel de depuração:

o Padrão é -O1, porem pode ser modificado.

Veja no link abaixo, informações mais detalhadas:

https://kaldi-asr.org/doc/build_setup.html

maurinsoft.com.br