Podemos detectar uma infinidade de coisas em fotos. Para os desenvolvedores mais práticos, a amazon possui um serviço incrível de backend de detecção de objetos, vale a pena olhar. Não sendo esse o caso, ou pra quem tem volume muito alto de upload, podemos detectar muita coisa legal usando diversos padrões prontos:
http://stackoverflow.com/questions/11537585/where-can-i-find-haar-cascades-xml-files
Para quem se interessa em criar seu própŕio cascade, a documentação é bem completa e o trabalho um tanto cansativo.
http://docs.opencv.org/2.4.13.2/doc/user_guide/ug_traincascade.html
Abaixo um exemplo em python de como utilizar o sistema de reconhecimento de objetos da opencv.
O arquivo que fiz (não posso postar aqui- é do cliente) “cascade.xml” foi gerado utilizando uma grande variação de imagens positivas, negativas,
diversos parâmetros e 12h de processamento.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import cv2 arquivo_padrao_reconhecimento = cv2.CascadeClassifier('/home/meulocal/cascade.xml') print 'iniciando deteccao' #img eh a imagem que utilizamos para a buscar o padrao gravado no arquivo cascade.xml img = cv2.imread('/home/meulocal/foto_detectar.jpg') #somente removendo os canais de cor. nao serao usados gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #em alguns casos, é interessante equalizar o histograma. A opencv possui esse filtro #os parametros enviados abaixo sao a imagem em escala de cinza, o fator de escala # e o numero de vizinhos. O numero de vizinhos está relacionado com a precisao da #deteccao e o fator de escala é a reducao proporcional do objeto na imagem procurada. resultado = arquivo_padrao_reconhecimento.detectMultiScale(gray, 1.05, 3) for (x,y,w,h) in resultado: print 'objeto encontrado' #marcando o objeto com um retangulo onde foi encontrado cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) #salvando a imagem, com os retangulos cv2.imwrite('/home/meulocal/imagem_marcada.jpg', img) print 'fim da rotina' |