Java e Opencv

25 respostas
P

Pessoal, eu gostaria de tirar uma duvida com vocês…

Alguem já mexeu, ou sabe o caminho, ou até se existe a biblioteca OPEN CV para JAVA…

Meu professor de computação grafica falou que existe mais eu não consegui encontrar nada…

Gostaria de deixar minhas imagens (fotos) em escala cinza e depois preto e branco…

Alguem sabe como fazer, se é a OPEN CV que faz isso mesmo, ou não…

Se alguem pudesse me dar alguma dica ficaria muito feliz…

Outra duvida tosca minha é para fixar uma casa decimal haha…

Minha variavel é do tipo double só que aparece no meu textfield com muitas casas decimais… eu coloquei o codigo assim:

txtF11.setText(String.valueOf((aux11*temp11)+(aux12*temp21)));

txtF11 é o nome do meu textfield, só que eu gostaria que ele ficasse aparecendo só com duas casas decimais…

Me falaram que dava para mexer nas propriedades dele, mais nada consegui…

Se alguem pudesse me ajudar nessas duvidas, sei que o da imagem é mais trampo, mais se alguem puder me dar uns exemplos, de codigos, umas dicas

um forte abraço e fiquem com Deus!!!

25 Respostas

V

Em primeiro lugar, evite postar tópicos usando APENAS LETRAS MAIÚSCULAS.

Biblioteca java com opencv: http://code.google.com/p/javacv/

Para limitar o número de casas decimais, use o String.format:

Se você só quer deixar as imagens em escala de cinza, usar a OpenCV é como usar um canhão para matar uma mosca. Você pode fazer isso com o próprio Java2D:

BufferedImage imagem = ImageIO.read(new File("imagem.png")); BufferedImage pretaEbranca = new BufferedImage(imagem.getWidth(), imagem.getHeight(), BufferedImage.TYPE_BYTE_GRAY); Graphics2D g2d = pretaEBranca.createGraphics(); g2d.drawImage(imagem, 0,0, null); g2d.dispose(); ImageIO.write(pretaEBranca, "png", new File("imagempb.png"));

Você pode fazer depois a binarização usando um algorítmo de threshold simples, a menos que seu professor exija algo mais sofisticado, o que não deve ser o caso.

A opencv tem diversas operações. Além de conversão em diferentes formatos, ela também possui operadores morfológicos (dilatação, erosão, abertura, fechamento, reconstrução), filtros (bordas, suavização, etc) e até funções para segmentação (knn, svn, etc) e rastreamento. É uma blioteca muito completa e extremamente otimizada.

