Hi
I am trying to detect mosquitoes on images using Haar Cascade and it doesn't work.
I use ~200 images of walls (to use as negative images) and ~20 images of mosquitoes.
I did this :
1) I run the script below to resize the negative images (100x100 ) :
[karim@10-83-102-17 haar]$ more resize.py
import cv2 import os pic_num=0 for img in os.listdir('/home/karim/perso/moustiques/haar/downloads/wall'): print img timg = cv2.imread('/home/karim/perso/moustiques/haar/downloads/wall/'+img,cv2.IMREAD_GRAYSCALE) resized_image = cv2.resize(timg, (100, 100)) cv2.imwrite("negatif/"+str(pic_num)+".jpg",resized_image) pic_num=pic_num+1
[karim@10-83-102-17 haar]$ ls negatif/* > negatif.txt
2) I run the script below to generate positive images :
[karim@10-83-102-17 haar]$ more samplepos.sh
#!/bin/bash mkdir -p info # create the samples for file in downloads/9*.jpg; do echo "File=" $file opencv_createsamples -img "$file" -bg negatif.txt -info "info/info_$file.da"t -pngoutput info -maxxangle 0.5 -maxyangle -0.5 -maxzangle 0.5 -num 125 done mv info/info_downloads/* info # generate the sample file touch temp for file in info/*.dat; do echo "File="$file cat temp "$file" >> ./info/info.dat done # generate the sample vector opencv_createsamples -info info/info.dat -vec positif.vec -w 25 -h 18 -num 2000
3) Then, I train the classifier
[karim@10-83-102-17 haar]$ more train.sh
#!/bin/bash mkdir -p data # train the classifier using haar cascade features opencv_traincascade -data data -vec positif.vec -bg negatif.txt -numStages 10 -numPos 1800 -numNeg 900 -w 25 -h 18 -mode ALL -precalcValBuffSize 1024 -precalcIdxBuffSize 1024 mv ./data/cascade.xml .
It runs a couple of hours.
4) If I run the classifier on a mosquito image, I have the attached image
[karim@10-83-102-17 haar]$ more verif.py
import cv2 from matplotlib import pyplot as plt img=cv2.imread('img_mous.jpg') imggris = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) imgrgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) FiltreMoustique=cv2.CascadeClassifier("/home/karim/perso/moustiques/haar/cascade.xml") moustique=FiltreMoustique.detectMultiScale(imggris,scaleFactor=1.1,minNeighbors=4,minSize=(20,20)) n=len(moustique) if n!=0: for (x,y,w,h) in moustique: cv2.rectangle(imgrgb,(x,y),(x+h,y+w),(0,255,0),5) plt.subplot(1,1,1) plt.imshow(imgrgb) plt.show()
I got scripts from internet and I modified them for my use. I am probably doing something wrong ... Thanks for any advice.
Karim