segunda-feira, 18 de julho de 2016

Usando Sqlite e node.js

Usando Sqlite e node.js
“SQLite é uma biblioteca em linguagem C que implementa um banco de dados SQL embutido.” (Wikipedia) Você não precisa de um servidor banco de dados rodando na sua máquina para poder usar o sqlite, o que facilita a vida do programador, além de ser um banco de dados leve.
Para se usar sqlite em node.js devemos fazer o uso de pacote ou módulo que nos ajude, existem vários. Um dos mais conhecidos é o node-sqlite3, que já usei e é realmente muito bom, mas não me agradei da forma com que ele retorna os dados. Por isso fiz o meu próprio módulo para sqlite, que é o sqlite-sync.js.

Instalando

A biblioteca está disponível no NPM e você pode baixa-la e instala-la com o seguinte comando:
npm install sqlite-sync

Usando

O uso do sqlite-sync é bem simples, ele foi desenvolvido para funcionar de forma síncrona ou assíncrona, e a conexão com o banco de dados é totalmente síncrona, por isso o nome. Veja como usar:

Fazendo consulta

No sqlite-sync existem várias formas de se fazer um SELECT (veja aqui), a mais simples é esta:

Inserindo dados

Assim como a consulta, a inserção pode ser feita de várias maneiras (veja aqui), a mais simples é esta, onde eu passo apenas o nome da tabela e os dados a serem inseridos em forma de objeto JSON, sendo que as chaves do objeto devem ter os mesmos nomes das colunas da tabela:

Update

Como você já deve imaginar, para se fazer um UPDATE existem várias maneiras de fazer, veja aqui, e mais simples é esta, onde passo por parâmetro o nome da tabela, os campos a serem alterados, e o campo de referencia que na maioria das vezes é a chave primária da tabela. Veja:

Síncrono e Assíncrono

sqlite-sync tem este nome, mas funciona tanto de forma síncrona como de forma assíncrona para dar ao desenvolvedor a oportunidade de escolher. É possível executar um SQL e receber o retorno em uma variável, ou então passar como parâmetro uma função de retorno (callback), veja exemplos abaixo de como fazer um e outro.

Detecção de rosto em fotos com JavaScript

Detecção de rosto em fotos com JavaScript
Tracking.js é uma biblioteca que usa diversos algoritmos e técnicas de computação com JavaScript, sendo capaz de detectar cores, faces e até outros objetos, usando técnicas como Viola-Jones.
Esta biblioteca pode ser usada para marcação de amigos em fotos como no Facebook ou para contagem de veículos que transitam por uma via. Aqui faremos um exemplo de detecção de rostos em imagens.

Instalando

Para começar crie uma pasta onde estará nosso exemplo, abra o prompt de comando ou bash e navegue até essa pasta usando o comando cd.
cd c:/caminho/da/pasta
Depois use o NPM para instalar o pacote.
npm install tracking
Você precisa ter o Node.js instalado para que isso funcione.

Imagem

Baixe da internet uma imagem qualquer que contenha rostos de pessoas bem expostos e salve na pasta assets com o nome img1.jpg.
Pode baixar esta se preferir:
Happy friends

Usando

Depois disso crie um arquivo HTML com o nome index.html, que deverá ficar dessa forma:
Linha 5: importamos o arquivo JavaScript do tracking.js
Linha 6: importamos o arquivo JavaScript que contém a definição do classificador do objeto procurado, que é definido pelo padrão haarcascade de forma minimizada. Se você tem interesse em identificação de objetos em fotos e vídeos é interessante que estude também este padrão.
Linha 24: Criamos o tracker, ou o marcador, e informamos que queremos marcar a face no array passado por parâmetro. Se você deseja marcar mais objetos, você deve importar os arquivos que contém suas referências como fizemos na linha 6.
Linha 26: Informamos em qual elemento DOM os objetos serão procurados.
Linhas 27 a 31: Ao ser identificado um objeto é chamado um evento track, e nele chamaremos a função plot que irá desenhar as retas na tela.
Linhas 32 a 41: A função plot desenha os retângulos que marcam os objetos identificados.

Resultado

Você terá o seguinte resultado:
Sem título-2.fw
Note que a face da ultima mulher não foi marcada, os motivos podem ser muitos, um deles é a inclinação do rosto dela na diagonal. Mas conhecendo o padrão haarcascade e o conceito Viola-Jones você pode tratar isso facilmente.