V
Segue um exemplo do programa, fazendo a conversão para escala de cinza e limiriazação simples:
package br.com.guj;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Imagem {

	public static void main(String[] args) {
		JFileChooser chooser = new JFileChooser();
		chooser.setFileFilter(new FileNameExtensionFilter("Image files", "png",
				"jpg", "bmp"));
		chooser.setAcceptAllFileFilterUsed(false);

		if (chooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION)
			return;

		try {
			// Carregamos a imagem do disco
			File img = chooser.getSelectedFile();
			BufferedImage image = ImageIO.read(img);

			// Geramos uma versão em escala de cinza
			BufferedImage gray = toGrayscale(image);
			ImageIO.write(gray, "png", newFile(img, "gray"));

			// Geramos uma versão binária a partir da versão em escala de cinza.
			BufferedImage binary = toBinary(gray, 128);
			ImageIO.write(binary, "png", newFile(img, "binary"));
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Erro ao processar imagem.");
			e.printStackTrace();
		}
	}

	/**
	 * Converte a imagem para escala de cinza.
	 * 
	 * @param image Imagem a ser convertida
	 * @return a Imagem convertida.
	 */
	private static BufferedImage toGrayscale(BufferedImage image)
			throws IOException {
		BufferedImage output = new BufferedImage(image.getWidth(),
				image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
		Graphics2D g2d = output.createGraphics();
		g2d.drawImage(image, 0, 0, null);
		g2d.dispose();
		return output;
	}

	/**
	 * Converte a imagem para binário usando um algorítmo de threshold simples.
	 * Tudo que estiver abaixo do threshold será convertido para preto. Acima ou
	 * igual ao threshold será convertido para branco.
	 * 
	 * @param image
	 *            Imagem a ser convertida (apenas o canal r será considerado).
	 *            Use uma escala já transformada em escala de cinza para
	 *            melhores resultados.
	 * @param t
	 *            Valor do threshold.
	 */
	private static BufferedImage toBinary(BufferedImage image, int t) {
		int BLACK = Color.BLACK.getRGB();
		int WHITE = Color.WHITE.getRGB();

		BufferedImage output = new BufferedImage(image.getWidth(),
				image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);

		// Percorre a imagem definindo na saída o pixel como branco se o valor
		// na entrada for menor que o threshold, ou como preto se for maior.
		for (int y = 0; y < image.getHeight(); y++)
			for (int x = 0; x < image.getWidth(); x++) {
				Color pixel = new Color(image.getRGB(x, y));
				output.setRGB(x, y, pixel.getRed() < t ? BLACK : WHITE);
			}

		return output;
	}

	/**
	 * Gera um nome de arquivo baseado no nome fornecido. O arquivo terá o mesmo
	 * caminho do nome original.
	 * <p>
	 * Exemplo: Se o arquivo for c:\fish.png e a string de detalhe for "gray" a
	 * saída será c:\fish-gray.png
	 * 
	 * A extensão final sempre será png.
	 * 
	 * @param file Arquivo original
	 * @param detail String de detalhe
	 * @return O nome do arquivo.
	 */
	private static File newFile(File file, String detail) {
		return new File(file.getParentFile(), file.getName().substring(0,
				file.getName().indexOf("."))
				+ "-" + detail + ".png");

	}

}

Em anexo, as imagens geradas pelo programa (usei threshold de 175, e não 128, para obter um resultado melhor na binarização).
Se quiser conhecer um processo para descobrir o threshold automaticamente, procure pelo algoritmo de otsu.





P

Amigo, eu já consegui criar e fazer o exemplo que vc me passou…
Tem jeito de fazer assim: eu criei uma imagem pelo qual eu guardo em banco (BINARY)

byte[] imageDataByteArray = new byte[(int) arquivo.length()];
                   InputStream is = new FileInputStream(arquivo);
                   is.read(imageDataByteArray);
                   is.close();

Tem jeito desse binario ou da imagem que pego do arquivo do PC criar a imagem em binario e em cinza para jogar no banco ao inves de salvar???

P

2

A

Ola Gostaria de saber como tirar uma foto da webcam utilizando o framework opencv.
Desde ja obrigado.

V
Basta usar a classe VideoCapture. Esse programa, presente nos exemplos da opencv, apresenta o vídeo da câmera e captura um screenshot sempre que o espaço é pressionado:
/*
 * starter_video.cpp
 *
 *  Created on: Nov 23, 2010
 *      Author: Ethan Rublee
 *
 * A starter sample for using opencv, get a video stream and display the images
 * easy as CV_PI right?
 */
#include "opencv2/highgui/highgui.hpp"
#include &lt;opencv2/objdetect/objdetect.hpp&gt;
#include &lt;opencv2/imgproc/imgproc.hpp&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;stdio.h&gt;

using namespace cv;
using namespace std;

//hide the local functions in an anon namespace
namespace
{
void help(char** av)
{
  cout &lt;&lt; &quot;\nThis program justs gets you started reading images from video\n&quot;
    &quot;Usage:\n./&quot; &lt;&lt; av[0] &lt;&lt; &quot; &lt;video device number&gt;\n&quot; &lt;&lt; &quot;q,Q,esc -- quit\n&quot;
      &lt;&lt; &quot;space   -- save frame\n\n&quot;
      &lt;&lt; &quot;\tThis is a starter sample, to get you up and going in a copy pasta fashion\n&quot;
      &lt;&lt; &quot;\tThe program captures frames from a camera connected to your computer.\n&quot;
      &lt;&lt; &quot;\tTo find the video device number, try ls /dev/video* \n&quot;
      &lt;&lt; &quot;\tYou may also pass a video file, like my_vide.avi instead of a device number&quot;
      &lt;&lt; endl;
}

int process(VideoCapture& capture)
{
  std::vector&lt;DataMatrixCode&gt; codes;
  int n = 0;
  char filename[200];
  string window_name = &quot;video | q or esc to quit&quot;;
  cout &lt;&lt; &quot;press space to save a picture. q or esc to quit&quot; &lt;&lt; endl;
  namedWindow(window_name, CV_WINDOW_KEEPRATIO); //resizable window;
  Mat frame;
  for (;;)
  {
    capture &gt;&gt; frame;
    if (frame.empty())
      continue;
    cv::Mat gray;
    cv::cvtColor(frame,gray,CV_RGB2GRAY);
    findDataMatrix(gray, codes);
    drawDataMatrixCodes(codes, frame);
    imshow(window_name, frame);
    char key = (char) waitKey(5); //delay N millis, usually long enough to display and capture input
    switch (key)
    {
    case 'q':
    case 'Q':
    case 27: //escape key
      return 0;
    case ' ': //Save an image
      sprintf(filename, &quot;filename%.3d.jpg&quot;, n++);
      imwrite(filename, frame);
      cout &lt;&lt; &quot;Saved &quot; &lt;&lt; filename &lt;&lt; endl;
      break;
    default:
      break;
    }
  }
  return 0;
}

}

int main(int ac, char** av)
{

  if (ac != 2)
  {
    help(av);
    return 1;
  }
  std::string arg = av[1];
  VideoCapture capture(arg); //try to open string, this will attempt to open it as a video file
  if (!capture.isOpened()) //if this fails, try to open as a video camera, through the use of an integer param
    capture.open(atoi(arg.c_str()));
  if (!capture.isOpened())
  {
    cerr &lt;&lt; &quot;Failed to open a video device or video file!\n&quot; &lt;&lt; endl;
    help(av);
    return 1;
  }
  return process(capture);
}
A

Muito Obrigado mesmo!!! ja aproveitando seus conhecimentos, mais uma duvida, é possivel implementar um filtro pela foto utilizando essa tecnologia?

V

O que você quer dizer com “um filtro pela foto”?

A

Desculpa me expressei mal, quis dizer…reconhecimento facial o que ja tinha no forum http://www.guj.com.br/java/232668-deteccao-e-reconhecimento-de-faces.
Valeu.

A

Só to achando meio complicado para configurar o opencv no dev.

V

Espero que por “dev” você não queria dizer o “devcpp”.

Se for, provavelmente o opencv não vai funcionar lá. O devcpp é uma IDE antiga (a última versão saiu há 6 anos atrás), que vem com uma versão pré-histórica do MinGW.
A Opencv 2.0 usa muitos recursos novos de templates.

Se quiser uma IDE portável, use o QT Creator:
http://qt.nokia.com/products/developer-tools/

E se quiser fazer para Windows, use o Visual Studio Express:
http://www.microsoft.com/express

Se precisar de uma IDE pequena e portátil como o devcpp, use o Code::Blocks:
http://www.codeblocks.org/

Só não use o DevCpp. É sempre problemático trabalhar com material de museu.

C

Oi, estou precisando utilizar reconhecimento facial em uma aplicacao.
A ideia seria utilizar a captura da imagem pela webcam e analisar as informacoes da expressao facial tipo boca, olhos, sombrancelha…
É possivel utlizar a javacv para isso? Seria necessario utilizar algum algoratismo?
Obrigada

V

Dá para fazer, mas não é trivial. Você terá que escrever seu próprio algorítmo.
Deve ter soluções dessas prontas.

P

Olá pessoal, tudo bem?

só aproveitando o tópico… tenho uma curiosidade…

um amigo meu falou que o JavaCV não funcionava muito bem e era bem mais complicado usá-lo, e que eu era pra usar a versão em C/C++ mesmo… mas tem um problema nisso, não entendo nada de C e no projetinho que estou pensando em fazer gostaria de trabalhar com Java, até pq envolve GlassFish e também Android… a minha dúvida seria: Essa informação procede? é mesmo complicado usar JavaCV ou não tem nada a ver?

Explicando um pouco o projeto: gostaria de identificar padrões de cores em uma imagem, quando me refiro a padrões de cores, quero dizer que terei basicamente 3 cores em uma imagem que gostaria de identificar… e a forma com que elas se apresentam podem ser distintas, mas de forma geral são praticamente circulares, mas detalhe: geralmente uma dentro da outra. O que eu preciso é: 1) identificar esse circulo de determinada cor 2) conseguir o perímetro dele 3) em cima do perímetro calcular a área e achar o centro desse perímetro

