2018秋第六次课第一组
来自iCenter Wiki
(重定向自第1组)
万人血书要求取消Wiki验证码!
建议老师移动一下页面,现在的页面名“第1组”日后非常容易引起冲突
小组成员
- 游旅-航院航72
- 陈亦心-美院美710
- 杨博琳-美院美710
- 康秋彦-美院美710
- 李姜帆-自动化自64
- 蔡东龙-化学62
Gitlab仓库
http://gitlab.icenter.tsinghua.edu.cn/fucreature/smart_device_class6_group1
实验记录
PYNQ+USB摄像头人脸识别
- 1. 启动PYNQ板,连接Jupyter Notebook,打开
examples/opencv_face_detect_webcam.ipynb
文件。
- 注意到有一些代码被注释了:
#Step 2: Initialize Webcam and HDMI Out # monitor configuration: 640*480 @ 60Hz #from pynq.drivers import HDMI from pynq.drivers.video import VMODE_640x480 #hdmi_out = HDMI('out', video_mode=VMODE_640x480) #hdmi_out.start()
#Step 3: Display webcam image via HDMI Out if (ret): frame_1080p = np.zeros((1080,1920,3)).astype(np.uint8) frame_1080p[0:480,0:640,:] = frame_vga[0:480,0:640,:] #hdmi_out.frame_raw(bytearray(frame_1080p.astype(np.int8).tobytes())) else: raise RuntimeError("Failed to read from camera.")
# Step 6: Show results on HDMI output # Output OpenCV results via HDMI frame_1080p[0:480,0:640,:] = frame_vga[0:480,0:640,:] #hdmi_out.frame_raw(bytearray(frame_1080p.astype(np.int8).tobytes()))
# Step 8: Release camera and HDMI videoIn.release() #hdmi_out.stop() #del hdmi_out
根据观察,我们发现被注释的代码都是HDMI相关,推测是因为我们采用的罗技USB摄像头没有采用HDMI接口进行数据传输导致的。
- 2. 实验开始,逐个Cell运行代码。Step 2: Initialize Webcam and HDMI Out给出了
Capture device is open: True
的输出。进行到Step 3: Show input frame on HDMI output时,我们却发现输出的照片不是摄像头正对的人脸,而是教室的一角,从Step2再开始重新运行,图片不变。 - 3. 仔细观察代码,我们发现图像的采集并不是在Step3而是在Step2完成的,所以我们执行Step3时才对准人脸已经错过了时机。
- 4. 而关于从Step2重新运行图片不变的问题,我们首先注意到重新运行的结果是
Capture device is open: False
,因此我们重复运行了一遍相应Cell,得到True的结果后再进入Step 3,得到了正确的结果。再观察后面的代码,发现在最后一个Cell的代码为videoIn.release()
,由此可以推知在没有release的情况下进行采集会触发release。 - 5. 实验完成。结果如下: