【旧文搬运】是把建站之前的博文搬过来。原文链接:https://blog.csdn.net/u011662608/article/details/81176670
角蜂鸟的DEMO里没有FaceNet的应用。不过在模型里附带了它。FaceNet是一款很经典好用的人脸识别的模型。极大的加速了自己项目的开发。毕竟谷歌训练的时候可以有很大的训练数据,个人玩的话,鬼知道练到猴年马月了。
这里直接借用了情景记录器的程序,角蜂鸟的情景记录器功能非常好用,对于玩家级别的用户来说实用性非常强大,真的相当于是傻瓜化操作了,上两个傻瓜化操作的开源硬件的发展大家也都看见了,一个Arduino,一个树莓派,可以说都是大获全胜。
官方DOC:https://hornedsungem.github.io/Docs/cn/workflow/python/recorder/
NCS facenet:https://github.com/movidius/ncappzoo/tree/master/tensorflow/facenet
角蜂鸟官方的说法是模型转换通用于NCSDK V1的,V2似乎有些问题。反正生态圈子慢慢建嘛。目前给的DEMO
虽然不多,但是都是很用心的设计,基本自己玩是够用了。
还是那句话,写些为纯新手而准备的文。
Code自取:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | import cv2, sys sys.path.append('../../api/') import hsapi as hs WEBCAM = False # Set to True if use Webcam net = hs.HS('FaceNet', zoom = True, verbose = 2) if WEBCAM: video_capture = cv2.VideoCapture(0) try: while True: if WEBCAM: _, img = video_capture.read() else: img = None # Get image descriptor result = net.run(img) key = cv2.waitKey(5) if key == 255: key = -1 prob = net.record(result, key, saveFilename='../misc/record.dat', numBin = 5) if prob is not None: cv2.putText(result[0], '%d' % (prob.argmax() + 1), (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0,255,0), 7) cv2.putText(result[0], '%d' % (prob.argmax() + 1), (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0,255,255), 3) if key != -1 and chr(key).isdigit(): cv2.putText(result[0], 'Rec: %d' % int(chr(key)), (30,50), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0,0,255), 5) cv2.rectangle(result[0], (0,0), result[0].shape[1::-1], (0,0,255), 25) cv2.imshow("Scene Recorder_FaceNet", result[0]) cv2.waitKey(1) finally: net.quit() </code> <code>import cv2, sys sys.path.append('../../api/') import hsapi as hs WEBCAM = False # Set to True if use Webcam net = hs.HS('FaceNet', zoom = True, verbose = 2) if WEBCAM: video_capture = cv2.VideoCapture(0) try: while True: if WEBCAM: _, img = video_capture.read() else: img = None # Get image descriptor result = net.run(img) key = cv2.waitKey(5) if key == 255: key = -1 prob = net.record(result, key, saveFilename='../misc/record.dat', numBin = 5) if prob is not None: cv2.putText(result[0], '%d' % (prob.argmax() + 1), (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0,255,0), 7) cv2.putText(result[0], '%d' % (prob.argmax() + 1), (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0,255,255), 3) if key != -1 and chr(key).isdigit(): cv2.putText(result[0], 'Rec: %d' % int(chr(key)), (30,50), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0,0,255), 5) cv2.rectangle(result[0], (0,0), result[0].shape[1::-1], (0,0,255), 25) cv2.imshow("Scene Recorder_FaceNet", result[0]) cv2.waitKey(1) finally: net.quit() |
眼熟吧,其实就是换了个模型。第一次上手么,就先玩玩吧。numBin是默认的5,一个自己,两组二次元妹子好了。
一组撞脸,名侦探柯南里的小兰和和叶
第二组撞头发,分别是柯南里的灰原哀和超电磁炮里的御坂美琴
值得一提的是,因为都是纸片人小姐姐,所以每张照片拍了一帧就够了。每个人物采样8张
按R以后就会自动的生产模型并且开始识别
虽然样本数量很少但是都是能够正确的识别的。
P.S背景白纸上的涂鸦是玩你画我猜例程时留下的。。。蜜汁画风见谅了,不过对于机器来说,倒是方便他识别。
后来因为打算做智能桌面助手,见到我开灯,开电脑,用情景记录器监测我有没有在摸鱼,带个VFD屏幕报时间,电脑CPU信息之类的。所以在剑三里测试了一下复杂背景多角度情况的检测,毕竟是3D的游戏,人物建模也还算不错,效果如下:
总结一下这时的经验,录脸的时候,男生把头发压一压,女生把头发扎一扎,脸占比大一点,不然会出现看到脑袋就认成你的尴尬情况(毕竟基本家里都是黑头发)