seria muito complicado conseguir isso?

agradeço a atenção

V

Primeiro de tudo. Não existe “C/C++”. O que existem são duas linguagens:

  • Linguagem C: Que usa programação estruturada. Para ele existe a OpenCV 1
  • Linguagem C++: Que suporta os paradigmas estruturado, orientado a objetos, genérico e funcional. A OpenCV 2 é escrita em C++.

O primeiro passo seria escolher em qual das duas você vai trabalhar (eu prefiro a versão em C++).

A OpenCV em Java roda através de um binding, fora da JVM. Não é muito mais difícil de usar do que a versão em C++, mas não espere a mesma portabilidade de uma VM java padrão (não que o Java tenha lá muita portabilidade).
A JavaCV também contém integração com outras APIs além da OpenCV, como o ARToolkit, para realidade aumentada.

Se isso é difícil ou não, depende do que é sua imagem. São imagens geradas no computador? Ou são fotos?
Se forem imagens digitais, é tão fácil que nem mesmo da opencv você realmente precisaria. Se forem fotografias, aí o buraco é bem mais embaixo. Afinal, é difícil dizer o que é uma cor e o que é um círculo, quando as condições de iluminação, ângulos e oclusão variam.

P

Obrigado Vini pelos esclarecimentos quando ao OpenCV, nunca trabalhei com imagens e com ele…

