`本帖最后由 擦肩的阳光 于 2016-1-30 15:44 编辑
Nanopi2的试用也要接近尾声啦!
其实还有小半个月,不过过年了就不一定有时间,有心思在好好做当初预设的项目啦,所以最近赶工抓紧做完,剩下的时间里继续学一些自己想学的东西~ 这一个半月的时间里自己学到了很多很多东西,在此感谢友善出这么好的产品,以及和论坛一起给我们提供试用的机会,向你们诚挚得说一声“谢谢”!!
下面是项目完成情况: 我的题目名称很诡异,android下的简单人脸识别,然而我的陈述通篇没提android,我的实行也确实照着陈述来,所以就当我这个题目没啥意义好了……
上篇帖子是二维码识别,其实已经和简单人脸识别有点像了(部分手段) 我们主要用了python图像处理库——PIL,还有最最关键的opencv的分类器,此外还有对摄像头使用的一些库。
先说得到图片,肯定就是通过摄像头捕获图片了,我找到了一些方法:
- 安装mplayer
- sudo apt-get install mplayer
- 输入命令播放摄像头视频
- sudo mplayer tv://
复制代码
这个需要强制把摄像头设置为 /dev/video0
- rm /dev/video0
- mv /dev/video9 /dev/video0
复制代码
经过我的测试,是可以使用的,然而我并不能保存图片……天寒地冻的,我也不想深究了,反正方法多的。。。
- sudo apt-get install fswebcam
- sudo fswebcam --device /dev/video9 a.jpg
复制代码
这种方法也可以,而且能保存图片,所以就用它了~
接下来的主体就交给PIL和opencv了
查找一下opencv的目录 找到了关键的文件:
- /usr/share/opencv/haarcascades/haarcascade_frontalface_alt_tree.xml
复制代码
接下来就比较顺利啦:
identify_face.py
- #!/usr/bin/env python
- #coding=utf-8
- import os
- from PIL import Image, ImageDraw
- import cv
- def detect_object(image):
- grayscale = cv.CreateImage((image.width, image.height), 8, 1)
- cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY)
- cascade = cv.Load("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt_tree.xml")
- rect = cv.HaarDetectObjects(grayscale, cascade, cv.CreateMemStorage(), 1.1, 2,
- cv.CV_HAAR_DO_CANNY_PRUNING, (20,20))
- result = []
- for r in rect:
- result.append((r[0][0], r[0][1], r[0][0]+r[0][2], r[0][1]+r[0][3]))
- return result
- def process(infile):
- image = cv.LoadImage(infile);
- if image:
- faces = detect_object(image)
- im = Image.open(infile)
- path = os.path.abspath(infile)
- save_path = os.path.splitext(path)[0]+"_face"
- try:
- os.mkdir(save_path)
- except:
- pass
- if faces:
- draw = ImageDraw.Draw(im)
- count = 0
- for f in faces:
- count += 1
- draw.rectangle(f, outline=(255, 0, 0))
- a = im.crop(f)
- file_name = os.path.join(save_path,str(count)+".jpg")
- # print file_name
- a.save(file_name)
- drow_save_path = os.path.join(save_path,"out.jpg")
- im.save(drow_save_path, "JPEG", quality=80)
- else:
- print "Error: cannot detect faces on %s" % infile
- if __name__ == "__main__":
- os.system("fswebcam --device /dev/video9 /home/fa/Desktop/cc.jpg")
- process("/home/fa/Desktop/cc.jpg")
复制代码
执行:
控制台效果:
拍摄图:
效果如下:
显然也可以本地图片的识别、或者一直对摄像头进行拍照分析等。
以上为所有内容,谢谢各位,同时再次感谢论坛和友善官方的支持!
`
|