Problem with Haar cascade
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

"I am trying to detect mosquitoes on images using Haar Cascade and it doesn't work."
and it won't, ever.
cascades are good for static things, not for living, moving insects.
I know now, Thanks !
Ah well thats not true, I have detected side view cows before with cascades, which simply worked, but your whole pipeline is broken. Do not use artificial sample generation, make sure your objects do not fill the complete image (that is classification, not localisation), your
-wand-hparameter are too small to capture enough detail ... BTW for the last 2 years, CNNS and all there applications took over object detection, so stop wasting time here and go for SSD, YOLO, ...