São imagens geradas. São bem basicas… tem um fundo padrão variando apenas em tons de cinza e as cores por cima. Cores bem definidas, não transparentes e não variando em tonalidade.

Tenho dois azuis (escuro e claro), rosa e branco… geralmente formam formas circulares (não perfeitas) uma dentro da outra… precisaria pegar o perimetro de cada cor e achar seu ponto central… em cima disso calcular a área de cada forma circular de cada cor…

Se não seria necessário OpenCV, com o que eu conseguiria o que eu preciso??

Agradeço a atenção

V

paulork:
São imagens geradas. São bem basicas… tem um fundo padrão variando apenas em tons de cinza e as cores por cima. Cores bem definidas, não transparentes e não variando em tonalidade.
Tenho dois azuis (escuro e claro), rosa e branco… geralmente formam formas circulares (não perfeitas) uma dentro da outra… precisaria pegar o perimetro de cada cor e achar seu ponto central… em cima disso calcular a área de cada forma circular de cada cor…
Se não seria necessário OpenCV, com o que eu conseguiria o que eu preciso??

Cara, eu falei que não seria necessário, mas não falei que seria trivial.
O quanto você entende de processamento de imagens?

Outra coisa, use o botão de attachments para anexar um exemplo de imagem. Assim fica mais fácil te ajudar.

P

Também não mencionei que seria fácil, estou justamente tentando definir essa “dificuldade”.
Sobre ao quanto eu entendo a resposta seria: praticamente nada!

Para entendermos melhor do que estou falando e tentar definir a complexidade, segue em anexo uma imagem…

OBS - Ponto que gostaria de saber:

  • O que gostaria de saber é qual a complexidade de se conseguir isso?
  • O que eu poderia usar para isso: OpenCV ou o que?

Agradeço a atenção pessoal…


V

Adquira esse livro:

Nele há um exemplo que descreve passo a passo como obter a informação que você quer.

V

Ah, e definitivamente opencv 2.

E, como se trata de informação meteorológica… que geralmente vem em abundância e exige baixo tempo de processamento. Esqueça o Java e faça em C++ direto.

P

Muito obrigado pela dica do livro e todas as outras também… agradeço muito… vou tentar conseguir

Quanto a abundância de informação não seria o caso… essas imagens são geradas de 15 em 15 minutos… e na verdade são pequenas, no máximo 100kb…
O objetivo seria identificar padrões como o dá imagem, onde temos uma grande área em rosa e dentro deste uma área em branco… e apartir disso catalogar essa imagem… imagens que não contenham esse padrão seriam descartadas…

Só pra esclarecer, esse tipo de padrão de cores e tamanho, nessa imagem de satelite indica “ocorrência de tempo severo”… e somente as imagens com esses eventos, junto com suas respectivas informações de data e hora e ainda tamanho em km² (baseados em escala) seriam úteis e então catalogadas… a intensão seria montar uma base de conhecimento de tempo severo, relacionando a isso os períodos de maior frequencia e intensidade…

agradeço a atenção Vini…

R

Olá tudo bom?

Eu já programo em php e Objective-C e na semana que vem eu irei fazer um curso de Java.

Um dos meus clientes na área de desenvolvimento web é uma empresa de monitoramento de alarmes de estabelecimentos comerciais e este cliente me solicitou um orçamento para a criação de um projeto onde seriam monitoradas as câmeras do lugar e contabilizada a entrada de pessoas no estabelecimento.

Então surgiram as seguintes perguntas:

