【旧文搬运】角蜂鸟上手之路(一)——初玩FaceNet

【旧文搬运】是把建站之前的博文搬过来。原文链接: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的游戏,人物建模也还算不错,效果如下:

总结一下这时的经验,录脸的时候,男生把头发压一压,女生把头发扎一扎,脸占比大一点,不然会出现看到脑袋就认成你的尴尬情况(毕竟基本家里都是黑头发)

了起

发表评论

电子邮件地址不会被公开。 必填项已用*标注