当前位置:   article > 正文

CV中简单的使用DNN_cv2 dnn

cv2 dnn
# 深度学习网络模型
# DNN(Deep Neural Network,深度神经网络)
# RNN(Recurrent Neural Network,循环神经网络)
# 语音识别、机器翻译、生成图像描述
# 输入 - 隐藏 - 输出

# CNN(Convolutional Neural Network,卷积神经网络)
# 图片分类、检索,目标定位检测,目标分割,人脸识别
# 输入 - 卷积 - 池化 - 卷积... - 全连接 - 输出


# DNN使用步骤
# 1、读取模型,并得到深度神经网络
# 2、读取图片/视频
# 3、将图片转成张量,送入深度神经网络
# 4、进行分析,并得到结果
  1. import cv2
  2. from cv2 import dnn
  3. import numpy as np
  4. import re
  5. # 导入模型,创建神经网络
  6. config = "../model/bvlc_googlenet.prototxt"
  7. model = "../model/bvlc_googlenet.caffemodel"
  8. net = dnn.readNetFromCaffe(config, model)
  9. # 读图片,转成张量
  10. img = cv2.imread('../img/5.jpg')
  11. # scalefactor:缩放因子,修改为固定张量(224,224),(104, 117, 123)默认输入值
  12. blob = dnn.blobFromImage(img, 1.0, (224, 224), (104, 117, 123))
  13. # 将张量输入到神经网络,并且进行预测
  14. net.setInput(blob)
  15. r = net.forward()
  16. # 读入类目
  17. classes = []
  18. path = '../model/dataset.txt' # 标签文件
  19. with open(path, 'rt') as f:
  20. classes = [x[x.find("") + 1:] for x in f]
  21. order = sorted(r[0], reverse=True)
  22. z = list(range(5))
  23. for i in list(range(0, 5)):
  24. z[i] = np.where(r[0] == order[i])[0][0]
  25. print('第', i + 1, '项,匹配', classes[z[i]], end='')
  26. print('类所在行', z[i] + 1, ' ', '可能性:', order[i])
  27. text1 = f"Match{classes[z[0]]}."
  28. text2 = f"In{z[0] + 1},Per:{order[0]}"
  29. cv2.putText(img, text1, (0, 50), cv2.FONT_HERSHEY_PLAIN, 2, (0, 0, 255), 2)
  30. cv2.putText(img, text2, (0, 80), cv2.FONT_HERSHEY_PLAIN, 2, (0, 0, 255), 2)
  31. cv2.imshow('img', img)
  32. cv2.waitKey(0)
  33. cv2.destroyAllWindows()

 ------------------------------------------------我是分割线------------------------------------------------------

在上方基础上,改为读取视频,代码如下:

  1. import cv2
  2. from cv2 import dnn
  3. import numpy as np
  4. import re
  5. # 导入模型,创建神经网络
  6. config = "../model/bvlc_googlenet.prototxt" # (描述)配置文件
  7. model = "../model/bvlc_googlenet.caffemodel" # 模型文件
  8. # 读取网络 包括模型描述文件和和模型文件
  9. net = dnn.readNetFromCaffe(config, model)
  10. # 读图片,转成张量
  11. # img = cv2.imread('../img/landescape1.png')
  12. # 读视频,转成张量
  13. cap = cv2.VideoCapture('../VideoFile/animal/6.mp4')
  14. while True:
  15. ret, frame = cap.read()
  16. if ret:
  17. img = frame
  18. # scalefactor:缩放因子,修改为固定张量(224,224),(104, 117, 123)默认输入值
  19. blob = dnn.blobFromImage(img, 1.0, (224, 224), (104, 117, 123))
  20. # 将张量输入到神经网络,并且进行预测
  21. net.setInput(blob)
  22. r = net.forward()
  23. # 读入类目
  24. classes = []
  25. path = '../model/dataset.txt' # 标签文件
  26. with open(path, 'rt') as f: # 读取标签文件
  27. classes = [x[x.find("") + 1:] for x in f]
  28. order = sorted(r[0], reverse=True)
  29. z = list(range(3))
  30. for i in list(range(0, 3)):
  31. z[i] = np.where(r[0] == order[i])[0][0]
  32. # print('第', i + 1, '项,匹配', classes[z[i]], end='')
  33. # print('类所在行', z[i] + 1, ' ', '可能性:', order[i])
  34. text1 = f"Match{classes[z[0]]}."
  35. text2 = f"In{z[0] + 1},Per:{order[0]}"
  36. cv2.putText(img, text1, (0, 50), cv2.FONT_HERSHEY_PLAIN, 2, (0, 0, 255), 2)
  37. cv2.putText(img, text2, (0, 80), cv2.FONT_HERSHEY_PLAIN, 2, (0, 0, 255), 2)
  38. print('匹配', classes[z[0]], end='')
  39. print('类所在行', z[0] + 1, ' ', '可能性:', order[0])
  40. cv2.imshow('img', img)
  41. k = cv2.waitKey(10)
  42. if k == 27:
  43. break
  44. cap.release()
  45. cv2.destroyAllWindows()
  46.  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/599372
推荐阅读
相关标签
  

闽ICP备14008679号