1 - É possível trabalhar com várias câmeras ao mesmo tempo? Umas 16 câmeras no máximo e no minímo 9.
2 - Eu consigo acessar a câmera diretamente pela placa de vídeo?
3 - Com o conteúdo do curso (postei abaixo) + o livro indicado acima pelo colega é possível criar uma aplicação que exibe as câmeras e gera um relatório com a entrada de pessoas no estabelecimento? Obs o relatório será gravado em um banco de dados.
4 - Qual o valor cobrado para um aplicativo com essas funcionalidades?

Conteúdo do curso:

[color=green]
Iniciante
[/color]

Parte 1

Apresentação da Plataforma Java
Principais Divisões da Plataforma Java
Plataforma J2SE
Plataforma J2EE
Plataforma J2ME
Java Web Services
JavaFx
Execução de um programa em Java
Ambientes Integrados de Desenvolvimento
Preparação do Ambiente de Desenvolvimento
Instalação do JDK
Configuração do JRE
Instalação do Eclipse
Configurações Iniciais do Eclipse
Iniciando o Eclipse
Criando um Projeto Java
Trabalhando com Pacotes
O que é um Pacote?
Trabalhando com Classes
Configurando o Eclipse
Introdução à Programação
Pacote (Package)
Classe
Comentários utilizados na documentação
Método main
Inserindo instruções
Executando a classe pela primeira vez
Fundamentos da linguagem Java
Comentários
Variáveis
Observações sobre variáveis
Tipos de Dados
Valores literais
Nomes de variáveis
Convenções sobre nomes de variáveis
Palavras Chaves
Modificadores de acesso
Modificadores de classes, variáveis e métodos
Controle de fluxo dentro de um bloco de código
Tratamento de erros
Pacotes
Tipos Primitivos
Referência
Retorno de um método
Palavras reservadas não utilizadas
Escopo da variável
Categorias de Escopo
Variável Final
Fundamentos da linguagem Java
Operadores
Operadores de Atribuição
Operadores Reduzidos
Tipos de Operadores
Operador Unário
Operador Binário
Operador Ternário
Categorias de Operadores
Operadores Aritméticos
Tipos Resultantes das Operações Aritméticas
Pós e Pré-Incremento e Decremento
Resumo de Pós e Pré-Incremento e Decremento
Operadores Relacionais
Operadores Condicionais
Operadores bit a bit
Operador Shift
Operadores Lógicos
Operador bit a bit And (&)
Operador bit à bit Or (|)
Operador bit a bit ~
Exemplo prático de uma operação bit a bit
Outros Operadores


Parte 2

Controle de Fluxo
Instruções para Controle de Fluxo
Instruções para Repetição
Instrução while
Instrução do…while
Instrução for
Componentes do for
Interagindo com Coleções e Arrays
Instrução if else
else if encadeados
Instrução switch
Tratamento de Exceções
Utilizando try/catch
Obtendo detalhes sobre a exceção
Utilizando finally
Tratando várias exceções em um bloco
Transferindo o controle da exceção
Vetores e Coleções
Vetores
Coleções
Vetores
Forma reduzida de declaração do Vetor
Utilizando o atributo length
Classe Arrays
sort
equals
fill
binarySearch
Copiando elementos de um array para outro
Vetores Multidimensionais
Coleções
Map
Principais métodos
Iterator
TreeMap
Trabalhando com outros tipos de dados
Orientação a Objetos (OO)
Classes
Exemplo Classe Carro
Objetos
Instâncias da Classe
Utilizando a classe Carro
Atributos da Classe
Atributos tipo Campo
Definindo um valor padrão para os atributos
Atributo tipo Propriedade
Vantagens de utilizar propriedades
Criando propriedades com a ajuda do Eclipse
Trabalhando com as Propriedades
Atributos Estáticos
Utilizando Atributos Estáticos
Construtores da Classe
Métodos das Classes
Regras básicas para se criar um método
Sobrecarga de Métodos
Métodos
Métodos Estáticos
Utilizando os métodos

Parte 3

Orientação à Objetos - Herança
Diagrama de classes com Herança
extends
Classe Object
Overloading
Referenciando atributos da classe atual
Referenciando atributos da classe superior
Polimorfismo
Classes Abstratas
Classes Derivadas
Interfaces
Implementando uma interface
Principais classes do Java
O pacote java.lang
Boolean
Byte
Character
Double
Float
Integer
Short
String
Math
Thread
Trabalhando com Arquivos
Classe File
Principais métodos da classe File
Lendo e Gravando Dados em Arquivos
Leitura de Dados da Entrada Padrão
Escrita de Dados na Saída Padrão
Servidor MySQL
Instalando o MySql
MySQL Workbench
Instalando
Configurando o MySQL Workbench
Acessando o Banco de Dados
Criando o Banco de Dados
Conector Java
Configurando o Conector Java no Eclipse
Utilizando o Banco de Dados no Java
Carregar o Driver
Estabelecendo a Conexão ao Banco de Dados
Exemplo Conexão com o Banco de Dados
Conexão com outros bancos de dados
Criando a Classe Conexao
Trabalhando com Instruções SQL
Executando instruções SQL
Consultando no Banco de Dados
ResultSet
Introdução ao Swing
Criando nosso primeiro formulário
Swing - Utilizando componentes
Adicionando mais componentes ao Formulário:
Trabalhando com Eventos
Trabalhando com o Teclado
Conclusão

[color=blue]Intermediário[/color]

Parte 1

Apresentação da Plataforma Java
Principais Divisões da Plataforma Java
Plataforma J2SE
Plataforma J2EE
Plataforma J2ME
Java Web Services
JavaFx
Overview da plataforma J2EE
Containers
Camadas
Principais tecnologias da plataforma J2EE
Citaremos agora as principais tecnologias da plataforma J2EE:
Enterprise JavaBeans
Java Servlet / JavaServer Pages
JavaMail API
JDBC
Java Naming and Directory Interface (JNDI)
Ambientes Integrados de Desenvolvimento
Preparação do Ambiente de Desenvolvimento
Obtendo o JDK
Instalação do JDK
Configuração do JRE
Instalação do Eclipse
Configurações Iniciais do Eclipse
Iniciando o Eclipse
Criando um Projeto Java
Trabalhando com Pacotes
O que é um Pacote?
Trabalhando com Classes
Exibindo o número de linhas
Introdução à Programação
Pacote (Package)
Classe
Comentários utilizados na documentação
Método main
Inserindo instruções
Executando a classe pela primeira vez
Servidor MySQL
Instalando o MySql
MySQL Workbench
Instalando
Configurando o MySQL Workbench
Acessando o Banco de Dados
Criando o Banco de Dados
Conector Java
Configurando o Conector Java no Eclipse
Utilizando o Banco de Dados no Java
Carregar o Driver
Estabelecendo a Conexão ao Banco de Dados
Exemplo Conexão com o Banco de Dados
Conexão com outros bancos de dados
Criando a Classe Conexao
Avaliação / Exercício avaliativo 1
Trabalhando com Instruções SQL
Executando instruções SQL
Consultando no Banco de Dados
ResultSet
Tomcat
Requisitos para a Instalação
Iniciando a instalação do Tomcat
Verificando a instalação do Tomcat
Documentation
Manager App
Configurações iniciais do Tomcat
Configurando a aplicação
Executando a página
Utilizando Linguagem Java

Parte 2

Trabalhando com Servlets
Etapas para criar o primeiro Servlet
Criando o primeiro Servlet a partir do Eclipse
Escrevendo o código-fonte do Servlet
Copiando a classe para o Tomcat
Configurando Servlet no Tomcat
Testando o Servlet
Utilizando Formulários
Arquivos de Configuração
Servlet para ler todos os parâmetros do arquivo de configuração
Contexto de um Servlet
Exemplo completo
Primeira parte do exemplo
Segunda parte do exemplo
Terceira parte
Executando Exemplo
Obtendo valores dos elementos do cabeçalho
Trabalhando com JSP
Funcionamento de uma página JSP
Categorias de tags
Declarações
Expressões
Scriptlets
Comentários
Diretivas
import
include
Linguagem Java dentro de páginas JSP
Exemplo com for
Exemplo com while
Exemplo com do…while
Exemplo com if
Exemplo com switch
Introdução Formulários
Recebendo informações do formulário
Obtendo todos os parâmetros do formulário

Parte 3

Trabalhando com JSP e Banco de Dados
Criando a classe Conexao
Testando a classe Conexao
Criando a classe Usuarios
Testando a classe Usuarios
Preparando o Tomcat para utilizar essas classes
Conector Java para o MySQL
Classes de Negócios
Criando a Tela de Login
Executando a página
Trabalhando com JSP e Cookies
Gerenciando Cookies
Classe Cookie
Gravando Cookie
Listar todos os Cookies
Sessões com JSP
Inserindo um valor na sessão
Lendo o valor da sessão
Java Beans
Propriedades de um JavaBean
Utilizando JavaBeans na página JSP
Primeiro Exemplo de Java Beans
Utilizando o Java Beans na página
Utilizando o caractere curinga na página JSP
Escopo de objetos de uma página JSP
Criando métodos em um Java Beans
Chamando os métodos do Java Beans em uma página JSP
Utilizando Java Beans em uma página JSP, com o escopo para sessão
Expression Language ? EL
Utilizando EL
Utilizando EL em uma única linha
Como atributos de uma TAG
Para utilizar a biblioteca de tags
Exemplo Prático de EL
Sintaxe da EL
Expressões Literais
Variáveis em EL
Utilizando Java Beans
Utilizando o Java Beans na página JSP
Utilizando Formulários

