在上一步中,已经实现了在tensorflow环境中的摄像头识别,但是帧率太低,只有0.5,所以这次在pycharm中运行程序,首先,在该文件下,新建一个测试.py文件
再将程序导进去
import cv2 from darkflow.net.build import TFNet import numpy as np import time option = { 'model': 'cfg/yolo.cfg', 'load': 'bin/yolo.weights', 'threshold': 0.3, 'gpu': 0.7 } tfnet = TFNet(option) capture = cv2.VideoCapture(0) capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) colors = [tuple(255 * np.random.rand(3)) for i in range(10)] # 随机创建10中颜色,RGB形式 # 当视频打开时,进行处理 while capture.isOpened(): stime = time.time() # 计算起始时间 ret, frame = capture.read() # 读取每一帧,第一个参数是bool型的ret,其值为True或False,代表有没有读到图片,第二个参数是当前帧图像 if ret: results = tfnet.return_predict(frame) # 送入网络进行预测 # 将 colors results 进行打包 for color, result in zip(colors, results): tl = (result['topleft']['x'], result['topleft']['y']) br = (result['bottomright']['x'], result['bottomright']['y']) label = result['label'] frame = cv2.rectangle(frame, tl, br, color, 3) frame = cv2.putText(frame, label, tl, cv2.FONT_HERSHEY_COMPLEX, 1, color, 1) cv2.imshow('frame', frame) # 显示当前帧 print('FPS {:.1f}'.format(1 / (time.time() - stime))) # 计算帧率 # 按 q 键退出 if cv2.waitKey(1) & 0xFF == ord('q'): break else: capture.release() cv2.destroyAllWindows() break
在运行程序中会出现No module named 'tensorflow.contrib' 的错误,参考
(26条消息) Error: No module named ‘tensorflow.contrib‘_tf slim pip_Yore_999的博客-CSDN博客
下载,替换。发现依旧报错,所以在pycharm设置中下载tf-slim文件解决。
再次运行程序报错module 'tensorflow._api.v2.train' has no attribute 'RMSPropOptimizer'
这是因为TensorFlow 2.0以上的版本已经移除 tf.train.NewCheckpointReader
了。参考这篇:(26条消息) AttributeError: module ‘tensorflow._api.v2.train‘ has no attribute ‘NewCheckpointReader‘解决方案_module 'tensorflow._api.v2.train' has no attribute_小白白程序员的博客-CSDN博客
得到解决方法。将报错的地方依次替换即可,替换到最后,程序即可正常运行。
# reader = tf.train.NewCheckpointReader(filename)
reader = tf.compat.v1.train.NewCheckpointReader(filename)