Parte 4

JSTL JavaServer Pages Standard Tag Library
Especificações da JSTL 1.2
Visão Geral do JSTL
Bibliotecas de tags
Tags de Finalidades Gerais: out
Tags de Finalidades Gerais: set
Tags de Finalidades Gerais: remove
Tags de Finalidades Gerais: catch
Ações Condicionais
Tags de Finalidades Gerais: if
Tags de Finalidades Gerais: choose
Tags de Finalidades Gerais: when
Tags de Finalidades Gerais: otherwise
Tags de Finalidades Gerais: Iterator
Tags de Finalidades Gerais: forTokens
Tags relacionadas à URL
Tags relacionadas à URL: import
Tags relacionadas à URL: url
Tags relacionadas à URL: redirect
Tags realacionadas à URL: param
Tags para Internacionalização
Passo a passo para internacionalizar o site
Criando o arquivo JAR
Criando a página contendo recursos
Alterando o idioma do browser
Tags para Internacionalização - Formatação de Números
Tags para Internacionalização - Formatação de Datas
Tags para ações SQL
Tags para ações SQL - Data Source
Tags para ações SQL - Consultando Dados
Tags para ações SQL - Atualizando os Dados
Exemplo completo de Banco de Dados

[color=red]Avançado [/color]

Parte 1

Introdução ao Hibernate: Associações, Coleções e Herança
Introdução aos Frameworks
Definições de Frameworks
Classificação dos Frameworks
Frameworks de Aplicações Orientados a Objetos
Frameworks de infraestrutura de sistemas
Frameworks de integração de middleware
Frameworks de aplicações corporativas
Classificação quanto à forma usada para estendê-los
Frameworks caixa branca
Frameworks caixa preta
Frameworks de Componentes
Papéis Envolvidos no Uso e Desenvolvimento de Framework
Consequências da Adoção de Frameworks
Benefícios Decorrentes da Utilização de Frameworks
Principais Frameworks
Resumo sobre MVC
Introdução ao Hibernate
Arquitetura do Hibernate
Estados de instância
Criando uma aplicação web
Verificando o site
Criando uma tabela no MySQL
Obtendo o Hibernate
A primeira aplicação Hibernate
Criando a primeira aplicação com o Hibernate
Classe de persistência
O arquivo de mapeamento
Configuração do Hibernate
Colocando os arquivos na aplicação web
Criando uma página JSP
Associações, Coleções e Herança
Mapeando associações
Mapeando a classe Eventos
Mapeando a classe Pessoas
Configuração do Hibernate
Criando uma classe para gerenciar eventos
Criando o Servlet
Criando a Página JSP
Listando os Eventos
Criando associações
Uma associação unidirecional baseada
Mapeamento muitos-para-muitos
Trabalhando a associação
Coleção de valores
Mapeamento da Coleção
Criando o método para adicionar e-mail
Associações bidirecionais
Trabalhando com associações bidirecionais
Classes persistentes
Exemplo simples de POJO
Implementando Herança


Parte 2

Transações e Concorrência, HQL = Hibernate Query Language e Struts
Transações e Concorrência
Session e escopos de transações
Unidade de trabalho
Longas conversações
Características do Hibernate
Versionamento automático
Detached Objects
Session-per-conversation
Considerando a identidade do objeto
Edições comuns
Demarcação de transações de bancos de dados
API Transaction
Ambiente não gerenciado
Gerência integrada de contexto
Usando JTA
Sessão limitada por transação
Tratamento de Exceção
Timeout de Transação
Controle de concorrência otimista
Locking pessimista
Modos de liberar a Connection
HQL - Hibernate Query Language
Consultas às classes
Implementando a interface Query e Criteria
Paginação de Resultados
Parâmetros nas Queries
Named Query
A cláusula from
Associações e joins
Formas e sintaxe de joins
Cláusula select
Funções de agregação
Queries polimórficas
A cláusula where
A cláusula order by
A cláusula group by
Struts2
Arquitetura do Struts2
Obtendo o Struts
Criando a primeira aplicação web com struts
Principais diretórios da aplicação web com Struts
Arquivos de configurações
Criando a primeira aplicação no Struts
Criando a Tabela no MySQL
Criando a Camada Model (Camada de Negócio)
Criando o Controler (Camada de Controle)
Criando a camada View

Parte 3

Struts Passo a Passo, Struts Internacionalizando e Struts Validação
Struts2
Tags do Struts
Listando os Cursos
Alterando Cursos
Execução
Incluindo um novo curso
Excluindo um curso
Struts Internacionalizando a aplicação
Preparando o arquivo de recursos
Criando arquivo de recursos
Definir recursos na página
Globalizando
Struts Validação
Validação de Formulários
Alterando formulário
Mapeando validação no Struts.xml
Pulando a validação
Utilizando o método validate

Parte 4

JSF ? Introdução, JSF - JSF passo a passo e JSF - Core tags e html tags
JSF 2 - Introdução
Principais Recursos do JSF
Preparando o ambiente
Criando a primeira aplicação com JSF
Criando um novo contexto
Arquivo de configuração web.xml
Criando o managed bean
Criando a página JSF
Criando a página inicial do sistema
JSF - Utilizando Banco de Dados
Criando as classes no Java
Criando a página JSF para listar os cursos
Configurando a página inicial
Adicionando cabeçalho à tabela
Para incluir novos cursos via JSF
Navegação entre as páginas
Navegação estática
Navegação dinâmica
Definir a navegação dinâmica
Definindo a navegação no arquivo de configuração do JSF
Criando a página de erro
Executando
JSF - Core tags e html tags
Trabalhando com caixas de texto
Criando a página JSF
JSF - Trabalhando com outras tags
JSF - Trabalhando com TextArea
JSF - Trabalhando com imagens
JSF - Trabalhando com botões de opção
JSF - Trabalhando com caixas de lista
JSF - Trabalhando com caixas combo (Menus)
Internacionalizando a aplicação
Configurando o faces-config.xml
Ajustes na página JSP
Conclusão

V

Sim. Mas esse é um número de câmeras bastante grande e difícil de processar. Provavelmente o melhor seria usar vários computadores, cada um processando 2 ou 3 câmeras simultâneas.

Não sei o que você quer dizer com essa pergunta.
Mas é possível processar a imagem da câmera através da placa de vídeo, se você souber shaders ou CUDA.

Não. Descobrir na imagem o que é uma pessoa, e se ela está entrando e saindo, não é uma tarefa trivial. Você teria que estudar opencv e processamento de imagens.
E você provavelmente veria que Java não é a linguagem mais adequada para essa tarefa (seria mais adequado fazer em Objective-C ou C++).

Teria que orçar, mas provavelmente não é barato e nem rápido de desenvolver. E, claro, logo em seguida virá requisitos como “descobrir se o cliente saiu com compras na mão”.
O valor irá depender de que tipos de ambiente devem ser monitorados, por exemplo: se as câmeras da empresa são fixas ou móveis, das condições de iluminação máximas e mínimas e do número de pessoas na imagem simultaneamente.

Se isso fosse fácil, você veria esse tipo de sistema em todo lugar. Quantas lojas você já viu com um desses?

C

Excelente o Trabalho de vocês aqui no fórum,

Sou novo na programação em JAVA e entrei nessa porque preciso fazer meu projeto final da faculdade nessa linguagem.

O que há aqui nesse tópico me ajudaria grandemente no início do projeto, porém estou com algumas dificuldades…

Quando o programa vai ler a imagem, diz que não conssegue ler o arquivo de entrada! Não sei qual a localização em que ele deveria estar… mesmo ponto C:\ e o arquivo estando locado lá!

O início do projeto seria basicamente ler a imagem de uma webcam conectada via usb no compudator numa determinada frequencia… como a maioria das webcam tem frequencia de 20fps seria basicamente essa a frequencia e depois transformar essa imagem em binária ou seja apenas preto e branco ao invés de escala de cinza!

Peço que se possível me dêem essa ajuda!!

Desde já agradeço.

C

Desculpe pela total ignorância, mas utilizar o Linux para tal projeto é adequado, estou tentando compilar os programas no eclipse! Se não qual sistema operacional vocês recomendam e qual programa?!

Obrigado!!

Criado 10 de setembro de 2011
Ultima resposta 21 de abr. de 2013
Respostas 25
Participantes 7